From e53cbeee239c57c7eb321edfce15a74aa4014fee Mon Sep 17 00:00:00 2001 From: Pei Deng Date: Thu, 20 Jun 2024 20:19:29 -0700 Subject: [PATCH 01/57] Sui v1.28.0 Framework snapshot --- ...00000000000000000000000000000000000000000001 | Bin 0 -> 10163 bytes ...00000000000000000000000000000000000000000002 | Bin 0 -> 59320 bytes ...00000000000000000000000000000000000000000003 | Bin 0 -> 41883 bytes ...0000000000000000000000000000000000000000000b | Bin 0 -> 19772 bytes ...0000000000000000000000000000000000000000dee9 | Bin 0 -> 33346 bytes crates/sui-framework-snapshot/manifest.json | 10 ++++++++++ 6 files changed, 10 insertions(+) create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000001 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000002 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000003 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/51/0x000000000000000000000000000000000000000000000000000000000000000b create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/51/0x000000000000000000000000000000000000000000000000000000000000dee9 diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000001 b/crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000001 new file mode 100644 index 0000000000000000000000000000000000000000..61c2be1daf3f6332befb46825a581cb0322f6620 GIT binary patch literal 10163 zcmc&)S!`t4Sw8Ds&N=s1m8-mTkEgq;-R{l|q^Ip(a2f>Dp6+3i8DJ!afCQ*ic3rm% z>?)_K+)E;{qnRi#3`pz|%fm z*dC2Ln?K$j4?COL(+tQt2K^^hjB2nXA(RX*=*x5Aoli$!>5nreDd0jfObUUPNCr}2V$I-imrw7sued$eoQ~_Ymg%O=aLF_9IC5my3%|pZ+*UKx}eX8!Z#JP z!PgBcz5J5XmQ!V?j9M-FDc+a-c>Jo>R-Jd!$P;QTMo#FaW#uGVPFSIq^m3@L8cCCW zQGYAqR^FU}OfhySEkjgMRHY1S6q@3Jj~{eI8}?&`TIH5vw3A_FKDyF$uja~(I#dsq zqP9Du?P#>!S#7W0x=oQA6e$*S${P|AP%rfHxu_TmVuMv~scofqI^mc2uk+|Dq8Yp` zjeA%AgJLzN$wFD|m%|m!9_EZtglNl53?pDzAHs^IFf~*^fkk5)j>1SJ2xUrPkX8`7 zkXnURDy>pHHr8NaXcSNYoWM&GE{G7Z$xHGOg_OZjN^dEBIpuKQhFWmx%cv9&tSV2- zptHA^^}E5wU^pB+GWn~$yFZRL2mNuU*B>R_Y&0GYp0u;wz3~(6!>HHqW{=y0tpF9W z;W&cX_<~?3>pvK8M|*?4_6A@i-rFB-`&cl{b_Wl$aF{*JhNCPV_4*HXvhkp=Mvpps zmV$O(C3u)^jt9e21Xg5oz(Zj*6A=o$C4LG&jbDIYh#$#>hcBC=spAQ^?4Ge)#3-sQ z8+PrkAq78BK4l>|QKq5P5-ONK^A74}_>#J07)8F@SWyCmu*-#7P+7N}tPtL6OA0V-?D?wWD}E#Z(k(<(Dy*C@xNg^^3@Ic;bz>&Ebw zn)Chf2!>cr1k=*!5##XKtKQ7gDP1id?rMJ0l@+ITR`w!NOt5}A-%DkkOoCds%01^&yVcZoa0tnzoWWp*?l9(FyzHTK3MAIqEEvtoJzj>MK1?AEeB1; zC#uxNJi4H5546dr0*{(%zikJQ&?@`sT~{}^CjVRNu$jLcFG6*UjoP7>%PK2)0G+-sH8G!qk& z1B~JA01q*twD3SO6H&Y#5rl-6lpKnUIA8~1gF`X6N(pXkLSdCur7mVf4JZc7hdV|Q z!2|sTc?`PkBg8TYAMzAoiqA%F9wBrg{Up38v8Y59v?Ndx`OBja;vR&28y`>-xd?;r z+an)+9Bk?n+C7(!|lTCF>#l%+Uo7>RLQ#^ zE-jIYJUw+tZ|X}?A{h7y9tI~WB5-mZp$5Y?bsK<@0i`5<-vC+>w<87sjq)+bW)`~w z6oVX@d^u+bh<*$ul%*_NqXbEt65qzwK$Iu}Q>H}Id(k{)`I_*KlqH6(Nu_jz?GNF; zQMI(vb>T6gQm0&kyfqG}lfVT4L=ETwoJ0TqSr_EX1*vg$=A`=7Bb6JzHi2yo#(SF) z^MKK*NIPgP!2p2mp75AUbG(L0Y8@Aoyv^>5946Bf%F0Q-0wlr^GmR4}(R%LFq$Lf6 zsS{?_XZ>VAaA-1SO<|#_QTN4~rU^S~m9H&5EH+Zh?qFk5+L+kyic9iNg-5tXHO+T7 z@LP+zA`uuA;PGlHKzJ5HE@n_SfFuH1J^DSU;bDn^3ElBdOt4=L3i^TN0dZ0}^Oo9* zbpPAKFYv$P(SL)1yep0Q4Qbtb@_mu~t5)D4Rah(r0+WWQ5%K8JAT~WKpk+W7>{SR? zStD1MYB(7MyBc>YNphL85E!%`LY^R2b6$$ z?hY*hJMi{iSxnhoC|9ZYARXBJCAFZTRfey#M$I%;9Y%kMZ@`0+o1cM-dZ4H@4OHaB zeik+8Wp&b%Z7Op0@pND079tNa5&S^~g0Bx}4w4bO(x*B1w5ze0i zdMt6o#0vlfLd{hOzAWSQ-uRQAi^dzhF@QhY=^BdV1l2*WavnU&#uK$_?hN`5z?a*| z!tYc2S${L56ZLQm^=Ws;vY$PYC^Vz(-qyIilWmRlJ~;H)E6wS_A-YQrBu5&GtXJhT>cv!#yjuK&zCYf$LhO+Gbp&6NSpnM( z2D+eY25M&{4M9y05%W1G;cFPzp9HZ4;G+}XSW@4mUxc$Ts;1N}Fhvm1`5M=Eil{h5 zPv@M{OTL-qL{*C}-qLSS_1bjZ`xwoehpe5r7gg-Vy3P-{5-LxN%1Qb1WUYs`j@U2= zZ9Zx2fDtv-REzo?EvYpnh=jc9d`=zyGd$!wA`zu>Zm8bj5!mYE@E!3r9{rSR2EPrm z`b8DEKU4oFl0OLrtdh>M3nVsp59pNlAoHX-0a1=wGQl|*2n+_=k&^9H6s$``U@elU zOJor=$jycc3SyF%O%b>X#Ad4KIUzd+05DOFXP~(=HH1>k0uW@{0CLp%44J!%j zA9LVc$enN;eaXjQT)c24Mn;Q2vRWL9BSvI4PVH1IU{-oLqqNbPS4fcR?2^ z)Tqkf)ySvhiMw_0Q{ut{u?D;wL0=3HWO)s4$GexgRYHyYfO)sRtP%@TuO$G5npHdo z)03*97YL^a2Cvlu+_|u8CB&ezaRG905)2X537AYRM2KrQ3s*Sn`RV+1njtC%ckAdt z*bovlSh98D*7LyWByhK?o09=o&2Le@zSks4kOOt_99L+L87u*SB2tSy;*~IE?}$05=0$J&-bS%^<=>$ws?vjc zfX&IjoPi=ss0k#%qZ^?EA#hhhz2y8edh5wv_Pw3mtk|k4-kD5}q&e}EI7eDKOHTIH zP<(gL-QUS(%OmDs*n7|;`|ou})-%(*F%bn&)7{><_b@B17eh}7W<17J+I?i4CZI_^ zSmPbR9}1oczA5-v@PXh%x(Lf3EK_X^20K`|*k8kysN7$)8pMOO(U7;PoREmI|ORXvZqG>o0IY3f?8 zYO4x2!Zm#v`AKNpyiL;imaEyCdLeQ%dIkA5wC>A9Ahu`}v+0-;x+FA9Zk(<*Q^6@Rj zJ#WMG`Ieirb85$4xl+v;N=9Dakw{(8uvig$`#XX;Vdu{;2L|b?_T zJpW~eAT~!?Mdkq#0V&|ylu&>&r6eM%Qc)Gv?QLz&R@I`BR^VWX{rXzSK{L5a32Zo zO4K~Mfs3>f5!{-1ca7uVLA`UwzWl)csUnHW z$_l@N??o07ac+gR)Oom6v4951z-K2Nz>On~>8*g1`?S|d{ZX3YCyoq?#PmEIKUQVB z361qV#2e16c?n;$aCro0!{=~Hp_w6ulY$j1{5qo8k7XaH1+R$fAUZgt+!E~HWueK3 zb?jQS*>pe4{~C9?XXsdxfJrApCP^X@QE8f_Pp@NSBGap$N`KfY_8Noir@C4Zr2Z=m(l^|1a@T>QotvN`+TM zMaW8}A`y8y$&v$~lHzpo!c@-!PqW}!Y%dBFz2-t6tN*pVBM%B1^9OQurX?X3U(GNG>XWl!2S>n@iS|-lqh(~Lj#1X|)azt^IBNBI;^4}{&h$cE9N*1`{ f8SJytKIv)SYq&n(pbRA7*Ga&LKch%*;3W6|t>D4p literal 0 HcmV?d00001 diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000002 b/crates/sui-framework-snapshot/bytecode_snapshot/51/0x0000000000000000000000000000000000000000000000000000000000000002 new file mode 100644 index 0000000000000000000000000000000000000000..6a18f0d54ae69c86a4e4b7cb8164420454e200dd GIT binary patch literal 59320 zcmeFa34A0;dElEFc~)lDsZ#0eZXMm~WBSmo(#$Z^*IY2e40ABp*ejP*rEbycmXOpl z(-?cXYz||aF>SFz`6X_+bv?!DGy2j`fLcz!;Gox(#kUpWvRSV?Dq~G_0JBtzi94` z-eE=t_52xzBC#ynu-riLUzve2Iofei*ORMxceQx#q{F%lDzp+qXug#qq z>sW6rtd37jpBbBLEUeM&zQ$UiRYz%Q@xo5nVuT3PK+w&|&oXIN`K!`e2_K;6Io88(mHc+r+o zJC2w4Djoj*0r!@j(J4C_bZd~jebaOr3-_%pMml}WW4ZV(TE3OMPkEEZ)6xmz>IuS7 zBCn&%KQItIJ{?CgBlIA=Mtyv0YHT)_93SIA^sV0OruPcCmr@0*H13?d)q9Eg56b_c zHQ@e+y)$^!9*90?KV)XV@8pbtdCLdn&*D$<=g7x&B`NSljUp4)$U98%oWt2jo-Lap zDFvZnbVMY~0XtCfKhrnOfOpA%pZ}I}eM4rpOn6)JzUlf@TBhkq-Io8(iSujsHOhCa zHCAhDjrx=IoL)M2>Isbt;T>x$D~ormES=j}FWzx}etBs@*W7Y$_58+qrMA3!x;A%e zY;L}>!Ets6m)#exUOOlt9PSQ&p zuK+6m4@6$~H+d{1)J2AsShE0-0ZW9#%G$nsdmyuf7=Y zmrVbTR<_yXN~3Ne9~qNvg+`Gtz(8eI*v(l{l+iN!hlBJD@l|ch?zDT9(>LTj?x4SP z)P1Y@S~vQ*_xsAQO-H_D`qEC(qeLYLB`;}ya$Soe17HDR#zM6 z>aL*OdLxVvdY!qAb5doUZam=L*I3wCx$;N3{PUZw$8X_Y#`YZdSxSwLs?jkuI<7`1 z)aaxdol>LIYIH`8R@LaN8m+0(c{RGAM(b*{p+*a42PRCQie7gV*bstr|LRI{UM zc1+EVtJw)PJE>-;)a)fQB(u4)ZcTU7I-YJN=3kE{6!H9x85r_}tknx9egRW(1W z=4)zxUd=D4`MR2KsQE>;Fsc^D)WW!0m{1FoYGFz(Osj<%wNOL)fiQcG1VAX zjS1D5RE;Usm{yG$)u^h*tZLL$V_r2DRHLpM4b@mwi=%3BOf8P9#R;`IsTQZy;AtAO z3f+>|m`1LsaMPlyL}u0w&6D7;W?ypW0(X|a-J@fpfw9NV1jg9a!;$HPnaB)HyA&E@ zqg|2XTsL-1&i8TtreQAJk%?5O?2$2Os>;~0uE=(-9ji%`BQ!ZR99hm-CbB}yo^+-? zb8pR0{@3*mbB2T;5jbLGMR!I%Za2bUwp(vm8i7Tb?{L zOvlV?+7F`8)VPMbS*Dv23K7B}0lIf>tU*3`wR&9`9jCUwu(V{&FRUjpH_&vFt}V2( zG4&Il({x-$pF0oE6(F7CZ*JjqZEfzp+Vc5^yWBW;YU8wZw)TL#u5XtI!RbEd;8yemTFp$*((`d)DKkK;Jels09S}w`$zjO>7eZvZl4BA>CqeZ&dIno2 zlOFbl`R-VmyB|2Q0&V}mMy3vPa$jR^3F2YtRAYU^X{@d+oG$5fZe!^zRkgFLb7$Af zi_G%Vb1U;tgN&F_ z0rYitS-JA!1Y8T@Y#SeHl4+4?_{xv0@~@con@rbvn>p zB^j1UIO5T653tGDEkLZ>=R_!sYcXTNq5^|RJ2EC|3Ap7OUdAJZrUaz%P{s}tbC3px z;;k809=V9M(^f{eDhJ&_F{T7-)ZrpwVu5gSgpnmLy~9=9aQcekM_nMSg;ES!NpU2bd$eJY2! zrL(Kc%)fIN=9ZV%H?s8$=W1tRCKs0)%k^z%TN~7blMR;Y=`{4oYG9ft6T{jVC}-2M zJ}V^wpYb{7Zj&3e&Nc2Y@;Ar8;|^rry76Rp*J|hLD`yMw;hYGy^rPoQe6?1eORh`i zf7kl?rMc!)rR!y>UXc3r3+o$=v+?Ck$lbPLBDsHU9bV*IV=X6z)_CbN-c~`3lUwht#DZx2i~m+JWZjC;3=WI zQV5iSonntLbaDc4gb2XqmAS}`ihZ6Zh|2fey&fkJ1~{x>*Y*$;Pyn7uLFt05Z3>ny zhzyE?tqU-8QgCzuv6sFL>o-h?VwRyEsRn%(5D75KY+JFca!IM!tGmc2#SXK>C{}<3 z@ugKH31wB35)f8Os?>I>s#J#*VPfT+K;SYEtW!qn21c<<9-W60u+}A@O>a z)n|ODNxm^QTiH3QbeG-mowEnLSD4>3{RffVy~7$0zHIs7H!T(YgY|MV`&>umeh%8N zAmTa!M?%iQ?+Vo>P%a>iVErZUkw!*N=K+4?Lr(Yx5<2o(TY#F7&AyS>DFh+;$dztO zeg+yl0}6~3q7wv!KstaP6aY|q{%=t^g9QAXjTik1b!8ivA(@^34vBiZE?V zCSYhLtF2kk926_88q3toI4eYr&c>3nBrAlT7l!852K*J@@o+IK;<%~>Id!QsLU+l{ zW|-O;OF=F|@beex*-Y}XCLO?va+O=L`hU)}UuSkZ?=>GXy}wbxI z@EKP{pLM^cvLDR2xsPT1{GVs&(d;#P!0M2dHgj2qgESGn1+PL^*mTV>Z6jkla_F;N zIb><-89Qt)w3+76g*G!eLtViRNISxa)Cu)k$Yf>a2RYLIe1Wu>hkz*MAqUKEvkSDo zvp}i>mbB{Z;|aT>4nyrKMMkC&bcUT#XSUNuL|JqTZoV_@iFz#0w=%*|iELX|MTWua zoCiU{e-mn%qnu{kk~lPj!X))rPmaSX;+wI+GA0EPk+V3ZWG1zi<4A#Sw6KhGzH(?M zw1{rv%kmUr#8PJc0j6bH z07tP`mU?I81Wo|_h-{8_F*lG1KSH~RAU#yGK!p%dIgmu~c@%)Z-~qS*P!TF5Xt5kW z3Ipk`?Tj_eO68IY5_q{0>}GNn>3h`%+}LKZgp@?UQa*$R*wUt$)4Z);q-Tcc*tDSs zw+e^qu=oCAY5EK2~ zttW{u2<3uleZjO`Fr8d*m@76xKOkV1zZ`#g{u0z)HhWdC(F<_=ovxHOg&--Y!iY8f zOQ!vYX20_V^S71v68mp0|L?t{?%Vv6!MFX%=na_j9b=#!kTn1M(pb%ZnbAx{`20dqjM*8@9_RipqLC zBI(FxVYzbTdh%Jr%pEug{L3FYOxk@Fh{EhUz$`HLx%-7LDs>pv$et0y4toXe+PT3Y zIplZl;^1W6Zo@s;@0z}Ml~XawJ>7kkp3a`)zQVrzzU;o-zT#+MG(Vah&5Z&G(FfYd z;I%%GPbz>+^o1_}0bwv%jFvy-NSfgid6I7f%nS~kHViAE9CqG%OOPr5|d#Gg%fw3qzl^ka94@(~o`8Kfmb`6dQVTWR_1x3$KQq^O`uW;& z*s53;Bw^K-Pi@D+Cb*&v{>MCPv~aqyaAt0OWle+|v5*7SwSImTl_$g9j2_HJEIA1q z53DXh$}x;}dvR%bIe)5wxTHC@bzr!+v_2;g+FDv)w`iDYj@gwQgj{@xpF`IzZ&+uR z>eiW!3&HYAt)4K5t*l@ckrJBcwuAk#WM&h2n2Hl)kzveK&Mj{=X~Z_B)H**s*?WGq z&NI(#BLR4<1mh)eMq0hCVyT52oPo6ArH+As3Z;5|Zvp{~ny>=#>$?%N zQ>lL69r9gf`!3(w;j0RO6OynK$&u(;(dF4$VX@G)A{PW+cR;ELbD$wMcQ6W9(N>8* zcF@j}wa8k70@-8vH&9rpwSql}2(UL60S?n8WLv=*L`=9p?Gd@RmbB};yIkVZBP~5z zdeY;jd&@wJ_ke9mKz$HU5GoPu$6WDK zcmX^M&qF$77c|G}$_qtpZD|=@!P95GA;u_;<%vn-v+>&{9kNF`ONO(g=~;Q~t&Mi42OZ{U(w7m}+HdT)C*=+7A5)B2)}8Nqp1^V4(<+d~fY4r1{xy4Wle?_wfD z3KVU-$Jrs{MKs+eGiL?~OAHAPj(wvvOx}-{#2b5aNK2S~L6qUuxsls?Sy8q%B0twvy-U3L@+#LRrW5DfmP#iON^LhP&GKeV1y_M?`Oy z4MXW^>;3ezJ;>?wX)d~*!;{LR+gL7T<0rkiqX*3}8@li=|EV}E^Af&PSk-) zMzf^>Pzw7f{_eXW_zhgsgZ z^E$q`8D`qL$T;(1J`7|MM7&RCgSllT^6tGtC<+i8dL8Nz)g+1_Sr0<$nuz@WzA2D{ zY>$;1tM>EE$a#r*r}riEy{7-`h~ypxQ+~wqqd&F&&dk0GdnFqkXvye=X#$@n>I|)0 zMFI+ejFL$UEnHU%C^{g0sq}1-Q}{N#i)|FdtS&ERDgnw5(}J<^FmTDsb*5X8>&z(6 z1-t>d!0aeUCkkj_s3P|bvSBvL=Cj#iE~`}&(7n*isc=F#gjhHsxu$SJNNmVVfnJci z(719GDmW&MX-Wpl*E(K1wV8U<1mb+{)WyW0FUqXi(z*3gno0Td)kafLfR=1+<-%O! z?CQpa&2-@lg6@xjaOAbiNSqc_-}Q`sN6cJ8^J zoqs-jrzIk1o{L*b%8G*GlEtLO$*4iF$3kSNagGaz2HUCWp%DHHd(uE&U|LY74mK5N+=MKpV3%b$uFJT)Q9~vtVk1GnX?WrwPB$d zi{cx^Ru63xJ{CJgA`z>v)$X6GEic>BYdQ-qaco-%mlrf$nXLe_7U3sIc;R|E!PRQ{ zv3zu$XYz`y0@gnr&TK3}^1B1mO)Vz^W5z6ls@up!Dgv_-8q+Kla~7osy_nrdv`tx0 za#oEX-V!SXO;+j}mX@@Smsa~dfpl^`m?F8}fbK+wG;MUo1D4h1Q-Sas6oj@3xs=d< zNsV+&QyGXBll!`!MJEd$k*-{w&B@ix=NzPyj4VRqYL<&oD?Wr%G3(heNo{e4?u2~s zqpc_865u`Wjmvq>^77;r=Zu#W(v=L}!VV~~$}cwUhY-R)V!qJyKB&H~{I?>6|AsRY zJmk93o7{I~vVWat1+%6Cb3o)*h}(H-bh%5fV2}b>RBnR(5tz+_{_m6zRu)lINd%J} zh`fz%DORATjV^{|^a(!gw?M(Y780f&3|Wwr<*_TW3IGSI2tNpWfYhwRF!h~OraX*{ zX=f*?wWCr76ggmM+berUXJ@zDWmoJjr{Z+E6}QW)cwK%4YjS`90v;_X5_vjrh9|Mb z49VevVqn61I;!HK} z6l>V@wpo2bD&(H=Eu<71U$xFkzwy(^S$Yhc7oJZ>CMWdCDq1_yq&2iKy{YT}H#EX+ z$x4_>U@889P<&((W-*@_@ra4+Snyk!$(`ul%1#z_n^tPe@&Ks_vNf~dd^lB^|6M~M zcPz7ty-lD2uiS!mf|)V8>BX=y3%i*&Zg8=*YO}u);Rv8cNLUTyx&cTxwC#;Fv(l3& z7F>X%{_R0_D_3d!ATL_p)uwM6B5HB}W751ou#WU$$!WUJN^6>Z588X3gP}F%iOHRi zJaCj^{Jt>{iTK_Owb%aPl)+DA8JGb=UY}bQ* z5~_wmpd5#^9D7yzP2$PeSc&_Y`94 zF|?%z1c4X7N$(_*o9%iK>ySL$0CEo`Pen__Rt~l;CUm_lM6nksw9eZI9+LBpJ})LD z#nySJiuql9y{FHMO-ZSB-bMYDoYxk`3LI&4w9b1dx{~wATDU)7{<&M!@~#y<1Mb^) zUSz(}^xm#ssr--IN8J}V2ZMJr#eUCmqYpUWwX*NcsNADi>AfGVe8%h%!${V(Ddr#C z6cq}o4}u2nxsrD2v;$o;H+ADffRPXoGthONUZ^F;CGj2$BWQx6BsobUNwOJ|yyOa! zRG|1xRpuk9?rx?_M@P9UCHu94ht~|`U zYbZOGTi31Dmc$Ob)$98C`C{`r)YeO)xv;pVZ)+zTOR+8oQvxsPCc7@`8r)Xb8jDL0 zz?#he`{M4F4qOm72-^W+qn1D%Lov^HLvJl}H_yD7fij;l2E}RBupstrM>GIPW&@GX zilu#oIe#K_E(=paLy=9(W$2Glpi*gXt&FG?Beu4d(DcypV$8OwGDoGTs`Jb%uzQ{h zMH5}RDKL+58540PqP-_@A20r-_-j3W6rSsI1qw!+$l$H z*2}rDAIK{dHGVm=aHFu`ig2IUBnj4{c9C@&IWK1y3k*}%>!z_6XB8Za*!#!kKUt1B z{={vdz+aKS5*Jk_19kXV2guPzM;-rmYc7t*vG!uwZbn`c*NKD^F;x5;w#Nd~9&mcl zszC7b)%356k2HjD9v=unC~BPJ9dLS~d!nOr%VU(pIgx8*0@%iX?n~JsuqU*A#p->I zvR|#noj+55sl11r&)WX?G6U|bf|o?W!(ie|}iJbsJ*bS|K zN5d{N=!i^&Df#ddk{pz;Jt@hUB!?s!mybOvNlx*Q1&1UrNt7WeOHvF-vXXR!BzvV@ zDI)1ofWsb$O`}_q&K$`ONqW)P8x=|V3ncrbU0;!82y;kdP?B98Bzq(oE|UyMvb&Sy zs!9odslSKE$)LUG(ZX&ij0{VIkpnxM7mEUxk1tY0!QZQ=O{>Nys5i z+piK)Q>#JJg%}eg2*(!oF~t>eH-eR4L7(LqxDDJ?cih0iKg~Z74}D)lVeG z2}(}F-(pz_yDw%8zzG>L!ruhXsGG*rP2=jOyWP7qkQcnuL^hSw1A6Z4(z&_SGl~0V z*QV zxFD^;9XsR0COp)JLZlU5*Kz=DxOi{t8;!>|8sBuI@%9^yx7}zwzL7p$`bOjNjmG6h zEo|$a(vBH&;MpP$ZBMh&c9RXci8Ry0-H={VOdTX>82{>4cKoqo&mck2Jb0RAB*mn* z^``UfH89d?R)=FEw{a5QSR~5FI@FgcRu~KKlL+j`>Tguu=n=H zkDd9%Ctf-5p5EX2Z0*s%{f~FtGI8ramO5VcllOl0Z9n7uqi?no!|cD;K32! z*?Z_Cg(rRVE6@1k_l{np-uq?fyUh2I5&%y5pOldHN56UwQL8KQngv6MwyT@1c`@-+J9o-0`^2 zd?WhCFTU$*@A-?D{j)#&5&tbGoQMCY>xJ*}U)BHA8^2l%fBt;#qi-Cae8K6r9KGS@ zYk%c;-~QwO{K6X!zx_A=@hvaA?v4|$-SJ~DIPh!#^`WkO&p$29{H62#8(;nD_jP{w zQxDzt@#jD9`|tY1J3sgNH{N#Qoxgki!ADDdBmZ+`lFe)OrI`{{@OY3Q53`sTlU)^F6_|AoVSKkPgGBlYb^3J1RUp-+A4 zH+wryKYH>fo_T2C71lq^o__V0Z?ztH(=V;P>0R%vd^R`qMyv1c|NNtSM_>B#cfI%p z{kJ~vH6Oa}`8`wWk#nDW!Mz_^|DN~bcRXqT%oi>^acASrwP(KMGw)k;pStTuU)}MH zdtbT!j4{AOb%Tkol#$#(wer+@8< zFMQxzH@{%#`1k%(-%H=UKJlgByVsh^-}C1G^9O(R;lA7dc=@aM_kZ-EZ#?j{-+9Hv zz{lO+n)de>e)=tik396+AO6iB3_bYJhkpE(uQ%WMouQi^*VXZ0>8WqI?GKG-e*d5T z`)AJ|dFDpJFj^7jpnnx&fE9Ax&FRuFTC^_ zH#~B~jh|h3!Y`ls;^UuH`|3~p+3(%-3&a2SXaDH`_=y+4`4|4{H|CGt@b356A9?oh zZT{0m;N6iFh=#4H~1 ze9Z7UAu`rpj}rzphSZ4YfEwIW(i&j{;;yt>Rm6Rq9JeM~ zhzP+37*(W@r@~-io|8d(qq~F;%v2riC&UOaBk(dZCj4zUPYqg)v_@n|41y~dldIi@ znnh2`f0{*Kdki&;8SOFTyTxoWCIX*GXSQ@!4OC})�r~BBF{+HBz`I$Utlc63EaZ z)g9M3ts2O585&nGw5;lFFXmKVdoi#2+lvLYgJRY#Vg#jMSFhSB=WXe%T2#B*8<*4o zMF!(?>re*Mp$6j`uT?V?UlQAMm(_54u~Y4CFILo^_F|VBp;&T@1Ib{9)!z7g{L;IX z@jvX8y+cj}f!u8kTw^~qa2j`ckC?A9{ZFf-?#r!m@UYbpz7O}Q_gg=c{e6s=KVV~$ zVdi08F>A)ILIZyIa=I6<6SP3^XUyWraG1Ff)^H9fCdF8{d17;7`l7TpGkGSfS;DTu zP)N3*)&oo~JQse}bzMAE5DKBjjzv`>goQW2Qv*W_otLcCVXlFxhcNrXJBS;Jr}J9L zB^-dbj_4W~gyY(CwB^y^-`T+9397rLu}(}fyhN$oR4$8?0@fAyGA(RqOWSRIMlrJx z=T2*7{%NUcMXYo33Ai*jUt2h1A?eXdnv2xVSHPgcOkeJ|twk$#8KHxyMqZR+(PojC z=r~nKEm^ywl|hIi0-gYg=(GqIR1R+iS=T!2n5X^g4BW_S;xTNYn*j4%__pxO=| zc2wMwnO*I@uPwYJ0gZT}1%@72c43&#hnuQkNzkmA_2r!3kiq>{Yc(BqDEv^I1b1XPOR&#d)AiYm=+oBWIT6% zZ8^}c&ga%^i;d1!wvDk(tjgWkTHNB2E4->Jt|8U}P7-?f$UYO(B|K_SR#4DrIeEc? zlpQoZ$-6R))9G{uxQRgA!3iPP>+c(gZr1NZ5W5CSW(S5?aF#mWfmnBmkGCUkTvv=P zCiH>vi%r8L05=NB$SSR2X4mVy#(b*xUGqJr|90!B`z=8CbMa_(=yObkc#oCg`gKhH=+Va%PdCK zmf`aXSeN3)YT5-}kcnX~sl+8Suv8&cp_nSELd02B%<*!u@Ki+@;;iqe64XusW5T?j z^O4&n@E%y6g83wajsOXhELyQ%5Mh>v{#YqcbR|K!iyD=jNT0+!DK=0*A)!mDH^-A3 z3wJd({M5WoXTSjKn;^ZT4dvosDR{!Id*W8HRDU2$j%XV;T&(mOYa7g0j1#0$)4)zV zE(BlLQrm8vkhsOA%KFSYngoIqten%9cN#6=->@);R^Z=IbPbID-%(>ehRIr zz>dbq54WV_NZhLkzT*f*JH$wR1{uq7biRXjHxo$f10WkWYnoZs`czeLAZjr}~-jZI-ObfD5CT$3Ea*a)^58^NOfB`8tT2sW3^#wM_-11(=q8@MLMu+0*% zj1jhqEwk994u}9!xRh-ypVo5juFWquHltsy0F0ex+kB*&%XM2DSi8Qqvbxz2_97SA z$8G@YY{;nE$TL3k<$i6rnxzuq`wwuGr6rc9#X@s7CaX&fVTC%14Pha%^cs*G#HM+A zwaKNTZfi4y)f83B5H=>T62rY_7n`j0nw=zuu(Id?$pZ7m@>On~KG&dLX+=!`pwu+= z*E-d*d==;L__3}wP`}CiClDfQ@nua5I+#HmHixY7*P8ZUnERaXnjbg44_cp8{;#@6 z-A}pSw}VfFyP|J}U$nBH$h-MZ(@Vh|hNP=tIyYbp8bgo?tSfPmClG_!hXXleY2ZZ# zdmwmA+&Ize2w3WqT(9IJF|_NUJvqlc;RNjug!zX-6mM z$Ls4N^)q2u%6Dh-`C`5+(~~Jx@|9wxH&d?Q9#SdfGhyehj!H+~7J`((R6>~|)^#M- ztCZ*odvwTfW>ZWy~osc0oBM-qZxsxA=p}1EUcV|d!rDC^@;Je z(B?66b|lu%y0Bykv5tA&TI}R5XNsFjqClx^u1Tqc^5*K;Tt30(iFNTNf5%IO<%wa- zb_~J41Ktmu4?@NMKl`z=F8gcJ5|?Nt{J`aYR}$2VAKm4CO|W%|MyX2u5~qPfm;Z^Q z+U0&ifn4q<1jXfku{h<@Eznb6_J_gnWq;TbU+yP5`OE!2|Bc7Qj+T7FC_w&MWb!}> z$I6k$FiI=}{4xSUJBKxe(38Hl-V&k;zEg0X#8uHzZV@|7LLMO*t*QYV0uu{mD9NfV zIa&&BXB|dh;oA6CVy1_d7zm038d!)U)FLL2d9uxUQAOyHhv38N3locWi) zmZ3>!9;P>w}i}2i_x||IfLj?tAh(gHPsf3}00UqBj&?=w^SblFL0>$-$}?&Fcsm zdOMu>F5_{=t;Q3LJB)k4>%yXo;2FuKX4kRYBafh(6o!u>;3uFEghQ^7v$KSI&|Wt9 zOmY_HTu2E6YaIiBWh0bWHc#Lx!?;Z|GdD_O<0ft8bFcQjDS@LgGRcS~>0Y^=F^166 zFdmSueThjOpncc4$& z4C!>RUqs2(ol*YIMVd~n#X4;3bPQxlWB4SQ;4hvD>&uxgzC2?pWp#sSfAM#mYJGreDG zPVAHX&Eihv+$+(toTn71aSKyK(CVu0Fx+G0yd8Tt_p) zV3Sute}&iXzSgcUCGRrbBHITQkOhkLiRwN=d(<8tu8_oNiFnD z9*Re@`lOIT(nu$Xlv&!~)EoEc=OyS6%q0KtxAY6rfgXt#FkoLLSBoV|T#iSX+(ym` zfu-9>e^7rB)EPMxJ$b0D2*MA6jczDa(CCtny{?GUv8jjzRo{fA#tOhMOb>|WrcWfN z`1#U@(+`WOW&9XI-HAnJbDa7vv5dq-y`)bh^7Qxx%dq7|>t0PiBO@0&Rry5GM3k3- zaE&W?7G8^tg>ff7VfG2=xk!@R*ku6Y$XcEa3lO?5TsRSj^7MpuJW*S1(vU3yednEx zQ|Ffvx7OP`NMweIw^?|%IE|fOlP+4kq%TD16Ny)(qc$O36pAyJFs4pvVd9*IdCG=8 ze}3(pCOykSf6kpv#+pQUYSN?mm>!*5NFJdlDX*pDY@XTd+veljwsf|(yuQ`REn#S> zhJ;q|kxLIsjpzi@VbWw}$bI;zyl+R~{d zc62~=hIA~s1nNA$#Y<1DX$dtM-#my5V(%O3Y#cOXJE>`eplx++3GqB(UbL&9jm6eR zQ4$@+Dh)js>6+vQI*gU@1Z@K5RF)rWYqrM3v(Vlo)V>zd#h!$z_&IhaOnnNM&N7{X z#KDkkS|3MPj^B`t8)PHeSlQs!#4VdFL3tyY&GA=?&$bC8G9oC}Z#)(mmy%E^ZQnef zRHZLGOv>_^vPnK3hltGW^BarR*zxf(`8uW)%O#H6s-arWLP$uC__QmS|go+VwReUJ;GCZW8-5>LxJQQj2K2Sk)edg8H+FOz?D! zI~F+zVMLUihkR04{0d=EpbbR`R4^W1a@ipEj$|-+Q9^W5FNj~-QI?umV}4*3=a%%1 z?zWLY0<2NnK}BMYY#gq-d+d^`V;(6DS3Ju#6S%=6R zc-&OIlhKw497FNF2#GGLdLG*-R;xabBzpQRNHKkEB83SVQs_Yt8z7PtMJ@`Xz?Iif z#kf0^90il0n85=>K`onYQ;V;ns@U65wD^Efx0_hjA1V)gkdF ziWAx%C)$b(jKB&(KHk5oB4 zoH?yJF&b!=tWInOnk6`l{`g{5ytaz(>$KCUtp@aLbj#XcK<9}%E%pLBPt@swG*2Yy z!8Grbm5_j~`7Ly}xN$;9$nsDl7E8n#aYu~ThL3G4nhbLiFA-uG+K_Btrs4RxM#5$Bxfgt%DphM(P4vD@hbC3Y5 zNcae7#~~;b5vNPZK&QIKntAj?e20{ z*|96#o!vRYc>8uwxu??8ZP;BE)2>9FQ3v)5i4a@pz(k_fChiuwnMl5b*i14aFiQ$T zVTssG)b8Rso7N+eM}`+r$3f1D<#T*JIg!Qzc-kvOq%H~$?vyCDq-VJ}>0O9kt=k9A z=w{fOBqDdcZHtBT4NXNU##S-O84BX9D+FZv5OK!2;oQdBg*H9eZO~*Xm7z1DCxaeo z3qP@q)-2wBKvZ9`fBm`zJx~yufXmk|;JquFwDQ&pp~ALPv*|j{B@#XH#EI2yN$(eF z-7Ic>k><@>U0K}{l(Ky^sYb3%4<|!qj4@`^(z&y>)qg{+Tnk6GoN`*xY%Ph*9{ew5XxGI8N zt$}oV1beT5-W$rC7eso|l_$#6F;^NhtUqRi&lF1*pBDd1LdX zXcM;neQ_I{j)NxFFtScoz>x0A z?ky@rBqXhyf_Y>&7Gxy@#80YlpYAx6fwLFYCb4*`Q8ml`jVf_Pd$V|?+)&{z-POGK z#NOB(5PdcWL_`K)xv_Jg?E&OV@d$R?BfzIg1gw4s360i$B9O>}$7Tqe#HXEXH8>=8m@ursEJXqpJ9q^S@CCz?%}f#M~KcaSEYE^b;? zOkci-P>d`ctcf0MqDah{swy7|I573`-Xan9GI)7rH2P@f z*>?70*|M=4iR8F3Xp9bF0^6;l`g{`=_km! zbFjD1aCdYG@Bi_*`CeT-1WuVQh+m)9=7A7b7$d4 z3C|9i72S6j-#~MjZMw6H9&_`hC6BpY)YbLIYWlv`@ov=vcjNcEm76Z4ud+TD->BHC zNFQ0pn_t}!iAX-pC+B?L1Dg{qY$S@eEIWkoHE}|c9c6M!DQTRZj7QSsvM<9>!#(TS zGne#`YnJsSff9I30qax5af#y<*yQa<0LWZrK1-P&cq}Ryi@>D2eR~({N!dE@PFs6q zpP#Jn?)Ke1Y|ny~8YWm$64Ifg1pdK_60Q!4(b%hL0kgOZW~iILp2QeVfh9y86PkyM zgIIV94K8FX0cp%4oVoOr;aU)I5q=fZmO)J??C6pXr886zR1!m*PIdgPK~x@u=pg8+ zP`kpAi^DjZMF<0{vv3}g1^Hv|tqB30hcgm7KtB*WGkpW;prx8{l?sxMrFlYY31)vngUi@Q@vj8TOJm)_!YPl`BEQHlK`Y$+1} z&J3U|!F*6|0mm)l-jr$NJH!@^wiktd*FZFrS~QA)+OQi4;2h%5oZGm>Y)`AX518mn z&FBhHFj$Kmwyt}gX@AJ9IG-{9(DYty{TJnbpLk1;y5-={-I4G+#9aEm`)Vuu3W7EM z1{7P4*heKIh4&c)VBXyjp&%Ji6_AQ?g2>TD*p4trn~$)M38o`_OI|7*Dl=8KFp?At z6VhQ@(u^Z%=t`Q``5h8P+UW8#qVIPM68m|dY)wf_f!l;>dHlM0hAMZWBAy8C4`eoovs5pjCKev5Auk zFqgzh>)xY>j3q!iOR;%3 zEZFq&O;2bnX0afvUTjsTIolYCNj2P#*oySarcbDt!KV3Hc5>ilXKqGwjG-ZC#f&eJ zBNMknpg8P>3HM@rv}q&`R^-c;t^OC8_M5O0|A2YHd#`$@^1o>x4So|pkasvLdYAJ> zH1=i%W7JNDNk6f0Ph2i^oNWNU!ZS(lBg2j^VvZUaU9yi%q%BuH*-b_YMIOvE%j^kb zm^}e0ycL&X15yHLDv!^>a5~DQ`U)GGAdg5pZ+DOuDzG9-_iHP5qySJAQMR))XAw}{ zTPPYGZYG<{1=z3UbCHXO6ZWbF*F%^LpnMG5$w+Vj-YmdS{)?!NnizUY01qkw!&bbP zjNWesW`!b}-xzoj)J8cvXtgLiH6U!MD+Q2w_pZtQ$ZG<+{ul2Qv)RP8{J&_6m`m;m zvkfbuRcG79{Esz{+wJ$F6=qwucVU`d?gx!<*`E+A$h~B%!;fSUfc3V^f7HMw70aDhVZ}3E0k3+!C@2g$baFUTox0%m6O+ zMMxsNdJffmvqRz;QPqXRlvFVc%+m*mP|b`=?ig8g!?r4#tnHG>ms=WYdvh6EBt{R# zvRIgZrfFTyI%Z*yTGw4?KQrgN$ox6e`(^cPk0yvK2(N1d}q1=AdazebnQ z1BoOKS9(3mmftKyZ5IM!S@fc}z5 zJ?bL_2$~QP;*A%p-8N*G$)=qJK*OgaF>l2JL5mD@FS2@d9j{6jZDKefHUOV?ZFg?Fh@6PM z%p`hklZd#Iu2|H&mt9CO1y?wK2|m^MqgP!cR}#qdE8*SJiG(!$`U~yhkG<&1>}h~; z8?Rj-&M#^8kHWl6I+V?u4;KT^X_}u2pLDn_Zr>n^P_bo$Ma`6qu?%)xo`>%=Sex;*e95u(x<9KdVhR}tN+>^(^qv_e!%}Gs*iA# zM_M4jMIZ-eS-KGG)c`P16?k*Q0gBW-Z6(*l_E(x>kXZC>S7q2zPPA(Rh}?_czo zFPw^*wX_AqQQNgZ!w|qpmxu})LB&=eOHqB9k4lWTcXGH_|Ge9zOp zLx<6b2GTjbZi4JB609X8_U=TG`h>;>0X4b1lie-v&_cZ8<|2aP&Mh^uWm?zf+LN*7 zvr*5d^>-4CkjhJ#oe58iuc1(aA%B=>X(_a?^9(L0nU>*Gie(ZP^aR1D|t3vP)boV$?8?+em}sB zf)u3-w#PkIkJ+Po*t2I!@CvpAG1Hs|3+NpXY@5i6o2)V-&f=hugT)~c0>G}a;v-F# zgN~73BHgrR0k*}#(49qejHCD0V{!hp0hV}W#g;(3^yh&rRI}me@4Pq3aZClvOu$u|*M$Fmx)|yB!qKA{}YlK!$GgwY)2at9b=v52m~cB53M2 zkp*8cTB$4!=vz^?C{J6NS$Rg-muXe)z%WTTd9nPMku%j!Ep)JR`bvz8>GJ90i@UT;{c-)9zls)@h&Wo`yV?z2orZs@cED$e`$LbGzOxG; zy=dXPEq=sppEc=#%VN#5Zi+j&+*?E<$nwSJOy`m13(cbQ$nv40L}U%^$s2}3!R&`g zYss|jaeKTT<0FG9iHBhu4ha9jy6^dx{X^>{j!^%@^4{;i*7rYOIO@Kp_#88MsMH95 zuEURhvE#GZ?AHcLx$h3R`5z4^W8AzBp-8WGPaJ~Ad$REqA()-*i}al9X#^5Lx+wOgF-MldG$;=7@NH2>c`1ecEQBt zHP?(DnY`}sk!y|~4-V|wzw4?aM~;kLH#Jjz!tBiWZR1azo|&0}EJJrD!7kvD5RUmJ zQ$$*M$RK!b2)9y_6Aw$N(Y^ut6uXH*C_#|vdW_U389QX%)tVbak=|r3;^c{u1m2RMt;{)FlaXGJp2HXYph#3E2yQid|luS)x4{2`* zs8#zGD4|G_lMV4iZPWuP+^Vx#$=-2(Z2_99QForOw6cCCtJB+s0D)Zfq#?m0>|2Rn zlSnec^a{>zL-SsmX4M`NkfH^)yIHxPU70rsd_$1x^(_Qxn?HV<#i+fsu)M;SJ?(U- zrd+oWs6wYQ=1nB&W-@eJd1jk#F{Mf`a_zSkSJpOBsS-+*O;8uGm+&RK#Oo}jnOKD* zR`gJ+5n7(c0}IRN*Kr`oP>?Y;>YdG8>nz(ENiFZYQBUdFKzb%X5I)GB&MwuRGxD|a zI&Hm5KQ1rTJK~HcB(=K-W4Gm|6-nZ;ttMYy&f9XstRzhpSO#AP@p@QjT%MA4^i3SJ zaSM%{PW4BU`y|CwPv+>}JR%$|E^VymlH*+MtUOql7NLQOViiwHEH>hdeg^%1H`VB; ztZb@kj=FWNR;KZgZSEBp?GBDec_TKzY27eL>X>~A#b1W_mfe~*P2Y@E>X%Sx=5Wtp zH>tCmoVEW&%z>~3UcwSw#2Pd!(l@&eukgPQk6<-vQ%gj@`e(6+becmNqJM}>nz__} znGO7sIsykA@N*{thJOBfXEX<0p%gWH{4CZcWG4OWn4i5GeX@$Pa2f}Iv(hSi6@j6o z#NG(wewNG$>|mQ&Bq?z%7R=yV#OkmN`y(7qAt0bIMa*A3f$UHANEP|meoRY?*Hy(} zqIlvK86h%45&0LdgBZ1BhgGrC*P{Qi5pA`?u4x#SL-i8f3}GSM%k?3#%!=q8VG0a* z3Ej`2-RlqnEjF|$UW=bEyVi1F(L+LgviUlEO?R8;23M-$3Ct@9r6nwfN!*X5iMSR> z&x}jX3TbCzpSk6%JQWcgE_Kp^PtuCI>$YCW!?Qn5=YU-x^qb&uk)Tr3HK2EerA7#L zsp+uyus<*rArL*WX))uZfl6foBoF{-2 z#dLWjohDk)F536zlR5F7Ebdgr4Yv7c+sqWJlsr9F!t&O5rI_V|VLmCd@zV ztT6w3#0;w1oihJ?6k&{eQ~_QQGLGA!pN~qeU)6p|EHrl9Bh*xD8DLN#drGD)MX%7O zWQPV5W;T!EJx>KGhyfGM@OHId2O@2&*rDygniXz!r#9;9#vEVv^OkwGOX~-HjNjR{ zniVCRB`fWR#HZIC%bVY&!;~V})iaizzOks2Fr~OwZ&`+VT*9cC+rt{XjUO7Hy#3f1Rd9&IlY1<)K+C|Ci!AS)(aU{tj zzfpVBJnwT~n#ZUSPG5^Lz+&J>*Y?}Uh)BYs39RJPyCDZ$X zdV}RZenSWelLh!UCl)K6GRArnH@$GO{`! z>9mYqf`EfCV9LxP#W8najjrIAVA@sC-6MyvLq}!m=teK1hB^>g*%p#0OwkFb6j_5h z-RoBjOLpq8_J>)_+5KELS1v}m06V&_a;4nSmB|&0rJ^HR2^diurdHxV=scZib9C%H z^l1>Hf@c(K5mqN^W#MP7gsY`CVSZ6QFh$Y1h<%7CPYBLLJf>K2AxB|8r4wO=Q%ewX zQjYmQ>p1)V-jH%rQ8R~5VmqF0i;kkDQ%LzUYks?UN&Z6ZoMuZhlF@YjW*057g40&r zZCg}q=Dgg-IcbnGSeYgVm~G}n0^Y_}1;RJ!i!=*Guq9lXm*G`4;lGvp*@lT}Gb?9X z!?m+Z>zd=-#I2-6bRzEel5JqabURpvbQvlBwzB(+2y`J4FY{}Q?Y5nNmMx;mO+R8_ zZYony2;tQ(w5P0sf{7KKtoj~k186h=uSj!2>j|;RvDlNrlh(#?4TPAwHJcc^0oCM! zgnAT!WD*RKuq%S~sI3ylFWyJ_imgE=acfPy4hq$!`__0C;e|kI>As*2k_S>4QjS%0bssJrauJTq=nidf?yQZ}S&D=Ec0ox@)=(clGbnJo;?#2}eH)cWI zY+VZ7pe5u&6`~%OcZXTnMVGR#GH;^Q6dN;X3Vtqj%aC!9k+OJ<*@D)Ds1!dm{FtFN zsZ(Xo>L1_w?S?Q-mw-O8X}ZvfTQ9P&bdm5$t#O31-B4Wam2siqmkDDU4`x#!55Wef zv(wu5Nz?v;+3)e;DPAZgU6r znf=B-%%L$O;M?HW#1W$(d21G7yKQkl>X8Z?J3Yi`#E^^+Lveh`!T5klg`D$!9Z_EZnykNFS&`IJ0a==diA1xZIbNELh5a<%fhWGKq-l%c46m)u7Ucgh&7AW!JL9$2VKp}SBn zbQC%Zr9xMsuiS&L(vEVmkcs-sfN%*S4(Jy+-^#=i(WERVMPVH`iy=7D!e%jvZJE}@ zogqpVJ8D{MnI=Ry`BswT=|<|cFf#GljIjpDM4Ky$xgqGT?Lx*W0!yqwZ(TZvv`I(F zw4bY zipG-dd81|h2y@!6C^mcor)*TcC1h%)F-_{VyPcy z(MYCOr~8>%$SMTr%T}VrT}^#p71*Bm=sKbwBQ%CIk}Q3YEy46oi*^(nJFUyac}FaZ zsUdD!-vyVi`wU3%n9GUxGOc72U`5)1wK-H5YBNaP94nh){z^B;K5D_lq29T9FUS z+`;LDrL>6?Cr=6hi)$?eAiRe#XAauqp;14WCQHH`x2s5o;M|!3@Dkm@2-lMw$Xw((;9vu5;nK8kC( zH#)b5-o3~DSDHtozcKH{2v?g4$n#-%JA zNu)7fTFus{n7_Dj=n76(YTMM0H(^Z3J}Ii?#QBIC^47 z*l#p#d6@@H!iqKUO#9Vl&Ux5;iuWA#HPiowb<};U9R%;P{peBqJ7)H`abPMF&?3UW z4!G>Ez^bGwd;bsPrh zb{*I1Vib58>{m*IShRFM+aknmHBc#6bdlPr9s9LyMxU571#uiNFxM$J4l31-wA!$f zuLDD2;6tFR zGCJ5~jE%fXHr2z(zgV_GO2u25Vvag;#Da zJZX}b0PT^HlK|}z_*}2lE|3)KYTK0;>6Mq&ORgL*xr{8i0!vOr9#Jlz%a(HSf=j4W z)X^!qs+V4~B+`g&XxTPm_+PXV!+0fXn)F|@7XRf7@AB&`O4gYsF#q3JX>6&}X(gU< zOzvW_Ie`=6?tkNe@3Ocq7x2BHm!K>z9gH3?T3KA;3HagW0%NwpY$Nr*&7R9SXMfiF zrukc@|7+}d@Q4*eAF@8pR_I{=JZl^JLf}5Vh>TJAR7vq9Aw+e_Le>cRI7%knOF`VgOxayZ3ZN;G32IUWn~=Cg5*!rF&ne5&<{d5E6r1q2(K2Tm z4K^xhkHV;<7Wz+y^&XX01 z8l&AObA%m0j=tG*lAeW!hN7ZhJ_C43T)4nZ&{ejP-<8}7y0moz=NKWC(;M_U`K)t8 zz}DF^z%AVaez7ILF;!wicFKJ;S*8`N2t#^X{hIClb~*upcmh#bF&tD#!k*|~1@=mh z+idGtoIC^KC>(2r6_VY^kwp{eN4m)}J*(J2!40q`Ue??Ki$z2b8cdLS?IGpt9`bIy z-Tzf{!2KQbn&{i+Gljm!W{s60UjmtpaG7|8vljp_4D&+7J;Yndv$c=QOW?EE_@@)# zLEHHAtwfS-SjSJ?Wz8?>aQKiH# zJ?_|@gigmz9%y z5^5gG5*>*XrHMej{Axo&vAWViEh!MNt%-q}COgTQG|A`#v1v$Cn`IFnaZV*rzCzi9 z6=!=G-(?v|zEl@mZ^ndXDk`Oza$#(U!<G2N!nY=iJ-tH^~uyZ`a$@^yF$P|DAnky0Xaf5TfVO1eY2GA2iAmsUz? z_Hzu6+_hG5bs*51Gw&Y~+{@;p4QsjAY{eu#u80%x{GVg9$z2PUm6_h2e!$ah@Te8= zgcH>fzH`NH?Ij5k4@|dM)<~Fil}Ku1~0mNs3At%A2g@xk#^ud|5e*Bfjymk}lwo z>LA@(Gu&Ad8v%d0Rt{x*j~+4o&7AFKbCa>2g3!SZ)^dGCj)1*qRuL2bLM=xAgkQi4 zGhnwXLn4B~9u>Y_^HA>j;Q`1a;CXe64(FaUUv<0epDW<#uUufc>1ax7l5%i?@y>)D z#0S-cI??yx4o%beR62=tFEW#Rp(EX+01=e)umr%tA#{sXUmlAf7i2vtxSp^)EP$F; z38RxZK}eTN(Tgfte5Pm=UrtQjajjA`tA=2bNSq!{?(RnL&SK1bpj#0e(mx7I(i8A# z4P9G%CbH#f~sSH65{48zq&xbw}b;mlVjGHPYkYF}5Dv%UT$fWI#CoHEUiqy7_=I4iP1t4o6a_Cnq()dNf1b$`N+O6tXHq4N1}_HrA`%+}98|Y!N6_ zOW_bNI2b9(Qijpv<20kV57^g*wGc@FAD&1rqu`U2uh&GB6p=7!#P|bgI4d1d1s!q1 zgv8_#CW*jo3e}^lkEMVF#0b3FWv2TFeSkHz(UpgW*h5jwJ`b*Q})fG%7D8ONW?1W_pQFZUrwL3K>tB>!k zomho>%BHtnwhr*8nGPC&)l{ z5AiK{U@XI8L0<}J7gWJ2`p2P!q>u2--kyYjFvAHLfdfekrxUCty=KxcFJR9050dO1 zqR7ZFMFvMGG71owH>Z#l{`?U!V#PN3VB!Vrp~CsGvKQ^gY%6|&pjw6Y6cWB-ZM5MP z8{9+j7%so1%J_sIm8K6KAw76#hV<0IhBt9wY;x+rth$Y^2{c{Fn1KaGy4> z!i??REFgeEy%@xW(m7(O0R@bAFm4Hgu~8MMYB`*WxF&_RA+6Vy*5n%jYc4wBa@vHZbg8gU+eA{Ywwo-#QcZCY~Y_kH7#60vdU^E}FjZ(bJC!Wn45{ zbN~_^q1Ia8cmxTy`jE+N^&?r4J4Awt)MTr!%8qf2Yj<6LHda5{+Bb!inSE3b`Uni@738i`^n% zC1zLZ05ROncMI(B4Ko|Z7Ie0&%yg5p9dnbjWz7brH&<_)wriqs(<^R1%A8tx7QE!D z+W>vc<7>JdMSXR;jr;-ZXr63Dk2f~fck*Q|KEB6m#@SX*!)j|Mw!XIIJv7AQiO9vW0#pNJDkzJ+5YzJj(XFbY-xH}$F*P_IEk;ma!tkK+ne0JZyaL~ z94Lk3;-{ihd~8R|=Inx5kS_C`$v_hdUG{MG=ng?~1PnsR@6qShkWa9TIM|5I#gI&n*zE1}dQ#(|9?c z;pu1q8W~ce1=>#~pk1tPQKCrn!` z`P~A0m#OvK-{?;*F%du z0DJNP!o^Cocwwp%YW(s}C(`yL&J%%xE(l7FDdNjgMj}e`6BPQwkze+sFR}6c1OH3E z__x6y`lYYn#l8~_pdBt({v4InUq-(b*8Tw%?N2~&8i2?hWT5beoSngsv96{b_#;>@ zB6E|%jEemN&I~m>kyK&Mj3JAWa3H-Uo*5J+8d^-hNDBbZDc^?(6q;(l*tLkL3-D?2 z;E*;&DTiUPv>^mlOXx2ssg0v+3=Xr`*YIj_jaad@TBF*iH~JfmMzc|_6|*42l3IzU z12dWjO>fZ#$P!CJDzk%fGA`sUseqpOPduM1EXK~2H7*Y+m?@KK%VmVpVn?Wg9*n}- zt|`T`9eHcYoYy2^rrIi53Vuh923y;S-787AjA(0HTm&yUTV*SuCP0JssF$7p_=5Th}5mKmGT6QTtWoza)nTM81Es;=%xoE!>QF?Xp1OJZP|Hvh4z~)Ke+JE;8Rolf`SfK9gC5>ZaL|SPm}dxLriu@AkqS38r&w zrp;?(+#Pg-*=L!L5IJxu%}!;pN_+ZM`dGVkMIJ3c(e2xGuhU z&HKHn+{^$@)q40#-;bj2#q04Gg&!1(e^LFjQt7`3&KCZ3@E6N}H1tm8H-@X#-x>Z+ zrS>P2L-ij|4taO{YyPT#7f*ow-cj$Echy_>KK6dr`y`E>2&65{V^UJe3c??<8d3-W z%^g}s1F-1Bx{ONAtdx(ORY(ht9}^f7{Q}B}QiG`l-1!PY#??@@Ww=$BHPw0V+K^dC z0PcD37nH6s|Gbh2U^9F&bw`RD*TWZhWcyZ*lO8(7b^MuAAQJfVmy|BAa5ewDrEi3%$iLSn4eot- z$P1UkWmG-WS7|;vJV({&#c#}!uDq-xAHJge{gcW+2+7AMPM;xt`Hb@4yz&O={TDe~ z=)WP8-on0{uWK`U>$W!Sn`1ba&D|W+&h=Z@*c4xAW0zGrcr5fvXTW73P*?4km%PK# zQnJ28T7LW0!(L_TwXuK!GaD{wv-H~Q+MIg#wl*)lBfU!H`n&J3sZL!S1H5ZCJSPaR zH)*{3%DD@q*MElm%kAs)mxGIoZv-#3uT~cipO~w(PaIyHd!@bHezkq3{bIY*etUUg z?#=o3+>QBnmv1j0pPQenw$HZb=1#SjuD!E7d+pryp|{RoU%7ta`fG2$e*NbBt@+{h zTl4QNpKc$UTbw*G$%-KVe+%6xD@`ZcH&e|N;Zv~}MFq1k+0tS~4LHCZQ`U}YjdJDO z8srwDbUm_0Y(XQ31`sj<0*pmczyt-0?r4`+o0Nzsq0?YMSYNDNj$;%f^z`3#teE7L@fN;?lcX0$AikqpY znBB2jbw|_)s5P#t0Lxm!bxfCb_S2}IsMNVvB^aM55+yUF+Oxib1VN7-f&&m|)$)x)2_11OYqYGh;qwYiruA! zODRZ=N|_*>b_jQAb)P^LKy-r+%Z@e1b%avM?YrKpvrruZMdO&-FmbgNiql4VmE8m6 zB?@YSK5FBdHCjd0bq_o(hoNS07beukP1@imc;y125HVxLcww$1Ci%{G=z~4W0ANkK z9j=x3ExjrWyt{BYs4d@l0u)4wbC!WwWGEJ?0Z@jtwlywid~5TQjfWLW9qd{?mq(J` zm)~`OYhNRlX91!Npm1$&ZagWhS^vVd6ek>s*rQEkDyxvLZ# zU_ima93)xI=b&Enf`m4#)gCNc|F(UJiiWde26K=inSpk&XUp+!xJS+yExCp>)hL^Swh?pEL-{t_H5hl8Dk=V+m4Z%s+6|`2JPX=$^Fdk5ZDy5 zT+IB}$l8-(%P4rVaR(@m%pbu;2Q@<)#RtQL7%v2ched2>aX{S*$^+Bw;H8kD*1rGQ zedzs^T<^8o9iBzdL$e3RK}bm&G1M=39L%$!|80wezHA zX%!|Cwz8+xUOS zzuO7h0=Ya-g~tZ2LHAC}08FNj0w$n0v|-B6lxYMJJ0XZ@h*B;>s-W`f6k3zQ80ZvnyvG`gg`IkHGVVj& z)w`1s?wMu`A!ME9s5$EpZp9>dA!5dES9%W+I0W^056o#68@5QNmoU6o@;iI=2EaiV zL%GjHfR~9qm)>Dfs0-YRfu9(dAwlZ66U2`KjxZVFWq~&2OMqI)wHN@SlpX8r_nmua zzMgn8C?Z0eb`IdxFTB36Uk;lH5l$6)_=N#iUn+JcP{~f3KrgH@^roD|Rf!r+5?*mk=Dn!`4>W z^(Jv45X~B!KG_QgJY+oLE@acflX?LGqMfJ1a#fnOXDq~r_f5F4+XZKNVj6!#G7SJ8| z!7Ne&px;ho>+BQC7L7UCZ$1;gdI&Y z9626eex>+p{@?hezYoq9eiI{_-wg+O| z65o;#W=ifT_t(I^v;d33>GZz=_Y^x@2A2XL z9Xu0BPc|=QOkD00{}bttY?7b{OBSEILURxGKm)Zvw-fpT&LM+=)3Srqmz-JfOc4E_8X#w@(n z=lybON_e#rvn~LS1`>!(krRyxc2ut8T9f79g_k=L4VQIRbavFmhOjI_PgDSHgB<4h z;RU9ZQhwQJ9@7kg3M6(D{s%Z5-cPzC385h*Ni*EriQWq0TT8`X_kZk{{*l4-+srTD z4=dF_4)52#iy25CgGoBbW_~yct%D)PWo!`H_-Sn!KbY0m;4~RT*t^3%gL?#&A@i{C z>ScA&9adpOz?ESb!z6Pb+M;z$13hvAhLW-nST`{YeRww~G-o&|rjr{^HX35nTn}s; zK6Ywsr-QqXtDL1&Hh7@!uzpZ{z=wBxG~SbMi8hx>*WmWSWY-;jc0k$j=ZzT7@qC~A z%MGfY2{dL#46kaO3S4&^RZN|RvH&m|ZxGA_Oxw#+8&)u+Z$%bYj%5(i0RMiv)>>xmZ1Xplpzb2b(?ptqclFi;54FZoOnjpZz1K7>k zx@Ya#H8av^G^4R*v1CbONi!NtwspM4mNn5yVjt@yO5!-l@sXVzTXB*<5})KKk(1Bw zR@GYoknGXSk^F}qiCu@oZlko_p2xxGnIO1%Z zj;Y-(oJ==ssI1|r^QW>`-a5Isu-tfS*?R8$sSVF9+-)q)U7u^rUY(wwo1I=>TzckC zV`+MMZgJt{^quOuu7lGn%QqL7=HA~}n!1}to0^`TU1~I&YHrqAXuMhGZ|eHe;_a!G zRu=ojt^L>$cQMU#YG(S*)bzsa)bi5wLi2iK$z8nmMq_5VaA)P({M=02x!G8lZ7kKA zD|1uLd(Gv>?WyMS^m1crZegLZ4x_f8~rkB!poo<$9Lmn96h}+Gh@Cv8D&DpcQVGP z9eAN~3W4JrqoE3vU2+R7&(xlkS-_ zBBN~l>%opsprR`Kt#iMw?0>H|I$yQ^k;?pY=RftlZ{=Ti-zogQ>HmK5MEIHLKlr&% z4GtE5anLqSnmf!3Dz6G^yE>)Ls&neRk&%xgLw2EIS{X93jF28}n}+GAjN$k;B~eC( zs$_7@X8CBg%13iZDty>>4C5J>_)l2e)%Z}1M}0^=fIK4PVu(kOD!Ad3(G}$T$Z-!ba-=a`R3GY zkeJePpO>(=jJk2CF9pE#!pzG7faKEs)&Oubqup>TpS3 z`e=t!S2MP%pS`m*w=gqzXL`PRXK8VU$$To!TNi$KUDsA=#@F?3>ghZ!aWh)tjWwFf zvRsH8x0br3VPfYn=~cR$yYX~y%gb?^cjo7oi<)-4o|-P=)avgc($4w?ChZxDOZu`b zn$vH0#z1b9_HvfxBV2DOVXYk8AFV9Bxx`wfo&37%2UZLYtBI9HPpfu%QPgVbV#__L zug$7zF`bw1b7f|F;Ey@+fj`Dm<3IcQVF|-s@?-dF-7&N3pXH@lSsrWB#En@rxl0!i zmdCuCxTOhNG6N@We(Nr1-7(wipXKFRclp*G6R7@KUa@t@Or5wf(Z)X&411Z7(b=j9 zIb%J>=fZ-Yi-b+QJ^SJtrhU zMok0;u68A=v2HXY$y>2Rw4&j_V&`HQju#kZ6`H0QQ9R{P)NFxVor*MsHJmhSZ|LHsH&0e_pdx>HfP^xmqde0m?$EyYqY z4rEtUF}=^$eHEn-emzhuPmRI>%1)Hf@=f2`l=fw1W^B5wZ}w!2&34Thq!J0`ma9h(HJW_p9MQb4tWdQX)-K+CWNKyVcKIH*66{@H)sl zq*-gSo1`30B^u^akT04NGRlqGWv80)C)muv=g2AsXU1W+cf#{vgKM!NGL0vVr;LAh zq+^#ksz%RQbH8WXzu|0g{%hwmcIIDZ|EIF|dqc0gzcl>!P5)nQ_=Xw&eq1_VAX7qyWLtVU2hm&0J$YulTX`nCy|ND-7P2j0HjFDm_RHfFLM{sV zqAB!hzG4{92{|C-OQz7H`6?S&A;*QB7IHFQW49~haUo}foX@jQeN48pcZAFeSrqb9 zrqF3A;*)asl#tCr`h+~w*KZg%^8<#leURCD=a7snJBEcG+CZESjX*viOU z^v8LNa~roAYT?92)3AC^oq&#?JqVpVMd7U7nx1twbARn1)ZVmh!f+1m*lD<*H}~)X zXGRV>rsZutF<^TB^N%=Y7>w@iHGU1BX@AeaU=KS zSg()A%#r$^=khP)pIqf% zhTVIy<(&pguk>s$V4Ka}8*ULBb(4*{8F4kM^;wyrVw)Rg+l-(4V_HE z7Ip%jH7Bj9&S5R_BrT7k=!+(vtSI=WW71YB&mgV?)u0xzCg7Zgl0WPPico-iVR?BP zhRS$)gYN}2Rv~ScfUpH&y2gxEN5X4AYACH(h+EMU#zzrGt)!{_<%TAtEedcv3c{Hk zlE%FMFKHfAGkVFFT4htw~*|c zI)hoyEzM`IrYzv7b@x=V4_}{u?4^u`^?4fo)3a}^utU^aE4_QXF)ds7xtWF=^9-En z=FHq&C!52%Hq%U49fg_2+qdVMO<`9E3&L+PFdFycajfQKR8!7IT!dt27R)x9GfQ)N z$KT($ejT>-O2Uu10gE8zJ=l%gbIUO=#A!%dcCkP*njbQ=?CWiyu1B_2z08fqLZdm? ztY{WV$2Juf%XQcw*}2=(HyTqbOY_3am|bBbJVOa`JS2P&_QyS4PrCi|4s=~UNXqf> zTBTo@zTF5G;K{H-7k++$`!^StZl%wa^cjx)t;W5nYxm&t2wx;>as1P?LUBnSs`9Y1 z(44;Bh~)x0;-5t%(7!+%#ta*n`(5vv!nM3wty=4F?5J30GHIQXI&bKXp{w6n-Od#6 z>_uP^H&thfbl2O{OZQT*;f@qxlPq4J;y>K8CM`@y9qIO7UYvoi)0tzjBY^IdeH{)` zK14A|DLS)Cd^%I=WM37#Wf*g_2|p|7sMMcW}@t0pibQaE*V**ReMBRXuvW0A1Z~!X5xN^CZM2Ru zb`5oDt8@$j7Q;ZqL>PZMtyyV}%M>e#HY+!cvDoVJ9pd0M!r_?J`w$Uv*!d~uyX#f% zszv+_u%CX=k1gi|e{9Dd_!C}m^81V90ME8c&}iLVZ{7W~gt<&fliFC`x7fk!pQ_z* zuKMbLufD`?;W=Ny+#UAZZC-fA3-@{M6P|m~bHB*0;3O+&U!BnOaZS%?dIajZ$22{z z>1j>J*iI>bkH<#XI`3sSTQ|HypLNQ5%sOo0rJ!`#c z32%ARslW*Hff@D%DjW)|a5%8T4S^Gm1a3GQWWtSz=Es6;SP1;E7zAMygkcG8beX>j ze^vf!bu;YYub01m{sw|vI2h!EzF;UA4mJcM!Dz5C7z+wPF^GavP!4KAC8!2HL2u9> z3L*{* zK+{mDUx==P1(FFCkM02g!QahU=>&F3)vdtQ?DF1SzD_&&8~}4WSh^G~ z{v3SkoA6IzO1Fv;*dk_dswzVZ)RA69w_w|u(Hm(MV9?HmnS6%oyT0pNu();k12<*C zx64o1R|4URzbr4UWYwJ@quK7xAR>5Pt>eJ-l~+p+3&P}=S_?Z+*tMDb1PvgJdzF>f z0TXsI%BOMsi8zV8Q(7;HL1!dRg3Z1pp;LnEC(L#y4{Mr!mgMfiQ6?L!syXTo)#%Pf zhfT6c!qN@GI3ZzYN~6awk7T4fy{>ZN3vXUO-jEcx@J=1-mU9XSe>4-`5hf`8Kr`V1 zDNudQgO`4&TS7D8btt#!X(oK~kcDGT1`^*b`Y_5{4}oTdCqAL(bSDov&6rLe@|rW9 zJQP%4JAtBRPA5K*=1wOMB{kR%R#rpphl(0*KU5Xam9%U%HPU|QQ9xEwpI!w&E`8`z zW9^52HQs(0P=I9w!C@2!72LTv2HfaN<$!^y7-b6YyFZzlaXCtP{@ z6OUf(>WMG{z}27^=A6yiCyaeUd~!j~-tL9Hj)+=Z*z`K396r54uYJf1`q!b zIq!(z%Pl5elH5=*WPbv-*s$~Y*e{M%sb`qPhV3uoWjSAuy{fw4RlKagvcHL!?fi1= z)vLXF>o^6r{cCtR&TqwD{o1P^FDG#9-@(gu{$Z!r0A9$<>>uKlasFxSHK1dOS0>2V z|0Q0Y^DjERBtb9m?0<<@*7-NFS6uk8o(;1>*8X4d@|}Mld&Py%;pGRu{U>+@&PPRn z;uhn=7wdi)1cCjo^1{&hsn{znd0bS&|bN&NGC zqatGS!XD=<7J@ed=tSH(&qD1d$Y}~g5SYly z$s&;p^aoQ)V^|^wl^FGKRC<>>z;_+>3B2(Y#C37o$s`i$iGgStM1~@)zRl=7SXBpQ z94O^Yy#`68idp6Wy<|Wri=bCM^3XupDswU^MeC*XDp|QAgMIWNL4v9}BtdHHrNZK+ z&KiW2DoF8)ZggH9mcR(3yJn~~Zow(boR`)`$KH!PzR_b0rF{pnhr2RfO9%PPZFSz2I$cN zM(dHyx`@1c>v36%Y;9r(0^r`4xJRjbpN=?2#CtkGe-faS2I$uT#tHDbxHbbxh%zDc z7dcRMz90jSI-ktm^>TDUT>#1agfx$=G7R-3gV4F&JaYO9OI$0u#&jgt+ak1Xubpkd zzxth!AX%%!N-PH<$3#-?JR!W%={nb_muY?`*iQ4HD*ZIW!VHh4>C?DPM59a*MDJcN)Qxi)@H-lso-|u#7#ICm>n< zY{h_IQjj0Pi6wAbN~m3s0Fo-uS`k+&Kq%=ih74P6u~Xry=51bFgtd8o;re2<>iO#4 zaw1XcH?X}Nu8 z`JQ!q`YnNn7T>qBxU_P6YWXITlbeh4vujwdj^>}P!`AF9n&1n|36rhUz0H;?By20# zQgi4*yw$;!g4yfdh3&n#)Wv9$PWgZzo#cT(#Now>IE3W|2>#_~dH*Jf_g*u2ZV+7Bp;v|f@#XJ!)8axrjr?)<@jXeijs^G zB214IvTt1$abV~@?uYFidYCzuLJJLcv&y%}?0pUk61YHqRFLiLfsApW*Z07*01XPl zEP=9t3oy*eIegm|n6504I^?yIrTl=aX=q%4UPX}U;bY@78f+JWfrvu1M+uFdQe$>6 zv8a}BO4cA_kfOJfG@T5C6l)u4&*G+bYSIwLbL_Y+DSVF;=!Q9w10M)1&!_+qa{4sJ z$sXwdCy~Ab-i*Bu+8i3DSGv+pRKSTO>Vh70$Lu1Bwu?JX%u-gb;xABI=VVSd3SoNy z83I`IvoX4m)&f=^c>1}ACtKeMS0gLiZwcm`o9rXbaap4P3IqDn!_v;_sJA1fgvHY; z+o=7lb2(#8D8?ltV3AZeN9@RPa^~q=*%SpRUUHyL`n((lBZ+LDX}x5fPVH_hHR(s) zJt7-7IG5^CkUV}SVC{yenno*X8Q%_70Cv; zT_*6x>^WE~?k2n8%q6bfz4G9yE+q(0G-V8-jOFnSGmgwT72|j9?zyID_3pOMxz5x3 zGaohCRQ;hk=6=QU{cl=s_)FGo?$fp^d={NG0FrdPPIMiZL2jWILI(yi z#k&)*Yk_Y>*}y<-hAP8Wb zvSm;qld@%#Ya``;)8*IwC4=m`e&X1{!Uu#*Yss+cx~+aF13{g|L98PN(sq)8jpau@ zRuyyIyde%{qpq2xh6|4_vRlzd*)xIfp3vin8?&&;LlnXOw@V$J=%6~dY<<`KP1pVx znNOR}zxMtpoB3hshrQnCw!iNFyY0Vg`rq66c{BXGlmFvb?(3I|h3{T+jK5}@x6JQ> z8dRg|u$ohM)lZx1tET!nQ~iRezGjIDe2f=JxQ)_vjt#~3T zS#y|x{e_)|@tPF-&e#PH>3N==N3O7Jbe~-=f!Uh9HP0y5n0o`d za(m8H*@4GdfZExOXJ3}f*psiwW&7EhTxJhHCYQILe2R;|vAJy8{@A_uLmxeS4EoZY z8uZ$oB6Rul<`pg6hhl?%FGI zxjbvh<)u%VI?VK^%uh4;8oB1rm@{&H`){}uXg@t`;!7sm@@i$?M4Qq3s7G6s2L z>>bl6E`8Jd7MHiaC}H0*U&tE8PnZ(>ljdt|guY-(%rBZ_t}Whok$4n2M7>XA#w zFP)e=`Rs|OPh386`OwqHUpjKMc%*o|c<$=6hn_j~?D31oUpsmI;}Bqt73C@yPiv zm{ZrUU7vZ^Y`kmE9lde=wd=26KYR7e)t9rUufG1SdHm@4ZzICCCWY4pM0+JkUm8J5 zAsfI7i&BeiGXHIh@YGpTY0Nab={vTB$4`LuRyKZ++s-JiBo`-@wrSG*F3G1}Zkj5K zQOU&fTvE}^$V;qvtZ_VPDBe?;sESs2E1Bd;G&M~c6~w0Jc|FRJKQv4WNmzCjB-;v% zQokhS^;m?a*`=GblQOdmG*U0#5pATCW$&sLPg|O(F;r7Bl#MJ%Px=fmK7$K=3>6)o zX?^L26)C#wl|+%0wGMw|EY8yJLTNAEwwhSJ?rP%b(a+daS13f>XX45TwpL!DR9Wuj zsyn3I$RAsCO3N$r{XjHVt-#m2Zs{-j{fet%1%?7H5t!2Sg-|?X^o2K|Tcu2mq)|yk zz`m`%i;Ltf-4%u0xM3)0uDN+;zA+8#8RQ$8E;VKr(aWB~?XKYR?xvfh)ez}%V6=BuNGs-(0cK9n zhqH5n;k&jXO6>h=w+)LHa`({KbyrXHR zv>GlPt;!l79NXKv4w(1)@a=x=g-ELdrEV-WuaYt)cqKPs&!*cNyD@& zmq1f3K;^pySf2Dg`eCZw&FxGJ9@%<#($9Xh2sCYPM-J_j@Yp0C?OfVlK|2)rfq-9@ zeEZ~@7Ox$Gbk@bjS0#8m8100zKr`xgCE5NpE?RqiYG(PZUHA8b$2v2=q80pG6=;s# zCw$934CugB1)%hR_{*tbf_8zM2}3zMw*Wr@RDE+JtmV}s4{*TPZbCdZb*TW<2;b5N zXeTVmw4DWEye8GLwL#XjdyCO6W)s#Hzss^hs!<>%YQK?IyGhu)i}QTrpyRcj1zYOt z&NmirEZ=+}H%62UvZ6)6C$w~LJp)6X0Q`=;Wkh)|u=l>S;;UP}SxkMF8n+ioxmni6 z6uLj!6!sqbr6A;ZwCKH`@r8$DEOE7bbJnl>(ZODVE)f4y>))ZD6y#QUi z>@}q2d{0RE{?)NtZPy$~y;@FK<+wAww7jy^SPhlW-dSnh)TLY_2kEElcMQ7Cm8H9= zjvy^rZn(OrjkP%Y7F?eBw%wC9q;UBz*Y?2DoBGGewj*x5pGQ0HgTVXuu~Lx$^Vi6E z>?YQ+G|oP1##6EGH&gRWsIdWySQ69)w|^j-zM6I@-IH#^Nn}cI4m1(;h)&RT5m==` z;y$+;cz++T{ZJE$Ri~Iq#+laoC$@r-ZOtqFEH>uv$!cP0Wu7T?ei3sSQ%x2cjh=3= zco71ta~)}ymVzZ9{shb=Gk)&XBA1)+J7C7zMpEs?3c7XG2 z8okPG-};g;8`zv)(igAi7v&k&!Ui^tj&%fWSmhtG{;KJG*!sL_ZMN=MUpB4xc@eld z=WFb-RnYeR!8!rhFzWyS*fDcux9+Flkz(L%AFTUb$Ts2chj!jLek8QoA}NtRS!4DF zrm0H9mrSR2Ec1Zr?3l`$z^~He}=uP zmLi-vjuZh5Z*9Z|uq1bVBZ$Y~oD2T1q)k_dQHYEHecv%PWElBa-5s$vIv``UeTYCj z-?Vo)dlQEc+ZP3pvJ}y#e83ZQY{Zx<`Xq)Uw0Ppe0fBzK+D;P78AVAz1HVWBdnR=+ zdKY0~-Xi&a4Gb1v(9%})wnz{QG)+AVV_u`kqW6&%GG^q=rsRYEF>U+IF>-xXP|!u* zRo%t@g}|->m+3s5I1j|qlX+X(VI;oO?XWR!hfU5_i9sXS6lA9Z%v+bjjy^(hH`|Xm zhsDJg6CZ#hvAZFH1q+Bykv9>E!I zUswstyaC^;M0-QfTSX(Ej~)rd6ph@Wc9AdVE76`X3?l%Wx{XnlD4;9>KL>OtBJ5~C z!eGoa6pVZ}kEoLBd(i=T7BeOVL&`Ggi6K--Wqu&5vx?GSk~p~0++losAF`rr}b zURdY5i0cZ*Nq;~_Bp5Nnc>N9Wa6$lpHgQJCCcOz;En@TOx`0uo zwryFz7MZItyDF##k}yvmiJGfq*a8pGc5QAvCQvPM_GOGab~C8}R-0OF$A^%NcLjpU zc!${mUdb{q;-hB0?-Z&Jtx5@u1GF!nVZFZ-GUC#`qEBPTr~OVC0ualO*@v7xd{F~o zR^VX*3vodKINH*VrGfder5%eh^F5l;IIl?~{X1MftnvOG4oDQm@J@%z+Zy)|yO1vn zv<$*PF6I05P)Ee~~$ z7tymQ+V#Pjs^T?>DI8tY!4O-V7~nx(2NOGS>`^@uUE@fi-c~b@D~x{_?;8bL(LLL= zLNGq)7crnw7Q6_?vb(66v_;A_kagYfLgQcH&)cd`%D`hh^tBQlSBNlmw)MfTNv;)Q zRkrn^A1Pbxn8YJ5_yz|1fCiP$F-&`kPKvzH4cc7KbzaA+ny1x`(H%$lN_}%w^lBJE z>Kk|&UEPlMHR~fv?D|MrtE$tLR({NqR-hN#T22#M9yV&9z9iDgL%;bP)FK8e|VE2U+j?a5|~xObXFv`#cV@UfzCOi zMkvr*JEi0C5(dRo7D0pWp*@mw@#ag?bKyqOni$izq(m>M z<86#eucU)eh)-bXOpJqV#OWx)6`2jC1X^Q`Gz{mpBOspEdPlkY7>z^ z^k}R6qW(n5MB#z?1_Y2^=Je$<6gd7|93r*qQMyK1!15n6)mEDCqb3WTf)mNh zb?W0Ib|0X998MQyslj(*F+ngV$QlxW7!w5JlAZ}z{cj_IkDG^lyL(P|^fHfbz{*c1 zJeFq}mS^OUp=VU=L7e1{sSP(5=o>>T5Nu{u=2AD>?lU4wGPGll2|;Ua7Gp=RC^92XV=m&%f)-7qq_GK{<|4BZlFf(t79y7VJ7>c8)PVTJX)h z;-iPWjsBc09eC%bj%ci#0$Bl0cppVRUS!rvr*S>=fiv43;{(-+Vui^SjWwjR#L&NS zdpoQ0Hku9lWhBFpAgV=p>h(+8yLPrn*XS<3o{T3+?K&D8lk1LwdM@`F0jSFR*NIM7 zP`gOsOXhH^WKs|kTe~pm*Yk(TL@xHIWzl?J+$69R_rarW~_d_weo#;e|=Bj1@3-XXCYke z43Pm*>iZc9!3vKMSxhG){8QLgLcta6wE|aT{It0xQzbjIzIO!UbD5l3-^ZGsUP4E& zg4PtHbHFL-Kv?Uh&+TW(!zg3)2+Nkuwjvkz)KQ1gg|9%X;QXw)i-{n^9|jg_AC~^U z(;sHr^+l~!CW&pLkl@=Vj<8%ppBiASc|dBGp+cvMIiQ}*4eegXBpxfG0#4M5JYO~E zWzF0Z*2pX5k7YRdRs0Iy?tz}LZI6+qdfBgx**8Ry!Y{`;hJ9FzD@)()$-DV-{h+;D zUmvNUE7cPedT6mDzH=bx>-B3CtcYV#+7az(6rzLR6rim*f!@5Q6L?NvNgzTKI_g2? z>s0`j)qZrPdV^9;^u55d=Yt#-E4MzU8Y)zxV;Y1(ULD|_{G53!?pobT^=xcpkk6dg z2rz>;$zWOP0ELReEGx&?S1Kql)NH*D^fPK%38Hg zYSdj;b&$&af_a67!;#MZz#hTRj@joODX_=)$F@i^qfiuNGvl#bAFI&!TxXc>$_{~& zI5-}$JF1^?wze8ol=bw+AxB!v{C&iPd{oFCYU)u_*+6j#Sg=O-*pc~YK_3lZp-@Ws z@llCBXWHB{yqf9}e7|IlwHl}M!(~8~K|Nkl4aK90jOLYSoUcHX%0J4Ga{r}howW5r z+)$6otxWYYWxMK7`pD!~FKI2U@0chc^G!OmM|;?19Cl<(q9NJp46=NHSwnxPHSHXq z@2R7!MkLfPsGyt;;i5BwDu(cR&?Pxxe8n_=y9L?}@KnJ<|?FumVZ z$NZ03h49PPt=yklcHtucc0u1V$7#5(n9`@o0EY^gkxamF%2^X3#B{KM1`Hw#j?&Eg zau0kLV|Xrn0RfZJ@ZfNPD}fi%_iX|UMx&dEuD=0|X2ABQglpXkEJhwv^XOv!9HZx& zeSHS*b+_O=wO_79L?ZdAVRl<&w}ceC%q=U;+72|F^EMk?_}=&7b?0K9YhvMfFn(Ip zCrrR6j+0nwToXWV%wqjXSYrkxt*|mm+prpe$_sUDQBX=CxrP{;fsF~-ZZz=L!|jPFV>0*YleQ4f`B!9l&dl*M%N7b2*xi3>`m9e zCNVkFfdI9Ut)OCkl#I+gwk%bF9%2=9n4QH8Gi*~)G{7hT5F5+N=|f4F!HB4x(w?K; zVGhUPG!C3wdXHdo^qrn7!ONUzo7k5=6kZnS!{wE0&AHioZG=j9cj`h@#8B{onUy7Q z0ALL|Kn@8belYdZCWMf>>ckVzN>>DpN@y%~8+l7b?up6xSmKk5B?L)gNNy;0E9u#W zl&T53fX=td56t-7;w&%@5s^NicX!~^MTIEt!E}HJ{bX=?&`&zhgMMmVZhjg=x$^2f zb{1JQeoDCzEd+9O%RcbzCpKwiTv454f7cqoWeK5|dv@}9Wc5BwIE`?*v41Vw42DST zpvaC(b#k*3%NT|C(uh7o0F7wAiWT{1f&VGFtQfb)(%K;gJDC$4afM48IWL+`}RW_iBQ0uW5vP z#%9-+!4faX_N;A`O14psLZb}Iy&|ak5&4`)<#YZ;Q`9)F2s`1b@WL*OqSbRkUXYdJ ztdQq@$c&I@1I)Q!0xxg8C?}&lQ^f7VLM}#-w}reUsrxy)il(2`w7)`0CaUnXo)EGkWS2nax60jL zHw91MTZNhRYi18jr(ZX#aG3V?zzEte0rm;GFbJEbrwV^%$A*Goj@>v-J3n^)7&!IA zuS2bqTelhZ_!ibE_K~Z=*X`>sVVlDKf%$?w{B83&dHNmG<>KtTc^LZWVeZ{cr(JaF zjy8xGJUPeFPT|DPni0OfbJECdICV_m;hWvfa@l=qS}uFeotI1ftZ2XGo<8?9m;8nc z#{i0NcF#cTPmp5%@KfUQ^pkSmIE{Ou|3wr{Zyc!^QU5D&pidUYjp)tidAtWHo!qs< zD4lwSqp4na6f%7Xa!u~uF)uCXu*|4sA6Nu$y;Hf&V-#`YPN{+C^&GH?m95%hZH!2Y^XIVj|j zM<9nDKW0=;j&3w6r^WZewIQSO>|>!(xxAMcS9U|5+YhROZL}jmrBa z#;=)=_ZgMnFdygs`cD+caF3nC`)*Sd7v^I@{7ieWcl*cs{EHwY|VhJPfqm9Mx z2m$n)7!oGND$AW-K_^bMzuf7_QYgwG7hef=sSRb|BE^=syF;V8X-XE2aSzq)t8vMx zgTAgJgwie=sO)PLvyE5~H(eOH=zA&&WIevcuyKlLMn$3~fjvK^=}RMFip&;*(-NfX zwum6&?}0XsEhfvBoYLyTNi)f@ zP#sH0`y}AvhvB5xt}pdsGdZuRwRI_9UYWbBPocwmxp7|3psTLqc6Dzh4%Q8YF2;@* zr|fid%#Hx9=Z*SegGPJcr`Mv3plh6Sh{-^{vOfLor`sQ zhS%h!=-@<|vo}%ZY{n=5fk#Uk?g1Fz7Mxek5NbULwl^`@+=k>v@v47zg|#@q=c(Jx z-eeyDXpzIJ=5C|!Iei--9!TCb7M?4Kg=fsOa(+~@)eN<{=j0(Z^E{Yr6S_|@OteA; zuA8D^^%+?$JQb#cHwgGN-LPutSF(vsHm}2L{JS>3f6g%21l<~HbZgQE?*ZW2LY=0N zQq2qS^s!tZp9bd}*OwP*t?q`vJ_D$)G8oA=_K#Nq1hmXY@J~qs6cUNXR7K)Yh82eaE)Bsv#08y#+ z0$L7JbGPrzuSH&h)?9T)7m)0E-Jk#C0%f*J1Ng0t=D!bAvqDRXzC@SJ>#Vj%etU7Y zG1R&fyUJ)o#NU1lrEHG3eOK|JT3=zK(bo=?x+dS_x<2~QydTT5^Mus91yt%&y1Y9ft8L0v11lF6HPhK0~&&A~Rwgjo$&b~b&tt#o(_YgEL^X3PH>@ZLLpuAVvseW+K zE`!w%DrUEZ=PeH?W|#5jweP4qq2VVZO@ib_39cgF|WRTt?PXat*8B~op^^i^YlB2%bjA|*A3dyyC0bSs_y-euwDK8 zfko}^m+7alZc)3s=-QU=crD)DJz`ts?%s9ns(@V|X=l(z`D3*Oy}p=VKD1tdmSwKq zwr?`BCfbr6Xn$tS4n%%DW+#(eJGMA?;QKe+$0t?Tcp(0NV>>c)&%LR3#aiX=C{U-0 zfZvLl2(Es7-GJ746exWBB*b73l_azj1UjvWrIG|oTbz+6l-?7^AN@?ywZaOF0c^3} zu#Q>L5L+u0I`{{6!w_>5C946lKMsRGLOG1?wrx*eNoK~zGxN&Y+f{la8)y1R7LFiU6*=Zm3t zOuxSXE<^;SMU1|GSmWvC_<9^f4*|9k(kD4K(um#<#qJ6yl(znW1+0dk;(_&d6Lh+m z_i+V)Yeerm4#*oHyRz8^0M$yuuC$JGg=c69R#9?$TO;NV06>?=j2WZedB|JY=uPUS zqL(!Iy%j`t1o4s}uV@&&3-n4-Ar6>gF=>uqOa1bO7%f)u-q*Jn!5~0@6@K$s60S@%*m#iflkg#${0Hb$*H2ZQXK&* zYR7HGnV%G!Tm=+ZRAQFN1zV@<+~E@`OamFmx1q1H2y_{!hq+N>N6FB|vb%ulEZ}fb zd}Mnlo}fE{WyC!)pYGhI)Ig`x z3OT)@20NXkey^*cPA3U9uZBCFB-AyH{e2eOiIm);VQa1&Y*0u#-I`@=z? zUxS-aS@D9wO_=zu0UN`pcY=WCgaFQ;kncOwK2a51q{~s7`bRouAtP!WfP2F&fOodk z(J#PS7?0@M1QR@BAeLigE1dt(8eR$ESJ9y0EM45)PWM0qegWo&D3KJy=xVsb-w_{< zE77-6vaM3G{RhGW{?Gwzx9>O*4EF{g=yszIwtIiQ5bg?g2N}fTVShN8+vQJ+n*e+Z z-NJRuB#YF%fU)i0Hl4qtQN6SqdR$V_k^C+wKv)jLv`Iyjj5Hpl2((KYHi|E$3I-3C za51Fj<2vpJ9d}PK5^U%RM}xh=o}O@@=*bkyaT_gji&5-d;l|uXK#w^yzmd$waFr=y zXRuKqz|oaZG>;0EPzJ0rKte8+3dZ!uF`K^~1NoEtv4!t|XN#LV7i_~s`w;lT(O_SV znPUv3U`?N!(#N?e{qd|4pQ{40xG0@T3?lQ2Tkmny{-Ja>ubyu^VV?c>Rcw*{4;UHc zXyFdevh#-m&x{XH`EQl;-(iktBG{}pOJ|mGpulMd>3zAP5!~9nR#9S~4MdKm#73KT zbmNl_WR}z5@lOIV#_u(ZwWAef)+5xyz^IL2J=DjHCO~6KD}%Xc$k92NE9zxA=YY{s z?UYp0ls;i9%z4GR7=r)a#giPCUKDt$Wuq;o?`UDAb4pxd$A}uaYTf;zW&d4Zxc`OyudK}XyuXq6{;2l4`;U4K`u}&27rxW` z`AqKf8|=cDHYnq;ImV&Gy{eyshYzWv>Tz{Uy}(hyj~b5|&ly)SV1-360dgoqFjZKV zgCbSsyb{hr=D6VuHVVaHVKxV-BZ`3>oQ8m^X9kT-jvofX0VdPP0Sn0&ZKF^CfYB!q zjvb%_j7fonZ5Ogr$Zj$*4hq>Nx~vC;2ynsJ=5oN&R*$vLro)&US$TLDt3wc(^Ss@qYEb=o#F3ICLAx{Z8DP&ymBBdg;d6k}J zj1)0{I9g=T-5})oV%4w)wsNe8T^T?UXxlye9+AuDefzn1n>Jw-)_a5_RK4u}v2i0; zDn~}HT&@Cq*~4MGeLbABJ7o45x$)f$OA{RYk=wGF!<)BGK(>$YxPzliay#X2l5WMnWD*>gb+AV>wVN;=wsb&x;_bPSHy zz&Fk^PC#3i6Ucy0Ax01AJY1loNP&^}%elCi3&WVL6jc)(`0(T>>4^n7ZK5s9T3qlF zIk6VLs%9pNdwj0q=Q%MvN6y*&kixigBJ^ZShxI2F9{NhbiDldvuBis%u=ta8b8} zZ#|LTY6;%`q;)@%T&`uhgf@$%mzW$|h%M!`q-5gP;uHNv8B%GLMr2Yg`O|%5b|a}I zvc-&wxp1wztt-?^WNJS-=~&oA9EIdi1I4>#U|mA3A6v-u-o-yDNA@peC|XjNTDF^d z2#5JEdHXlTI8Nue$7xS$jSN#AVu-&O-hNNJES*g5W(QMSTToAS=J&g>yLjM_)#n3$ z%*?5On`;Zt$r1@RTsAs@-kIV1SXJ?I9{d!ntHPf3 zFvl*KYZEQeh~;-@v~DgZoXx{6}ueHaI|8V!zGSa>~c8A5sO_8mpNv! z%i%mnEp|CP$8n2Y4o`68A`Y#0Lc3n!;Kfx=7dU>gE80~x((Ujh$1rwJg5(3#NN3PZI1S+P4x825RE?}>V~|ij2hKUb2=&PANGoY?%~ocbT5y)YqU>o zCZ7AmUheVB@2Blz8E83g0dEL{Cao zrjw8v^f>77r(i{xu%))b#)UVHLP@Nxp44G)tiUm7{D)GypJ!{^ulf&JS8mz=z|1@U z#QeU>{HgWntoO;>>+b)|NsNDzdo}!T^8eh*eZSOeY%q72=Tr$rsO{>AI$<0%9yg8| zCyg`gZP>r_hv|Qmp<0?5vZ3dU0ol;AIoF$cpHm3fy!+^2a9RrLjIvQL$VNTS7TfIW z>xYi_=Fu$}=>SupoSO-8|8`cwS77Tl6nC+;0oXu)x01l&9OyP$+epH{fuR?Z3db^|@#YVQyMeB}bf&6-&lrC{2Yxcr`gQWr}Xrg=1T>>5kgpGr2 z-!v8MGBL$QxWMV-B-s9CIh024_Od2w`+^yENerbn!F_`sKQTQo7Jc=`tai4s&}hyz zPu`rKTWBM8dlToY=|beG#_}}h&QH6~+z|}v8X)nS%~s*c;;qKQ@%j118I3&a)6b_m zbki=+U|JWWdu<&z*^sp@Ew{`Wmo-YaYhBbVAjOrG#a=M^G=t=svT=V~8{NH4X6Y8I zcSb5GTZvVOSH0m{Z9w>8xZI#)-POY0t^wl4265M-Z@YGKYYp43va-r1EZah9+{Z5J z8ffWyc+m%8Lu~IWb1uT1&SihcyUM_Kh=hcjiR1F)7zzx{GRW4zV|#fRBGv-Nc@F2bQWt zYVfgioUPsNa&X!lmLa=zCF6efAnnHcqX#u$5Yy7K6KwBdWyclpmsa)R5Wn@dSZ$2S zkBKVj29LZ4I7f0+TfTdp9kq8c$y@$&0bs1R+(nxg>1?mBMt!x*S4W*;t7`4>)ox#H z_09fE7YO3%Q^V+(98226>P}suluF$b%b* zf*}&hU{awN4&(>(15tTIpIA?s%!%A!FmMXML2KbsV;&h~<>TfCiDKpkBW!8O`D`pq zg(xAG5L*bRhbttL1kEFl>g6FLE}oFAIEQkAYcLq};DF@}h1d{5R25?dIaw&)p9Bt VtC@63mquTGO;>}f-P33F{{yIrevSYD literal 0 HcmV?d00001 diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/51/0x000000000000000000000000000000000000000000000000000000000000000b b/crates/sui-framework-snapshot/bytecode_snapshot/51/0x000000000000000000000000000000000000000000000000000000000000000b new file mode 100644 index 0000000000000000000000000000000000000000..6beace7cdccd22c1f8300f4c93c06eaa981d824a GIT binary patch literal 19772 zcmdsfX^wbFNA>hE_e{?Wrg7f@iy%k>1Art*fBDFVHii`_jW zv9{#(N-KH2wxzXYtyi+7)p~ubr9bi!{hRo zss32}L*aZ^ebd(e%74fHZm{3`x54$`@8tf#%6&D=7rqe+c8OPb#9!hsi?XPSNwFXf zh_m7u@vOKgu87x|kc@GMF@<-*V$8wgTa0@S6RyJ?{ zCXSyt$(gkzi*WaaC1xEfmY6(O7fdaVm6=_dl){nrDf2>kIXznW;*ymRnj1ihglnVdBiv zLJ;@?w>9H}Thh@CUoO)H+xPKi3L)A?6nAuyYbJ=oLyQFvo+2N735#nK&ZN#MEwtvg z$%>N?kG8odxPrgHbq+5)rVOENEs&M#GM6KrNrmq`eRHj(u(Z|%lne?E5=($ebIb8V zK{O^E6-YTtuJb&N;MzqhD2V$GDyg-w({wgcAPlA3^ujbTpJ@CD zfwriwNXf00)`PK?ZfEsDd}s4fym3A5w^m#IRz3~u#;x9V_p!XR+1Uul$q2?@+U&-i z2OB2Ut@uHw*YCFaoy`q#^>Xg@_yZGu<^6c0@7}oo`MBLjLH3O;qOfoGyPb^()hCh~ za{o?R=B3t_d*{PTn;ZT3!@j=rcq@LrwH{aQZlQijWp8#n?bsyp?ruHkwpL@LvG2w0 z>#Z%TwYr+a)7*$ZX!faT4!*i^ucunQcBfh2^kZi=ZgXXYpoM^Z3Jzu#=&Zgrf)uO_BPjJ8LxNxDqi2}KUOg{ z-g~#Zx!%10xF7ed2XWuW(@g6TkU!0~=g-0V-3VZ@j1+I@{^=k_xUPFxbFIy&os#Sm+>^I%$h~GrzG( zL)2PpzTaBgj_pk|c3$#oqR;G2GltGqtNp0;AhxzPKPYc)-(Tyro9}kx_zQ6}p{;h! zoQS*4caw>dlxBD1_09L=VsCqEYqQ&rsZD4_PbY2etOotfK1!$fwZ|HBYNPjV-1Yj& zr0B$;Oy`Hw?>=s#yS)B~&2}7&fR z@mYiuAT*Ucrj)$lIll0$$SR4z_HZV8PFV2mNcyZG5yvCtJ3ivwl8S60 zQSj_3&zhIVJvk_QNorHJV>KuXByz??paLB@$TRu*DlD23l;?QDvpwlqB_3&%W8>S2 zTwh0?FQ_!%_GL*%zB-9&3WYMI_E)2_rKbY;Qr%d9~j>Tx!;8+@z?7q#l4l<=;_xSl}CFZNZ zeCL+n;2lhTallb95(A11Cjgp;H?A?!N6f5P|p;|$&q8K;E>Psn=dc~9yz8)Mf5Op z6-Hev5Luqhv9^e7A>IWXiU;Ndbq2@46kN0pAqcZQm*GJ7lf(Gd=5{}>&{o#%)Ao!b zp#8Ab*=TlF-OSU|v=t(-=hL~=p`Ctn!;AY5o9*phe{Y!Ja2k=n7jJE@by_YR zJY6awkE0^V-F$||#X&X5El5Ioo7>%XY$q=dlOijDyjcn4$Jy6MX~9UQJsX>Cf3v&C zI8)TeZm%PA0Sp?ZMquedo70PY#R__;Rc?nog+~3?97tjE4zO2fGzBfOzLIM#SwxYi;oq?nBj%W*LAL9;|l zXpuq}Xct?ig|iQ9iq)~i*d_4oY|;hYIAkYQ^WjWmA+ag!fUF8BicJ)Xj2*b1=o;iAWxd(X`jESS^ptUrJPzdVaA%V;2 z@CCzy7%I+#4+4mJQE?U(h+OH>E}}t)GF&V@q{V*(S*W+R%nxr)5!8g-#nsh2#6aHI zxV_!6RxaIkSF-acm+YF?lY^+Zz%ymqr!|lYpeCYjl`Bd34&X_08>#zTMi|iZ@mhVdUwXx^=(Z%MXrM zbCS*sKh191!XBE51Tlz>5Q8oKz2?UD`tVSA+HpOf2so5_=h+Uy!yMh?DZ#MFG-4`^ z7(MT^L|z*AD1MxgnX|u{RxQncGPC8wcU%u9YG`- zly`(|Zy2%(h?m_~+sI`*dtwkX?1HUi3iW+Tm*~oGb zo^W!nLZ~tVp2kUSWK9>IM5eRQ@yhg)lXi8GzRmpE$(9wesQ2S;4{X97a-p-iWirTb znUw;W$*cf~f#&UQ#qnD6{^sVIZ+wuxn)hQT@kfDqlX!*jgur}6g+WC6-HqFE=Y0~s z3`0}t#_w%+x{wmzhggbGNSkrj=|Z%|dd;Qpq%-n8EGP5~<}*q8Irz;&vNy@VmVL9J#fsq{w>glJc5(L$xym@%i&Pc{NlU1{v6Q&pPEJ^9fq8~`P zZW7vA?WOUC8}60UoOTpn+7W0f;iW;C(#4?{Qvi*63YWd~_D3#6x>g>>BX{d(rL~(%NtXBsMl3_V~xeS%Np&>qp$WrOPSFkm>xS z^1P+N)R>>8GieaaEFFPhj=%&7bwnH!E7oOk2HyhjBVr7Pvbx}jm&Hq-ctZp@0r@E$ z-y#&BLP`ku=fy>F2*JGrsC5XK2VrZCWY8<#^ z<&$^|V#H((Wh-I1gtic`_hME9nUg468Q1cx6Kp{iRmqVJ#|s?#UXmvr1JRpq3v964 zGr-6BqCA)rlL3fvsk8sM}@jTPJu8%y`+CgBCoio})^k_9bvZsL0YB)t$OR z5s*8)M+>CGv+NBl!h9#~~!}aDOCn+?SU_xFUkgU_>E(9H_`a&k7F$ly*?Q zxEP)S4Z0fi08+@GmsucS5dg3B}HuD$CVlML+%VIwBhh+<3-OsH3VCp=V_FR51?HIg@A1%eU?J|M^-uzg!JP$^Cmr$}wF6{LMgVZa_k z)Dvz2Pl%^P7$$H4E%u|PGcv~_Ai&}PK8{WgR?CSC*bN|R(QZ4gTwk2fHSGQ@j7|gO z0LbczV^wUWm`(T;5YGu~#92ac97&V}CQ4|^6hwWS*^uc0Ul2(8^+Eh z!>N!nF*D2fehB%TBz=B}!VZ&j1db@waLS2Aa;;(oOTd~dBV*Z^hF={;&URRZ!0hCF zg~QD$0dB#o<_Gi|4@>l#Ez-f~obtzTW=?qHP-#x(CUeu?7%%Z+HLTXWDR0uNPL(mN z0stXN-XvWceI`V32;Pu{!F~V@F+K!9RR}rVcSuGy50rmKzewsp8(IPl#)RTY-{?S$ z27JYR1+6JGkx8i0L}nk940=Z*F`7iYFyO|e41oirhyWyZVZ?MC=L9*7LY2F8i0Tqa z=BW;_kcrYpN{+kv?E4m!YTeaT%Xf?LNJC+?e5q=$)>{2Mu*~Lw;RX+hG`&=ZHxzs8 z?T2yuQM0wN+Du3w87D$PmQ=N=P6NzzyuID+LTlH22yC<2>uj{+Cg9Qb!>6eKK1%QR z39!~gHAwovOzk&BUkd{qHbKK(Q_Y)dEqt7dDL3A=jC6Y?7fF2ta#ZtxH$DqMGrLIo`3imsZS^BN@t>!w(LZtgk zYEanKxZ>bD9quO-ftlo!z|*F&nNIJ=1UDyp{71R~zOpz=|8e?5*uVa7hS~Rs&lKW# zvP@5y7gnW^Q`WS#&$EsZ=5|mliv`-&fc_JI2rU!o=dg(h8G?bru}?c%;axiC!6S%y zi7mbW0B*2}4?NB=3|cRX$cU>5u&;+WK|B}wF|ZFshENrFc`veYo*nS9?y*Zir{qP> z84vohGvfhl4)V&P zN$ERP--T)mmJ?{n_#BudpA=rG2nzA$We6=8yk$>79an=Q%zQ=xlwn~|#xVqeBg&Ck z4a6jzYZd#8|M{%x`AI=N&EG~|vh0Dyb8%1s2DfYJz?jpF;>4od?@*Uml|g^uOH=?q zLI(%l882BOfq7ycr;3P(ZzpoM{!1swopm;t4yzF;nFfGp;bvH}KW z(5TSXa*R}^5iv~j)anW;U7jO>YYbu#pE?~dkv|UIMdA1fbY;H4#3@*(SrbQ=!4T~~ z3@Jh8N|;)*T8Ceq7z>y^y-fVdtSB(&q?ly7TC1P}dWKKYt6n43wO-hNfL@CyPtj{> zVUb?TOEgn;W7Z@%J!{O(o~^-hjJwrx1y*M>kXJ2tc>*PP!Q4EX4+^k5s8nm!dQh!a zr>CpM$;$NP^we}|-^}#*^z6ZWAy=5HmX6L;C#t10mQ4m;z)y&=ftSN>3@o%yGa3Pg zQ*vPt06I;4meGBXd6f$S@LLEngdm1TgA5EbG#1z~NpArsu`@Fo6X;}Yu*#`o!@|PB ze}S!@?9zzq!fu5;5a90M-yB1Lc!j;$#0W*KAZjP+A7-zq5pi);dG3M#hLXf+QAY9t zQwNSO$-&Tqm4ki;CMO6?YA-FC6~ijPNBNLV#7@hy#J)^Jgr!!Xnba5PCbZr(3k^o4 z;D_y5QliO<_)5@#p(V>XbP#$>4%Ifbl}v$ik5t^G;V{f!VZ|snE@g%XJJmadLHPA} z{eIk?+VwqZp;jKm-8I%h32&L$rsbhVy8XD^$laaxV?q*=h2B~46Rff_G?``(KbA(Pmnz*7iPiHK8i^_(C@T6 zTgC>X2@boB&VW&jPgW7>gfTpF&&;?9>ZnxhwE?Ymc-E4Qv*e)&rC`jy+aFTQ-mf?_@Ssrl6NkuTcYz%~Fp zJ4#+*9ZEOLgLq>bK0v~67Ip?(r#h=jp11&}9%+Ctn@@bu8SB3};3ol{27wz`u)~Al zZwNRQShvb4Vsl5V>;exea(7W)S2b`X)=H39CjjaMc3$TJ3C_zUwVzNQ*wqm)Z%39q zYOL6R_@*H;kRI&3%k%P*@A(ppYc=rH6<_k4hT)ysg&YGc!kOhe%kqx82SLEdADqnK z%1%HilLl@IIC2QHmT;(ncbK_L1x7fJVC)7l0@+9obeBM4$FIvVH8l)|orw&~kVbg8 zK+;Fvja=Zg0NyxYFJxpP#FH0@S%%LC-US4gm~!YNh()){V8*U_E}6=eBm@o+`Yz1+ z0^czJ8SL_oLe_C$<(D(UM&s>4=La&fM-g@n<3JP{q@$j6Y9Tfu? zl?dfCz8jSS&xege6`~NL%5b1u@J{0`%Wet0WDfWXg{f#vJ&SYFmm>_MRJNymfzFLg zl`BA~A>mY@U>Sp`J@&YW((Wfv;ujG8+ zD_;f$S+6C(z*SeljrahN+>utfY8qBd*VL_a&}Cy6qz=NF|p){i4_@E zo;^G)0s5b;p34eVMm;UmQ*umV4e2W^*X0~#2i6LC7Tk)UoOh}}AT|<#<2Gn_c;-Md zx`72Ns1ad#2{X<@_M{T3P>a9=!bz>t7V!4;Q}> z{MV>`6LdK`vJr`U6>!!}u$eVy||{6n!{9L8;ubK*7edGUdGEPj!TZ*cL~x%dvZ zein7WrblpS72R0GLmI^iyeIM0@QmY`f@B8EDOfpzeTOVC1DqCe0hEVK;<|{01(qzp zKZa)-PaV&KU@)0wPT66)M6!d&AscYt*9_AMz947ZS#tAX0255f3-gi{7XwzB6KrfL zku%Es0#>P@mKSITY|(D|0)ZjlqWsuT!sd~&KV_49kcv4AgCZDf0ULp#76mkcYO~LI zkhLD=@{FyKk=HYt^cSy_;^Ga`SllF4#Wm7Ve5wj*|1%y?+s~eCGXCJ?VJ4p6e}IV# zle0`*zX93xCyv7TD-fQT_!d6~_iyrx=*QFV9EQ8i7n$|f_(O;=7wO47D$oX@$@2X!m?yr(-FKF)LG_zo1cN& zCpdii3}?Bk4ai>kBd^>Qj?5pue1%>wzH*pe+j9%_`jam}c__m_@fznr_|qKpy7Wap zImO0a?9!E@u~+#Fy*}N)La%m@me$znA&M(sSlY*BdHt=o;ck5TGjRVFf2+ot({IpgxBVHsi4HXWG)Yqlp)P`1pm1AHk)*T0O)R7x2tH_^KVdB1j0rHNItcM_ zfnYLI4L863ivNw!X+%!h|WD-<+_5~SSSglLOvyE)+ka; z0Ezl!4!M+ADbk07566WvUBHOa)D=UI8wAOeKs^as@DP?muV6+%YY$^bP}cBZtjL%W z6+k&;GpVZx1to}VT_GxDO3(mKMyQGPID)~K;7!?#Biot=hGId}MuK}X4lf4e^CYgMvP1v2( zD)izSZXc~azPPp3g&4Rx^|Z)KYb_`>Rx3N>(iA%lNmJ7C9i)lE>%(>&ukNJ2nHbyc z)}1~5#+-Hc>g7*hp!(#^Irm;-4H)mbKlh|5Yj&e9HEFE^`Ji4&j3@`nsl>$9xu480 zJGpcB(c$G~1V2fyO;_3Di_ZvQ5r#IfF{x@2`fy$^)~%*}ifI}B-M|9(iRuhu z2GCh%bohVWHh1KXr;Y2LUx+vAgmY!O6?^7KY{_Xq}#2e?v}J*(#xy6 zZminI=zF!0;(yr|;cjjB9^!&4tN}7K@FT9UdIbF?(kqfhR|8+=ne~BbHlIS`*_XScSeu-N@!^NM5RP_}u z{tRBfz{LRw034FCur_t^Z=^zI1o@C}L69*nFd6u9rwguYT&n8Cf+voKpLHe@qiq0Z zUc;e3KLP_3ih(g&_%bXqcsS>laL*Dq7lFr;(J#J>+y6o_f^2>$&^Sg(?dgIg9^2XDj=$=5_~mdJbrBr4Lxd_YdS8yoFAsMb)*;4 zK6V>`(G{kKg}CE{l9Q$a9p@v0#szwY84z5Ac`qpTLs^0A5n(|+Lf{41@*=Q-Ke|AZ z-w7v7@a4LE1Hp#^4O$%*P2i=v{0ssQLN6kHHw@JySZTdjmk$uQ484Q&y|9Ep6s;OC zQex~jRXV_6@^A&U!1ZF!LU+q3oR=l~(+n0CNfAcF(KuPTVB7$n>*6nXlfyUtapK)u+S48;-%+d;!UfiAw{tP zgER`y1%Ve7m6-`DaKaS~o0CT)&MH!Z3{yZK6_~!dqHgSnuqi@eu@&>h@ND=7^ezGQ zaA%at_ewgNil%*Efa;k5x-L|V7GzKT#3&(_A$GKUSP60d P?e)X9xaaRm(?!C{R_x}C%Z%@DPzLs^fzu)--@Atefj(j7^5zAMW?b!R= z{Wb6IH~qh^#&iEn?TtTR|Ds#`B`;^WR%j{9iY(i*a^mvD<%=s2mlnfzupCD@wsMqK zwuPx}+twG>HqLuuEWL81dST=0`u5UVYk6gL{e`7BTALeN-i6K8?enYK!OH3@OPhqR z=*!F7FFKd6t_A!{y~3;OTgw+)OT;O4o&8}%&cZtBZq@~s^*evy_}1U~(K{rTE@iGP zjYGGz{~XIwUSvh8tYTY5Hf^LUh9c{>*oo9_vG!v-bVA+q)ZmdUQD#r*N)X$T9XXLi z7`m0@plig1Wz7u%5>$$y7fkz?y_<=nJ#u2gR1n#y_BZOu^c zRJ&@sb`m4fR4>;p*^O^fvPU`IrO?`;#opn!V&$$Lwy1YE{EymyBRiyMMAqRG2V*O; z51**_rIL=3ggd3$L#pvK)%f+PB;8J_ZXs1EO;y?{m9=B41ycEGDu2gR-`uIJM@gmA zRC>o$e{-i)&yvbcQ`w}7x_y}PiS^b_sa~M-lti~<6)^pJ&Zo5hP47hbRex{vk9{5g6aP2u{Le&w;VV(D`16r%)m2f|)TEkH zdl)B*OjV2{##Xj`+m5&$*Rvd7TRIop9wNZ?sKK~MiO?|fgrv1*Tw$+aPX<>b2r)+@ zaW`Xej|JkMj>QaY>Pv;itQ3lrFgk==?H(nj+Sd^Gejm3zI7pt(gjKSfy~87x&X4)F zr*)}T7puH$T&#iGfLIe&6RS}js1_^Ds#_^n;!3_!sN^bMMOR9dTD4wPp6@GP*}2G8 zf#tg**Njtp#&UALi4tjooz%~FBZsf-lNh8CpLRGNy`R1-qB2V=!iA{H&pA2cqCi9| zd5Smn@a(_}B!*JCfPW?{)%HfR5Ja8HPh4qW&d({To_aadBFiICcxE5U3zWBT!N}#X zZJ%1c;+h@6Axs>JDj%+3%eSvoP7pU^`>iSl2A#2dCmDYvL*78FQQ%^ZNRa^oRFX zGQPOEaXG88y}Gh%b^Yd<^@sOoreC6lvG`><7WyNUF0V3mW{tbBe8pLBy_(xN|5EG1 zw!3v@ZFSq-maY%CUt5xfLYw&N>dMmg#?tEgdTXT}!eh+C3G;AhA5)3V1Z*F(v9-*vOq*nx3&}FF66d%q zN$`-l+a?up64%U_zArOtk~_-4PCRAHoaqPRS8~eLw!d%Z#5?TqMz%_Hnfgqwl7;yB zwvSgBhSZ)26$TNemy0odW0q7N zPAFn(t7>8%EQq^Nq%4&m9I|Y;nMbPIIV0okU}Q|bie=+j5-Vrdt6Drqs)$`}PgrHK zrbkAxMoXiWk;-tz4jYv)tc8t|A9`WEQVHv&YM2Y%aIB)jW~o^jD;2__(okivGFV~? z(CM^*JeG+9iO*E%w5JUbx#H^}z&oN|#4{q7j%2FHW)o(DGy~GI=!9#Gw6|d)iH@*O zzcYtPPRkv~$xCr0VYYJ8=y+0annLCbS&N7G5iWC*)TSG(2xkI-?WABa+Y=5kqf_a+ z{K?H$D}DfZvbnyz_Q=LcOP_5mU%YM_SYBCai{)Bd7PHE~xODz?q|Zw0waPV~ms+p) zi0@{P`0h*gws#NtmDbkw=Emzwt;<)oU)L*}8&^sfDS3&V#}+|L6c`u}$$#{P)^;bv z6lf|bwIyD}6w%r=+mwq1gsy4%(mGAw@>jRg67o3KS{KRX#nrVHhg3Q8d8M@#c6|%R zd3l4zJw~?lHSYGF6kc^9>_9 zorq2iIciz;heI=C#f}OcFE`0fku9WT?RlZoh+Qc`=C@viOY^}6F`_3~>;cwN1ORh(*M)(Bp1w=TLgg@!Oq(-6vJ6@lcog^_L) z&+myRGkD{hN@jL1cU;9WxzTgX#8_rx6h^EwG3N%tyvM>@zWHnH)=ih4xbiF*fN47) z#Yq%e^D=*@M4Hg2!hEOOC-gy=-Kp}FP&MBmkw=zTY9Nxi-Wlk`gjvv&d ze$;(JQrpvqPegc(-c}wse4+t!bgC4&hgIWXTnG!o*m^j0H*(ika1C zXs7&7cQ+->hm&O8=CDX3iEQOMEhZt0vvxxGPX-Q4RyM#tDZMATiWeOy)eY5zhUD{M zE-5n1p`g&6Ajbs3Li15BDa9;1G(nC~N3tm24iV!>dM&AR%AU{a83m?sh{@}Q>+)!{(+Z$L$nofk37 z4%sYuYexf{m96nGOKA64U~^1hIl>Dp%wt>UTo&&lBUz2xN!>1y!7j4Aoh7S6KE$lH zRMH@L7$bXvnM|fKn-#vTWId~FJI9Vr zCLjf?Q4YtPEQkZfY9wPSvSRC7_h&l|&Sb{z@sB9yOX@RP|FZiN%KhJRUk$vEmVUk9 z|Gly2b6?)|(<=N2x)_T;~D-@d{R-9Kc_S+`oZS|=#(o3m2$EhMV4YACXtknnulpZ%tMa}>>f!KSLV zD@Rq@_h^ti;8{7=$09I&%QuHuAycKtK~*Y&*41La5psZLS?__iSntjk#Clh1JzX?kYbDCCth1G>SeMws zV69f`mUUOdV%k-tIb*IoB<^)%zH-;B z(stvWRSw^p@0`Ru`q&}NW2eM?=rG$*``lw*MMcj`WJUNXvkOdXStPb$Ti_m(C zXm#6!Z`7bYLQ@668$(HNVj5HBI$_3B43ZQj->wJe z!QC8+CJqt0o>ZnlI$KQ3IJ-rfAm)fHgS7CTa_nw7-B_}bPV4FfouqQkO5M@`dcf?` zea;=UYs_@R+-)iq4Cpg2Dzle&9KWJ`4i4HCA(u`^aUtV#b<+(|p|2@`A~H{M(3xBI z-$fChI7|sd?1YgM9f;VWP>SQ9IL-duoB#-s(oYT!6m>G4MpYsL{EGRaFX=$>X!nBd zB}Uq#rkkmsU!;!G?`iKtmk~|^OtsRSQ{qTYnqv-A)mRQ3(y~nP3^(abPmZ#4ewBX} zGL=(mx=So4J?Y3Al8a&q%eBALQ;bd%%r67-D*?oEKad6IaDXPCbXN2m-AitpH55ri?L31Pa&7J+dQYYL?j@qLtLt1KnA?fmqgS?9H`d)pH&AUbL$h`~)SMA%AsQq~b zlE%gjw=B`LjxIu{ao^bm(Ms#e#@6aKH#%D_PAJolm#=PY%U92NWwq~%vpN_`w=S=4 zSH(!1+97qh$1kO@OZ@fiQtP!VtDCK*?bXZVy?ps*2cUgdS1$Kh>)UlX6E!6tSvtS5 zacPM>wy$pO+SwbHB*yAW>qg;lfC(>2`pe6km$0sEu3l&v4@0hY32)=(tg^Z;*IY|$ ztDWxXJ*15}E#1hj&2pT~Qh4X2*5iA9W4+bBU^7x;$=sBc)>b*1-MG?P&zPzAg3Mpr z*ro+>+;*7WaW`J&O0aCCKyR;B zQlB=xObSm%$Kp$&AlOMIT9ps(gW?%wxQ>Rjmwu;x3(Dh zh17%bZ>Sq=BhwA#DV>(H?0nl;!);4iHs@y&(n@)oD^*I&5ys4!*D zoivt;SGP8Md2+{l+I;8QR+`nl#5K+RZd~HB$GzzvE7UCf+nw8IhbNA|(+NJ;VCK)^ zFfVgO9hcmF%AeyGQU@+M5|O{I>K5u$99GyIRj@9}>h%_@(93>h)X#7F`8S=XocBBL z;3h!)UUVK+FZq>mXTv$cjXZ*`=G zT-@$Z9W`gqIdjqt`#5i`a;PEaSkevb?>WGjrcY9bTt=u`fgAIT5Y{BeVsga9^`ysX zlANY-(M) zdDG~$#Y7L#BeJYp5APJ+E@wtm9vk(|Wu7a4oKLFEPUTuFr)>lS4d*BW`a#Dd|C}zo)2J(-xm{ zJQj}!@u&$M*Zafq(B2cf?tvh7BUk@Ck;1X067LFkm2^@~YPER4I0we{7i@8b14&&@ z`b#dC6+t|RD_0AhJ^DHKQJ+sJkC#_7F_K1D4+}}t{XgWayue9h`EXng%hX%f%D2Wt zdLtU@-VVe=VL2MA$E9#2EKTV*qf#73We)xGap3+1D(V zCf5!@>U|5TxD-i?8PUxsDGd8 z=iG154;`+UfSGdolXf@|*V7FWY+vTI!bcNL|*@BR@kGCk@?QgAXJ){+So?kei2 zmP{)5M`X7xpAcquT;xKhSab)%QJq9W!U6piA$&BROsRN0^rEq3Pno06`EWeh8;>a> zj`#8iqyOv=boiJ!8W zhhVDVa5!VCs&T?p-%{eD&Am(o&$OB98TVm7mRqBKrlNOYs$WoHBg{|f3-CwIZ9zBs z6QYJG3mk5;qY5JhQ(j1j`98I|CIy8b#`;JJUJp9|2O(+rSmTxs{kn2ZtOg5ToAM#f;({fD^v zxS%3jFbo$|gbV(?oSw)hJ=wzrjV`b0qmlIffc~%$EE*AhfMU^*;Rk;{9DyH(=+T}e zW5OA2D$4}=@Mn8C171j`4Oax2v_aptEp6Zmq|H9V6(Wen^iKkq&yTplj2BVpyohWvxW;xsRGnxNb`sB+oF)801%tnD{jn#$7rXG4Zc=WRTzPFvvgdFo+a^ znCNGaZ*mFQWspJ?M+L-$bWgV&eQTRVzR!q^k>r4|h}UKjL`KRY*Cdjw=yZx1;Ofh= z9y!OAj>zP}o}2@>EYWf@nKJ$LOpTMe?ixPJ!Xle`r1PN5JgAum=b*lqcOs8V%zQF0 zlWbCel^%~26RFyxZ+B02vzO%u7cG+5Vfk?onMJbLL6^dpgvlYJ)t85%7q`(^upz0V z$GC=4%uaG~NG+o(J=k%d&rW%6O6<8pf|(@>N~j`|}-evVGMR zhq|Jv6dkGva zoE#h1t5gFgjZ2c_?j`AFnJ;3v0L8cD_9(s7d(z)9d;LzgLCOXL(YSx?_}wL>Nj0L@~8l3utX??4DvXt6iUfm4MeAmvnm9X`)nppM6c)mR66`T zNOiZ6w4Fl$dx%y6+NDX%*e(>4yE-{Uog7da2wkrz`ULIjvZjioa`zV3CcHGE|5i6# zNHw8(2`tK>1QJhi)a`b%MzC3KRMd zl>4oo1d;T8JcWdp@dKm84dHZIm-eO2O1P#@MFxaI`N*s6woBr!MsyR}>ljrrSkx&* zF6yj)4K>jdc3EPvMBXWu5J@824HI7~a@vUxpeS945zfU{?2Dh-Ltc z946y3b<6NLiLT2S+ZuWW^_A4`lngUfE~4O&({e)|aJ_v9+d-Ge;aY!h?CYcMo!w+P zeUglscieli9hrZk2w{LWLAlD>I;Wp0cvKd{OeSawz&N5QFymgpjTVRr=Tbiv*#(cg zec3cVb1RuRG8Lo2U?-)92WW>)z!mTh`QdM%>Y3N8xCD(kg~UW>zcJ~=b4m&CqL zRt_F6h7^51ESp+Jzb^2eFG` z8VyTy67pKVrw~aeMLir8mJA1dAQe3&6M-t_^dt%&O?q!>kTX^oLkBkD1#;BA2fm7%i7nGe(Jq z)@UnLcI*8xj||s2VIm{!wN#tR*KLx6JI!%+#CemeQO?QbaskSSg&c~CV4&n0(E`{w zm!5M4bKzVx7tiJA3UkG|(p-7Y`g%T7IYI>tJ+1>z^0SIbdd&TR{eLO%|91YV_Wu#! zhR>p?^pgmNUkBXqcY+^t^1sI#_=mA=HIx9`_NaYo=BB_lkII0p^w58C(T1{i ziw;m-j@X7p3z)eIv|3Kis-^@>Yt6x-VA)_m!LJUFMBMWZZhK^mJe{GMV>we+&2sh+xB%TI1k9jIgTrE#CwGfA zFgPUElqJxH;pSko(imy_jasAFC^gEBfGw8Ss5Y9-p(YC#&j8&7&*q`G2$aC(4q0#u zH$c6ynCd~jrJy(NsU?Nr3uM%pi|w{Y?`IF>jhzJ}6m06xJHWTLTdvuˈp`w;Dcw~u(su6h5*!rk&2tjk=>$W8Ef3H+7; zuluhn0TCS>9ikgH=Xzt*clUDXAT}b~ZV!@%)ez7^6;0Q2J!XkjZZLH-XA7tf zx#DmpSF*|+mX%a(g7teb;m{A|)DRo?z=3q`k;Ifz>(JAoBzk;-tttz!NE8&o`hthZeJ8F}{Mq1D7X|I+JG? zmnW*(92&|lvLBZxYS^8CUR<7N8A~QTxV%EYm*Dbb3nnVxMu{7|BFiS$*C=~mgUdsL zLkA)&yWuo+17zM;wt6P7efGYeP|mNbk9+#J{NGpZ*TUZ}dEY<$F9!T?9C|+Y8;3t) zhre~p|6)f!a=qOBmajlpDcWB^FZ-mZ8~Vop0rL`o9g}QD@y&cLV@=-(2$R! zH2XgLrL{L{bglUxO*$Lbz(CeTD$#?_N(Z~TE(_4y0OX{GG<$U79DFQJoIbJ z%$gEfjhQSuI<=nBsf}d#IigeRYu^ftwk->Iqf;9Po)r&jD~}#+VIZAPOAY4J zUnIKds(y`mPV8S$23KhPN;=(I_j%mvJrrOZhve4Xu~D(TD{rjZ3&uJT7bWRE`I1<7 z7L0XA!Fb+ZHc=j^80)XAswnbWzpAP-nOk2}19h=~S`A2LtUsfg=KIg8rup7rKE-=I zwJr~vukTYJ2l4&50&9rwDBBo%HZNQ;|nz zjCFXwv3^9&9&o%l#d`UUJH^`N+$Glj)cQ-xG1|eGQtL0YKR?m7-@N-C%X&*Cla}=tjrk#Ce%hGJ z33dN4hY1|UNsQ076CF(suvU3vljYHzF%Pb9;C}oKQ5b&WjjNbTAEx12oxdb_#H~x` zFt?5QYWPmv?|DOfKB}9B(aA-CS7Kad`z9g8hz%3WuN|#x*zww+hRWZ zEGsVig%7cevFxj`hy7~!E}VZ=ZHv#>)iN7%=aqAlmh*E;%)e&LpI7IuT6*^7O;J3) zxQKb-WrU@EufK-*6KWC5eTV-f>c{8bLx8vP3f1s_Qr$ z@ZI1AVt>Bl`yNMp2T@+a5_?4GgmqoK%r^T9o{WYtoW~} zdrw$}v5%Tqh1pY5Okw_2DW;H|k{k=KhEHP^e?UFztGM`MihB8_FQ`XOSRYU)-%=;< zS-5!Sr8C=S!-Wqi@58DTEL?ibTX^BI3yT-dY&`W~@IiI*sl}(xytw${nRsD+@zUax ziyP0apSg7A$uk>E8_z$zxN-jJGlL7m3rnr~!V8NpE#4O_w;l*i1y|2LH~Grhm(RX) z@rlLOnbzXu!oh{t&OSf+J?i8e=iWHGdG?{;;o#n2B_p2doiQ4n|kp*$kZx+ zs48;elzMyqkcw*D*>mWRaAT8$hhNBvR%3*YaFcJ8Dv4s8sek*!Zs);Px$RCaR@qO82BDjY&(w zPPS5$v_Ujf+C}~tqJDi{CTUy~2aHrZXX9x)s<&cxPi4B!EJv;_(rWFHSh~5VSv~dW zq>>7QyC$)86E_c8BT?lry5H3_2wnAqV*JJ`}Le3h<>|^EhTnJ zA#;?)^RR?y>q-zi8Z;Mr+LXCPW4udP`X6m@*=}`O&yh+X%GQpkw~O|+sE@ZvM%rqo zJ}#vZs}n}Hut1PQy*{lTHwA{`Fmvh%sJe2EGA@3So&@}pD*FMOKH-lx+f$=K^PQ?_ z6R`mc&>~?6c6egh#*_{xFwMkdgi~@N%@7Wkm}Web{f6t;0g*NQGKESG$``e6B7#id zuqH2F?Q%g6%2&>?3Nd7Kh>x2l*&{q)TP}&Qc1ShDYc{+A&7ZTpwscDA@aTeWX!b3v;J!<*_%d*0ZluUPL=Aj z6eLbF&xKN=HYM(r{r#V`;eGAixz(bTZ#vk6z4v{mg^31#+Q~bYW{T=7vbS-*sc&i+ zM(Szz&Q7Vh$&+5qSWos5;szx#1Ry}h9aK+wL|9gM+pr5!BvyxF!rCbw0MCp@fht|o z{YE;chKP%-p*uT~Os0Na13{BZN0yI#NST*yk|B0peB_T~8xe<`pvuS&Qt6Sl1t38{ zSSt9y5zx3=J0#7FOCFOdXb1mm@#_882V6)~w1p<3Su)Sk_uv-F3u|kSiXQydsZ2fpI-gS; zm#?6eyuO`1we)R44)N(!fqX$;>ft4(Uc^J~VbMWut(a0DZf!5~PQ&usghBKIAFhKs z!~%PGRFs8J@#4_i$35hqYCkMwYWwydh`RnH?0;e+UX>TFZumsXx4}d-F7O!0`qEX= zl@@qFTYG$~cwuc7?(681XD5Xzd?ErwvEE7p`_B%qfl}17qeOX8>oVH%D@&p;KDe_t zr;3v|2r+8%o2~7uo9oxZGg>CorA9lg(Maz}kez2<>%X)kxZ}Hi$T`qHJ11SjPnqlZh$Yj{sp-|Ip9PKq~?!{I*AO10|-TH^Yx-}Z*@^k8@xlb z$`ex^gvE_8Dg)P{R%rD0uIqh`gvk192V_hAda#S+G`@p(Usf3+CNKkDAVND~V~SU< zo?lzNAh?(Ht&6SAKPgsb>_#A(CG&#cpBPHh+-j{|1ewLULEhq(x1*R3fWzdrTD;h` z8E?JFt5Qqp1B2#0D803Dx%GAsIMX-8=A>w-j3zfm>h$K&kKyUhAw~4$QvgpkFx&W^ z{`u|Op?*Sx`Z4&o8vua(jFN8$`jbAq*sjqvmq!`=hsTUF=i5O74P1i^VnPSMHhitG zfSuaqrr4p}D?sNqHoGVxgU#xP5Ou!{z*E@WybAfJ2`G{~68Y=ifc@z}i$u9p{(3=1 zqEjb-ppsJuu1tBw@#WsdC-yILz7>f7Tgth`Symrb?uQhwnSDw*ivXDX>wH0vQ;-qh zU*O`3*L>R-dqSq3Ph~DZee=SZx&55vd2j9(Lv>7*-|SqQf(YU%FEx)k6^c7N{fXML z+$$Q~l;mBFRrx)(JX`k=SBTXxMP_lzCxwxF`5oMaSymAp>lEe0Q%){#6?v%dfgGAI ze?%o{F35wTlEPeudPCl@=xE7fqT-oCnk2nWMDr2#QL=penSxGYZ)C!}dW42WaT--> z(Y{7!I<(8rbo8U9^ng1k+TG=86nWxFJ?2izXF+rz!BS1Tv+{{Xo?Ct|+UHUEeWJ%H zA08iXf?YySwL-q4-i=}%sZjlLDppeDu`V|$$v-Xvo7kO(;;vBHDwVD!1IJO+Q3P%em4=}1RqogSaJs(ZS<4;kl@gDF@# zkAj_K7pmZJl_B-GUH)UH*U1Fw(XcYdZkS?WDb@}&A9d-eWhVq(?RH@vPuG`MVXqN% ziqTGlQ9U3p0R7O7+h@Q88r6Eyb6vgtyI7j2;rar3FvW=`t`sL4of;^dG*CqROJ6_} z*U&oV^{#j>5g1@DM&a|Q8xNegoharn-W?9iCo|fBEO_yZL%@18lk5j}HlNJK2jjy* zJb&VHCwkLFAJ>P&!=c_2`|d3PB=hwL9bgX!lLPUg@KDK1=92kZyw^Anj_cpI#TD*N z4#i{P7&@i#Xb|tm71Tm^kA9kK&p7WskJ|QQc!sqJRN3?TbKHCFH{(Y9Ogc~(VC5hy?Qqn@ zDZeY82q)+*pkU9&v-)RLG~1(oI~z_!vvtsMbK&@uW|A0>hoTAKYNPR>`@7U}KAiJJ zEi?!0@ZD*SXg>2Yo4^jeS`&2GVCwyhfZVcz4rrbvJJ3_mfp9oFPzU8GQBbCSCZ3E& z!@)*88qI}6jTmKiWQggD!Q@ChlAi$~<;44pR1oj{zHl-eu7heB#m|oRCAX-29Wd9e zqAx1~N7U}6kEsyFG{Q;XBcA@Uo!^~BFu~DaG!zXtqRHgw>D#0I`sZvI&izF?tRq<_ zVDv!$6Fb}+?`aeFSUeR@CCRw{U+rkh(BJ(HT$GK9ywoo_9_~qQSK*(4sT?&M?~xAIW^BA)*tpSV<1E77XgH0~&(}lY3@L@F-?H;ErVZDpOg$9M0CW|Oo(2Tt z!w(?YdN~>psQy_yoI)n1v^W+|GDP6$FW8I)B-)hw>J;LRN?Fxg!<-co3d!j+Z z<$_Gz3#WVf8+J4Smq+fuw*`0z@({yr!sTy%s52Mr0ozzl1`LM>ee=MC5$xLF^|E=u za5(e8srbN-lfYa!&m0NT?I6<;Rrq%d*YE%wj`nny!^H`Q|E4XThQmk0QQ^Ol08SVc z4%d71Irnjy1fDS*J_-+{lfdWUaESyCVH9SC<8~P?kr>gg)~K>CIN-qI~tffLK#Q50fhR&YeoZ@^Jss2H0;x#GxGgM?Xc&O zP$S=eB^?bZ-8!S;XFH?e%bn36)j+8sHB3xEzN7PC~H2`;rHc&H=yh!1W)m7q5j5tJB6F zecFAbFUQ<8DI8Kfh(It+@CHq;F^D2Rc_=P`hm435rMdF1ZAtP?&PD~^29U*e(H^0F zA5^c0e)%z;n|49I%9i6@f~;hv&ocvwz@Zpk?7^_Q>`ZtY`5GGJs}u2}WAX^G7@!h) zC*-Ru$g6ZKXC8UYqtcS&$E#?#Am;9gi{O|*W!d}}B#&0YWRaTk>T)777Ahx?k+Tu< zyhaQ*Eia%Gwt3!hFA)?Em}>cHk9BG%Z(#??6UmeA6(N$WO7gHQK+NP^6x*Z17uS)V z76c*i1yYs>LqTqqQfqNQkr3G*NGlVpQD1a^B%}hh_epI8}$P-@pr0sqV zfSaKwtdNHly%joqZ4B^|06JB9Tu@_u7+`)}juwW< zm7oU$OtO9qumBVV0}PyyK{919z|R`^F9wT{XJgl_0O%z*Ih}$&`Smiv2PeSgj67m@ z{=7X!@BM&EQNSz{4GMUfMUa!6&rrY=E-2sw0;Xf$bO5vq3YgVR9}3tJ6tFBCQxq`! zpbQ1PhyMCO^%)tbW+TI|5YTfeOrS!~wQ<1ho~zJv13jCSSeAVk#`X6qajeK9w}cA} zEuB~fzdFv?%Dap(DSF+!-z!S=haMaVF{OF3729CmtqN*VhNXG3729SF74-0o|VeOQfyWRWgp0o z9LBOj{vkp3$Ff4U_tHO~Ry?ZG?jN3BH}Xw5tKR9K&H(Q&P2y(9GadwKJQo<|yDF$0qxc8^7<^MZka;Kq;st%d{iZz-&XgOmE% zsLCp{#B`U!7$3zp{L0$yp18sS`Q7atLQbH0$f?BBHYslXBDUdK7Mo38l&C`msG;91 z)PxGPlnR22g$i|EemL!ZSUwQUCPs1?3o^J^kRgW!89Xe=;A26C01GmNSdf9`6@r2z z+4jJ7<2=CS{OQY4vAZH*tumQbnK=QX{HkJ}C>WwlLzEv!A?ogC^$Gy)a2PygUScc26A1L7WqRw9@K;;^+H{CJGI^Vb@zSJv=VcU{v?ZAAyd7VOg#A_WcsWjQ`9suAX7ah zQ#~b9Jtb2;B~v{mljH@NB)7LsCeD&oN~6EaB}kh_`=HTh)I}psyb~Zr(m$pYUWiIs zhb;}PD zm`I#|r08=_Cp3-4D2h=K!+_EA;^I6|)0NBh8FnV$vRKGhq?K;ZWq2)seQAL>EAU+y5^FU#~VK=x(H3#U_FEzePP-5E6e;D&*< zPqH7-rza&IcM}{&^uyYpOAB|GnYoqATQOAhz_)E0{c~;8q^D>a&r9vr=HNeTwQ13w zHmKjFw`q4@)8xk@(x%A|N%S?1^~~F9nq={|nl=ZiKChU=N$^668?sJ+!S?dhki4w` zcW01ySPq6Yyx4`j`~8r2;vDOPyz|oo){n3%ka8VpPGV?(xt*L~VS|AdWGx ztYeHb>lh=>I#v>+ECvrjSjTw&!8%rxpOG4<@td!t;j-+QYahv+fqjcOS%|Vhv2V@X ze$BoubLVRIQE>~0yU98+gJiwVk1D3Q0T&d!mt;YW?c-25WO9hsY~@66mF z{O-!!Va>ifa|bp1p0=CcY<${20j!cMGARH9`C^HDu|&RDB3~@J2?P0JiF~n)eBnVI zhCYv=n~NldR-gkf;Ac@$Pj&+*u+5^MUZ-c-BL_ae?Ex6d=ao(#I?wt1P^!g+uv`qg z3%P~TLV2OGP+h1k3@p?anhS#qLm-z%7DgAw7IrO+FMx@%ey;P{05_J5hkeeGuPWYw z8+Sio^Aoz?az5qwZ+Xw>{v~gg{9CUY|99`d>imC>eO?NPtb&^0;Ex|lL?PW$tkwiU z33`&>BM}58*YtFW=D7{|-4UyvLLmoIt06x$!o3}@1BkE~)7%}8iZSW)a_Te&GjiSr zT*`5sSg~KU*hk<$&hH{BiKZkPKW*3qO*c5e&wAKH#vEygdykk-vCM6yQ?0UGaB9Zf zRp9>7*;~TY>F+7({0Kh^#xnz>Rk4Og#0sOqpvj)R5ex*CTDexL4G&jqwc5z=(D3MR zJ;?ExfYAWwLK&&v{RfW9B2X(hx5r!D3Lzv25)dHb;1Wzc8 zyH9hZI~437F$1fbs)CEAzsWqc<);_;%|mh}69HJHSQT-}`vyQ$P>nY)9SD|!coJfg zNHW4Y?+Ij1;;G)}>3j9F`&6+5qouvL{6fp9TL({OZ^*Y*ox5+R@9?XMnVxR1hHmGF zZL{~w27to!+V%Khcwt z7mm~4Cydv69@O@)`$0o31$3XO&YSX5Ex^^4qWO~i+Ap4qPT|d-u zD0&R)v3zuIkxe*z)v#Pl6lQ^WhU+O&266YY<4xr0t+oeJ&8+Y%sp5*sxvebl-OCvf zVpaYc8z%EZX8brAHyCveo;Ytr1%rnUdBw=$_qlLUpHQ);jpF7B!NQwAj-tBzv`G|6 zb`=`Z+U_=FH-}9#ft(TPud=fjEP`3JY zPKS9TSWYH9Zs)iitCyqGMRtgF#j{(k`K3J51W4)rC0fl#By^P>n`wir>yY(uOo55K zWEpj$f=s= Date: Mon, 24 Jun 2024 11:21:45 -0700 Subject: [PATCH 02/57] Cherry pick 18359 to 1.28.0 (#18386) ## Description Describe the changes or additions included in this PR. ## Test plan How did you test the new or updated feature? --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: --- Cargo.lock | 1 + crates/sui-framework/docs/bridge/committee.md | 38 +++ crates/sui-framework/docs/bridge/message.md | 3 +- .../packages/bridge/sources/committee.move | 9 + .../packages/bridge/sources/message.move | 3 +- crates/sui-framework/published_api.txt | 3 + crates/sui-open-rpc/spec/openrpc.json | 2 +- crates/sui-protocol-config/src/lib.rs | 4 +- ...ocol_config__test__Mainnet_version_52.snap | 275 ++++++++++++++++ ...ocol_config__test__Testnet_version_52.snap | 284 +++++++++++++++++ ...sui_protocol_config__test__version_52.snap | 294 ++++++++++++++++++ ...ests__genesis_config_snapshot_matches.snap | 2 +- ..._populated_genesis_snapshot_matches-2.snap | 30 +- crates/sui/Cargo.toml | 1 + crates/sui/src/validator_commands.rs | 17 + 15 files changed, 946 insertions(+), 20 deletions(-) create mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap create mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap create mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap diff --git a/Cargo.lock b/Cargo.lock index f31dca3a259fc..bdddc02c4fe0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11769,6 +11769,7 @@ dependencies = [ "toml 0.7.4", "tracing", "unescape", + "url", ] [[package]] diff --git a/crates/sui-framework/docs/bridge/committee.md b/crates/sui-framework/docs/bridge/committee.md index 5547592870a1d..06f0c9db7a5ca 100644 --- a/crates/sui-framework/docs/bridge/committee.md +++ b/crates/sui-framework/docs/bridge/committee.md @@ -7,6 +7,7 @@ title: Module `0xb::committee` - [Struct `BlocklistValidatorEvent`](#0xb_committee_BlocklistValidatorEvent) - [Struct `BridgeCommittee`](#0xb_committee_BridgeCommittee) - [Struct `CommitteeUpdateEvent`](#0xb_committee_CommitteeUpdateEvent) +- [Struct `CommitteeMemberUrlUpdateEvent`](#0xb_committee_CommitteeMemberUrlUpdateEvent) - [Struct `CommitteeMember`](#0xb_committee_CommitteeMember) - [Struct `CommitteeMemberRegistration`](#0xb_committee_CommitteeMemberRegistration) - [Constants](#@Constants_0) @@ -137,6 +138,39 @@ title: Module `0xb::committee` + + + + +## Struct `CommitteeMemberUrlUpdateEvent` + + + +
struct CommitteeMemberUrlUpdateEvent has copy, drop
+
+ + + +
+Fields + + +
+
+member: vector<u8> +
+
+ +
+
+new_url: vector<u8> +
+
+ +
+
+ +
@@ -663,6 +697,10 @@ title: Module `0xb::committee` let (_, member) = self.members.get_entry_by_idx_mut(idx); if (member.sui_address == ctx.sender()) { member.http_rest_url = new_url; + emit (CommitteeMemberUrlUpdateEvent { + member: member.bridge_pubkey_bytes, + new_url + }); return }; idx = idx + 1; diff --git a/crates/sui-framework/docs/bridge/message.md b/crates/sui-framework/docs/bridge/message.md index 684821ede7ab6..fdd0e56a30174 100644 --- a/crates/sui-framework/docs/bridge/message.md +++ b/crates/sui-framework/docs/bridge/message.md @@ -622,7 +622,8 @@ Emergency op payload is just a single byte
public fun extract_blocklist_payload(message: &BridgeMessage): Blocklist {
-    // blocklist payload should consist of one byte blocklist type, and list of 33 bytes ecdsa pub keys
+    // blocklist payload should consist of one byte blocklist type, and list of 20 bytes evm addresses
+    // derived from ECDSA public keys
     let mut bcs = bcs::new(message.payload);
     let blocklist_type = bcs.peel_u8();
     let mut address_count = bcs.peel_u8();
diff --git a/crates/sui-framework/packages/bridge/sources/committee.move b/crates/sui-framework/packages/bridge/sources/committee.move
index 74f76bc852243..1e987013be9e8 100644
--- a/crates/sui-framework/packages/bridge/sources/committee.move
+++ b/crates/sui-framework/packages/bridge/sources/committee.move
@@ -53,6 +53,11 @@ module bridge::committee {
         stake_participation_percentage: u64
     }
 
+    public struct CommitteeMemberUrlUpdateEvent has copy, drop {
+        member: vector,
+        new_url: vector,
+    }
+
     public struct CommitteeMember has copy, drop, store {
         /// The Sui Address of the validator
         sui_address: address,
@@ -274,6 +279,10 @@ module bridge::committee {
             let (_, member) = self.members.get_entry_by_idx_mut(idx);
             if (member.sui_address == ctx.sender()) {
                 member.http_rest_url = new_url;
+                emit (CommitteeMemberUrlUpdateEvent {
+                    member: member.bridge_pubkey_bytes,
+                    new_url
+                });
                 return
             };
             idx = idx + 1;
diff --git a/crates/sui-framework/packages/bridge/sources/message.move b/crates/sui-framework/packages/bridge/sources/message.move
index 889eaf09d6e8d..e46d30b0e1aa9 100644
--- a/crates/sui-framework/packages/bridge/sources/message.move
+++ b/crates/sui-framework/packages/bridge/sources/message.move
@@ -124,7 +124,8 @@ module bridge::message {
     }
 
     public fun extract_blocklist_payload(message: &BridgeMessage): Blocklist {
-        // blocklist payload should consist of one byte blocklist type, and list of 33 bytes ecdsa pub keys
+        // blocklist payload should consist of one byte blocklist type, and list of 20 bytes evm addresses
+        // derived from ECDSA public keys
         let mut bcs = bcs::new(message.payload);
         let blocklist_type = bcs.peel_u8();
         let mut address_count = bcs.peel_u8();
diff --git a/crates/sui-framework/published_api.txt b/crates/sui-framework/published_api.txt
index 8b168d86584a8..bb8f32435f51e 100644
--- a/crates/sui-framework/published_api.txt
+++ b/crates/sui-framework/published_api.txt
@@ -3883,6 +3883,9 @@ BridgeCommittee
 CommitteeUpdateEvent
 	public struct
 	0xb::committee
+CommitteeMemberUrlUpdateEvent
+	public struct
+	0xb::committee
 CommitteeMember
 	public struct
 	0xb::committee
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index 1f6237018ce94..fe6f32ad5fc4a 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -1293,7 +1293,7 @@
             "name": "Result",
             "value": {
               "minSupportedProtocolVersion": "1",
-              "maxSupportedProtocolVersion": "51",
+              "maxSupportedProtocolVersion": "52",
               "protocolVersion": "6",
               "featureFlags": {
                 "accept_zklogin_in_multisig": false,
diff --git a/crates/sui-protocol-config/src/lib.rs b/crates/sui-protocol-config/src/lib.rs
index 6f52334fc0bea..51f16a16aca43 100644
--- a/crates/sui-protocol-config/src/lib.rs
+++ b/crates/sui-protocol-config/src/lib.rs
@@ -16,7 +16,7 @@ use tracing::{info, warn};
 
 /// The minimum and maximum protocol versions supported by this build.
 const MIN_PROTOCOL_VERSION: u64 = 1;
-const MAX_PROTOCOL_VERSION: u64 = 51;
+const MAX_PROTOCOL_VERSION: u64 = 52;
 
 // Record history of protocol version allocations here:
 //
@@ -147,6 +147,7 @@ const MAX_PROTOCOL_VERSION: u64 = 51;
 //             Prepose consensus commit prologue in checkpoints.
 //             Set number of leaders per round for Mysticeti commits.
 // Version 51: Switch to DKG V1.
+// Version 52: Emit `CommitteeMemberUrlUpdateEvent` when updating bridge node url.
 
 #[derive(Copy, Clone, Debug, Hash, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
 pub struct ProtocolVersion(u64);
@@ -2419,6 +2420,7 @@ impl ProtocolConfig {
                 51 => {
                     cfg.random_beacon_dkg_version = Some(1);
                 }
+                52 => {}
                 // Use this template when making changes:
                 //
                 //     // modify an existing constant.
diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap
new file mode 100644
index 0000000000000..d55babc9fe610
--- /dev/null
+++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap
@@ -0,0 +1,275 @@
+---
+source: crates/sui-protocol-config/src/lib.rs
+expression: "ProtocolConfig::get_for_version(cur, *chain_id)"
+---
+version: 52
+feature_flags:
+  package_upgrades: true
+  commit_root_state_digest: true
+  advance_epoch_start_time_in_safe_mode: true
+  loaded_child_objects_fixed: true
+  missing_type_is_compatibility_error: true
+  scoring_decision_with_validity_cutoff: true
+  consensus_order_end_of_epoch_last: true
+  disallow_adding_abilities_on_upgrade: true
+  disable_invariant_violation_check_in_swap_loc: true
+  advance_to_highest_supported_protocol_version: true
+  ban_entry_init: true
+  package_digest_hash_module: true
+  disallow_change_struct_type_params_on_upgrade: true
+  no_extraneous_module_bytes: true
+  narwhal_versioned_metadata: true
+  zklogin_auth: true
+  consensus_transaction_ordering: ByGasPrice
+  simplified_unwrap_then_delete: true
+  upgraded_multisig_supported: true
+  txn_base_cost_as_multiplier: true
+  shared_object_deletion: true
+  narwhal_new_leader_election_schedule: true
+  loaded_child_object_format: true
+  enable_jwk_consensus_updates: true
+  end_of_epoch_transaction_supported: true
+  simple_conservation_checks: true
+  loaded_child_object_format_type: true
+  receive_objects: true
+  enable_effects_v2: true
+  narwhal_certificate_v2: true
+  verify_legacy_zklogin_address: true
+  recompute_has_public_transfer_in_execution: true
+  accept_zklogin_in_multisig: true
+  include_consensus_digest_in_prologue: true
+  hardened_otw_check: true
+  allow_receiving_object_id: true
+  enable_coin_deny_list: true
+  enable_group_ops_native_functions: true
+  reject_mutable_random_on_entry_functions: true
+  consensus_network: Tonic
+  zklogin_max_epoch_upper_bound_delta: 30
+  reshare_at_same_initial_version: true
+  resolve_abort_locations_to_package_id: true
+  mysticeti_use_committed_subdag_digest: true
+  fresh_vm_on_framework_upgrade: true
+  mysticeti_num_leaders_per_round: 1
+max_tx_size_bytes: 131072
+max_input_objects: 2048
+max_size_written_objects: 5000000
+max_size_written_objects_system_tx: 50000000
+max_serialized_tx_effects_size_bytes: 524288
+max_serialized_tx_effects_size_bytes_system_tx: 8388608
+max_gas_payment_objects: 256
+max_modules_in_publish: 64
+max_package_dependencies: 32
+max_arguments: 512
+max_type_arguments: 16
+max_type_argument_depth: 16
+max_pure_argument_size: 16384
+max_programmable_tx_commands: 1024
+move_binary_format_version: 6
+min_move_binary_format_version: 6
+binary_module_handles: 100
+binary_struct_handles: 300
+binary_function_handles: 1500
+binary_function_instantiations: 750
+binary_signatures: 1000
+binary_constant_pool: 4000
+binary_identifiers: 10000
+binary_address_identifiers: 100
+binary_struct_defs: 200
+binary_struct_def_instantiations: 100
+binary_function_defs: 1000
+binary_field_handles: 500
+binary_field_instantiations: 250
+binary_friend_decls: 100
+max_move_object_size: 256000
+max_move_package_size: 102400
+max_publish_or_upgrade_per_ptb: 5
+max_tx_gas: 50000000000
+max_gas_price: 100000
+max_gas_computation_bucket: 5000000
+gas_rounding_step: 1000
+max_loop_depth: 5
+max_generic_instantiation_length: 32
+max_function_parameters: 128
+max_basic_blocks: 1024
+max_value_stack_size: 1024
+max_type_nodes: 256
+max_push_size: 10000
+max_struct_definitions: 200
+max_function_definitions: 1000
+max_fields_in_struct: 32
+max_dependency_depth: 100
+max_num_event_emit: 1024
+max_num_new_move_object_ids: 2048
+max_num_new_move_object_ids_system_tx: 32768
+max_num_deleted_move_object_ids: 2048
+max_num_deleted_move_object_ids_system_tx: 32768
+max_num_transferred_move_object_ids: 2048
+max_num_transferred_move_object_ids_system_tx: 32768
+max_event_emit_size: 256000
+max_event_emit_size_total: 65536000
+max_move_vector_len: 262144
+max_move_identifier_len: 128
+max_move_value_depth: 128
+max_back_edges_per_function: 10000
+max_back_edges_per_module: 10000
+max_verifier_meter_ticks_per_function: 16000000
+max_meter_ticks_per_module: 16000000
+max_meter_ticks_per_package: 16000000
+object_runtime_max_num_cached_objects: 1000
+object_runtime_max_num_cached_objects_system_tx: 16000
+object_runtime_max_num_store_entries: 1000
+object_runtime_max_num_store_entries_system_tx: 16000
+base_tx_cost_fixed: 1000
+package_publish_cost_fixed: 1000
+base_tx_cost_per_byte: 0
+package_publish_cost_per_byte: 80
+obj_access_cost_read_per_byte: 15
+obj_access_cost_mutate_per_byte: 40
+obj_access_cost_delete_per_byte: 40
+obj_access_cost_verify_per_byte: 200
+gas_model_version: 8
+obj_data_cost_refundable: 100
+obj_metadata_cost_non_refundable: 50
+storage_rebate_rate: 9900
+storage_fund_reinvest_rate: 500
+reward_slashing_rate: 10000
+storage_gas_price: 76
+max_transactions_per_checkpoint: 10000
+max_checkpoint_size_bytes: 31457280
+buffer_stake_for_protocol_upgrade_bps: 5000
+address_from_bytes_cost_base: 52
+address_to_u256_cost_base: 52
+address_from_u256_cost_base: 52
+dynamic_field_hash_type_and_key_cost_base: 100
+dynamic_field_hash_type_and_key_type_cost_per_byte: 2
+dynamic_field_hash_type_and_key_value_cost_per_byte: 2
+dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2
+dynamic_field_add_child_object_cost_base: 100
+dynamic_field_add_child_object_type_cost_per_byte: 10
+dynamic_field_add_child_object_value_cost_per_byte: 10
+dynamic_field_add_child_object_struct_tag_cost_per_byte: 10
+dynamic_field_borrow_child_object_cost_base: 100
+dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10
+dynamic_field_borrow_child_object_type_cost_per_byte: 10
+dynamic_field_remove_child_object_cost_base: 100
+dynamic_field_remove_child_object_child_cost_per_byte: 2
+dynamic_field_remove_child_object_type_cost_per_byte: 2
+dynamic_field_has_child_object_cost_base: 100
+dynamic_field_has_child_object_with_ty_cost_base: 100
+dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2
+dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2
+event_emit_cost_base: 52
+event_emit_value_size_derivation_cost_per_byte: 2
+event_emit_tag_size_derivation_cost_per_byte: 5
+event_emit_output_cost_per_byte: 10
+object_borrow_uid_cost_base: 52
+object_delete_impl_cost_base: 52
+object_record_new_uid_cost_base: 52
+transfer_transfer_internal_cost_base: 52
+transfer_freeze_object_cost_base: 52
+transfer_share_object_cost_base: 52
+transfer_receive_object_cost_base: 52
+tx_context_derive_id_cost_base: 52
+types_is_one_time_witness_cost_base: 52
+types_is_one_time_witness_type_tag_cost_per_byte: 2
+types_is_one_time_witness_type_cost_per_byte: 2
+validator_validate_metadata_cost_base: 52
+validator_validate_metadata_data_cost_per_byte: 2
+crypto_invalid_arguments_cost: 100
+bls12381_bls12381_min_sig_verify_cost_base: 52
+bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2
+bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2
+bls12381_bls12381_min_pk_verify_cost_base: 52
+bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2
+bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2
+ecdsa_k1_ecrecover_keccak256_cost_base: 52
+ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2
+ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2
+ecdsa_k1_ecrecover_sha256_cost_base: 52
+ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2
+ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2
+ecdsa_k1_decompress_pubkey_cost_base: 52
+ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52
+ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2
+ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2
+ecdsa_k1_secp256k1_verify_sha256_cost_base: 52
+ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2
+ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2
+ecdsa_r1_ecrecover_keccak256_cost_base: 52
+ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2
+ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2
+ecdsa_r1_ecrecover_sha256_cost_base: 52
+ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2
+ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2
+ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52
+ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2
+ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2
+ecdsa_r1_secp256r1_verify_sha256_cost_base: 52
+ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2
+ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2
+ecvrf_ecvrf_verify_cost_base: 52
+ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2
+ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2
+ed25519_ed25519_verify_cost_base: 52
+ed25519_ed25519_verify_msg_cost_per_byte: 2
+ed25519_ed25519_verify_msg_cost_per_block: 2
+groth16_prepare_verifying_key_bls12381_cost_base: 52
+groth16_prepare_verifying_key_bn254_cost_base: 52
+groth16_verify_groth16_proof_internal_bls12381_cost_base: 52
+groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2
+groth16_verify_groth16_proof_internal_bn254_cost_base: 52
+groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2
+groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2
+hash_blake2b256_cost_base: 52
+hash_blake2b256_data_cost_per_byte: 2
+hash_blake2b256_data_cost_per_block: 2
+hash_keccak256_cost_base: 52
+hash_keccak256_data_cost_per_byte: 2
+hash_keccak256_data_cost_per_block: 2
+group_ops_bls12381_decode_scalar_cost: 52
+group_ops_bls12381_decode_g1_cost: 52
+group_ops_bls12381_decode_g2_cost: 52
+group_ops_bls12381_decode_gt_cost: 52
+group_ops_bls12381_scalar_add_cost: 52
+group_ops_bls12381_g1_add_cost: 52
+group_ops_bls12381_g2_add_cost: 52
+group_ops_bls12381_gt_add_cost: 52
+group_ops_bls12381_scalar_sub_cost: 52
+group_ops_bls12381_g1_sub_cost: 52
+group_ops_bls12381_g2_sub_cost: 52
+group_ops_bls12381_gt_sub_cost: 52
+group_ops_bls12381_scalar_mul_cost: 52
+group_ops_bls12381_g1_mul_cost: 52
+group_ops_bls12381_g2_mul_cost: 52
+group_ops_bls12381_gt_mul_cost: 52
+group_ops_bls12381_scalar_div_cost: 52
+group_ops_bls12381_g1_div_cost: 52
+group_ops_bls12381_g2_div_cost: 52
+group_ops_bls12381_gt_div_cost: 52
+group_ops_bls12381_g1_hash_to_base_cost: 52
+group_ops_bls12381_g2_hash_to_base_cost: 52
+group_ops_bls12381_g1_hash_to_cost_per_byte: 2
+group_ops_bls12381_g2_hash_to_cost_per_byte: 2
+group_ops_bls12381_g1_msm_base_cost: 52
+group_ops_bls12381_g2_msm_base_cost: 52
+group_ops_bls12381_g1_msm_base_cost_per_input: 52
+group_ops_bls12381_g2_msm_base_cost_per_input: 52
+group_ops_bls12381_msm_max_len: 32
+group_ops_bls12381_pairing_cost: 52
+hmac_hmac_sha3_256_cost_base: 52
+hmac_hmac_sha3_256_input_cost_per_byte: 2
+hmac_hmac_sha3_256_input_cost_per_block: 2
+check_zklogin_id_cost_base: 200
+check_zklogin_issuer_cost_base: 200
+scoring_decision_mad_divisor: 2.3
+scoring_decision_cutoff_value: 2.5
+execution_version: 3
+consensus_bad_nodes_stake_threshold: 20
+max_jwk_votes_per_validator_per_epoch: 240
+max_age_of_jwk_in_epochs: 1
+random_beacon_reduction_allowed_delta: 800
+random_beacon_dkg_version: 1
+consensus_max_transaction_size_bytes: 262144
+consensus_max_transactions_in_block_bytes: 6291456
+max_deferral_rounds_for_congestion_control: 10
+
diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap
new file mode 100644
index 0000000000000..29ff56e8e2ca1
--- /dev/null
+++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap
@@ -0,0 +1,284 @@
+---
+source: crates/sui-protocol-config/src/lib.rs
+expression: "ProtocolConfig::get_for_version(cur, *chain_id)"
+---
+version: 52
+feature_flags:
+  package_upgrades: true
+  commit_root_state_digest: true
+  advance_epoch_start_time_in_safe_mode: true
+  loaded_child_objects_fixed: true
+  missing_type_is_compatibility_error: true
+  scoring_decision_with_validity_cutoff: true
+  consensus_order_end_of_epoch_last: true
+  disallow_adding_abilities_on_upgrade: true
+  disable_invariant_violation_check_in_swap_loc: true
+  advance_to_highest_supported_protocol_version: true
+  ban_entry_init: true
+  package_digest_hash_module: true
+  disallow_change_struct_type_params_on_upgrade: true
+  no_extraneous_module_bytes: true
+  narwhal_versioned_metadata: true
+  zklogin_auth: true
+  consensus_transaction_ordering: ByGasPrice
+  simplified_unwrap_then_delete: true
+  upgraded_multisig_supported: true
+  txn_base_cost_as_multiplier: true
+  shared_object_deletion: true
+  narwhal_new_leader_election_schedule: true
+  loaded_child_object_format: true
+  enable_jwk_consensus_updates: true
+  end_of_epoch_transaction_supported: true
+  simple_conservation_checks: true
+  loaded_child_object_format_type: true
+  receive_objects: true
+  random_beacon: true
+  bridge: true
+  enable_effects_v2: true
+  narwhal_certificate_v2: true
+  verify_legacy_zklogin_address: true
+  recompute_has_public_transfer_in_execution: true
+  accept_zklogin_in_multisig: true
+  include_consensus_digest_in_prologue: true
+  hardened_otw_check: true
+  allow_receiving_object_id: true
+  enable_coin_deny_list: true
+  enable_group_ops_native_functions: true
+  reject_mutable_random_on_entry_functions: true
+  consensus_choice: Mysticeti
+  consensus_network: Tonic
+  zklogin_max_epoch_upper_bound_delta: 30
+  mysticeti_leader_scoring_and_schedule: true
+  reshare_at_same_initial_version: true
+  resolve_abort_locations_to_package_id: true
+  mysticeti_use_committed_subdag_digest: true
+  fresh_vm_on_framework_upgrade: true
+  mysticeti_num_leaders_per_round: 1
+max_tx_size_bytes: 131072
+max_input_objects: 2048
+max_size_written_objects: 5000000
+max_size_written_objects_system_tx: 50000000
+max_serialized_tx_effects_size_bytes: 524288
+max_serialized_tx_effects_size_bytes_system_tx: 8388608
+max_gas_payment_objects: 256
+max_modules_in_publish: 64
+max_package_dependencies: 32
+max_arguments: 512
+max_type_arguments: 16
+max_type_argument_depth: 16
+max_pure_argument_size: 16384
+max_programmable_tx_commands: 1024
+move_binary_format_version: 6
+min_move_binary_format_version: 6
+binary_module_handles: 100
+binary_struct_handles: 300
+binary_function_handles: 1500
+binary_function_instantiations: 750
+binary_signatures: 1000
+binary_constant_pool: 4000
+binary_identifiers: 10000
+binary_address_identifiers: 100
+binary_struct_defs: 200
+binary_struct_def_instantiations: 100
+binary_function_defs: 1000
+binary_field_handles: 500
+binary_field_instantiations: 250
+binary_friend_decls: 100
+max_move_object_size: 256000
+max_move_package_size: 102400
+max_publish_or_upgrade_per_ptb: 5
+max_tx_gas: 50000000000
+max_gas_price: 100000
+max_gas_computation_bucket: 5000000
+gas_rounding_step: 1000
+max_loop_depth: 5
+max_generic_instantiation_length: 32
+max_function_parameters: 128
+max_basic_blocks: 1024
+max_value_stack_size: 1024
+max_type_nodes: 256
+max_push_size: 10000
+max_struct_definitions: 200
+max_function_definitions: 1000
+max_fields_in_struct: 32
+max_dependency_depth: 100
+max_num_event_emit: 1024
+max_num_new_move_object_ids: 2048
+max_num_new_move_object_ids_system_tx: 32768
+max_num_deleted_move_object_ids: 2048
+max_num_deleted_move_object_ids_system_tx: 32768
+max_num_transferred_move_object_ids: 2048
+max_num_transferred_move_object_ids_system_tx: 32768
+max_event_emit_size: 256000
+max_event_emit_size_total: 65536000
+max_move_vector_len: 262144
+max_move_identifier_len: 128
+max_move_value_depth: 128
+max_back_edges_per_function: 10000
+max_back_edges_per_module: 10000
+max_verifier_meter_ticks_per_function: 16000000
+max_meter_ticks_per_module: 16000000
+max_meter_ticks_per_package: 16000000
+object_runtime_max_num_cached_objects: 1000
+object_runtime_max_num_cached_objects_system_tx: 16000
+object_runtime_max_num_store_entries: 1000
+object_runtime_max_num_store_entries_system_tx: 16000
+base_tx_cost_fixed: 1000
+package_publish_cost_fixed: 1000
+base_tx_cost_per_byte: 0
+package_publish_cost_per_byte: 80
+obj_access_cost_read_per_byte: 15
+obj_access_cost_mutate_per_byte: 40
+obj_access_cost_delete_per_byte: 40
+obj_access_cost_verify_per_byte: 200
+gas_model_version: 8
+obj_data_cost_refundable: 100
+obj_metadata_cost_non_refundable: 50
+storage_rebate_rate: 9900
+storage_fund_reinvest_rate: 500
+reward_slashing_rate: 10000
+storage_gas_price: 76
+max_transactions_per_checkpoint: 10000
+max_checkpoint_size_bytes: 31457280
+buffer_stake_for_protocol_upgrade_bps: 5000
+address_from_bytes_cost_base: 52
+address_to_u256_cost_base: 52
+address_from_u256_cost_base: 52
+dynamic_field_hash_type_and_key_cost_base: 100
+dynamic_field_hash_type_and_key_type_cost_per_byte: 2
+dynamic_field_hash_type_and_key_value_cost_per_byte: 2
+dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2
+dynamic_field_add_child_object_cost_base: 100
+dynamic_field_add_child_object_type_cost_per_byte: 10
+dynamic_field_add_child_object_value_cost_per_byte: 10
+dynamic_field_add_child_object_struct_tag_cost_per_byte: 10
+dynamic_field_borrow_child_object_cost_base: 100
+dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10
+dynamic_field_borrow_child_object_type_cost_per_byte: 10
+dynamic_field_remove_child_object_cost_base: 100
+dynamic_field_remove_child_object_child_cost_per_byte: 2
+dynamic_field_remove_child_object_type_cost_per_byte: 2
+dynamic_field_has_child_object_cost_base: 100
+dynamic_field_has_child_object_with_ty_cost_base: 100
+dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2
+dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2
+event_emit_cost_base: 52
+event_emit_value_size_derivation_cost_per_byte: 2
+event_emit_tag_size_derivation_cost_per_byte: 5
+event_emit_output_cost_per_byte: 10
+object_borrow_uid_cost_base: 52
+object_delete_impl_cost_base: 52
+object_record_new_uid_cost_base: 52
+transfer_transfer_internal_cost_base: 52
+transfer_freeze_object_cost_base: 52
+transfer_share_object_cost_base: 52
+transfer_receive_object_cost_base: 52
+tx_context_derive_id_cost_base: 52
+types_is_one_time_witness_cost_base: 52
+types_is_one_time_witness_type_tag_cost_per_byte: 2
+types_is_one_time_witness_type_cost_per_byte: 2
+validator_validate_metadata_cost_base: 52
+validator_validate_metadata_data_cost_per_byte: 2
+crypto_invalid_arguments_cost: 100
+bls12381_bls12381_min_sig_verify_cost_base: 52
+bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2
+bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2
+bls12381_bls12381_min_pk_verify_cost_base: 52
+bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2
+bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2
+ecdsa_k1_ecrecover_keccak256_cost_base: 52
+ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2
+ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2
+ecdsa_k1_ecrecover_sha256_cost_base: 52
+ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2
+ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2
+ecdsa_k1_decompress_pubkey_cost_base: 52
+ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52
+ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2
+ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2
+ecdsa_k1_secp256k1_verify_sha256_cost_base: 52
+ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2
+ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2
+ecdsa_r1_ecrecover_keccak256_cost_base: 52
+ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2
+ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2
+ecdsa_r1_ecrecover_sha256_cost_base: 52
+ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2
+ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2
+ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52
+ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2
+ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2
+ecdsa_r1_secp256r1_verify_sha256_cost_base: 52
+ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2
+ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2
+ecvrf_ecvrf_verify_cost_base: 52
+ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2
+ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2
+ed25519_ed25519_verify_cost_base: 52
+ed25519_ed25519_verify_msg_cost_per_byte: 2
+ed25519_ed25519_verify_msg_cost_per_block: 2
+groth16_prepare_verifying_key_bls12381_cost_base: 52
+groth16_prepare_verifying_key_bn254_cost_base: 52
+groth16_verify_groth16_proof_internal_bls12381_cost_base: 52
+groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2
+groth16_verify_groth16_proof_internal_bn254_cost_base: 52
+groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2
+groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2
+hash_blake2b256_cost_base: 52
+hash_blake2b256_data_cost_per_byte: 2
+hash_blake2b256_data_cost_per_block: 2
+hash_keccak256_cost_base: 52
+hash_keccak256_data_cost_per_byte: 2
+hash_keccak256_data_cost_per_block: 2
+group_ops_bls12381_decode_scalar_cost: 52
+group_ops_bls12381_decode_g1_cost: 52
+group_ops_bls12381_decode_g2_cost: 52
+group_ops_bls12381_decode_gt_cost: 52
+group_ops_bls12381_scalar_add_cost: 52
+group_ops_bls12381_g1_add_cost: 52
+group_ops_bls12381_g2_add_cost: 52
+group_ops_bls12381_gt_add_cost: 52
+group_ops_bls12381_scalar_sub_cost: 52
+group_ops_bls12381_g1_sub_cost: 52
+group_ops_bls12381_g2_sub_cost: 52
+group_ops_bls12381_gt_sub_cost: 52
+group_ops_bls12381_scalar_mul_cost: 52
+group_ops_bls12381_g1_mul_cost: 52
+group_ops_bls12381_g2_mul_cost: 52
+group_ops_bls12381_gt_mul_cost: 52
+group_ops_bls12381_scalar_div_cost: 52
+group_ops_bls12381_g1_div_cost: 52
+group_ops_bls12381_g2_div_cost: 52
+group_ops_bls12381_gt_div_cost: 52
+group_ops_bls12381_g1_hash_to_base_cost: 52
+group_ops_bls12381_g2_hash_to_base_cost: 52
+group_ops_bls12381_g1_hash_to_cost_per_byte: 2
+group_ops_bls12381_g2_hash_to_cost_per_byte: 2
+group_ops_bls12381_g1_msm_base_cost: 52
+group_ops_bls12381_g2_msm_base_cost: 52
+group_ops_bls12381_g1_msm_base_cost_per_input: 52
+group_ops_bls12381_g2_msm_base_cost_per_input: 52
+group_ops_bls12381_msm_max_len: 32
+group_ops_bls12381_pairing_cost: 52
+hmac_hmac_sha3_256_cost_base: 52
+hmac_hmac_sha3_256_input_cost_per_byte: 2
+hmac_hmac_sha3_256_input_cost_per_block: 2
+check_zklogin_id_cost_base: 200
+check_zklogin_issuer_cost_base: 200
+scoring_decision_mad_divisor: 2.3
+scoring_decision_cutoff_value: 2.5
+execution_version: 3
+consensus_bad_nodes_stake_threshold: 20
+max_jwk_votes_per_validator_per_epoch: 240
+max_age_of_jwk_in_epochs: 1
+random_beacon_reduction_allowed_delta: 800
+random_beacon_reduction_lower_bound: 1600
+random_beacon_dkg_timeout_round: 3000
+random_beacon_min_round_interval_ms: 200
+random_beacon_dkg_version: 1
+consensus_max_transaction_size_bytes: 262144
+consensus_max_transactions_in_block_bytes: 6291456
+max_deferral_rounds_for_congestion_control: 10
+min_checkpoint_interval_ms: 200
+checkpoint_summary_version_specific_data: 1
+
diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap
new file mode 100644
index 0000000000000..6c1c844f151b4
--- /dev/null
+++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap
@@ -0,0 +1,294 @@
+---
+source: crates/sui-protocol-config/src/lib.rs
+expression: "ProtocolConfig::get_for_version(cur, *chain_id)"
+---
+version: 52
+feature_flags:
+  package_upgrades: true
+  commit_root_state_digest: true
+  advance_epoch_start_time_in_safe_mode: true
+  loaded_child_objects_fixed: true
+  missing_type_is_compatibility_error: true
+  scoring_decision_with_validity_cutoff: true
+  consensus_order_end_of_epoch_last: true
+  disallow_adding_abilities_on_upgrade: true
+  disable_invariant_violation_check_in_swap_loc: true
+  advance_to_highest_supported_protocol_version: true
+  ban_entry_init: true
+  package_digest_hash_module: true
+  disallow_change_struct_type_params_on_upgrade: true
+  no_extraneous_module_bytes: true
+  narwhal_versioned_metadata: true
+  zklogin_auth: true
+  consensus_transaction_ordering: ByGasPrice
+  simplified_unwrap_then_delete: true
+  upgraded_multisig_supported: true
+  txn_base_cost_as_multiplier: true
+  shared_object_deletion: true
+  narwhal_new_leader_election_schedule: true
+  loaded_child_object_format: true
+  enable_jwk_consensus_updates: true
+  end_of_epoch_transaction_supported: true
+  simple_conservation_checks: true
+  loaded_child_object_format_type: true
+  receive_objects: true
+  random_beacon: true
+  bridge: true
+  enable_effects_v2: true
+  narwhal_certificate_v2: true
+  verify_legacy_zklogin_address: true
+  recompute_has_public_transfer_in_execution: true
+  accept_zklogin_in_multisig: true
+  include_consensus_digest_in_prologue: true
+  hardened_otw_check: true
+  allow_receiving_object_id: true
+  enable_poseidon: true
+  enable_coin_deny_list: true
+  enable_group_ops_native_functions: true
+  enable_group_ops_native_function_msm: true
+  reject_mutable_random_on_entry_functions: true
+  consensus_choice: Mysticeti
+  consensus_network: Tonic
+  zklogin_max_epoch_upper_bound_delta: 30
+  mysticeti_leader_scoring_and_schedule: true
+  reshare_at_same_initial_version: true
+  resolve_abort_locations_to_package_id: true
+  mysticeti_use_committed_subdag_digest: true
+  enable_vdf: true
+  record_consensus_determined_version_assignments_in_prologue: true
+  fresh_vm_on_framework_upgrade: true
+  prepend_prologue_tx_in_consensus_commit_in_checkpoints: true
+  mysticeti_num_leaders_per_round: 1
+  enable_coin_deny_list_v2: true
+max_tx_size_bytes: 131072
+max_input_objects: 2048
+max_size_written_objects: 5000000
+max_size_written_objects_system_tx: 50000000
+max_serialized_tx_effects_size_bytes: 524288
+max_serialized_tx_effects_size_bytes_system_tx: 8388608
+max_gas_payment_objects: 256
+max_modules_in_publish: 64
+max_package_dependencies: 32
+max_arguments: 512
+max_type_arguments: 16
+max_type_argument_depth: 16
+max_pure_argument_size: 16384
+max_programmable_tx_commands: 1024
+move_binary_format_version: 7
+min_move_binary_format_version: 6
+binary_module_handles: 100
+binary_struct_handles: 300
+binary_function_handles: 1500
+binary_function_instantiations: 750
+binary_signatures: 1000
+binary_constant_pool: 4000
+binary_identifiers: 10000
+binary_address_identifiers: 100
+binary_struct_defs: 200
+binary_struct_def_instantiations: 100
+binary_function_defs: 1000
+binary_field_handles: 500
+binary_field_instantiations: 250
+binary_friend_decls: 100
+max_move_object_size: 256000
+max_move_package_size: 102400
+max_publish_or_upgrade_per_ptb: 5
+max_tx_gas: 50000000000
+max_gas_price: 100000
+max_gas_computation_bucket: 5000000
+gas_rounding_step: 1000
+max_loop_depth: 5
+max_generic_instantiation_length: 32
+max_function_parameters: 128
+max_basic_blocks: 1024
+max_value_stack_size: 1024
+max_type_nodes: 256
+max_push_size: 10000
+max_struct_definitions: 200
+max_function_definitions: 1000
+max_fields_in_struct: 32
+max_dependency_depth: 100
+max_num_event_emit: 1024
+max_num_new_move_object_ids: 2048
+max_num_new_move_object_ids_system_tx: 32768
+max_num_deleted_move_object_ids: 2048
+max_num_deleted_move_object_ids_system_tx: 32768
+max_num_transferred_move_object_ids: 2048
+max_num_transferred_move_object_ids_system_tx: 32768
+max_event_emit_size: 256000
+max_event_emit_size_total: 65536000
+max_move_vector_len: 262144
+max_move_identifier_len: 128
+max_move_value_depth: 128
+max_back_edges_per_function: 10000
+max_back_edges_per_module: 10000
+max_verifier_meter_ticks_per_function: 16000000
+max_meter_ticks_per_module: 16000000
+max_meter_ticks_per_package: 16000000
+object_runtime_max_num_cached_objects: 1000
+object_runtime_max_num_cached_objects_system_tx: 16000
+object_runtime_max_num_store_entries: 1000
+object_runtime_max_num_store_entries_system_tx: 16000
+base_tx_cost_fixed: 1000
+package_publish_cost_fixed: 1000
+base_tx_cost_per_byte: 0
+package_publish_cost_per_byte: 80
+obj_access_cost_read_per_byte: 15
+obj_access_cost_mutate_per_byte: 40
+obj_access_cost_delete_per_byte: 40
+obj_access_cost_verify_per_byte: 200
+gas_model_version: 8
+obj_data_cost_refundable: 100
+obj_metadata_cost_non_refundable: 50
+storage_rebate_rate: 9900
+storage_fund_reinvest_rate: 500
+reward_slashing_rate: 10000
+storage_gas_price: 76
+max_transactions_per_checkpoint: 10000
+max_checkpoint_size_bytes: 31457280
+buffer_stake_for_protocol_upgrade_bps: 5000
+address_from_bytes_cost_base: 52
+address_to_u256_cost_base: 52
+address_from_u256_cost_base: 52
+dynamic_field_hash_type_and_key_cost_base: 100
+dynamic_field_hash_type_and_key_type_cost_per_byte: 2
+dynamic_field_hash_type_and_key_value_cost_per_byte: 2
+dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2
+dynamic_field_add_child_object_cost_base: 100
+dynamic_field_add_child_object_type_cost_per_byte: 10
+dynamic_field_add_child_object_value_cost_per_byte: 10
+dynamic_field_add_child_object_struct_tag_cost_per_byte: 10
+dynamic_field_borrow_child_object_cost_base: 100
+dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10
+dynamic_field_borrow_child_object_type_cost_per_byte: 10
+dynamic_field_remove_child_object_cost_base: 100
+dynamic_field_remove_child_object_child_cost_per_byte: 2
+dynamic_field_remove_child_object_type_cost_per_byte: 2
+dynamic_field_has_child_object_cost_base: 100
+dynamic_field_has_child_object_with_ty_cost_base: 100
+dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2
+dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2
+event_emit_cost_base: 52
+event_emit_value_size_derivation_cost_per_byte: 2
+event_emit_tag_size_derivation_cost_per_byte: 5
+event_emit_output_cost_per_byte: 10
+object_borrow_uid_cost_base: 52
+object_delete_impl_cost_base: 52
+object_record_new_uid_cost_base: 52
+transfer_transfer_internal_cost_base: 52
+transfer_freeze_object_cost_base: 52
+transfer_share_object_cost_base: 52
+transfer_receive_object_cost_base: 52
+tx_context_derive_id_cost_base: 52
+types_is_one_time_witness_cost_base: 52
+types_is_one_time_witness_type_tag_cost_per_byte: 2
+types_is_one_time_witness_type_cost_per_byte: 2
+validator_validate_metadata_cost_base: 52
+validator_validate_metadata_data_cost_per_byte: 2
+crypto_invalid_arguments_cost: 100
+bls12381_bls12381_min_sig_verify_cost_base: 52
+bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2
+bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2
+bls12381_bls12381_min_pk_verify_cost_base: 52
+bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2
+bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2
+ecdsa_k1_ecrecover_keccak256_cost_base: 52
+ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2
+ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2
+ecdsa_k1_ecrecover_sha256_cost_base: 52
+ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2
+ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2
+ecdsa_k1_decompress_pubkey_cost_base: 52
+ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52
+ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2
+ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2
+ecdsa_k1_secp256k1_verify_sha256_cost_base: 52
+ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2
+ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2
+ecdsa_r1_ecrecover_keccak256_cost_base: 52
+ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2
+ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2
+ecdsa_r1_ecrecover_sha256_cost_base: 52
+ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2
+ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2
+ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52
+ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2
+ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2
+ecdsa_r1_secp256r1_verify_sha256_cost_base: 52
+ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2
+ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2
+ecvrf_ecvrf_verify_cost_base: 52
+ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2
+ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2
+ed25519_ed25519_verify_cost_base: 52
+ed25519_ed25519_verify_msg_cost_per_byte: 2
+ed25519_ed25519_verify_msg_cost_per_block: 2
+groth16_prepare_verifying_key_bls12381_cost_base: 52
+groth16_prepare_verifying_key_bn254_cost_base: 52
+groth16_verify_groth16_proof_internal_bls12381_cost_base: 52
+groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2
+groth16_verify_groth16_proof_internal_bn254_cost_base: 52
+groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2
+groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2
+hash_blake2b256_cost_base: 52
+hash_blake2b256_data_cost_per_byte: 2
+hash_blake2b256_data_cost_per_block: 2
+hash_keccak256_cost_base: 52
+hash_keccak256_data_cost_per_byte: 2
+hash_keccak256_data_cost_per_block: 2
+poseidon_bn254_cost_base: 260
+poseidon_bn254_cost_per_block: 10
+group_ops_bls12381_decode_scalar_cost: 52
+group_ops_bls12381_decode_g1_cost: 52
+group_ops_bls12381_decode_g2_cost: 52
+group_ops_bls12381_decode_gt_cost: 52
+group_ops_bls12381_scalar_add_cost: 52
+group_ops_bls12381_g1_add_cost: 52
+group_ops_bls12381_g2_add_cost: 52
+group_ops_bls12381_gt_add_cost: 52
+group_ops_bls12381_scalar_sub_cost: 52
+group_ops_bls12381_g1_sub_cost: 52
+group_ops_bls12381_g2_sub_cost: 52
+group_ops_bls12381_gt_sub_cost: 52
+group_ops_bls12381_scalar_mul_cost: 52
+group_ops_bls12381_g1_mul_cost: 52
+group_ops_bls12381_g2_mul_cost: 52
+group_ops_bls12381_gt_mul_cost: 52
+group_ops_bls12381_scalar_div_cost: 52
+group_ops_bls12381_g1_div_cost: 52
+group_ops_bls12381_g2_div_cost: 52
+group_ops_bls12381_gt_div_cost: 52
+group_ops_bls12381_g1_hash_to_base_cost: 52
+group_ops_bls12381_g2_hash_to_base_cost: 52
+group_ops_bls12381_g1_hash_to_cost_per_byte: 2
+group_ops_bls12381_g2_hash_to_cost_per_byte: 2
+group_ops_bls12381_g1_msm_base_cost: 52
+group_ops_bls12381_g2_msm_base_cost: 52
+group_ops_bls12381_g1_msm_base_cost_per_input: 52
+group_ops_bls12381_g2_msm_base_cost_per_input: 52
+group_ops_bls12381_msm_max_len: 32
+group_ops_bls12381_pairing_cost: 52
+hmac_hmac_sha3_256_cost_base: 52
+hmac_hmac_sha3_256_input_cost_per_byte: 2
+hmac_hmac_sha3_256_input_cost_per_block: 2
+check_zklogin_id_cost_base: 200
+check_zklogin_issuer_cost_base: 200
+vdf_verify_vdf_cost: 1500
+vdf_hash_to_input_cost: 100
+scoring_decision_mad_divisor: 2.3
+scoring_decision_cutoff_value: 2.5
+execution_version: 3
+consensus_bad_nodes_stake_threshold: 20
+max_jwk_votes_per_validator_per_epoch: 240
+max_age_of_jwk_in_epochs: 1
+random_beacon_reduction_allowed_delta: 800
+random_beacon_reduction_lower_bound: 1600
+random_beacon_dkg_timeout_round: 3000
+random_beacon_min_round_interval_ms: 200
+random_beacon_dkg_version: 1
+consensus_max_transaction_size_bytes: 262144
+consensus_max_transactions_in_block_bytes: 6291456
+max_deferral_rounds_for_congestion_control: 10
+min_checkpoint_interval_ms: 200
+checkpoint_summary_version_specific_data: 1
+
diff --git a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap
index f6772ecad0c7b..ffa8e0a9f3fcf 100644
--- a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap
+++ b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap
@@ -6,7 +6,7 @@ ssfn_config_info: ~
 validator_config_info: ~
 parameters:
   chain_start_timestamp_ms: 0
-  protocol_version: 51
+  protocol_version: 52
   allow_insertion_of_extra_objects: true
   epoch_duration_ms: 86400000
   stake_subsidy_start_epoch: 0
diff --git a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap
index c976dd2ba6910..8d0bf6fbbfb64 100644
--- a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap
+++ b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap
@@ -3,7 +3,7 @@ source: crates/sui-swarm-config/tests/snapshot_tests.rs
 expression: genesis.sui_system_object().into_genesis_version_for_tooling()
 ---
 epoch: 0
-protocol_version: 51
+protocol_version: 52
 system_state_version: 1
 validators:
   total_stake: 20000000000000000
@@ -240,13 +240,13 @@ validators:
         next_epoch_worker_address: ~
         extra_fields:
           id:
-            id: "0x73a2f0fd5f57254ba3d1ae55989e1337b8efc4afa4dc4d442f6a598f2fe57bca"
+            id: "0x5ee3815bd22bb164a92d2d9fa8e45c1ece868a4cec17af9f1a4f2b35e7e97612"
           size: 0
       voting_power: 10000
-      operation_cap_id: "0x9639b46af4ec7457c69142f33f60f3248f6db1c5233eee24129d22903ddfad52"
+      operation_cap_id: "0x5bb1af2dad062878b913e848b9091ed6f81f064ccd6884fc181706f41f331fec"
       gas_price: 1000
       staking_pool:
-        id: "0x440f136b2a867f3fa8085391795545ba288b2fb2b10330527c846fb9f37120b8"
+        id: "0x5e20976a9075d0e2c1a0bacb5aa475cb868222c9ff5069da0a6cf862d18a505c"
         activation_epoch: 0
         deactivation_epoch: ~
         sui_balance: 20000000000000000
@@ -254,14 +254,14 @@ validators:
           value: 0
         pool_token_balance: 20000000000000000
         exchange_rates:
-          id: "0x0f36b5d31fd4076aa06319757646c4338fa9c9a784e4c2481ae669a424100b67"
+          id: "0xb452b2f138c9eb4897a0bdb5bf8b49f16f4dfff5a0e32fc281304ab3fd3519b4"
           size: 1
         pending_stake: 0
         pending_total_sui_withdraw: 0
         pending_pool_token_withdraw: 0
         extra_fields:
           id:
-            id: "0x2d69174a278102cb65246822cc2f0584201c384d69b9d85819607102ffba60b9"
+            id: "0xeddc255f7992dc59f21cc4687253baba7d67df4289d7363ad168e0be1176e2aa"
           size: 0
       commission_rate: 200
       next_epoch_stake: 20000000000000000
@@ -269,27 +269,27 @@ validators:
       next_epoch_commission_rate: 200
       extra_fields:
         id:
-          id: "0x5cd537ed652ac47363d53b2565e7844bfe13f8a2562e0ec085c4eb8bda8bd9ca"
+          id: "0xe3bb275be68081f76e6f243a9e2b66c88ee49870c9a0d7ebb64e597f61e9e141"
         size: 0
   pending_active_validators:
     contents:
-      id: "0x2b210d6f321aaf423f28decbc2515b45a5d06a6aef62a75184f9e53817408a6d"
+      id: "0xa5ce78594a6f3e8b98a766f93dc5016f80567b7d174305b2f1f5bdf648def400"
       size: 0
   pending_removals: []
   staking_pool_mappings:
-    id: "0xb7ec2c6c7fe0281745c066fd6773af278dde2c460b8ddf066c53b7e8b414bd9a"
+    id: "0x053838f3d4abadf5674b9b3dd267aa9754f5914edae3c0e260eb0447d4339272"
     size: 1
   inactive_validators:
-    id: "0xe0de5b6cf7a75d182e33f499027f4b659509138026e3d214cedc7c17d4101eb7"
+    id: "0xb6409731aacdc307c30a616a1ff94aec387ac220d5f3fd48d85812a5d2bf8306"
     size: 0
   validator_candidates:
-    id: "0xf1443f5216051e03800c597e26a17392f916b2e69ab2699b96275b4ebebfc1be"
+    id: "0xff35969e6260537114784d8654873c597d3828eb54f295ea978a80a81a512468"
     size: 0
   at_risk_validators:
     contents: []
   extra_fields:
     id:
-      id: "0x8b7f69f9f052653ff11349cc78006e0154dd05260b1f7cfc3858be2b7ad156e3"
+      id: "0xbb3eb2d0cc5c03d7733596cc7924f7dfdf38dffffe9cf617057512e0621ff5cd"
     size: 0
 storage_fund:
   total_object_storage_rebates:
@@ -306,7 +306,7 @@ parameters:
   validator_low_stake_grace_period: 7
   extra_fields:
     id:
-      id: "0x517cf60457b4677c4610531b37443a4ecc8e6b978597092d6b2f7704d0e410a3"
+      id: "0x94f44132137189cb0e9253c4f3d7b9491ad2de2f7dc4a26188cb9e426334f60b"
     size: 0
 reference_gas_price: 1000
 validator_report_records:
@@ -320,7 +320,7 @@ stake_subsidy:
   stake_subsidy_decrease_rate: 1000
   extra_fields:
     id:
-      id: "0xc128be0d158e6f9f9fb2015c39c177b6ad52eafc2823fc9d2d55062f73e21333"
+      id: "0x6acc16d86b4dee5ba8485221215c59a16641467fdb2cbe95c41fe6533d31a130"
     size: 0
 safe_mode: false
 safe_mode_storage_rewards:
@@ -332,6 +332,6 @@ safe_mode_non_refundable_storage_fee: 0
 epoch_start_timestamp_ms: 10
 extra_fields:
   id:
-    id: "0x6f8bf9baadd7f317000a276ca2ced8ad456b8fc849c66d001baab40980ca2ca0"
+    id: "0xf72863df91bf14efc27270ef17592ce3f3ecb9302099f8b5bf18303784558fa8"
   size: 0
 
diff --git a/crates/sui/Cargo.toml b/crates/sui/Cargo.toml
index a323ce3e90152..54ade47cfc5d2 100644
--- a/crates/sui/Cargo.toml
+++ b/crates/sui/Cargo.toml
@@ -24,6 +24,7 @@ clap.workspace = true
 bip32.workspace = true
 rand.workspace = true
 tap.workspace = true
+url.workspace = true
 inquire.workspace = true
 rusoto_core.workspace = true
 rusoto_kms.workspace = true
diff --git a/crates/sui/src/validator_commands.rs b/crates/sui/src/validator_commands.rs
index e26c8e0fc4d65..58570bcd602a2 100644
--- a/crates/sui/src/validator_commands.rs
+++ b/crates/sui/src/validator_commands.rs
@@ -10,6 +10,7 @@ use std::{
     path::PathBuf,
 };
 use sui_genesis_builder::validator_info::GenesisValidatorInfo;
+use url::{ParseError, Url};
 
 use sui_types::{
     base_types::{ObjectID, ObjectRef, SuiAddress},
@@ -509,6 +510,14 @@ impl SuiValidatorCommand {
                 validator_address,
                 gas_budget,
             } => {
+                let parsed_url =
+                    Url::parse(&bridge_authority_url).map_err(|e: ParseError| anyhow!(e))?;
+                if parsed_url.scheme() != "http" && parsed_url.scheme() != "https" {
+                    anyhow::bail!(
+                        "URL scheme has to be http or https: {}",
+                        parsed_url.scheme()
+                    );
+                }
                 // Read bridge keypair
                 let ecdsa_keypair = match read_key(&bridge_authority_key_path, true)? {
                     SuiKeyPair::Secp256k1(key) => key,
@@ -580,6 +589,14 @@ impl SuiValidatorCommand {
                 validator_address,
                 gas_budget,
             } => {
+                let parsed_url =
+                    Url::parse(&bridge_authority_url).map_err(|e: ParseError| anyhow!(e))?;
+                if parsed_url.scheme() != "http" && parsed_url.scheme() != "https" {
+                    anyhow::bail!(
+                        "URL scheme has to be http or https: {}",
+                        parsed_url.scheme()
+                    );
+                }
                 // Make sure the address is member of the committee
                 let address = check_address(
                     context.active_address()?,

From 6a179c58a84854574208f786604d1b72dbed15d9 Mon Sep 17 00:00:00 2001
From: Lu Zhang <8418040+longbowlu@users.noreply.github.com>
Date: Mon, 24 Jun 2024 15:31:38 -0700
Subject: [PATCH 03/57] revert "Cherry pick 18359 to 1.28.0 (#18386)" (#18392)

This reverts commit 1d48056a7519a34f6a3f25436e1942787acd365a.

## Description

Describe the changes or additions included in this PR.

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 Cargo.lock                                    |   1 -
 crates/sui-framework/docs/bridge/committee.md |  38 ---
 crates/sui-framework/docs/bridge/message.md   |   3 +-
 .../packages/bridge/sources/committee.move    |   9 -
 .../packages/bridge/sources/message.move      |   3 +-
 crates/sui-framework/published_api.txt        |   3 -
 crates/sui-open-rpc/spec/openrpc.json         |   2 +-
 crates/sui-protocol-config/src/lib.rs         |   4 +-
 ...ocol_config__test__Mainnet_version_52.snap | 275 ----------------
 ...ocol_config__test__Testnet_version_52.snap | 284 -----------------
 ...sui_protocol_config__test__version_52.snap | 294 ------------------
 ...ests__genesis_config_snapshot_matches.snap |   2 +-
 ..._populated_genesis_snapshot_matches-2.snap |  30 +-
 crates/sui/Cargo.toml                         |   1 -
 crates/sui/src/validator_commands.rs          |  17 -
 15 files changed, 20 insertions(+), 946 deletions(-)
 delete mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap
 delete mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap
 delete mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap

diff --git a/Cargo.lock b/Cargo.lock
index bdddc02c4fe0b..f31dca3a259fc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -11769,7 +11769,6 @@ dependencies = [
  "toml 0.7.4",
  "tracing",
  "unescape",
- "url",
 ]
 
 [[package]]
diff --git a/crates/sui-framework/docs/bridge/committee.md b/crates/sui-framework/docs/bridge/committee.md
index 06f0c9db7a5ca..5547592870a1d 100644
--- a/crates/sui-framework/docs/bridge/committee.md
+++ b/crates/sui-framework/docs/bridge/committee.md
@@ -7,7 +7,6 @@ title: Module `0xb::committee`
 -  [Struct `BlocklistValidatorEvent`](#0xb_committee_BlocklistValidatorEvent)
 -  [Struct `BridgeCommittee`](#0xb_committee_BridgeCommittee)
 -  [Struct `CommitteeUpdateEvent`](#0xb_committee_CommitteeUpdateEvent)
--  [Struct `CommitteeMemberUrlUpdateEvent`](#0xb_committee_CommitteeMemberUrlUpdateEvent)
 -  [Struct `CommitteeMember`](#0xb_committee_CommitteeMember)
 -  [Struct `CommitteeMemberRegistration`](#0xb_committee_CommitteeMemberRegistration)
 -  [Constants](#@Constants_0)
@@ -138,39 +137,6 @@ title: Module `0xb::committee`
 
 
 
-
-
-
-
-## Struct `CommitteeMemberUrlUpdateEvent`
-
-
-
-
struct CommitteeMemberUrlUpdateEvent has copy, drop
-
- - - -
-Fields - - -
-
-member: vector<u8> -
-
- -
-
-new_url: vector<u8> -
-
- -
-
- -
@@ -697,10 +663,6 @@ title: Module `0xb::committee` let (_, member) = self.members.get_entry_by_idx_mut(idx); if (member.sui_address == ctx.sender()) { member.http_rest_url = new_url; - emit (CommitteeMemberUrlUpdateEvent { - member: member.bridge_pubkey_bytes, - new_url - }); return }; idx = idx + 1; diff --git a/crates/sui-framework/docs/bridge/message.md b/crates/sui-framework/docs/bridge/message.md index fdd0e56a30174..684821ede7ab6 100644 --- a/crates/sui-framework/docs/bridge/message.md +++ b/crates/sui-framework/docs/bridge/message.md @@ -622,8 +622,7 @@ Emergency op payload is just a single byte
public fun extract_blocklist_payload(message: &BridgeMessage): Blocklist {
-    // blocklist payload should consist of one byte blocklist type, and list of 20 bytes evm addresses
-    // derived from ECDSA public keys
+    // blocklist payload should consist of one byte blocklist type, and list of 33 bytes ecdsa pub keys
     let mut bcs = bcs::new(message.payload);
     let blocklist_type = bcs.peel_u8();
     let mut address_count = bcs.peel_u8();
diff --git a/crates/sui-framework/packages/bridge/sources/committee.move b/crates/sui-framework/packages/bridge/sources/committee.move
index 1e987013be9e8..74f76bc852243 100644
--- a/crates/sui-framework/packages/bridge/sources/committee.move
+++ b/crates/sui-framework/packages/bridge/sources/committee.move
@@ -53,11 +53,6 @@ module bridge::committee {
         stake_participation_percentage: u64
     }
 
-    public struct CommitteeMemberUrlUpdateEvent has copy, drop {
-        member: vector,
-        new_url: vector,
-    }
-
     public struct CommitteeMember has copy, drop, store {
         /// The Sui Address of the validator
         sui_address: address,
@@ -279,10 +274,6 @@ module bridge::committee {
             let (_, member) = self.members.get_entry_by_idx_mut(idx);
             if (member.sui_address == ctx.sender()) {
                 member.http_rest_url = new_url;
-                emit (CommitteeMemberUrlUpdateEvent {
-                    member: member.bridge_pubkey_bytes,
-                    new_url
-                });
                 return
             };
             idx = idx + 1;
diff --git a/crates/sui-framework/packages/bridge/sources/message.move b/crates/sui-framework/packages/bridge/sources/message.move
index e46d30b0e1aa9..889eaf09d6e8d 100644
--- a/crates/sui-framework/packages/bridge/sources/message.move
+++ b/crates/sui-framework/packages/bridge/sources/message.move
@@ -124,8 +124,7 @@ module bridge::message {
     }
 
     public fun extract_blocklist_payload(message: &BridgeMessage): Blocklist {
-        // blocklist payload should consist of one byte blocklist type, and list of 20 bytes evm addresses
-        // derived from ECDSA public keys
+        // blocklist payload should consist of one byte blocklist type, and list of 33 bytes ecdsa pub keys
         let mut bcs = bcs::new(message.payload);
         let blocklist_type = bcs.peel_u8();
         let mut address_count = bcs.peel_u8();
diff --git a/crates/sui-framework/published_api.txt b/crates/sui-framework/published_api.txt
index bb8f32435f51e..8b168d86584a8 100644
--- a/crates/sui-framework/published_api.txt
+++ b/crates/sui-framework/published_api.txt
@@ -3883,9 +3883,6 @@ BridgeCommittee
 CommitteeUpdateEvent
 	public struct
 	0xb::committee
-CommitteeMemberUrlUpdateEvent
-	public struct
-	0xb::committee
 CommitteeMember
 	public struct
 	0xb::committee
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index fe6f32ad5fc4a..1f6237018ce94 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -1293,7 +1293,7 @@
             "name": "Result",
             "value": {
               "minSupportedProtocolVersion": "1",
-              "maxSupportedProtocolVersion": "52",
+              "maxSupportedProtocolVersion": "51",
               "protocolVersion": "6",
               "featureFlags": {
                 "accept_zklogin_in_multisig": false,
diff --git a/crates/sui-protocol-config/src/lib.rs b/crates/sui-protocol-config/src/lib.rs
index 51f16a16aca43..6f52334fc0bea 100644
--- a/crates/sui-protocol-config/src/lib.rs
+++ b/crates/sui-protocol-config/src/lib.rs
@@ -16,7 +16,7 @@ use tracing::{info, warn};
 
 /// The minimum and maximum protocol versions supported by this build.
 const MIN_PROTOCOL_VERSION: u64 = 1;
-const MAX_PROTOCOL_VERSION: u64 = 52;
+const MAX_PROTOCOL_VERSION: u64 = 51;
 
 // Record history of protocol version allocations here:
 //
@@ -147,7 +147,6 @@ const MAX_PROTOCOL_VERSION: u64 = 52;
 //             Prepose consensus commit prologue in checkpoints.
 //             Set number of leaders per round for Mysticeti commits.
 // Version 51: Switch to DKG V1.
-// Version 52: Emit `CommitteeMemberUrlUpdateEvent` when updating bridge node url.
 
 #[derive(Copy, Clone, Debug, Hash, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
 pub struct ProtocolVersion(u64);
@@ -2420,7 +2419,6 @@ impl ProtocolConfig {
                 51 => {
                     cfg.random_beacon_dkg_version = Some(1);
                 }
-                52 => {}
                 // Use this template when making changes:
                 //
                 //     // modify an existing constant.
diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap
deleted file mode 100644
index d55babc9fe610..0000000000000
--- a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_52.snap
+++ /dev/null
@@ -1,275 +0,0 @@
----
-source: crates/sui-protocol-config/src/lib.rs
-expression: "ProtocolConfig::get_for_version(cur, *chain_id)"
----
-version: 52
-feature_flags:
-  package_upgrades: true
-  commit_root_state_digest: true
-  advance_epoch_start_time_in_safe_mode: true
-  loaded_child_objects_fixed: true
-  missing_type_is_compatibility_error: true
-  scoring_decision_with_validity_cutoff: true
-  consensus_order_end_of_epoch_last: true
-  disallow_adding_abilities_on_upgrade: true
-  disable_invariant_violation_check_in_swap_loc: true
-  advance_to_highest_supported_protocol_version: true
-  ban_entry_init: true
-  package_digest_hash_module: true
-  disallow_change_struct_type_params_on_upgrade: true
-  no_extraneous_module_bytes: true
-  narwhal_versioned_metadata: true
-  zklogin_auth: true
-  consensus_transaction_ordering: ByGasPrice
-  simplified_unwrap_then_delete: true
-  upgraded_multisig_supported: true
-  txn_base_cost_as_multiplier: true
-  shared_object_deletion: true
-  narwhal_new_leader_election_schedule: true
-  loaded_child_object_format: true
-  enable_jwk_consensus_updates: true
-  end_of_epoch_transaction_supported: true
-  simple_conservation_checks: true
-  loaded_child_object_format_type: true
-  receive_objects: true
-  enable_effects_v2: true
-  narwhal_certificate_v2: true
-  verify_legacy_zklogin_address: true
-  recompute_has_public_transfer_in_execution: true
-  accept_zklogin_in_multisig: true
-  include_consensus_digest_in_prologue: true
-  hardened_otw_check: true
-  allow_receiving_object_id: true
-  enable_coin_deny_list: true
-  enable_group_ops_native_functions: true
-  reject_mutable_random_on_entry_functions: true
-  consensus_network: Tonic
-  zklogin_max_epoch_upper_bound_delta: 30
-  reshare_at_same_initial_version: true
-  resolve_abort_locations_to_package_id: true
-  mysticeti_use_committed_subdag_digest: true
-  fresh_vm_on_framework_upgrade: true
-  mysticeti_num_leaders_per_round: 1
-max_tx_size_bytes: 131072
-max_input_objects: 2048
-max_size_written_objects: 5000000
-max_size_written_objects_system_tx: 50000000
-max_serialized_tx_effects_size_bytes: 524288
-max_serialized_tx_effects_size_bytes_system_tx: 8388608
-max_gas_payment_objects: 256
-max_modules_in_publish: 64
-max_package_dependencies: 32
-max_arguments: 512
-max_type_arguments: 16
-max_type_argument_depth: 16
-max_pure_argument_size: 16384
-max_programmable_tx_commands: 1024
-move_binary_format_version: 6
-min_move_binary_format_version: 6
-binary_module_handles: 100
-binary_struct_handles: 300
-binary_function_handles: 1500
-binary_function_instantiations: 750
-binary_signatures: 1000
-binary_constant_pool: 4000
-binary_identifiers: 10000
-binary_address_identifiers: 100
-binary_struct_defs: 200
-binary_struct_def_instantiations: 100
-binary_function_defs: 1000
-binary_field_handles: 500
-binary_field_instantiations: 250
-binary_friend_decls: 100
-max_move_object_size: 256000
-max_move_package_size: 102400
-max_publish_or_upgrade_per_ptb: 5
-max_tx_gas: 50000000000
-max_gas_price: 100000
-max_gas_computation_bucket: 5000000
-gas_rounding_step: 1000
-max_loop_depth: 5
-max_generic_instantiation_length: 32
-max_function_parameters: 128
-max_basic_blocks: 1024
-max_value_stack_size: 1024
-max_type_nodes: 256
-max_push_size: 10000
-max_struct_definitions: 200
-max_function_definitions: 1000
-max_fields_in_struct: 32
-max_dependency_depth: 100
-max_num_event_emit: 1024
-max_num_new_move_object_ids: 2048
-max_num_new_move_object_ids_system_tx: 32768
-max_num_deleted_move_object_ids: 2048
-max_num_deleted_move_object_ids_system_tx: 32768
-max_num_transferred_move_object_ids: 2048
-max_num_transferred_move_object_ids_system_tx: 32768
-max_event_emit_size: 256000
-max_event_emit_size_total: 65536000
-max_move_vector_len: 262144
-max_move_identifier_len: 128
-max_move_value_depth: 128
-max_back_edges_per_function: 10000
-max_back_edges_per_module: 10000
-max_verifier_meter_ticks_per_function: 16000000
-max_meter_ticks_per_module: 16000000
-max_meter_ticks_per_package: 16000000
-object_runtime_max_num_cached_objects: 1000
-object_runtime_max_num_cached_objects_system_tx: 16000
-object_runtime_max_num_store_entries: 1000
-object_runtime_max_num_store_entries_system_tx: 16000
-base_tx_cost_fixed: 1000
-package_publish_cost_fixed: 1000
-base_tx_cost_per_byte: 0
-package_publish_cost_per_byte: 80
-obj_access_cost_read_per_byte: 15
-obj_access_cost_mutate_per_byte: 40
-obj_access_cost_delete_per_byte: 40
-obj_access_cost_verify_per_byte: 200
-gas_model_version: 8
-obj_data_cost_refundable: 100
-obj_metadata_cost_non_refundable: 50
-storage_rebate_rate: 9900
-storage_fund_reinvest_rate: 500
-reward_slashing_rate: 10000
-storage_gas_price: 76
-max_transactions_per_checkpoint: 10000
-max_checkpoint_size_bytes: 31457280
-buffer_stake_for_protocol_upgrade_bps: 5000
-address_from_bytes_cost_base: 52
-address_to_u256_cost_base: 52
-address_from_u256_cost_base: 52
-dynamic_field_hash_type_and_key_cost_base: 100
-dynamic_field_hash_type_and_key_type_cost_per_byte: 2
-dynamic_field_hash_type_and_key_value_cost_per_byte: 2
-dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2
-dynamic_field_add_child_object_cost_base: 100
-dynamic_field_add_child_object_type_cost_per_byte: 10
-dynamic_field_add_child_object_value_cost_per_byte: 10
-dynamic_field_add_child_object_struct_tag_cost_per_byte: 10
-dynamic_field_borrow_child_object_cost_base: 100
-dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10
-dynamic_field_borrow_child_object_type_cost_per_byte: 10
-dynamic_field_remove_child_object_cost_base: 100
-dynamic_field_remove_child_object_child_cost_per_byte: 2
-dynamic_field_remove_child_object_type_cost_per_byte: 2
-dynamic_field_has_child_object_cost_base: 100
-dynamic_field_has_child_object_with_ty_cost_base: 100
-dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2
-dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2
-event_emit_cost_base: 52
-event_emit_value_size_derivation_cost_per_byte: 2
-event_emit_tag_size_derivation_cost_per_byte: 5
-event_emit_output_cost_per_byte: 10
-object_borrow_uid_cost_base: 52
-object_delete_impl_cost_base: 52
-object_record_new_uid_cost_base: 52
-transfer_transfer_internal_cost_base: 52
-transfer_freeze_object_cost_base: 52
-transfer_share_object_cost_base: 52
-transfer_receive_object_cost_base: 52
-tx_context_derive_id_cost_base: 52
-types_is_one_time_witness_cost_base: 52
-types_is_one_time_witness_type_tag_cost_per_byte: 2
-types_is_one_time_witness_type_cost_per_byte: 2
-validator_validate_metadata_cost_base: 52
-validator_validate_metadata_data_cost_per_byte: 2
-crypto_invalid_arguments_cost: 100
-bls12381_bls12381_min_sig_verify_cost_base: 52
-bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2
-bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2
-bls12381_bls12381_min_pk_verify_cost_base: 52
-bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2
-bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2
-ecdsa_k1_ecrecover_keccak256_cost_base: 52
-ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2
-ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2
-ecdsa_k1_ecrecover_sha256_cost_base: 52
-ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2
-ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2
-ecdsa_k1_decompress_pubkey_cost_base: 52
-ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52
-ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2
-ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2
-ecdsa_k1_secp256k1_verify_sha256_cost_base: 52
-ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2
-ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2
-ecdsa_r1_ecrecover_keccak256_cost_base: 52
-ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2
-ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2
-ecdsa_r1_ecrecover_sha256_cost_base: 52
-ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2
-ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2
-ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52
-ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2
-ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2
-ecdsa_r1_secp256r1_verify_sha256_cost_base: 52
-ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2
-ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2
-ecvrf_ecvrf_verify_cost_base: 52
-ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2
-ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2
-ed25519_ed25519_verify_cost_base: 52
-ed25519_ed25519_verify_msg_cost_per_byte: 2
-ed25519_ed25519_verify_msg_cost_per_block: 2
-groth16_prepare_verifying_key_bls12381_cost_base: 52
-groth16_prepare_verifying_key_bn254_cost_base: 52
-groth16_verify_groth16_proof_internal_bls12381_cost_base: 52
-groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2
-groth16_verify_groth16_proof_internal_bn254_cost_base: 52
-groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2
-groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2
-hash_blake2b256_cost_base: 52
-hash_blake2b256_data_cost_per_byte: 2
-hash_blake2b256_data_cost_per_block: 2
-hash_keccak256_cost_base: 52
-hash_keccak256_data_cost_per_byte: 2
-hash_keccak256_data_cost_per_block: 2
-group_ops_bls12381_decode_scalar_cost: 52
-group_ops_bls12381_decode_g1_cost: 52
-group_ops_bls12381_decode_g2_cost: 52
-group_ops_bls12381_decode_gt_cost: 52
-group_ops_bls12381_scalar_add_cost: 52
-group_ops_bls12381_g1_add_cost: 52
-group_ops_bls12381_g2_add_cost: 52
-group_ops_bls12381_gt_add_cost: 52
-group_ops_bls12381_scalar_sub_cost: 52
-group_ops_bls12381_g1_sub_cost: 52
-group_ops_bls12381_g2_sub_cost: 52
-group_ops_bls12381_gt_sub_cost: 52
-group_ops_bls12381_scalar_mul_cost: 52
-group_ops_bls12381_g1_mul_cost: 52
-group_ops_bls12381_g2_mul_cost: 52
-group_ops_bls12381_gt_mul_cost: 52
-group_ops_bls12381_scalar_div_cost: 52
-group_ops_bls12381_g1_div_cost: 52
-group_ops_bls12381_g2_div_cost: 52
-group_ops_bls12381_gt_div_cost: 52
-group_ops_bls12381_g1_hash_to_base_cost: 52
-group_ops_bls12381_g2_hash_to_base_cost: 52
-group_ops_bls12381_g1_hash_to_cost_per_byte: 2
-group_ops_bls12381_g2_hash_to_cost_per_byte: 2
-group_ops_bls12381_g1_msm_base_cost: 52
-group_ops_bls12381_g2_msm_base_cost: 52
-group_ops_bls12381_g1_msm_base_cost_per_input: 52
-group_ops_bls12381_g2_msm_base_cost_per_input: 52
-group_ops_bls12381_msm_max_len: 32
-group_ops_bls12381_pairing_cost: 52
-hmac_hmac_sha3_256_cost_base: 52
-hmac_hmac_sha3_256_input_cost_per_byte: 2
-hmac_hmac_sha3_256_input_cost_per_block: 2
-check_zklogin_id_cost_base: 200
-check_zklogin_issuer_cost_base: 200
-scoring_decision_mad_divisor: 2.3
-scoring_decision_cutoff_value: 2.5
-execution_version: 3
-consensus_bad_nodes_stake_threshold: 20
-max_jwk_votes_per_validator_per_epoch: 240
-max_age_of_jwk_in_epochs: 1
-random_beacon_reduction_allowed_delta: 800
-random_beacon_dkg_version: 1
-consensus_max_transaction_size_bytes: 262144
-consensus_max_transactions_in_block_bytes: 6291456
-max_deferral_rounds_for_congestion_control: 10
-
diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap
deleted file mode 100644
index 29ff56e8e2ca1..0000000000000
--- a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_52.snap
+++ /dev/null
@@ -1,284 +0,0 @@
----
-source: crates/sui-protocol-config/src/lib.rs
-expression: "ProtocolConfig::get_for_version(cur, *chain_id)"
----
-version: 52
-feature_flags:
-  package_upgrades: true
-  commit_root_state_digest: true
-  advance_epoch_start_time_in_safe_mode: true
-  loaded_child_objects_fixed: true
-  missing_type_is_compatibility_error: true
-  scoring_decision_with_validity_cutoff: true
-  consensus_order_end_of_epoch_last: true
-  disallow_adding_abilities_on_upgrade: true
-  disable_invariant_violation_check_in_swap_loc: true
-  advance_to_highest_supported_protocol_version: true
-  ban_entry_init: true
-  package_digest_hash_module: true
-  disallow_change_struct_type_params_on_upgrade: true
-  no_extraneous_module_bytes: true
-  narwhal_versioned_metadata: true
-  zklogin_auth: true
-  consensus_transaction_ordering: ByGasPrice
-  simplified_unwrap_then_delete: true
-  upgraded_multisig_supported: true
-  txn_base_cost_as_multiplier: true
-  shared_object_deletion: true
-  narwhal_new_leader_election_schedule: true
-  loaded_child_object_format: true
-  enable_jwk_consensus_updates: true
-  end_of_epoch_transaction_supported: true
-  simple_conservation_checks: true
-  loaded_child_object_format_type: true
-  receive_objects: true
-  random_beacon: true
-  bridge: true
-  enable_effects_v2: true
-  narwhal_certificate_v2: true
-  verify_legacy_zklogin_address: true
-  recompute_has_public_transfer_in_execution: true
-  accept_zklogin_in_multisig: true
-  include_consensus_digest_in_prologue: true
-  hardened_otw_check: true
-  allow_receiving_object_id: true
-  enable_coin_deny_list: true
-  enable_group_ops_native_functions: true
-  reject_mutable_random_on_entry_functions: true
-  consensus_choice: Mysticeti
-  consensus_network: Tonic
-  zklogin_max_epoch_upper_bound_delta: 30
-  mysticeti_leader_scoring_and_schedule: true
-  reshare_at_same_initial_version: true
-  resolve_abort_locations_to_package_id: true
-  mysticeti_use_committed_subdag_digest: true
-  fresh_vm_on_framework_upgrade: true
-  mysticeti_num_leaders_per_round: 1
-max_tx_size_bytes: 131072
-max_input_objects: 2048
-max_size_written_objects: 5000000
-max_size_written_objects_system_tx: 50000000
-max_serialized_tx_effects_size_bytes: 524288
-max_serialized_tx_effects_size_bytes_system_tx: 8388608
-max_gas_payment_objects: 256
-max_modules_in_publish: 64
-max_package_dependencies: 32
-max_arguments: 512
-max_type_arguments: 16
-max_type_argument_depth: 16
-max_pure_argument_size: 16384
-max_programmable_tx_commands: 1024
-move_binary_format_version: 6
-min_move_binary_format_version: 6
-binary_module_handles: 100
-binary_struct_handles: 300
-binary_function_handles: 1500
-binary_function_instantiations: 750
-binary_signatures: 1000
-binary_constant_pool: 4000
-binary_identifiers: 10000
-binary_address_identifiers: 100
-binary_struct_defs: 200
-binary_struct_def_instantiations: 100
-binary_function_defs: 1000
-binary_field_handles: 500
-binary_field_instantiations: 250
-binary_friend_decls: 100
-max_move_object_size: 256000
-max_move_package_size: 102400
-max_publish_or_upgrade_per_ptb: 5
-max_tx_gas: 50000000000
-max_gas_price: 100000
-max_gas_computation_bucket: 5000000
-gas_rounding_step: 1000
-max_loop_depth: 5
-max_generic_instantiation_length: 32
-max_function_parameters: 128
-max_basic_blocks: 1024
-max_value_stack_size: 1024
-max_type_nodes: 256
-max_push_size: 10000
-max_struct_definitions: 200
-max_function_definitions: 1000
-max_fields_in_struct: 32
-max_dependency_depth: 100
-max_num_event_emit: 1024
-max_num_new_move_object_ids: 2048
-max_num_new_move_object_ids_system_tx: 32768
-max_num_deleted_move_object_ids: 2048
-max_num_deleted_move_object_ids_system_tx: 32768
-max_num_transferred_move_object_ids: 2048
-max_num_transferred_move_object_ids_system_tx: 32768
-max_event_emit_size: 256000
-max_event_emit_size_total: 65536000
-max_move_vector_len: 262144
-max_move_identifier_len: 128
-max_move_value_depth: 128
-max_back_edges_per_function: 10000
-max_back_edges_per_module: 10000
-max_verifier_meter_ticks_per_function: 16000000
-max_meter_ticks_per_module: 16000000
-max_meter_ticks_per_package: 16000000
-object_runtime_max_num_cached_objects: 1000
-object_runtime_max_num_cached_objects_system_tx: 16000
-object_runtime_max_num_store_entries: 1000
-object_runtime_max_num_store_entries_system_tx: 16000
-base_tx_cost_fixed: 1000
-package_publish_cost_fixed: 1000
-base_tx_cost_per_byte: 0
-package_publish_cost_per_byte: 80
-obj_access_cost_read_per_byte: 15
-obj_access_cost_mutate_per_byte: 40
-obj_access_cost_delete_per_byte: 40
-obj_access_cost_verify_per_byte: 200
-gas_model_version: 8
-obj_data_cost_refundable: 100
-obj_metadata_cost_non_refundable: 50
-storage_rebate_rate: 9900
-storage_fund_reinvest_rate: 500
-reward_slashing_rate: 10000
-storage_gas_price: 76
-max_transactions_per_checkpoint: 10000
-max_checkpoint_size_bytes: 31457280
-buffer_stake_for_protocol_upgrade_bps: 5000
-address_from_bytes_cost_base: 52
-address_to_u256_cost_base: 52
-address_from_u256_cost_base: 52
-dynamic_field_hash_type_and_key_cost_base: 100
-dynamic_field_hash_type_and_key_type_cost_per_byte: 2
-dynamic_field_hash_type_and_key_value_cost_per_byte: 2
-dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2
-dynamic_field_add_child_object_cost_base: 100
-dynamic_field_add_child_object_type_cost_per_byte: 10
-dynamic_field_add_child_object_value_cost_per_byte: 10
-dynamic_field_add_child_object_struct_tag_cost_per_byte: 10
-dynamic_field_borrow_child_object_cost_base: 100
-dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10
-dynamic_field_borrow_child_object_type_cost_per_byte: 10
-dynamic_field_remove_child_object_cost_base: 100
-dynamic_field_remove_child_object_child_cost_per_byte: 2
-dynamic_field_remove_child_object_type_cost_per_byte: 2
-dynamic_field_has_child_object_cost_base: 100
-dynamic_field_has_child_object_with_ty_cost_base: 100
-dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2
-dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2
-event_emit_cost_base: 52
-event_emit_value_size_derivation_cost_per_byte: 2
-event_emit_tag_size_derivation_cost_per_byte: 5
-event_emit_output_cost_per_byte: 10
-object_borrow_uid_cost_base: 52
-object_delete_impl_cost_base: 52
-object_record_new_uid_cost_base: 52
-transfer_transfer_internal_cost_base: 52
-transfer_freeze_object_cost_base: 52
-transfer_share_object_cost_base: 52
-transfer_receive_object_cost_base: 52
-tx_context_derive_id_cost_base: 52
-types_is_one_time_witness_cost_base: 52
-types_is_one_time_witness_type_tag_cost_per_byte: 2
-types_is_one_time_witness_type_cost_per_byte: 2
-validator_validate_metadata_cost_base: 52
-validator_validate_metadata_data_cost_per_byte: 2
-crypto_invalid_arguments_cost: 100
-bls12381_bls12381_min_sig_verify_cost_base: 52
-bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2
-bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2
-bls12381_bls12381_min_pk_verify_cost_base: 52
-bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2
-bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2
-ecdsa_k1_ecrecover_keccak256_cost_base: 52
-ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2
-ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2
-ecdsa_k1_ecrecover_sha256_cost_base: 52
-ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2
-ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2
-ecdsa_k1_decompress_pubkey_cost_base: 52
-ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52
-ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2
-ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2
-ecdsa_k1_secp256k1_verify_sha256_cost_base: 52
-ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2
-ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2
-ecdsa_r1_ecrecover_keccak256_cost_base: 52
-ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2
-ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2
-ecdsa_r1_ecrecover_sha256_cost_base: 52
-ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2
-ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2
-ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52
-ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2
-ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2
-ecdsa_r1_secp256r1_verify_sha256_cost_base: 52
-ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2
-ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2
-ecvrf_ecvrf_verify_cost_base: 52
-ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2
-ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2
-ed25519_ed25519_verify_cost_base: 52
-ed25519_ed25519_verify_msg_cost_per_byte: 2
-ed25519_ed25519_verify_msg_cost_per_block: 2
-groth16_prepare_verifying_key_bls12381_cost_base: 52
-groth16_prepare_verifying_key_bn254_cost_base: 52
-groth16_verify_groth16_proof_internal_bls12381_cost_base: 52
-groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2
-groth16_verify_groth16_proof_internal_bn254_cost_base: 52
-groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2
-groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2
-hash_blake2b256_cost_base: 52
-hash_blake2b256_data_cost_per_byte: 2
-hash_blake2b256_data_cost_per_block: 2
-hash_keccak256_cost_base: 52
-hash_keccak256_data_cost_per_byte: 2
-hash_keccak256_data_cost_per_block: 2
-group_ops_bls12381_decode_scalar_cost: 52
-group_ops_bls12381_decode_g1_cost: 52
-group_ops_bls12381_decode_g2_cost: 52
-group_ops_bls12381_decode_gt_cost: 52
-group_ops_bls12381_scalar_add_cost: 52
-group_ops_bls12381_g1_add_cost: 52
-group_ops_bls12381_g2_add_cost: 52
-group_ops_bls12381_gt_add_cost: 52
-group_ops_bls12381_scalar_sub_cost: 52
-group_ops_bls12381_g1_sub_cost: 52
-group_ops_bls12381_g2_sub_cost: 52
-group_ops_bls12381_gt_sub_cost: 52
-group_ops_bls12381_scalar_mul_cost: 52
-group_ops_bls12381_g1_mul_cost: 52
-group_ops_bls12381_g2_mul_cost: 52
-group_ops_bls12381_gt_mul_cost: 52
-group_ops_bls12381_scalar_div_cost: 52
-group_ops_bls12381_g1_div_cost: 52
-group_ops_bls12381_g2_div_cost: 52
-group_ops_bls12381_gt_div_cost: 52
-group_ops_bls12381_g1_hash_to_base_cost: 52
-group_ops_bls12381_g2_hash_to_base_cost: 52
-group_ops_bls12381_g1_hash_to_cost_per_byte: 2
-group_ops_bls12381_g2_hash_to_cost_per_byte: 2
-group_ops_bls12381_g1_msm_base_cost: 52
-group_ops_bls12381_g2_msm_base_cost: 52
-group_ops_bls12381_g1_msm_base_cost_per_input: 52
-group_ops_bls12381_g2_msm_base_cost_per_input: 52
-group_ops_bls12381_msm_max_len: 32
-group_ops_bls12381_pairing_cost: 52
-hmac_hmac_sha3_256_cost_base: 52
-hmac_hmac_sha3_256_input_cost_per_byte: 2
-hmac_hmac_sha3_256_input_cost_per_block: 2
-check_zklogin_id_cost_base: 200
-check_zklogin_issuer_cost_base: 200
-scoring_decision_mad_divisor: 2.3
-scoring_decision_cutoff_value: 2.5
-execution_version: 3
-consensus_bad_nodes_stake_threshold: 20
-max_jwk_votes_per_validator_per_epoch: 240
-max_age_of_jwk_in_epochs: 1
-random_beacon_reduction_allowed_delta: 800
-random_beacon_reduction_lower_bound: 1600
-random_beacon_dkg_timeout_round: 3000
-random_beacon_min_round_interval_ms: 200
-random_beacon_dkg_version: 1
-consensus_max_transaction_size_bytes: 262144
-consensus_max_transactions_in_block_bytes: 6291456
-max_deferral_rounds_for_congestion_control: 10
-min_checkpoint_interval_ms: 200
-checkpoint_summary_version_specific_data: 1
-
diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap
deleted file mode 100644
index 6c1c844f151b4..0000000000000
--- a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_52.snap
+++ /dev/null
@@ -1,294 +0,0 @@
----
-source: crates/sui-protocol-config/src/lib.rs
-expression: "ProtocolConfig::get_for_version(cur, *chain_id)"
----
-version: 52
-feature_flags:
-  package_upgrades: true
-  commit_root_state_digest: true
-  advance_epoch_start_time_in_safe_mode: true
-  loaded_child_objects_fixed: true
-  missing_type_is_compatibility_error: true
-  scoring_decision_with_validity_cutoff: true
-  consensus_order_end_of_epoch_last: true
-  disallow_adding_abilities_on_upgrade: true
-  disable_invariant_violation_check_in_swap_loc: true
-  advance_to_highest_supported_protocol_version: true
-  ban_entry_init: true
-  package_digest_hash_module: true
-  disallow_change_struct_type_params_on_upgrade: true
-  no_extraneous_module_bytes: true
-  narwhal_versioned_metadata: true
-  zklogin_auth: true
-  consensus_transaction_ordering: ByGasPrice
-  simplified_unwrap_then_delete: true
-  upgraded_multisig_supported: true
-  txn_base_cost_as_multiplier: true
-  shared_object_deletion: true
-  narwhal_new_leader_election_schedule: true
-  loaded_child_object_format: true
-  enable_jwk_consensus_updates: true
-  end_of_epoch_transaction_supported: true
-  simple_conservation_checks: true
-  loaded_child_object_format_type: true
-  receive_objects: true
-  random_beacon: true
-  bridge: true
-  enable_effects_v2: true
-  narwhal_certificate_v2: true
-  verify_legacy_zklogin_address: true
-  recompute_has_public_transfer_in_execution: true
-  accept_zklogin_in_multisig: true
-  include_consensus_digest_in_prologue: true
-  hardened_otw_check: true
-  allow_receiving_object_id: true
-  enable_poseidon: true
-  enable_coin_deny_list: true
-  enable_group_ops_native_functions: true
-  enable_group_ops_native_function_msm: true
-  reject_mutable_random_on_entry_functions: true
-  consensus_choice: Mysticeti
-  consensus_network: Tonic
-  zklogin_max_epoch_upper_bound_delta: 30
-  mysticeti_leader_scoring_and_schedule: true
-  reshare_at_same_initial_version: true
-  resolve_abort_locations_to_package_id: true
-  mysticeti_use_committed_subdag_digest: true
-  enable_vdf: true
-  record_consensus_determined_version_assignments_in_prologue: true
-  fresh_vm_on_framework_upgrade: true
-  prepend_prologue_tx_in_consensus_commit_in_checkpoints: true
-  mysticeti_num_leaders_per_round: 1
-  enable_coin_deny_list_v2: true
-max_tx_size_bytes: 131072
-max_input_objects: 2048
-max_size_written_objects: 5000000
-max_size_written_objects_system_tx: 50000000
-max_serialized_tx_effects_size_bytes: 524288
-max_serialized_tx_effects_size_bytes_system_tx: 8388608
-max_gas_payment_objects: 256
-max_modules_in_publish: 64
-max_package_dependencies: 32
-max_arguments: 512
-max_type_arguments: 16
-max_type_argument_depth: 16
-max_pure_argument_size: 16384
-max_programmable_tx_commands: 1024
-move_binary_format_version: 7
-min_move_binary_format_version: 6
-binary_module_handles: 100
-binary_struct_handles: 300
-binary_function_handles: 1500
-binary_function_instantiations: 750
-binary_signatures: 1000
-binary_constant_pool: 4000
-binary_identifiers: 10000
-binary_address_identifiers: 100
-binary_struct_defs: 200
-binary_struct_def_instantiations: 100
-binary_function_defs: 1000
-binary_field_handles: 500
-binary_field_instantiations: 250
-binary_friend_decls: 100
-max_move_object_size: 256000
-max_move_package_size: 102400
-max_publish_or_upgrade_per_ptb: 5
-max_tx_gas: 50000000000
-max_gas_price: 100000
-max_gas_computation_bucket: 5000000
-gas_rounding_step: 1000
-max_loop_depth: 5
-max_generic_instantiation_length: 32
-max_function_parameters: 128
-max_basic_blocks: 1024
-max_value_stack_size: 1024
-max_type_nodes: 256
-max_push_size: 10000
-max_struct_definitions: 200
-max_function_definitions: 1000
-max_fields_in_struct: 32
-max_dependency_depth: 100
-max_num_event_emit: 1024
-max_num_new_move_object_ids: 2048
-max_num_new_move_object_ids_system_tx: 32768
-max_num_deleted_move_object_ids: 2048
-max_num_deleted_move_object_ids_system_tx: 32768
-max_num_transferred_move_object_ids: 2048
-max_num_transferred_move_object_ids_system_tx: 32768
-max_event_emit_size: 256000
-max_event_emit_size_total: 65536000
-max_move_vector_len: 262144
-max_move_identifier_len: 128
-max_move_value_depth: 128
-max_back_edges_per_function: 10000
-max_back_edges_per_module: 10000
-max_verifier_meter_ticks_per_function: 16000000
-max_meter_ticks_per_module: 16000000
-max_meter_ticks_per_package: 16000000
-object_runtime_max_num_cached_objects: 1000
-object_runtime_max_num_cached_objects_system_tx: 16000
-object_runtime_max_num_store_entries: 1000
-object_runtime_max_num_store_entries_system_tx: 16000
-base_tx_cost_fixed: 1000
-package_publish_cost_fixed: 1000
-base_tx_cost_per_byte: 0
-package_publish_cost_per_byte: 80
-obj_access_cost_read_per_byte: 15
-obj_access_cost_mutate_per_byte: 40
-obj_access_cost_delete_per_byte: 40
-obj_access_cost_verify_per_byte: 200
-gas_model_version: 8
-obj_data_cost_refundable: 100
-obj_metadata_cost_non_refundable: 50
-storage_rebate_rate: 9900
-storage_fund_reinvest_rate: 500
-reward_slashing_rate: 10000
-storage_gas_price: 76
-max_transactions_per_checkpoint: 10000
-max_checkpoint_size_bytes: 31457280
-buffer_stake_for_protocol_upgrade_bps: 5000
-address_from_bytes_cost_base: 52
-address_to_u256_cost_base: 52
-address_from_u256_cost_base: 52
-dynamic_field_hash_type_and_key_cost_base: 100
-dynamic_field_hash_type_and_key_type_cost_per_byte: 2
-dynamic_field_hash_type_and_key_value_cost_per_byte: 2
-dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2
-dynamic_field_add_child_object_cost_base: 100
-dynamic_field_add_child_object_type_cost_per_byte: 10
-dynamic_field_add_child_object_value_cost_per_byte: 10
-dynamic_field_add_child_object_struct_tag_cost_per_byte: 10
-dynamic_field_borrow_child_object_cost_base: 100
-dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10
-dynamic_field_borrow_child_object_type_cost_per_byte: 10
-dynamic_field_remove_child_object_cost_base: 100
-dynamic_field_remove_child_object_child_cost_per_byte: 2
-dynamic_field_remove_child_object_type_cost_per_byte: 2
-dynamic_field_has_child_object_cost_base: 100
-dynamic_field_has_child_object_with_ty_cost_base: 100
-dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2
-dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2
-event_emit_cost_base: 52
-event_emit_value_size_derivation_cost_per_byte: 2
-event_emit_tag_size_derivation_cost_per_byte: 5
-event_emit_output_cost_per_byte: 10
-object_borrow_uid_cost_base: 52
-object_delete_impl_cost_base: 52
-object_record_new_uid_cost_base: 52
-transfer_transfer_internal_cost_base: 52
-transfer_freeze_object_cost_base: 52
-transfer_share_object_cost_base: 52
-transfer_receive_object_cost_base: 52
-tx_context_derive_id_cost_base: 52
-types_is_one_time_witness_cost_base: 52
-types_is_one_time_witness_type_tag_cost_per_byte: 2
-types_is_one_time_witness_type_cost_per_byte: 2
-validator_validate_metadata_cost_base: 52
-validator_validate_metadata_data_cost_per_byte: 2
-crypto_invalid_arguments_cost: 100
-bls12381_bls12381_min_sig_verify_cost_base: 52
-bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2
-bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2
-bls12381_bls12381_min_pk_verify_cost_base: 52
-bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2
-bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2
-ecdsa_k1_ecrecover_keccak256_cost_base: 52
-ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2
-ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2
-ecdsa_k1_ecrecover_sha256_cost_base: 52
-ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2
-ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2
-ecdsa_k1_decompress_pubkey_cost_base: 52
-ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52
-ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2
-ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2
-ecdsa_k1_secp256k1_verify_sha256_cost_base: 52
-ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2
-ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2
-ecdsa_r1_ecrecover_keccak256_cost_base: 52
-ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2
-ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2
-ecdsa_r1_ecrecover_sha256_cost_base: 52
-ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2
-ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2
-ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52
-ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2
-ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2
-ecdsa_r1_secp256r1_verify_sha256_cost_base: 52
-ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2
-ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2
-ecvrf_ecvrf_verify_cost_base: 52
-ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2
-ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2
-ed25519_ed25519_verify_cost_base: 52
-ed25519_ed25519_verify_msg_cost_per_byte: 2
-ed25519_ed25519_verify_msg_cost_per_block: 2
-groth16_prepare_verifying_key_bls12381_cost_base: 52
-groth16_prepare_verifying_key_bn254_cost_base: 52
-groth16_verify_groth16_proof_internal_bls12381_cost_base: 52
-groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2
-groth16_verify_groth16_proof_internal_bn254_cost_base: 52
-groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2
-groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2
-hash_blake2b256_cost_base: 52
-hash_blake2b256_data_cost_per_byte: 2
-hash_blake2b256_data_cost_per_block: 2
-hash_keccak256_cost_base: 52
-hash_keccak256_data_cost_per_byte: 2
-hash_keccak256_data_cost_per_block: 2
-poseidon_bn254_cost_base: 260
-poseidon_bn254_cost_per_block: 10
-group_ops_bls12381_decode_scalar_cost: 52
-group_ops_bls12381_decode_g1_cost: 52
-group_ops_bls12381_decode_g2_cost: 52
-group_ops_bls12381_decode_gt_cost: 52
-group_ops_bls12381_scalar_add_cost: 52
-group_ops_bls12381_g1_add_cost: 52
-group_ops_bls12381_g2_add_cost: 52
-group_ops_bls12381_gt_add_cost: 52
-group_ops_bls12381_scalar_sub_cost: 52
-group_ops_bls12381_g1_sub_cost: 52
-group_ops_bls12381_g2_sub_cost: 52
-group_ops_bls12381_gt_sub_cost: 52
-group_ops_bls12381_scalar_mul_cost: 52
-group_ops_bls12381_g1_mul_cost: 52
-group_ops_bls12381_g2_mul_cost: 52
-group_ops_bls12381_gt_mul_cost: 52
-group_ops_bls12381_scalar_div_cost: 52
-group_ops_bls12381_g1_div_cost: 52
-group_ops_bls12381_g2_div_cost: 52
-group_ops_bls12381_gt_div_cost: 52
-group_ops_bls12381_g1_hash_to_base_cost: 52
-group_ops_bls12381_g2_hash_to_base_cost: 52
-group_ops_bls12381_g1_hash_to_cost_per_byte: 2
-group_ops_bls12381_g2_hash_to_cost_per_byte: 2
-group_ops_bls12381_g1_msm_base_cost: 52
-group_ops_bls12381_g2_msm_base_cost: 52
-group_ops_bls12381_g1_msm_base_cost_per_input: 52
-group_ops_bls12381_g2_msm_base_cost_per_input: 52
-group_ops_bls12381_msm_max_len: 32
-group_ops_bls12381_pairing_cost: 52
-hmac_hmac_sha3_256_cost_base: 52
-hmac_hmac_sha3_256_input_cost_per_byte: 2
-hmac_hmac_sha3_256_input_cost_per_block: 2
-check_zklogin_id_cost_base: 200
-check_zklogin_issuer_cost_base: 200
-vdf_verify_vdf_cost: 1500
-vdf_hash_to_input_cost: 100
-scoring_decision_mad_divisor: 2.3
-scoring_decision_cutoff_value: 2.5
-execution_version: 3
-consensus_bad_nodes_stake_threshold: 20
-max_jwk_votes_per_validator_per_epoch: 240
-max_age_of_jwk_in_epochs: 1
-random_beacon_reduction_allowed_delta: 800
-random_beacon_reduction_lower_bound: 1600
-random_beacon_dkg_timeout_round: 3000
-random_beacon_min_round_interval_ms: 200
-random_beacon_dkg_version: 1
-consensus_max_transaction_size_bytes: 262144
-consensus_max_transactions_in_block_bytes: 6291456
-max_deferral_rounds_for_congestion_control: 10
-min_checkpoint_interval_ms: 200
-checkpoint_summary_version_specific_data: 1
-
diff --git a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap
index ffa8e0a9f3fcf..f6772ecad0c7b 100644
--- a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap
+++ b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap
@@ -6,7 +6,7 @@ ssfn_config_info: ~
 validator_config_info: ~
 parameters:
   chain_start_timestamp_ms: 0
-  protocol_version: 52
+  protocol_version: 51
   allow_insertion_of_extra_objects: true
   epoch_duration_ms: 86400000
   stake_subsidy_start_epoch: 0
diff --git a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap
index 8d0bf6fbbfb64..c976dd2ba6910 100644
--- a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap
+++ b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap
@@ -3,7 +3,7 @@ source: crates/sui-swarm-config/tests/snapshot_tests.rs
 expression: genesis.sui_system_object().into_genesis_version_for_tooling()
 ---
 epoch: 0
-protocol_version: 52
+protocol_version: 51
 system_state_version: 1
 validators:
   total_stake: 20000000000000000
@@ -240,13 +240,13 @@ validators:
         next_epoch_worker_address: ~
         extra_fields:
           id:
-            id: "0x5ee3815bd22bb164a92d2d9fa8e45c1ece868a4cec17af9f1a4f2b35e7e97612"
+            id: "0x73a2f0fd5f57254ba3d1ae55989e1337b8efc4afa4dc4d442f6a598f2fe57bca"
           size: 0
       voting_power: 10000
-      operation_cap_id: "0x5bb1af2dad062878b913e848b9091ed6f81f064ccd6884fc181706f41f331fec"
+      operation_cap_id: "0x9639b46af4ec7457c69142f33f60f3248f6db1c5233eee24129d22903ddfad52"
       gas_price: 1000
       staking_pool:
-        id: "0x5e20976a9075d0e2c1a0bacb5aa475cb868222c9ff5069da0a6cf862d18a505c"
+        id: "0x440f136b2a867f3fa8085391795545ba288b2fb2b10330527c846fb9f37120b8"
         activation_epoch: 0
         deactivation_epoch: ~
         sui_balance: 20000000000000000
@@ -254,14 +254,14 @@ validators:
           value: 0
         pool_token_balance: 20000000000000000
         exchange_rates:
-          id: "0xb452b2f138c9eb4897a0bdb5bf8b49f16f4dfff5a0e32fc281304ab3fd3519b4"
+          id: "0x0f36b5d31fd4076aa06319757646c4338fa9c9a784e4c2481ae669a424100b67"
           size: 1
         pending_stake: 0
         pending_total_sui_withdraw: 0
         pending_pool_token_withdraw: 0
         extra_fields:
           id:
-            id: "0xeddc255f7992dc59f21cc4687253baba7d67df4289d7363ad168e0be1176e2aa"
+            id: "0x2d69174a278102cb65246822cc2f0584201c384d69b9d85819607102ffba60b9"
           size: 0
       commission_rate: 200
       next_epoch_stake: 20000000000000000
@@ -269,27 +269,27 @@ validators:
       next_epoch_commission_rate: 200
       extra_fields:
         id:
-          id: "0xe3bb275be68081f76e6f243a9e2b66c88ee49870c9a0d7ebb64e597f61e9e141"
+          id: "0x5cd537ed652ac47363d53b2565e7844bfe13f8a2562e0ec085c4eb8bda8bd9ca"
         size: 0
   pending_active_validators:
     contents:
-      id: "0xa5ce78594a6f3e8b98a766f93dc5016f80567b7d174305b2f1f5bdf648def400"
+      id: "0x2b210d6f321aaf423f28decbc2515b45a5d06a6aef62a75184f9e53817408a6d"
       size: 0
   pending_removals: []
   staking_pool_mappings:
-    id: "0x053838f3d4abadf5674b9b3dd267aa9754f5914edae3c0e260eb0447d4339272"
+    id: "0xb7ec2c6c7fe0281745c066fd6773af278dde2c460b8ddf066c53b7e8b414bd9a"
     size: 1
   inactive_validators:
-    id: "0xb6409731aacdc307c30a616a1ff94aec387ac220d5f3fd48d85812a5d2bf8306"
+    id: "0xe0de5b6cf7a75d182e33f499027f4b659509138026e3d214cedc7c17d4101eb7"
     size: 0
   validator_candidates:
-    id: "0xff35969e6260537114784d8654873c597d3828eb54f295ea978a80a81a512468"
+    id: "0xf1443f5216051e03800c597e26a17392f916b2e69ab2699b96275b4ebebfc1be"
     size: 0
   at_risk_validators:
     contents: []
   extra_fields:
     id:
-      id: "0xbb3eb2d0cc5c03d7733596cc7924f7dfdf38dffffe9cf617057512e0621ff5cd"
+      id: "0x8b7f69f9f052653ff11349cc78006e0154dd05260b1f7cfc3858be2b7ad156e3"
     size: 0
 storage_fund:
   total_object_storage_rebates:
@@ -306,7 +306,7 @@ parameters:
   validator_low_stake_grace_period: 7
   extra_fields:
     id:
-      id: "0x94f44132137189cb0e9253c4f3d7b9491ad2de2f7dc4a26188cb9e426334f60b"
+      id: "0x517cf60457b4677c4610531b37443a4ecc8e6b978597092d6b2f7704d0e410a3"
     size: 0
 reference_gas_price: 1000
 validator_report_records:
@@ -320,7 +320,7 @@ stake_subsidy:
   stake_subsidy_decrease_rate: 1000
   extra_fields:
     id:
-      id: "0x6acc16d86b4dee5ba8485221215c59a16641467fdb2cbe95c41fe6533d31a130"
+      id: "0xc128be0d158e6f9f9fb2015c39c177b6ad52eafc2823fc9d2d55062f73e21333"
     size: 0
 safe_mode: false
 safe_mode_storage_rewards:
@@ -332,6 +332,6 @@ safe_mode_non_refundable_storage_fee: 0
 epoch_start_timestamp_ms: 10
 extra_fields:
   id:
-    id: "0xf72863df91bf14efc27270ef17592ce3f3ecb9302099f8b5bf18303784558fa8"
+    id: "0x6f8bf9baadd7f317000a276ca2ced8ad456b8fc849c66d001baab40980ca2ca0"
   size: 0
 
diff --git a/crates/sui/Cargo.toml b/crates/sui/Cargo.toml
index 54ade47cfc5d2..a323ce3e90152 100644
--- a/crates/sui/Cargo.toml
+++ b/crates/sui/Cargo.toml
@@ -24,7 +24,6 @@ clap.workspace = true
 bip32.workspace = true
 rand.workspace = true
 tap.workspace = true
-url.workspace = true
 inquire.workspace = true
 rusoto_core.workspace = true
 rusoto_kms.workspace = true
diff --git a/crates/sui/src/validator_commands.rs b/crates/sui/src/validator_commands.rs
index 58570bcd602a2..e26c8e0fc4d65 100644
--- a/crates/sui/src/validator_commands.rs
+++ b/crates/sui/src/validator_commands.rs
@@ -10,7 +10,6 @@ use std::{
     path::PathBuf,
 };
 use sui_genesis_builder::validator_info::GenesisValidatorInfo;
-use url::{ParseError, Url};
 
 use sui_types::{
     base_types::{ObjectID, ObjectRef, SuiAddress},
@@ -510,14 +509,6 @@ impl SuiValidatorCommand {
                 validator_address,
                 gas_budget,
             } => {
-                let parsed_url =
-                    Url::parse(&bridge_authority_url).map_err(|e: ParseError| anyhow!(e))?;
-                if parsed_url.scheme() != "http" && parsed_url.scheme() != "https" {
-                    anyhow::bail!(
-                        "URL scheme has to be http or https: {}",
-                        parsed_url.scheme()
-                    );
-                }
                 // Read bridge keypair
                 let ecdsa_keypair = match read_key(&bridge_authority_key_path, true)? {
                     SuiKeyPair::Secp256k1(key) => key,
@@ -589,14 +580,6 @@ impl SuiValidatorCommand {
                 validator_address,
                 gas_budget,
             } => {
-                let parsed_url =
-                    Url::parse(&bridge_authority_url).map_err(|e: ParseError| anyhow!(e))?;
-                if parsed_url.scheme() != "http" && parsed_url.scheme() != "https" {
-                    anyhow::bail!(
-                        "URL scheme has to be http or https: {}",
-                        parsed_url.scheme()
-                    );
-                }
                 // Make sure the address is member of the committee
                 let address = check_address(
                     context.active_address()?,

From 590b870883d35db77b976c785234f6036c9e156b Mon Sep 17 00:00:00 2001
From: Tim Zakian <2895723+tzakian@users.noreply.github.com>
Date: Tue, 25 Jun 2024 17:17:45 -0700
Subject: [PATCH 04/57] [cherry-pick][adapter] Fix overlapping match in old
 execution version (#18415) (#18419)

## Description

Fix a typo issue in an old execution version

## Test plan

Historical replays
---
 .../v2/sui-adapter/src/programmable_transactions/execution.rs   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sui-execution/v2/sui-adapter/src/programmable_transactions/execution.rs b/sui-execution/v2/sui-adapter/src/programmable_transactions/execution.rs
index bbde571ff8ab6..8d9c3234111b8 100644
--- a/sui-execution/v2/sui-adapter/src/programmable_transactions/execution.rs
+++ b/sui-execution/v2/sui-adapter/src/programmable_transactions/execution.rs
@@ -1084,7 +1084,7 @@ mod checked {
                     Type::TyParam(_) => {
                         invariant_violation!("TyParam should have been substituted")
                     }
-                    Type::Datatype(_) | Type::Datatype(_) if abilities.has_key() => {
+                    Type::Datatype(_) | Type::DatatypeInstantiation(_) if abilities.has_key() => {
                         let type_tag = context
                             .vm
                             .get_runtime()

From 0249e7f80351fc9e2380491e35b1583e9744bd3e Mon Sep 17 00:00:00 2001
From: stefan-mysten <135084671+stefan-mysten@users.noreply.github.com>
Date: Thu, 27 Jun 2024 09:30:49 -0700
Subject: [PATCH 05/57] [cherry-pick #18204] Cherry pick refactoring of
 `sui-test-validator` crate into `sui` to release v1.28 branch (#18436)

This PR integrates `sui-test-validator` binary into `sui start`, but
keeps the crate for now before being deprecated.
- the default behaviour of the existing `sui start` is preserved
- the default `sui-test-validator` behaviour can be achieved by passing
two flags: `sui start --force-regenesis --with-faucet`.
- adds a `sui-test-validator.sh` bash script that is executable to keep
backward compatibility with the previous binary
- keeps the `sui-test-validator` binary for now.
- changed default port for GraphQL to 9125

One difference in flag/options usage is that `sui-test-validator` used
to start `graphql` service when the `graphql-port` arg was passed. To
keep it consistent across all three services, they each have their own
flag to use to start the service with default host and port, and a port
can be provided to it as well:
- `--with-faucet` or `--with-faucet=9123`
- `--with-indexer` or `--with-indexer=9124`
- `--with-graphql` or `--with-graphql=9125`

Previously, `sui-test-validator` exposed a few flags and options (see
orig code

[here](https://github.com/MystenLabs/sui/blob/4f52e053f2869328d9fe62501853fbd93c8624d7/crates/sui-test-validator/src/main.rs#L30-L85)),
which were migrated to `sui start`. There are two new flags in `sui
start`, `--with-graphql` and `--with-faucet`, to make it easier to start
these services with default values. Due to this, the bash script checks
for multiple flags and their values and tries to ensure everything is
passed correctly.

`sui-test-validator` implemented a simple faucet wrapper of the
`sui-faucet` crate. This was moved into `faucet.rs` module in `sui`
crate.

Given that there are three extra services that can be started, plus a
configuration variable to start the network without a fullnode, here is
an explanation of what each service requires:
`graphql requires indexer` - without an indexer, the GraphQL will have
no data to serve. `--with-indexer` will be implied if `--with-graphql`
is passed. `indexer requires fullnode` - without a fullnode, the indexer
will start ingesting mainnet data with default settings. The program
throws an error here.

Existing tests.

---

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [x] CLI: Integrated `sui-test-validator` into `sui start`.

`sui start` can now be used to also start an indexer, a GraphQL service,
or a faucet. Note that you need to build `sui` with `--features
indexer`, and have installed `libpq` to start the indexer and GraphQL
services. By default, this feature is turned off to preserve backward
compatibility of `sui start`. Alternatively, you can download the latest
release and use the `sui-pg` binary, which is built using the `indexer`
feature.
- the default behaviour of the existing `sui start` is preserved
- the default `sui-test-validator` behaviour can be achieved by passing
two flags: `sui start --force-regenesis --with-faucet`.
- adds a `sui-test-validator.sh` bash script to `sui/scripts` folder
that is executable to keep backward compatibility with the previous
binary
- [ ] Rust SDK:
---
 .github/workflows/release.yml                 |   5 +
 Cargo.lock                                    |  13 +-
 binary-build-list.json                        |   2 +-
 crates/sui-cluster-test/Cargo.toml            |   1 -
 crates/sui-config/src/lib.rs                  |  16 +
 crates/sui-faucet/Cargo.toml                  |   1 -
 crates/sui-faucet/src/faucet/mod.rs           |  13 +-
 crates/sui-faucet/src/faucet/simple_faucet.rs | 389 +++++++++------
 crates/sui-faucet/src/lib.rs                  |   2 +
 crates/sui-faucet/src/main.rs                 | 282 +----------
 crates/sui-faucet/src/server.rs               | 278 +++++++++++
 crates/sui-sdk/examples/utils.rs              |   1 -
 crates/sui-sdk/src/lib.rs                     |   1 +
 .../src/node_config_builder.rs                |  13 +-
 crates/sui-swarm/src/memory/swarm.rs          |   4 +
 crates/sui/Cargo.toml                         |  59 ++-
 crates/sui/src/client_commands.rs             |   6 +-
 crates/sui/src/sui_commands.rs                | 471 +++++++++++++++---
 crates/sui/tests/cli_tests.rs                 |  10 +-
 scripts/sui-test-validator.sh                 | 105 ++++
 20 files changed, 1150 insertions(+), 522 deletions(-)
 create mode 100644 crates/sui-faucet/src/server.rs
 create mode 100755 scripts/sui-test-validator.sh

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3f7fb6f4c7c9a..82a960208e2ec 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -145,6 +145,7 @@ jobs:
         if: ${{ env.s3_archive_exist == '' }}
         shell: bash
         run: |
+          [ -f ~/.cargo/env ] && source ~/.cargo/env ; cargo build --bin sui --release --features indexer && mv target/release/sui target/release/sui-pg
           [ -f ~/.cargo/env ] && source ~/.cargo/env ; cargo build --release && cargo build --profile=dev --bin sui
 
       - name: Rename binaries for ${{ matrix.os }}
@@ -159,6 +160,10 @@ jobs:
             mv ./target/release/${binary}${{ env.extention }} ${{ env.TMP_BUILD_DIR }}/${binary}${{ env.extention }}
           done
 
+          # sui-pg is a special binary that is built with the indexer feature for sui start cmd
+          export binary='sui-pg' | tr -d $'\r')
+          mv ./target/release/${binary}${{ env.extention }} ${{ env.TMP_BUILD_DIR }}/${binary}${{ env.extention }}
+
           mv ./target/debug/sui${{ env.extention }} ${{ env.TMP_BUILD_DIR }}/sui-debug${{ env.extention }}
           tar -cvzf ./tmp/sui-${{ env.sui_tag }}-${{ env.os_type }}.tgz -C ${{ env.TMP_BUILD_DIR }} .
           [[ ${{ env.sui_tag }} == *"testnet"* ]] && aws s3 cp ./tmp/sui-${{ env.sui_tag }}-${{ env.os_type }}.tgz s3://sui-releases/releases/sui-${{ env.sui_tag }}-${{ env.os_type }}.tgz || true
diff --git a/Cargo.lock b/Cargo.lock
index f31dca3a259fc..567422cdea2b3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -11694,6 +11694,7 @@ dependencies = [
  "assert_cmd",
  "async-recursion",
  "async-trait",
+ "axum",
  "bcs",
  "bin-version",
  "bip32",
@@ -11702,11 +11703,13 @@ dependencies = [
  "colored",
  "csv",
  "datatest-stable",
+ "diesel",
  "expect-test",
  "fastcrypto",
  "fastcrypto-zkp",
  "fs_extra",
  "futures",
+ "http",
  "im",
  "inquire",
  "insta",
@@ -11739,9 +11742,13 @@ dependencies = [
  "shlex",
  "signature 1.6.4",
  "sui-bridge",
+ "sui-cluster-test",
  "sui-config",
  "sui-execution",
+ "sui-faucet",
  "sui-genesis-builder",
+ "sui-graphql-rpc",
+ "sui-indexer",
  "sui-json",
  "sui-json-rpc-types",
  "sui-keys",
@@ -11767,8 +11774,12 @@ dependencies = [
  "thiserror",
  "tokio",
  "toml 0.7.4",
+ "tower",
+ "tower-http",
  "tracing",
  "unescape",
+ "url",
+ "uuid 1.2.2",
 ]
 
 [[package]]
@@ -12201,7 +12212,6 @@ dependencies = [
  "reqwest",
  "serde_json",
  "shared-crypto",
- "sui",
  "sui-config",
  "sui-core",
  "sui-faucet",
@@ -12587,7 +12597,6 @@ dependencies = [
  "scopeguard",
  "serde",
  "shared-crypto",
- "sui",
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
diff --git a/binary-build-list.json b/binary-build-list.json
index 4bb16bb391a6f..4855c1b2a220b 100644
--- a/binary-build-list.json
+++ b/binary-build-list.json
@@ -4,11 +4,11 @@
         "sui-node",
         "sui-tool",
         "sui-faucet",
-        "sui-test-validator",
         "sui-data-ingestion",
         "sui-bridge",
         "sui-bridge-cli",
         "sui-graphql-rpc",
+        "sui-test-validator",
         "move-analyzer"
     ],
     "internal_binaries": [
diff --git a/crates/sui-cluster-test/Cargo.toml b/crates/sui-cluster-test/Cargo.toml
index 7bf3bbe69de83..a6477761d408b 100644
--- a/crates/sui-cluster-test/Cargo.toml
+++ b/crates/sui-cluster-test/Cargo.toml
@@ -29,7 +29,6 @@ sui-indexer.workspace = true
 sui-faucet.workspace = true
 sui-graphql-rpc.workspace = true
 sui-swarm.workspace = true
-sui.workspace = true
 sui-swarm-config.workspace = true
 sui-json-rpc-types.workspace = true
 sui-sdk.workspace = true
diff --git a/crates/sui-config/src/lib.rs b/crates/sui-config/src/lib.rs
index 6432b2338c244..abe14139b08c2 100644
--- a/crates/sui-config/src/lib.rs
+++ b/crates/sui-config/src/lib.rs
@@ -52,6 +52,22 @@ pub fn sui_config_dir() -> Result {
     })
 }
 
+/// Check if the genesis blob exists in the given directory or the default directory.
+pub fn genesis_blob_exists(config_dir: Option) -> bool {
+    if let Some(dir) = config_dir {
+        dir.join(SUI_GENESIS_FILENAME).exists()
+    } else if let Some(config_env) = std::env::var_os("SUI_CONFIG_DIR") {
+        Path::new(&config_env).join(SUI_GENESIS_FILENAME).exists()
+    } else if let Some(home) = dirs::home_dir() {
+        let mut config = PathBuf::new();
+        config.push(&home);
+        config.extend([SUI_DIR, SUI_CONFIG_DIR, SUI_GENESIS_FILENAME]);
+        config.exists()
+    } else {
+        false
+    }
+}
+
 pub fn validator_config_file(address: Multiaddr, i: usize) -> String {
     multiaddr_to_filename(address).unwrap_or(format!("validator-config-{}.yaml", i))
 }
diff --git a/crates/sui-faucet/Cargo.toml b/crates/sui-faucet/Cargo.toml
index 7f2cb4d76adc6..40c8642d9257d 100644
--- a/crates/sui-faucet/Cargo.toml
+++ b/crates/sui-faucet/Cargo.toml
@@ -29,7 +29,6 @@ rocksdb.workspace = true
 tempfile.workspace = true
 parking_lot.workspace = true
 
-sui.workspace = true
 sui-json-rpc-types.workspace = true
 sui-types.workspace = true
 sui-config.workspace = true
diff --git a/crates/sui-faucet/src/faucet/mod.rs b/crates/sui-faucet/src/faucet/mod.rs
index a1f890f22f868..1483123803318 100644
--- a/crates/sui-faucet/src/faucet/mod.rs
+++ b/crates/sui-faucet/src/faucet/mod.rs
@@ -10,7 +10,7 @@ mod simple_faucet;
 mod write_ahead_log;
 pub use self::simple_faucet::SimpleFaucet;
 use clap::Parser;
-use std::{net::Ipv4Addr, path::PathBuf};
+use std::{net::Ipv4Addr, path::PathBuf, sync::Arc};
 
 #[derive(Serialize, Deserialize, Debug, Clone)]
 pub struct FaucetReceipt {
@@ -44,6 +44,17 @@ pub enum BatchSendStatusType {
     DISCARDED,
 }
 
+pub struct AppState> {
+    pub faucet: F,
+    pub config: FaucetConfig,
+}
+
+impl AppState {
+    pub fn new(faucet: F, config: FaucetConfig) -> Self {
+        Self { faucet, config }
+    }
+}
+
 #[async_trait]
 pub trait Faucet {
     /// Send `Coin` of the specified amount to the recipient
diff --git a/crates/sui-faucet/src/faucet/simple_faucet.rs b/crates/sui-faucet/src/faucet/simple_faucet.rs
index f93b4cfa5ba6c..0bdbb8641d764 100644
--- a/crates/sui-faucet/src/faucet/simple_faucet.rs
+++ b/crates/sui-faucet/src/faucet/simple_faucet.rs
@@ -1086,15 +1086,45 @@ pub async fn batch_transfer_gases(
 
 #[cfg(test)]
 mod tests {
-    use sui::{
-        client_commands::{Opts, OptsWithGas, SuiClientCommandResult, SuiClientCommands},
-        key_identity::KeyIdentity,
-    };
+    use super::*;
+    use anyhow::*;
+    use shared_crypto::intent::Intent;
     use sui_json_rpc_types::SuiExecutionStatus;
+    use sui_json_rpc_types::SuiTransactionBlockEffects;
     use sui_sdk::wallet_context::WalletContext;
+    use sui_types::transaction::SenderSignedData;
+    use sui_types::transaction::TransactionDataAPI;
     use test_cluster::TestClusterBuilder;
 
-    use super::*;
+    async fn execute_tx(
+        ctx: &mut WalletContext,
+        tx_data: TransactionData,
+    ) -> Result {
+        let signature = ctx.config.keystore.sign_secure(
+            &tx_data.sender(),
+            &tx_data,
+            Intent::sui_transaction(),
+        )?;
+        let sender_signed_data = SenderSignedData::new_from_sender_signature(tx_data, signature);
+        let transaction = Transaction::new(sender_signed_data);
+        let response = ctx.execute_transaction_may_fail(transaction).await?;
+        let result_effects = response.clone().effects;
+
+        if let Some(effects) = result_effects {
+            if matches!(effects.status(), SuiExecutionStatus::Failure { .. }) {
+                Err(anyhow!(
+                    "Error executing transaction: {:#?}",
+                    effects.status()
+                ))
+            } else {
+                Ok(effects)
+            }
+        } else {
+            Err(anyhow!(
+                "Effects from SuiTransactionBlockResult should not be empty"
+            ))
+        }
+    }
 
     #[tokio::test]
     async fn simple_faucet_basic_interface_should_work() {
@@ -1106,17 +1136,25 @@ mod tests {
 
         let address = test_cluster.get_address_0();
         let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
-        // Split some extra gas coins so that we can test batch queue
-        SuiClientCommands::SplitCoin {
-            coin_id: *gases[0].id(),
-            amounts: None,
-            count: Some(10),
-            opts: OptsWithGas::for_testing(None, 50_000_000),
-        }
-        .execute(&mut context)
-        .await
-        .expect("split failed");
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
+        let client = context.get_client().await.unwrap();
+        let tx_kind = client
+            .transaction_builder()
+            .split_coin_tx_kind(gas_coins.first().unwrap().0, None, Some(10))
+            .await
+            .unwrap();
+        let gas_budget = 50_000_000;
+        let rgp = context.get_reference_gas_price().await.unwrap();
+        let tx_data = client
+            .transaction_builder()
+            .tx_data(address, tx_kind, gas_budget, rgp, vec![], None)
+            .await
+            .unwrap();
+
+        execute_tx(&mut context, tx_data).await.unwrap();
 
         let faucet = SimpleFaucet::new(
             context,
@@ -1144,9 +1182,12 @@ mod tests {
     async fn test_init_gas_queue() {
         let test_cluster = TestClusterBuilder::new().build().await;
         let address = test_cluster.get_address_0();
-        let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
-        let gases = HashSet::from_iter(gases.into_iter().map(|gas| *gas.id()));
+        let context = test_cluster.wallet;
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
+        let gas_coins = HashSet::from_iter(gas_coins.into_iter().map(|gas| gas.0));
 
         let tmp = tempfile::tempdir().unwrap();
         let prom_registry = Registry::new();
@@ -1163,13 +1204,13 @@ mod tests {
         let available = faucet.metrics.total_available_coins.get();
         let faucet_unwrapped = &mut Arc::try_unwrap(faucet).unwrap();
 
-        let candidates = faucet_unwrapped.drain_gas_queue(gases.len()).await;
+        let candidates = faucet_unwrapped.drain_gas_queue(gas_coins.len()).await;
 
         assert_eq!(available as usize, candidates.len());
         assert_eq!(
-            candidates, gases,
+            candidates, gas_coins,
             "gases: {:?}, candidates: {:?}",
-            gases, candidates
+            gas_coins, candidates
         );
     }
 
@@ -1177,10 +1218,12 @@ mod tests {
     async fn test_transfer_state() {
         let test_cluster = TestClusterBuilder::new().build().await;
         let address = test_cluster.get_address_0();
-        let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
-
-        let gases = HashSet::from_iter(gases.into_iter().map(|gas| *gas.id()));
+        let context = test_cluster.wallet;
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
+        let gas_coins = HashSet::from_iter(gas_coins.into_iter().map(|gas| gas.0));
 
         let tmp = tempfile::tempdir().unwrap();
         let prom_registry = Registry::new();
@@ -1194,7 +1237,7 @@ mod tests {
         .await
         .unwrap();
 
-        let number_of_coins = gases.len();
+        let number_of_coins = gas_coins.len();
         let amounts = &vec![1; number_of_coins];
         let _ = futures::future::join_all((0..number_of_coins).map(|_| {
             faucet.send(
@@ -1213,12 +1256,12 @@ mod tests {
         faucet.shutdown_batch_send_task();
 
         let faucet_unwrapped: &mut SimpleFaucet = &mut Arc::try_unwrap(faucet).unwrap();
-        let candidates = faucet_unwrapped.drain_gas_queue(gases.len()).await;
+        let candidates = faucet_unwrapped.drain_gas_queue(gas_coins.len()).await;
         assert_eq!(available as usize, candidates.len());
         assert_eq!(
-            candidates, gases,
+            candidates, gas_coins,
             "gases: {:?}, candidates: {:?}",
-            gases, candidates
+            gas_coins, candidates
         );
     }
 
@@ -1231,17 +1274,25 @@ mod tests {
         let tmp = tempfile::tempdir().unwrap();
         let address = test_cluster.get_address_0();
         let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
-        // Split some extra gas coins so that we can test batch queue
-        SuiClientCommands::SplitCoin {
-            coin_id: *gases[0].id(),
-            amounts: None,
-            count: Some(10),
-            opts: OptsWithGas::for_testing(None, 50_000_000),
-        }
-        .execute(&mut context)
-        .await
-        .expect("split failed");
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
+        let client = context.get_client().await.unwrap();
+        let tx_kind = client
+            .transaction_builder()
+            .split_coin_tx_kind(gas_coins.first().unwrap().0, None, Some(10))
+            .await
+            .unwrap();
+        let gas_budget = 50_000_000;
+        let rgp = context.get_reference_gas_price().await.unwrap();
+        let tx_data = client
+            .transaction_builder()
+            .tx_data(address, tx_kind, gas_budget, rgp, vec![], None)
+            .await
+            .unwrap();
+
+        execute_tx(&mut context, tx_data).await.unwrap();
 
         let faucet = SimpleFaucet::new(
             context,
@@ -1367,15 +1418,20 @@ mod tests {
     async fn test_discard_invalid_gas() {
         let test_cluster = TestClusterBuilder::new().build().await;
         let address = test_cluster.get_address_0();
-        let mut context = test_cluster.wallet;
-        let mut gases = get_current_gases(address, &mut context).await;
+        let context = test_cluster.wallet;
+        let mut gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
 
-        let bad_gas = gases.swap_remove(0);
-        let gases = HashSet::from_iter(gases.into_iter().map(|gas| *gas.id()));
+        let bad_gas = gas_coins.swap_remove(0);
+        let gas_coins = HashSet::from_iter(gas_coins.into_iter().map(|gas| gas.0));
 
         let tmp = tempfile::tempdir().unwrap();
         let prom_registry = Registry::new();
         let config = FaucetConfig::default();
+
+        let client = context.get_client().await.unwrap();
         let faucet = SimpleFaucet::new(
             context,
             &prom_registry,
@@ -1385,29 +1441,23 @@ mod tests {
         .await
         .unwrap();
         faucet.shutdown_batch_send_task();
-
         let faucet: &mut SimpleFaucet = &mut Arc::try_unwrap(faucet).unwrap();
 
         // Now we transfer one gas out
-        let res = SuiClientCommands::PayAllSui {
-            input_coins: vec![*bad_gas.id()],
-            recipient: KeyIdentity::Address(SuiAddress::random_for_testing_only()),
-            opts: Opts::for_testing(2_000_000),
-        }
-        .execute(faucet.wallet_mut())
-        .await
-        .unwrap();
-
-        if let SuiClientCommandResult::TransactionBlock(response) = res {
-            assert!(matches!(
-                response.effects.unwrap().status(),
-                SuiExecutionStatus::Success
-            ));
-        } else {
-            panic!("PayAllSui command did not return SuiClientCommandResult::TransactionBlock");
-        };
+        let gas_budget = 50_000_000;
+        let tx_data = client
+            .transaction_builder()
+            .pay_all_sui(
+                address,
+                vec![bad_gas.0],
+                SuiAddress::random_for_testing_only(),
+                gas_budget,
+            )
+            .await
+            .unwrap();
+        execute_tx(faucet.wallet_mut(), tx_data).await.unwrap();
 
-        let number_of_coins = gases.len();
+        let number_of_coins = gas_coins.len();
         let amounts = &vec![1; number_of_coins];
         // We traverse the list twice, which must trigger the transferred gas to be kicked out
         futures::future::join_all((0..2).map(|_| {
@@ -1423,13 +1473,13 @@ mod tests {
         // Note `gases` does not contain the bad gas.
         let available = faucet.metrics.total_available_coins.get();
         let discarded = faucet.metrics.total_discarded_coins.get();
-        let candidates = faucet.drain_gas_queue(gases.len()).await;
+        let candidates = faucet.drain_gas_queue(gas_coins.len()).await;
         assert_eq!(available as usize, candidates.len());
         assert_eq!(discarded, 1);
         assert_eq!(
-            candidates, gases,
+            candidates, gas_coins,
             "gases: {:?}, candidates: {:?}",
-            gases, candidates
+            gas_coins, candidates
         );
     }
 
@@ -1504,39 +1554,45 @@ mod tests {
         let test_cluster = TestClusterBuilder::new().build().await;
         let address = test_cluster.get_address_0();
         let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
 
         // split out a coin that has a very small balance such that
         // this coin will be not used later on. This is the new default amount for faucet due to gas changes
         let config = FaucetConfig::default();
         let tiny_value = (config.num_coins as u64 * config.amount) + 1;
-        let res = SuiClientCommands::SplitCoin {
-            coin_id: *gases[0].id(),
-            amounts: Some(vec![tiny_value]),
-            count: None,
-            opts: OptsWithGas::for_testing(None, 50_000_000),
-        }
-        .execute(&mut context)
-        .await;
+        let client = context.get_client().await.unwrap();
+        let tx_kind = client
+            .transaction_builder()
+            .split_coin_tx_kind(gas_coins.first().unwrap().0, Some(vec![tiny_value]), None)
+            .await
+            .unwrap();
+        let gas_budget = 50_000_000;
+        let rgp = context.get_reference_gas_price().await.unwrap();
+        let tx_data = client
+            .transaction_builder()
+            .tx_data(address, tx_kind, gas_budget, rgp, vec![], None)
+            .await
+            .unwrap();
 
-        let tiny_coin_id = if let SuiClientCommandResult::TransactionBlock(resp) = res.unwrap() {
-            resp.effects.as_ref().unwrap().created()[0]
-                .reference
-                .object_id
-        } else {
-            panic!("SplitCoin command did not return SuiClientCommandResult::TransactionBlock");
-        };
+        let effects = execute_tx(&mut context, tx_data).await.unwrap();
+
+        let tiny_coin_id = effects.created()[0].reference.object_id;
 
         // Get the latest list of gas
-        let gases = get_current_gases(address, &mut context).await;
-        let tiny_amount = gases
+        let gas_coins = context.gas_objects(address).await.unwrap();
+
+        let tiny_amount = gas_coins
             .iter()
-            .find(|gas| gas.id() == &tiny_coin_id)
+            .find(|gas| gas.1.object_id == tiny_coin_id)
             .unwrap()
-            .value();
+            .0;
         assert_eq!(tiny_amount, tiny_value);
 
-        let gases: HashSet = HashSet::from_iter(gases.into_iter().map(|gas| *gas.id()));
+        let gas_coins: HashSet =
+            HashSet::from_iter(gas_coins.into_iter().map(|gas| gas.1.object_id));
 
         let tmp = tempfile::tempdir().unwrap();
         let prom_registry = Registry::new();
@@ -1553,7 +1609,7 @@ mod tests {
         let faucet: &mut SimpleFaucet = &mut Arc::try_unwrap(faucet).unwrap();
 
         // Ask for a value higher than tiny coin + DEFAULT_GAS_COMPUTATION_BUCKET
-        let number_of_coins = gases.len();
+        let number_of_coins = gas_coins.len();
         let amounts = &vec![tiny_value + 1; number_of_coins];
         // We traverse the list ten times, which must trigger the tiny gas to be examined and then discarded
         futures::future::join_all((0..10).map(|_| {
@@ -1576,7 +1632,7 @@ mod tests {
         let discarded = faucet.metrics.total_discarded_coins.get();
 
         info!("discarded: {:?}", discarded);
-        let candidates = faucet.drain_gas_queue(gases.len() - 1).await;
+        let candidates = faucet.drain_gas_queue(gas_coins.len() - 1).await;
 
         assert_eq!(discarded, 1);
         assert!(candidates.get(&tiny_coin_id).is_none());
@@ -1587,38 +1643,50 @@ mod tests {
         let test_cluster = TestClusterBuilder::new().build().await;
         let address = test_cluster.get_address_0();
         let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
         let config = FaucetConfig::default();
 
         // The coin that is split off stays because we don't try to refresh the coin vector
         let reasonable_value = (config.num_coins as u64 * config.amount) * 10;
-        SuiClientCommands::SplitCoin {
-            coin_id: *gases[0].id(),
-            amounts: Some(vec![reasonable_value]),
-            count: None,
-            opts: OptsWithGas::for_testing(None, 50_000_000),
-        }
-        .execute(&mut context)
-        .await
-        .expect("split failed");
+        let client = context.get_client().await.unwrap();
+        let tx_kind = client
+            .transaction_builder()
+            .split_coin_tx_kind(
+                gas_coins.first().unwrap().0,
+                Some(vec![reasonable_value]),
+                None,
+            )
+            .await
+            .unwrap();
+        let gas_budget = 50_000_000;
+        let rgp = context.get_reference_gas_price().await.unwrap();
+        let tx_data = client
+            .transaction_builder()
+            .tx_data(address, tx_kind, gas_budget, rgp, vec![], None)
+            .await
+            .unwrap();
+        execute_tx(&mut context, tx_data).await.unwrap();
 
         let destination_address = SuiAddress::random_for_testing_only();
         // Transfer all valid gases away except for 1
-        for gas in gases.iter().take(gases.len() - 1) {
-            SuiClientCommands::TransferSui {
-                to: KeyIdentity::Address(destination_address),
-                sui_coin_object_id: *gas.id(),
-                amount: None,
-                opts: Opts::for_testing(50_000_000),
-            }
-            .execute(&mut context)
-            .await
-            .expect("transfer failed");
+        for gas in gas_coins.iter().take(gas_coins.len() - 1) {
+            let tx_data = client
+                .transaction_builder()
+                .transfer_sui(address, gas.0, gas_budget, destination_address, None)
+                .await
+                .unwrap();
+            execute_tx(&mut context, tx_data).await.unwrap();
         }
 
         // Assert that the coins were transferred away successfully to destination address
-        let gases = get_current_gases(destination_address, &mut context).await;
-        assert!(!gases.is_empty());
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
+        assert!(!gas_coins.is_empty());
 
         let tmp = tempfile::tempdir().unwrap();
         let prom_registry = Registry::new();
@@ -1656,37 +1724,49 @@ mod tests {
         let test_cluster = TestClusterBuilder::new().build().await;
         let address = test_cluster.get_address_0();
         let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
         let config = FaucetConfig::default();
 
         let tiny_value = (config.num_coins as u64 * config.amount) + 1;
-        let _res = SuiClientCommands::SplitCoin {
-            coin_id: *gases[0].id(),
-            amounts: Some(vec![tiny_value]),
-            count: None,
-            opts: OptsWithGas::for_testing(None, 50_000_000),
-        }
-        .execute(&mut context)
-        .await;
+        let client = context.get_client().await.unwrap();
+        let tx_kind = client
+            .transaction_builder()
+            .split_coin_tx_kind(gas_coins.first().unwrap().0, Some(vec![tiny_value]), None)
+            .await
+            .unwrap();
+
+        let gas_budget = 50_000_000;
+        let rgp = context.get_reference_gas_price().await.unwrap();
+
+        let tx_data = client
+            .transaction_builder()
+            .tx_data(address, tx_kind, gas_budget, rgp, vec![], None)
+            .await
+            .unwrap();
+
+        execute_tx(&mut context, tx_data).await.unwrap();
 
         let destination_address = SuiAddress::random_for_testing_only();
 
         // Transfer all valid gases away
-        for gas in gases {
-            SuiClientCommands::TransferSui {
-                to: KeyIdentity::Address(destination_address),
-                sui_coin_object_id: *gas.id(),
-                amount: None,
-                opts: Opts::for_testing(50_000_000),
-            }
-            .execute(&mut context)
-            .await
-            .expect("transfer failed");
+        for gas in gas_coins {
+            let tx_data = client
+                .transaction_builder()
+                .transfer_sui(address, gas.0, gas_budget, destination_address, None)
+                .await
+                .unwrap();
+            execute_tx(&mut context, tx_data).await.unwrap();
         }
 
         // Assert that the coins were transferred away successfully to destination address
-        let gases = get_current_gases(destination_address, &mut context).await;
-        assert!(!gases.is_empty());
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(destination_address)
+            .await
+            .unwrap();
+        assert!(!gas_coins.is_empty());
 
         let tmp = tempfile::tempdir().unwrap();
         let prom_registry = Registry::new();
@@ -1787,17 +1867,24 @@ mod tests {
         let config: FaucetConfig = Default::default();
         let address = test_cluster.get_address_0();
         let mut context = test_cluster.wallet;
-        let gases = get_current_gases(address, &mut context).await;
-        // Split some extra gas coins so that we can test batch queue
-        SuiClientCommands::SplitCoin {
-            coin_id: *gases[0].id(),
-            amounts: None,
-            count: Some(10),
-            opts: OptsWithGas::for_testing(None, 50_000_000),
-        }
-        .execute(&mut context)
-        .await
-        .expect("split failed");
+        let gas_coins = context
+            .get_all_gas_objects_owned_by_address(address)
+            .await
+            .unwrap();
+        let client = context.get_client().await.unwrap();
+        let tx_kind = client
+            .transaction_builder()
+            .split_coin_tx_kind(gas_coins.first().unwrap().0, None, Some(10))
+            .await
+            .unwrap();
+        let gas_budget = 50_000_000;
+        let rgp = context.get_reference_gas_price().await.unwrap();
+        let tx_data = client
+            .transaction_builder()
+            .tx_data(address, tx_kind, gas_budget, rgp, vec![], None)
+            .await
+            .unwrap();
+        execute_tx(&mut context, tx_data).await.unwrap();
 
         let prom_registry = Registry::new();
         let tmp = tempfile::tempdir().unwrap();
@@ -1898,18 +1985,4 @@ mod tests {
         actual_amounts.sort_unstable();
         assert_eq!(actual_amounts, amounts);
     }
-
-    async fn get_current_gases(address: SuiAddress, context: &mut WalletContext) -> Vec {
-        // Get the latest list of gas
-        let results = SuiClientCommands::Gas {
-            address: Some(KeyIdentity::Address(address)),
-        }
-        .execute(context)
-        .await
-        .unwrap();
-        match results {
-            SuiClientCommandResult::Gas(gases) => gases,
-            other => panic!("Expect SuiClientCommandResult::Gas, but got {:?}", other),
-        }
-    }
 }
diff --git a/crates/sui-faucet/src/lib.rs b/crates/sui-faucet/src/lib.rs
index 0b1c4dd4c9d73..b6947a8891b22 100644
--- a/crates/sui-faucet/src/lib.rs
+++ b/crates/sui-faucet/src/lib.rs
@@ -6,6 +6,7 @@ mod faucet;
 mod metrics;
 mod requests;
 mod responses;
+mod server;
 
 pub mod metrics_layer;
 pub use metrics_layer::*;
@@ -14,3 +15,4 @@ pub use errors::FaucetError;
 pub use faucet::*;
 pub use requests::*;
 pub use responses::*;
+pub use server::{create_wallet_context, start_faucet};
diff --git a/crates/sui-faucet/src/main.rs b/crates/sui-faucet/src/main.rs
index a8899b54fdb08..89d49cf34c6a9 100644
--- a/crates/sui-faucet/src/main.rs
+++ b/crates/sui-faucet/src/main.rs
@@ -1,42 +1,15 @@
 // Copyright (c) Mysten Labs, Inc.
 // SPDX-License-Identifier: Apache-2.0
 
-use axum::{
-    error_handling::HandleErrorLayer,
-    extract::Path,
-    http::StatusCode,
-    response::IntoResponse,
-    routing::{get, post},
-    BoxError, Extension, Json, Router,
-};
 use clap::Parser;
-use http::Method;
-use mysten_metrics::spawn_monitored_task;
 use std::env;
-use std::{
-    borrow::Cow,
-    net::{IpAddr, SocketAddr},
-    sync::Arc,
-    time::Duration,
-};
-use sui_config::{sui_config_dir, SUI_CLIENT_CONFIG};
-use sui_faucet::{
-    BatchFaucetResponse, BatchStatusFaucetResponse, Faucet, FaucetConfig, FaucetError,
-    FaucetRequest, FaucetResponse, RequestMetricsLayer, SimpleFaucet,
-};
-use sui_sdk::wallet_context::WalletContext;
-use tower::{limit::RateLimitLayer, ServiceBuilder};
-use tower_http::cors::{Any, CorsLayer};
-use tracing::{info, warn};
-use uuid::Uuid;
+use std::sync::Arc;
+use sui_config::sui_config_dir;
+use sui_faucet::{create_wallet_context, start_faucet, AppState};
+use sui_faucet::{FaucetConfig, SimpleFaucet};
+use tracing::info;
 
 const CONCURRENCY_LIMIT: usize = 30;
-
-struct AppState> {
-    faucet: F,
-    config: FaucetConfig,
-}
-
 const PROM_PORT_ADDR: &str = "0.0.0.0:9184";
 
 #[tokio::main]
@@ -46,25 +19,20 @@ async fn main() -> Result<(), anyhow::Error> {
         .with_env()
         .init();
 
-    let max_concurrency = match env::var("MAX_CONCURRENCY") {
-        Ok(val) => val.parse::().unwrap(),
-        _ => CONCURRENCY_LIMIT,
-    };
-    info!("Max concurrency: {max_concurrency}.");
-
     let config: FaucetConfig = FaucetConfig::parse();
     let FaucetConfig {
-        port,
-        host_ip,
-        request_buffer_size,
-        max_request_per_second,
         wallet_client_timeout_secs,
         ref write_ahead_log,
-        wal_retry_interval,
         ..
     } = config;
 
-    let context = create_wallet_context(wallet_client_timeout_secs)?;
+    let context = create_wallet_context(wallet_client_timeout_secs, sui_config_dir()?)?;
+
+    let max_concurrency = match env::var("MAX_CONCURRENCY") {
+        Ok(val) => val.parse::().unwrap(),
+        _ => CONCURRENCY_LIMIT,
+    };
+    info!("Max concurrency: {max_concurrency}.");
 
     let prom_binding = PROM_PORT_ADDR.parse().unwrap();
     info!("Starting Prometheus HTTP endpoint at {}", prom_binding);
@@ -82,229 +50,5 @@ async fn main() -> Result<(), anyhow::Error> {
         config,
     });
 
-    // TODO: restrict access if needed
-    let cors = CorsLayer::new()
-        .allow_methods(vec![Method::GET, Method::POST])
-        .allow_headers(Any)
-        .allow_origin(Any);
-
-    let app = Router::new()
-        .route("/", get(health))
-        .route("/gas", post(request_gas))
-        .route("/v1/gas", post(batch_request_gas))
-        .route("/v1/status/:task_id", get(request_status))
-        .layer(
-            ServiceBuilder::new()
-                .layer(HandleErrorLayer::new(handle_error))
-                .layer(RequestMetricsLayer::new(&prometheus_registry))
-                .layer(cors)
-                .load_shed()
-                .buffer(request_buffer_size)
-                .layer(RateLimitLayer::new(
-                    max_request_per_second,
-                    Duration::from_secs(1),
-                ))
-                .concurrency_limit(max_concurrency)
-                .layer(Extension(app_state.clone()))
-                .into_inner(),
-        );
-
-    spawn_monitored_task!(async move {
-        info!("Starting task to clear WAL.");
-        loop {
-            // Every config.wal_retry_interval (Default: 300 seconds) we try to clear the wal coins
-            tokio::time::sleep(Duration::from_secs(wal_retry_interval)).await;
-            app_state.faucet.retry_wal_coins().await.unwrap();
-        }
-    });
-
-    let addr = SocketAddr::new(IpAddr::V4(host_ip), port);
-    info!("listening on {}", addr);
-    axum::Server::bind(&addr)
-        .serve(app.into_make_service())
-        .await?;
-    Ok(())
-}
-
-/// basic handler that responds with a static string
-async fn health() -> &'static str {
-    "OK"
-}
-
-/// handler for batch_request_gas requests
-async fn batch_request_gas(
-    Extension(state): Extension>,
-    Json(payload): Json,
-) -> impl IntoResponse {
-    let id = Uuid::new_v4();
-    // ID for traceability
-    info!(uuid = ?id, "Got new gas request.");
-
-    let FaucetRequest::FixedAmountRequest(request) = payload else {
-        return (
-            StatusCode::BAD_REQUEST,
-            Json(BatchFaucetResponse::from(FaucetError::Internal(
-                "Input Error.".to_string(),
-            ))),
-        );
-    };
-
-    if state.config.batch_enabled {
-        let result = spawn_monitored_task!(async move {
-            state
-                .faucet
-                .batch_send(
-                    id,
-                    request.recipient,
-                    &vec![state.config.amount; state.config.num_coins],
-                )
-                .await
-        })
-        .await
-        .unwrap();
-
-        match result {
-            Ok(v) => {
-                info!(uuid =?id, "Request is successfully served");
-                (StatusCode::ACCEPTED, Json(BatchFaucetResponse::from(v)))
-            }
-            Err(v) => {
-                warn!(uuid =?id, "Failed to request gas: {:?}", v);
-                (
-                    StatusCode::INTERNAL_SERVER_ERROR,
-                    Json(BatchFaucetResponse::from(v)),
-                )
-            }
-        }
-    } else {
-        // TODO (jian): remove this feature gate when batch has proven to be baked long enough
-        info!(uuid = ?id, "Falling back to v1 implementation");
-        let result = spawn_monitored_task!(async move {
-            state
-                .faucet
-                .send(
-                    id,
-                    request.recipient,
-                    &vec![state.config.amount; state.config.num_coins],
-                )
-                .await
-        })
-        .await
-        .unwrap();
-
-        match result {
-            Ok(_) => {
-                info!(uuid =?id, "Request is successfully served");
-                (StatusCode::ACCEPTED, Json(BatchFaucetResponse::from(id)))
-            }
-            Err(v) => {
-                warn!(uuid =?id, "Failed to request gas: {:?}", v);
-                (
-                    StatusCode::INTERNAL_SERVER_ERROR,
-                    Json(BatchFaucetResponse::from(v)),
-                )
-            }
-        }
-    }
-}
-
-/// handler for batch_get_status requests
-async fn request_status(
-    Extension(state): Extension>,
-    Path(id): Path,
-) -> impl IntoResponse {
-    match Uuid::parse_str(&id) {
-        Ok(task_id) => {
-            let result = state.faucet.get_batch_send_status(task_id).await;
-            match result {
-                Ok(v) => (
-                    StatusCode::CREATED,
-                    Json(BatchStatusFaucetResponse::from(v)),
-                ),
-                Err(v) => (
-                    StatusCode::INTERNAL_SERVER_ERROR,
-                    Json(BatchStatusFaucetResponse::from(v)),
-                ),
-            }
-        }
-        Err(e) => (
-            StatusCode::INTERNAL_SERVER_ERROR,
-            Json(BatchStatusFaucetResponse::from(FaucetError::Internal(
-                e.to_string(),
-            ))),
-        ),
-    }
-}
-
-/// handler for all the request_gas requests
-async fn request_gas(
-    Extension(state): Extension>,
-    Json(payload): Json,
-) -> impl IntoResponse {
-    // ID for traceability
-    let id = Uuid::new_v4();
-    info!(uuid = ?id, "Got new gas request.");
-    let result = match payload {
-        FaucetRequest::FixedAmountRequest(requests) => {
-            // We spawn a tokio task for this such that connection drop will not interrupt
-            // it and impact the recycling of coins
-            spawn_monitored_task!(async move {
-                state
-                    .faucet
-                    .send(
-                        id,
-                        requests.recipient,
-                        &vec![state.config.amount; state.config.num_coins],
-                    )
-                    .await
-            })
-            .await
-            .unwrap()
-        }
-        _ => {
-            return (
-                StatusCode::BAD_REQUEST,
-                Json(FaucetResponse::from(FaucetError::Internal(
-                    "Input Error.".to_string(),
-                ))),
-            )
-        }
-    };
-    match result {
-        Ok(v) => {
-            info!(uuid =?id, "Request is successfully served");
-            (StatusCode::CREATED, Json(FaucetResponse::from(v)))
-        }
-        Err(v) => {
-            warn!(uuid =?id, "Failed to request gas: {:?}", v);
-            (
-                StatusCode::INTERNAL_SERVER_ERROR,
-                Json(FaucetResponse::from(v)),
-            )
-        }
-    }
-}
-
-fn create_wallet_context(timeout_secs: u64) -> Result {
-    let wallet_conf = sui_config_dir()?.join(SUI_CLIENT_CONFIG);
-    info!("Initialize wallet from config path: {:?}", wallet_conf);
-    WalletContext::new(
-        &wallet_conf,
-        Some(Duration::from_secs(timeout_secs)),
-        Some(1000),
-    )
-}
-
-async fn handle_error(error: BoxError) -> impl IntoResponse {
-    if error.is::() {
-        return (
-            StatusCode::SERVICE_UNAVAILABLE,
-            Cow::from("service is overloaded, please try again later"),
-        );
-    }
-
-    (
-        StatusCode::INTERNAL_SERVER_ERROR,
-        Cow::from(format!("Unhandled internal error: {}", error)),
-    )
+    start_faucet(app_state, max_concurrency, &prometheus_registry).await
 }
diff --git a/crates/sui-faucet/src/server.rs b/crates/sui-faucet/src/server.rs
new file mode 100644
index 0000000000000..4b4f2400f6d13
--- /dev/null
+++ b/crates/sui-faucet/src/server.rs
@@ -0,0 +1,278 @@
+// Copyright (c) Mysten Labs, Inc.
+// SPDX-License-Identifier: Apache-2.0
+
+use crate::{
+    AppState, BatchFaucetResponse, BatchStatusFaucetResponse, FaucetConfig, FaucetError,
+    FaucetRequest, FaucetResponse, RequestMetricsLayer,
+};
+
+use axum::{
+    error_handling::HandleErrorLayer,
+    extract::Path,
+    http::StatusCode,
+    response::IntoResponse,
+    routing::{get, post},
+    BoxError, Extension, Json, Router,
+};
+use http::Method;
+use mysten_metrics::spawn_monitored_task;
+use prometheus::Registry;
+use std::{
+    borrow::Cow,
+    net::{IpAddr, SocketAddr},
+    path::PathBuf,
+    sync::Arc,
+    time::Duration,
+};
+use sui_config::SUI_CLIENT_CONFIG;
+use sui_sdk::wallet_context::WalletContext;
+use tower::{limit::RateLimitLayer, ServiceBuilder};
+use tower_http::cors::{Any, CorsLayer};
+use tracing::{info, warn};
+use uuid::Uuid;
+
+use crate::faucet::Faucet;
+
+pub async fn start_faucet(
+    app_state: Arc,
+    concurrency_limit: usize,
+    prometheus_registry: &Registry,
+) -> Result<(), anyhow::Error> {
+    // TODO: restrict access if needed
+    let cors = CorsLayer::new()
+        .allow_methods(vec![Method::GET, Method::POST])
+        .allow_headers(Any)
+        .allow_origin(Any);
+
+    let FaucetConfig {
+        port,
+        host_ip,
+        request_buffer_size,
+        max_request_per_second,
+        wal_retry_interval,
+        ..
+    } = app_state.config;
+
+    let app = Router::new()
+        .route("/", get(health))
+        .route("/gas", post(request_gas))
+        .route("/v1/gas", post(batch_request_gas))
+        .route("/v1/status/:task_id", get(request_status))
+        .layer(
+            ServiceBuilder::new()
+                .layer(HandleErrorLayer::new(handle_error))
+                .layer(RequestMetricsLayer::new(prometheus_registry))
+                .layer(cors)
+                .load_shed()
+                .buffer(request_buffer_size)
+                .layer(RateLimitLayer::new(
+                    max_request_per_second,
+                    Duration::from_secs(1),
+                ))
+                .concurrency_limit(concurrency_limit)
+                .layer(Extension(app_state.clone()))
+                .into_inner(),
+        );
+
+    spawn_monitored_task!(async move {
+        info!("Starting task to clear WAL.");
+        loop {
+            // Every config.wal_retry_interval (Default: 300 seconds) we try to clear the wal coins
+            tokio::time::sleep(Duration::from_secs(wal_retry_interval)).await;
+            app_state.faucet.retry_wal_coins().await.unwrap();
+        }
+    });
+
+    let addr = SocketAddr::new(IpAddr::V4(host_ip), port);
+    info!("listening on {}", addr);
+    axum::Server::bind(&addr)
+        .serve(app.into_make_service())
+        .await?;
+    Ok(())
+}
+
+/// basic handler that responds with a static string
+async fn health() -> &'static str {
+    "OK"
+}
+
+/// handler for batch_request_gas requests
+async fn batch_request_gas(
+    Extension(state): Extension>,
+    Json(payload): Json,
+) -> impl IntoResponse {
+    let id = Uuid::new_v4();
+    // ID for traceability
+    info!(uuid = ?id, "Got new gas request.");
+
+    let FaucetRequest::FixedAmountRequest(request) = payload else {
+        return (
+            StatusCode::BAD_REQUEST,
+            Json(BatchFaucetResponse::from(FaucetError::Internal(
+                "Input Error.".to_string(),
+            ))),
+        );
+    };
+
+    if state.config.batch_enabled {
+        let result = spawn_monitored_task!(async move {
+            state
+                .faucet
+                .batch_send(
+                    id,
+                    request.recipient,
+                    &vec![state.config.amount; state.config.num_coins],
+                )
+                .await
+        })
+        .await
+        .unwrap();
+
+        match result {
+            Ok(v) => {
+                info!(uuid =?id, "Request is successfully served");
+                (StatusCode::ACCEPTED, Json(BatchFaucetResponse::from(v)))
+            }
+            Err(v) => {
+                warn!(uuid =?id, "Failed to request gas: {:?}", v);
+                (
+                    StatusCode::INTERNAL_SERVER_ERROR,
+                    Json(BatchFaucetResponse::from(v)),
+                )
+            }
+        }
+    } else {
+        // TODO (jian): remove this feature gate when batch has proven to be baked long enough
+        info!(uuid = ?id, "Falling back to v1 implementation");
+        let result = spawn_monitored_task!(async move {
+            state
+                .faucet
+                .send(
+                    id,
+                    request.recipient,
+                    &vec![state.config.amount; state.config.num_coins],
+                )
+                .await
+        })
+        .await
+        .unwrap();
+
+        match result {
+            Ok(_) => {
+                info!(uuid =?id, "Request is successfully served");
+                (StatusCode::ACCEPTED, Json(BatchFaucetResponse::from(id)))
+            }
+            Err(v) => {
+                warn!(uuid =?id, "Failed to request gas: {:?}", v);
+                (
+                    StatusCode::INTERNAL_SERVER_ERROR,
+                    Json(BatchFaucetResponse::from(v)),
+                )
+            }
+        }
+    }
+}
+
+/// handler for batch_get_status requests
+async fn request_status(
+    Extension(state): Extension>,
+    Path(id): Path,
+) -> impl IntoResponse {
+    match Uuid::parse_str(&id) {
+        Ok(task_id) => {
+            let result = state.faucet.get_batch_send_status(task_id).await;
+            match result {
+                Ok(v) => (
+                    StatusCode::CREATED,
+                    Json(BatchStatusFaucetResponse::from(v)),
+                ),
+                Err(v) => (
+                    StatusCode::INTERNAL_SERVER_ERROR,
+                    Json(BatchStatusFaucetResponse::from(v)),
+                ),
+            }
+        }
+        Err(e) => (
+            StatusCode::INTERNAL_SERVER_ERROR,
+            Json(BatchStatusFaucetResponse::from(FaucetError::Internal(
+                e.to_string(),
+            ))),
+        ),
+    }
+}
+
+/// handler for all the request_gas requests
+async fn request_gas(
+    Extension(state): Extension>,
+    Json(payload): Json,
+) -> impl IntoResponse {
+    // ID for traceability
+    let id = Uuid::new_v4();
+    info!(uuid = ?id, "Got new gas request.");
+    let result = match payload {
+        FaucetRequest::FixedAmountRequest(requests) => {
+            // We spawn a tokio task for this such that connection drop will not interrupt
+            // it and impact the recycling of coins
+            spawn_monitored_task!(async move {
+                state
+                    .faucet
+                    .send(
+                        id,
+                        requests.recipient,
+                        &vec![state.config.amount; state.config.num_coins],
+                    )
+                    .await
+            })
+            .await
+            .unwrap()
+        }
+        _ => {
+            return (
+                StatusCode::BAD_REQUEST,
+                Json(FaucetResponse::from(FaucetError::Internal(
+                    "Input Error.".to_string(),
+                ))),
+            )
+        }
+    };
+    match result {
+        Ok(v) => {
+            info!(uuid =?id, "Request is successfully served");
+            (StatusCode::CREATED, Json(FaucetResponse::from(v)))
+        }
+        Err(v) => {
+            warn!(uuid =?id, "Failed to request gas: {:?}", v);
+            (
+                StatusCode::INTERNAL_SERVER_ERROR,
+                Json(FaucetResponse::from(v)),
+            )
+        }
+    }
+}
+
+pub fn create_wallet_context(
+    timeout_secs: u64,
+    config_dir: PathBuf,
+) -> Result {
+    let wallet_conf = config_dir.join(SUI_CLIENT_CONFIG);
+    info!("Initialize wallet from config path: {:?}", wallet_conf);
+    WalletContext::new(
+        &wallet_conf,
+        Some(Duration::from_secs(timeout_secs)),
+        Some(1000),
+    )
+}
+
+async fn handle_error(error: BoxError) -> impl IntoResponse {
+    if error.is::() {
+        return (
+            StatusCode::SERVICE_UNAVAILABLE,
+            Cow::from("service is overloaded, please try again later"),
+        );
+    }
+
+    (
+        StatusCode::INTERNAL_SERVER_ERROR,
+        Cow::from(format!("Unhandled internal error: {}", error)),
+    )
+}
diff --git a/crates/sui-sdk/examples/utils.rs b/crates/sui-sdk/examples/utils.rs
index f05754504434a..90068eaa8079d 100644
--- a/crates/sui-sdk/examples/utils.rs
+++ b/crates/sui-sdk/examples/utils.rs
@@ -40,7 +40,6 @@ struct FaucetResponse {
 
 pub const SUI_FAUCET: &str = "https://faucet.testnet.sui.io/v1/gas"; // testnet faucet
 
-// if you use the sui-test-validator and use the local network; if it does not work, try with port 5003.
 // const SUI_FAUCET: &str = "http://127.0.0.1:9123/gas";
 
 /// Return a sui client to interact with the APIs,
diff --git a/crates/sui-sdk/src/lib.rs b/crates/sui-sdk/src/lib.rs
index c8ba5b1a8bf73..d94b3fe5874a4 100644
--- a/crates/sui-sdk/src/lib.rs
+++ b/crates/sui-sdk/src/lib.rs
@@ -108,6 +108,7 @@ pub mod wallet_context;
 
 pub const SUI_COIN_TYPE: &str = "0x2::sui::SUI";
 pub const SUI_LOCAL_NETWORK_URL: &str = "http://127.0.0.1:9000";
+pub const SUI_LOCAL_NETWORK_URL_0: &str = "http://0.0.0.0:9000";
 pub const SUI_LOCAL_NETWORK_GAS_URL: &str = "http://127.0.0.1:5003/gas";
 pub const SUI_DEVNET_URL: &str = "https://fullnode.devnet.sui.io:443";
 pub const SUI_TESTNET_URL: &str = "https://fullnode.testnet.sui.io:443";
diff --git a/crates/sui-swarm-config/src/node_config_builder.rs b/crates/sui-swarm-config/src/node_config_builder.rs
index c29c17ade2455..e39eeab0dc0c9 100644
--- a/crates/sui-swarm-config/src/node_config_builder.rs
+++ b/crates/sui-swarm-config/src/node_config_builder.rs
@@ -273,6 +273,7 @@ pub struct FullnodeConfigBuilder {
     run_with_range: Option,
     policy_config: Option,
     fw_config: Option,
+    data_ingestion_dir: Option,
 }
 
 impl FullnodeConfigBuilder {
@@ -380,6 +381,11 @@ impl FullnodeConfigBuilder {
         self
     }
 
+    pub fn with_data_ingestion_dir(mut self, path: Option) -> Self {
+        self.data_ingestion_dir = path;
+        self
+    }
+
     pub fn build(
         self,
         rng: &mut R,
@@ -443,6 +449,11 @@ impl FullnodeConfigBuilder {
             format!("{}:{}", ip, rpc_port).parse().unwrap()
         });
 
+        let checkpoint_executor_config = CheckpointExecutorConfig {
+            data_ingestion_dir: self.data_ingestion_dir,
+            ..Default::default()
+        };
+
         NodeConfig {
             protocol_key_pair: AuthorityKeyPairWithPath::new(validator_config.key_pair),
             account_key_pair: KeyPairWithPath::new(validator_config.account_key_pair),
@@ -477,7 +488,7 @@ impl FullnodeConfigBuilder {
             authority_store_pruning_config: AuthorityStorePruningConfig::default(),
             end_of_epoch_broadcast_channel_capacity:
                 default_end_of_epoch_broadcast_channel_capacity(),
-            checkpoint_executor_config: Default::default(),
+            checkpoint_executor_config,
             metrics: None,
             supported_protocol_versions: self.supported_protocol_versions,
             db_checkpoint_config: self.db_checkpoint_config.unwrap_or_default(),
diff --git a/crates/sui-swarm/src/memory/swarm.rs b/crates/sui-swarm/src/memory/swarm.rs
index 053f2353e1154..b03cf664312fb 100644
--- a/crates/sui-swarm/src/memory/swarm.rs
+++ b/crates/sui-swarm/src/memory/swarm.rs
@@ -306,6 +306,8 @@ impl SwarmBuilder {
             SwarmDirectory::new_temporary()
         };
 
+        let ingest_data = self.data_ingestion_dir.clone();
+
         let network_config = self.network_config.unwrap_or_else(|| {
             let mut config_builder = ConfigBuilder::new(dir.as_ref());
 
@@ -371,7 +373,9 @@ impl SwarmBuilder {
             .with_db_checkpoint_config(self.db_checkpoint_config.clone())
             .with_run_with_range(self.fullnode_run_with_range)
             .with_policy_config(self.fullnode_policy_config)
+            .with_data_ingestion_dir(ingest_data)
             .with_fw_config(self.fullnode_fw_config);
+
         if let Some(spvc) = &self.fullnode_supported_protocol_versions_config {
             let supported_versions = match spvc {
                 ProtocolVersionsConfig::Default => SupportedProtocolVersions::SYSTEM_DEFAULT,
diff --git a/crates/sui/Cargo.toml b/crates/sui/Cargo.toml
index a323ce3e90152..9c06cb2893505 100644
--- a/crates/sui/Cargo.toml
+++ b/crates/sui/Cargo.toml
@@ -7,44 +7,55 @@ publish = false
 edition = "2021"
 
 [dependencies]
-json_to_table.workspace = true
-tabled.workspace = true
 anemo.workspace = true
 anyhow.workspace = true
-serde.workspace = true
-serde_json.workspace = true
-serde_yaml.workspace = true
-signature.workspace = true
-camino.workspace = true
-tokio = { workspace = true, features = ["full"] }
+async-recursion.workspace = true
 async-trait.workspace = true
-tracing.workspace = true
+axum.workspace = true
 bcs.workspace = true
-clap.workspace = true
+bin-version.workspace = true
 bip32.workspace = true
-rand.workspace = true
-tap.workspace = true
+camino.workspace = true
+clap.workspace = true
+datatest-stable.workspace = true
+futures.workspace = true
+http.workspace = true
+im.workspace = true
 inquire.workspace = true
-rusoto_core.workspace = true
-rusoto_kms.workspace = true
-prometheus.workspace = true
-bin-version.workspace = true
+insta.workspace = true
+json_to_table.workspace = true
+miette.workspace = true
 num-bigint.workspace = true
+prometheus.workspace = true
+rand.workspace = true
 regex.workspace = true
 reqwest.workspace = true
-im.workspace = true
-async-recursion.workspace = true
-thiserror.workspace = true
-miette.workspace = true
-datatest-stable.workspace = true
-insta.workspace = true
+rusoto_core.workspace = true
+rusoto_kms.workspace = true
+serde_json.workspace = true
+serde_yaml.workspace = true
+serde.workspace = true
 shlex.workspace = true
-futures.workspace = true
+signature.workspace = true
+tabled.workspace = true
+tap.workspace = true
+thiserror.workspace = true
+tokio = { workspace = true, features = ["full"] }
+tower.workspace = true
+tower-http.workspace = true
+tracing.workspace = true
+diesel.workspace = true
+uuid.workspace = true
+url.workspace = true
 
 sui-config.workspace = true
 sui-bridge.workspace = true
+sui-cluster-test.workspace = true
 sui-execution = { path = "../../sui-execution" }
+sui-faucet.workspace = true
 sui-swarm-config.workspace = true
+sui-graphql-rpc = {workspace = true, optional = true}
+sui-indexer = { workspace = true, optional = true }
 sui-genesis-builder.workspace = true
 sui-types.workspace = true
 sui-json.workspace = true
@@ -61,6 +72,7 @@ shared-crypto.workspace = true
 sui-replay.workspace = true
 sui-transaction-builder.workspace = true
 move-binary-format.workspace = true
+test-cluster.workspace = true
 
 fastcrypto.workspace = true
 fastcrypto-zkp.workspace = true
@@ -119,3 +131,4 @@ gas-profiler = [
     "sui-types/gas-profiler",
     "sui-execution/gas-profiler",
 ]
+indexer = ["dep:sui-indexer", "dep:sui-graphql-rpc"]
diff --git a/crates/sui/src/client_commands.rs b/crates/sui/src/client_commands.rs
index b72713ecc15f4..f0182776e4e2e 100644
--- a/crates/sui/src/client_commands.rs
+++ b/crates/sui/src/client_commands.rs
@@ -57,7 +57,8 @@ use sui_sdk::{
     apis::ReadApi,
     sui_client_config::{SuiClientConfig, SuiEnv},
     wallet_context::WalletContext,
-    SuiClient, SUI_COIN_TYPE, SUI_DEVNET_URL, SUI_LOCAL_NETWORK_URL, SUI_TESTNET_URL,
+    SuiClient, SUI_COIN_TYPE, SUI_DEVNET_URL, SUI_LOCAL_NETWORK_URL, SUI_LOCAL_NETWORK_URL_0,
+    SUI_TESTNET_URL,
 };
 use sui_types::{
     base_types::{ObjectID, SequenceNumber, SuiAddress},
@@ -1385,8 +1386,7 @@ impl SuiClientCommands {
                         let network = match env.rpc.as_str() {
                             SUI_DEVNET_URL => "https://faucet.devnet.sui.io/v1/gas",
                             SUI_TESTNET_URL => "https://faucet.testnet.sui.io/v1/gas",
-                            // TODO when using sui-test-validator, and 5003 when using sui start
-                            SUI_LOCAL_NETWORK_URL => "http://127.0.0.1:9123/gas",
+                            SUI_LOCAL_NETWORK_URL | SUI_LOCAL_NETWORK_URL_0 => "http://127.0.0.1:9123/gas",
                             _ => bail!("Cannot recognize the active network. Please provide the gas faucet full URL.")
                         };
                         network.to_string()
diff --git a/crates/sui/src/sui_commands.rs b/crates/sui/src/sui_commands.rs
index 1908e56f7622c..757d10631fc1b 100644
--- a/crates/sui/src/sui_commands.rs
+++ b/crates/sui/src/sui_commands.rs
@@ -7,7 +7,7 @@ use crate::fire_drill::{run_fire_drill, FireDrill};
 use crate::genesis_ceremony::{run, Ceremony};
 use crate::keytool::KeyToolCommand;
 use crate::validator_commands::SuiValidatorCommand;
-use anyhow::{anyhow, bail};
+use anyhow::{anyhow, bail, ensure};
 use clap::*;
 use fastcrypto::traits::KeyPair;
 use move_analyzer::analyzer;
@@ -16,6 +16,7 @@ use rand::rngs::OsRng;
 use std::io::{stderr, stdout, Write};
 use std::num::NonZeroUsize;
 use std::path::{Path, PathBuf};
+use std::sync::Arc;
 use std::{fs, io};
 use sui_bridge::config::BridgeCommitteeConfig;
 use sui_bridge::sui_client::SuiBridgeClient;
@@ -23,12 +24,19 @@ use sui_bridge::sui_transaction_builder::build_committee_register_transaction;
 use sui_config::node::Genesis;
 use sui_config::p2p::SeedPeer;
 use sui_config::{
-    sui_config_dir, Config, PersistedConfig, FULL_NODE_DB_PATH, SUI_CLIENT_CONFIG,
-    SUI_FULLNODE_CONFIG, SUI_NETWORK_CONFIG,
+    genesis_blob_exists, sui_config_dir, Config, PersistedConfig, FULL_NODE_DB_PATH,
+    SUI_CLIENT_CONFIG, SUI_FULLNODE_CONFIG, SUI_NETWORK_CONFIG,
 };
 use sui_config::{
     SUI_BENCHMARK_GENESIS_GAS_KEYSTORE_FILENAME, SUI_GENESIS_FILENAME, SUI_KEYSTORE_FILENAME,
 };
+use sui_faucet::{create_wallet_context, start_faucet, AppState, FaucetConfig, SimpleFaucet};
+#[cfg(feature = "indexer")]
+use sui_graphql_rpc::{
+    config::ConnectionConfig, test_infra::cluster::start_graphql_server_with_fn_rpc,
+};
+#[cfg(feature = "indexer")]
+use sui_indexer::test_utils::{start_test_indexer, ReaderWriterConfig};
 use sui_keys::keypair_file::read_key;
 use sui_keys::keystore::{AccountKeystore, FileBasedKeystore, Keystore};
 use sui_move::{self, execute_move_command};
@@ -42,17 +50,138 @@ use sui_swarm_config::network_config_builder::ConfigBuilder;
 use sui_swarm_config::node_config_builder::FullnodeConfigBuilder;
 use sui_types::base_types::SuiAddress;
 use sui_types::crypto::{SignatureScheme, SuiKeyPair, ToFromBytes};
+use tempfile::tempdir;
+use tracing;
 use tracing::info;
 
+const CONCURRENCY_LIMIT: usize = 30;
+const DEFAULT_EPOCH_DURATION_MS: u64 = 60_000;
+const DEFAULT_FAUCET_NUM_COINS: usize = 5; // 5 coins per request was the default in sui-test-validator
+const DEFAULT_FAUCET_MIST_AMOUNT: u64 = 200_000_000_000; // 200 SUI
+
+#[cfg(feature = "indexer")]
+#[derive(Args)]
+pub struct IndexerFeatureArgs {
+    /// Start an indexer with default host and port: 0.0.0.0:9124, or on the port provided.
+    /// When providing a specific value, please use the = sign between the flag and value:
+    /// `--with-indexer=6124`.
+    /// The indexer will be started in writer mode and reader mode.
+    #[clap(long,
+            default_missing_value = "9124",
+            num_args = 0..=1,
+            require_equals = true,
+            value_name = "INDEXER_PORT"
+        )]
+    with_indexer: Option,
+
+    /// Start a GraphQL server on localhost and port: 127.0.0.1:9125, or on the port provided.
+    /// When providing a specific value, please use the = sign between the flag and value:
+    /// `--with-graphql=6125`.
+    /// Note that GraphQL requires a running indexer, which will be enabled by default if the
+    /// `--with-indexer` flag is not set.
+    #[clap(
+            long,
+            default_missing_value = "9125",
+            num_args = 0..=1,
+            require_equals = true,
+            value_name = "GRAPHQL_PORT"
+        )]
+    with_graphql: Option,
+
+    /// Port for the Indexer Postgres DB. Default port is 5432.
+    #[clap(long, default_value = "5432")]
+    pg_port: u16,
+
+    /// Hostname for the Indexer Postgres DB. Default host is localhost.
+    #[clap(long, default_value = "localhost")]
+    pg_host: String,
+
+    /// DB name for the Indexer Postgres DB. Default DB name is sui_indexer.
+    #[clap(long, default_value = "sui_indexer")]
+    pg_db_name: String,
+
+    /// DB username for the Indexer Postgres DB. Default username is postgres.
+    #[clap(long, default_value = "postgres")]
+    pg_user: String,
+
+    /// DB password for the Indexer Postgres DB. Default password is postgrespw.
+    #[clap(long, default_value = "postgrespw")]
+    pg_password: String,
+}
+
+#[cfg(feature = "indexer")]
+impl IndexerFeatureArgs {
+    pub fn for_testing() -> Self {
+        Self {
+            with_indexer: None,
+            with_graphql: None,
+            pg_port: 5432,
+            pg_host: "localhost".to_string(),
+            pg_db_name: "sui_indexer".to_string(),
+            pg_user: "postgres".to_string(),
+            pg_password: "postgrespw".to_string(),
+        }
+    }
+}
+
 #[allow(clippy::large_enum_variant)]
 #[derive(Parser)]
 #[clap(rename_all = "kebab-case")]
 pub enum SuiCommand {
-    /// Start sui network.
+    /// Start a local network in two modes: saving state between re-runs and not saving state
+    /// between re-runs. Please use (--help) to see the full description.
+    ///
+    /// By default, sui start will start a local network from the genesis blob that exists in
+    /// the Sui config default dir or in the config_dir that was passed. If the default directory
+    /// does not exist and the config_dir is not passed, it will generate a new default directory,
+    /// generate the genesis blob, and start the network.
+    ///
+    /// Note that if you want to start an indexer, Postgres DB is required.
     #[clap(name = "start")]
     Start {
+        /// Config directory that will be used to store network config, node db, keystore
+        /// sui genesis -f --with-faucet generates a genesis config that can be used to start this
+        /// proces. Use with caution as the `-f` flag will overwrite the existing config directory.
+        /// We can use any config dir that is generated by the `sui genesis`.
         #[clap(long = "network.config")]
-        config: Option,
+        config_dir: Option,
+
+        /// A new genesis is created each time this flag is set, and state is not persisted between
+        /// runs. Only use this flag when you want to start the network from scratch every time you
+        /// run this command.
+        ///
+        /// To run with persisted state, do not pass this flag and use the `sui genesis` command
+        /// to generate a genesis that can be used to start the network with.
+        #[clap(long)]
+        force_regenesis: bool,
+
+        /// Start a faucet with default host and port: 127.0.0.1:9123, or on the port provided.
+        /// When providing a specific value, please use the = sign between the flag and value:
+        /// `--with-faucet=6123`.
+        #[clap(
+            long,
+            default_missing_value = "9123",
+            num_args = 0..=1,
+            require_equals = true,
+            value_name = "FAUCET_PORT"
+        )]
+        with_faucet: Option,
+
+        #[cfg(feature = "indexer")]
+        #[clap(flatten)]
+        indexer_feature_args: IndexerFeatureArgs,
+
+        /// Port to start the Fullnode RPC server on. Default port is 9000.
+        #[clap(long, default_value = "9000")]
+        fullnode_rpc_port: u16,
+
+        /// Set the epoch duration. Can only be used when `--force-regenesis` flag is passed or if
+        /// there's no genesis config and one will be auto-generated. When this flag is not set but
+        /// `--force-regenesis` is set, the epoch duration will be set to 60 seconds.
+        #[clap(long)]
+        epoch_duration_ms: Option,
+
+        /// Start the network without a fullnode
         #[clap(long = "no-full-node")]
         no_full_node: bool,
     },
@@ -89,7 +218,7 @@ pub enum SuiCommand {
         benchmark_ips: Option>,
         #[clap(
             long,
-            help = "Creates an extra faucet configuration for sui-test-validator persisted runs."
+            help = "Creates an extra faucet configuration for sui persisted runs."
         )]
         with_faucet: bool,
     },
@@ -183,60 +312,6 @@ impl SuiCommand {
     pub async fn execute(self) -> Result<(), anyhow::Error> {
         move_package::package_hooks::register_package_hooks(Box::new(SuiPackageHooks));
         match self {
-            SuiCommand::Start {
-                config,
-                no_full_node,
-            } => {
-                // Auto genesis if path is none and sui directory doesn't exists.
-                if config.is_none() && !sui_config_dir()?.join(SUI_NETWORK_CONFIG).exists() {
-                    genesis(None, None, None, false, None, None, false).await?;
-                }
-
-                // Load the config of the Sui authority.
-                let network_config_path = config
-                    .clone()
-                    .unwrap_or(sui_config_dir()?.join(SUI_NETWORK_CONFIG));
-                let network_config: NetworkConfig = PersistedConfig::read(&network_config_path)
-                    .map_err(|err| {
-                        err.context(format!(
-                            "Cannot open Sui network config file at {:?}",
-                            network_config_path
-                        ))
-                    })?;
-                let mut swarm_builder = Swarm::builder()
-                    .dir(sui_config_dir()?)
-                    .with_network_config(network_config);
-                if no_full_node {
-                    swarm_builder = swarm_builder.with_fullnode_count(0);
-                } else {
-                    swarm_builder = swarm_builder
-                        .with_fullnode_count(1)
-                        .with_fullnode_rpc_addr(sui_config::node::default_json_rpc_address());
-                }
-                let mut swarm = swarm_builder.build();
-                swarm.launch().await?;
-
-                let mut interval = tokio::time::interval(std::time::Duration::from_secs(3));
-                let mut unhealthy_cnt = 0;
-                loop {
-                    for node in swarm.validator_nodes() {
-                        if let Err(err) = node.health_check(true).await {
-                            unhealthy_cnt += 1;
-                            if unhealthy_cnt > 3 {
-                                // The network could temporarily go down during reconfiguration.
-                                // If we detect a failed validator 3 times in a row, give up.
-                                return Err(err.into());
-                            }
-                            // Break the inner loop so that we could retry latter.
-                            break;
-                        } else {
-                            unhealthy_cnt = 0;
-                        }
-                    }
-
-                    interval.tick().await;
-                }
-            }
             SuiCommand::Network {
                 config,
                 dump_addresses,
@@ -260,6 +335,30 @@ impl SuiCommand {
                 }
                 Ok(())
             }
+            SuiCommand::Start {
+                config_dir,
+                force_regenesis,
+                with_faucet,
+                #[cfg(feature = "indexer")]
+                indexer_feature_args,
+                fullnode_rpc_port,
+                no_full_node,
+                epoch_duration_ms,
+            } => {
+                start(
+                    config_dir.clone(),
+                    with_faucet,
+                    #[cfg(feature = "indexer")]
+                    indexer_feature_args,
+                    force_regenesis,
+                    epoch_duration_ms,
+                    fullnode_rpc_port,
+                    no_full_node,
+                )
+                .await?;
+
+                Ok(())
+            }
             SuiCommand::Genesis {
                 working_dir,
                 force,
@@ -430,6 +529,258 @@ impl SuiCommand {
     }
 }
 
+/// Starts a local network with the given configuration.
+async fn start(
+    config: Option,
+    with_faucet: Option,
+    #[cfg(feature = "indexer")] indexer_feature_args: IndexerFeatureArgs,
+    force_regenesis: bool,
+    epoch_duration_ms: Option,
+    fullnode_rpc_port: u16,
+    no_full_node: bool,
+) -> Result<(), anyhow::Error> {
+    if force_regenesis {
+        ensure!(
+            config.is_none(),
+            "Cannot pass `--force-regenesis` and `--network.config` at the same time."
+        );
+    }
+
+    #[cfg(feature = "indexer")]
+    let IndexerFeatureArgs {
+        mut with_indexer,
+        with_graphql,
+        pg_port,
+        pg_host,
+        pg_db_name,
+        pg_user,
+        pg_password,
+    } = indexer_feature_args;
+
+    #[cfg(feature = "indexer")]
+    if with_graphql.is_some() {
+        with_indexer = Some(with_indexer.unwrap_or_default());
+    }
+
+    #[cfg(feature = "indexer")]
+    if with_indexer.is_some() {
+        ensure!(
+            !no_full_node,
+            "Cannot start the indexer without a fullnode."
+        );
+    }
+
+    if epoch_duration_ms.is_some() && genesis_blob_exists(config.clone()) && !force_regenesis {
+        bail!(
+            "Epoch duration can only be set when passing the `--force-regenesis` flag, or when \
+            there is no genesis configuration in the default Sui configuration folder or the given \
+            network.config argument.",
+        );
+    }
+
+    #[cfg(feature = "indexer")]
+    if let Some(indexer_rpc_port) = with_indexer {
+        tracing::info!("Starting the indexer service at 0.0.0.0:{indexer_rpc_port}");
+    }
+    #[cfg(feature = "indexer")]
+    if let Some(graphql_port) = with_graphql {
+        tracing::info!("Starting the GraphQL service at 127.0.0.1:{graphql_port}");
+    }
+    if let Some(faucet_port) = with_faucet {
+        tracing::info!("Starting the faucet service at 127.0.0.1:{faucet_port}");
+    }
+
+    let mut swarm_builder = Swarm::builder();
+    // If this is set, then no data will be persisted between runs, and a new genesis will be
+    // generated each run.
+    if force_regenesis {
+        swarm_builder =
+            swarm_builder.committee_size(NonZeroUsize::new(DEFAULT_NUMBER_OF_AUTHORITIES).unwrap());
+        let genesis_config = GenesisConfig::custom_genesis(1, 100);
+        swarm_builder = swarm_builder.with_genesis_config(genesis_config);
+        let epoch_duration_ms = epoch_duration_ms.unwrap_or(DEFAULT_EPOCH_DURATION_MS);
+        swarm_builder = swarm_builder.with_epoch_duration_ms(epoch_duration_ms);
+    } else {
+        // load from config dir that was passed, or generate a new genesis if there is no config
+        // dir passed and there is no config_dir in the default location
+        // and if a dir exists, then use that one
+        if let Some(config) = config.clone() {
+            swarm_builder = swarm_builder.dir(config);
+        } else if config.is_none() && !sui_config_dir()?.join(SUI_NETWORK_CONFIG).exists() {
+            genesis(None, None, None, false, epoch_duration_ms, None, false).await?;
+            swarm_builder = swarm_builder.dir(sui_config_dir()?);
+        } else {
+            swarm_builder = swarm_builder.dir(sui_config_dir()?);
+        }
+        // Load the config of the Sui authority.
+        let network_config_path = config
+            .clone()
+            .unwrap_or(sui_config_dir()?.join(SUI_NETWORK_CONFIG));
+        let network_config: NetworkConfig =
+            PersistedConfig::read(&network_config_path).map_err(|err| {
+                err.context(format!(
+                    "Cannot open Sui network config file at {:?}",
+                    network_config_path
+                ))
+            })?;
+
+        swarm_builder = swarm_builder.with_network_config(network_config);
+    }
+
+    #[cfg(feature = "indexer")]
+    let data_ingestion_path = tempdir()?.into_path();
+
+    // the indexer requires to set the fullnode's data ingestion directory
+    // note that this overrides the default configuration that is set when running the genesis
+    // command, which sets data_ingestion_dir to None.
+    #[cfg(feature = "indexer")]
+    if with_indexer.is_some() {
+        swarm_builder = swarm_builder.with_data_ingestion_dir(data_ingestion_path.clone());
+    }
+
+    let mut fullnode_url = sui_config::node::default_json_rpc_address();
+    fullnode_url.set_port(fullnode_rpc_port);
+
+    if no_full_node {
+        swarm_builder = swarm_builder.with_fullnode_count(0);
+    } else {
+        swarm_builder = swarm_builder
+            .with_fullnode_count(1)
+            .with_fullnode_rpc_addr(fullnode_url);
+    }
+
+    let mut swarm = swarm_builder.build();
+    swarm.launch().await?;
+    // Let nodes connect to one another
+    tokio::time::sleep(tokio::time::Duration::from_secs(2)).await;
+    info!("Cluster started");
+
+    // the indexer requires a fullnode url with protocol specified
+    let fullnode_url = format!("http://{}", fullnode_url);
+    info!("Fullnode URL: {}", fullnode_url);
+    #[cfg(feature = "indexer")]
+    let pg_address = format!("postgres://{pg_user}:{pg_password}@{pg_host}:{pg_port}/{pg_db_name}");
+
+    #[cfg(feature = "indexer")]
+    if with_indexer.is_some() {
+        let indexer_address = format!("0.0.0.0:{}", with_indexer.unwrap_or_default());
+        // Start in writer mode
+        start_test_indexer::(
+            Some(pg_address.clone()),
+            fullnode_url.clone(),
+            ReaderWriterConfig::writer_mode(None),
+            data_ingestion_path.clone(),
+        )
+        .await;
+        info!("Indexer in writer mode started");
+
+        // Start in reader mode
+        start_test_indexer::(
+            Some(pg_address.clone()),
+            fullnode_url.clone(),
+            ReaderWriterConfig::reader_mode(indexer_address.to_string()),
+            data_ingestion_path,
+        )
+        .await;
+        info!("Indexer in reader mode started");
+    }
+
+    #[cfg(feature = "indexer")]
+    if with_graphql.is_some() {
+        let graphql_connection_config = ConnectionConfig::new(
+            Some(with_graphql.unwrap_or_default()),
+            None,
+            Some(pg_address),
+            None,
+            None,
+            None,
+        );
+        start_graphql_server_with_fn_rpc(
+            graphql_connection_config,
+            Some(fullnode_url.clone()),
+            None, // it will be initialized by default
+        )
+        .await;
+        info!("GraphQL started");
+    }
+    if with_faucet.is_some() {
+        let config_dir = if force_regenesis {
+            tempdir()?.into_path()
+        } else {
+            match config {
+                Some(config) => config,
+                None => sui_config_dir()?,
+            }
+        };
+
+        let config = FaucetConfig {
+            port: with_faucet.unwrap_or_default(),
+            num_coins: DEFAULT_FAUCET_NUM_COINS,
+            amount: DEFAULT_FAUCET_MIST_AMOUNT,
+            ..Default::default()
+        };
+        let prometheus_registry = prometheus::Registry::new();
+        if force_regenesis {
+            let kp = swarm.config_mut().account_keys.swap_remove(0);
+            let keystore_path = config_dir.join(SUI_KEYSTORE_FILENAME);
+            let mut keystore = Keystore::from(FileBasedKeystore::new(&keystore_path).unwrap());
+            let address: SuiAddress = kp.public().into();
+            keystore.add_key(None, SuiKeyPair::Ed25519(kp)).unwrap();
+            SuiClientConfig {
+                keystore,
+                envs: vec![SuiEnv {
+                    alias: "localnet".to_string(),
+                    rpc: fullnode_url,
+                    ws: None,
+                    basic_auth: None,
+                }],
+                active_address: Some(address),
+                active_env: Some("localnet".to_string()),
+            }
+            .persisted(config_dir.join(SUI_CLIENT_CONFIG).as_path())
+            .save()
+            .unwrap();
+        }
+        let faucet_wal = config_dir.join("faucet.wal");
+        let simple_faucet = SimpleFaucet::new(
+            create_wallet_context(config.wallet_client_timeout_secs, config_dir)?,
+            &prometheus_registry,
+            faucet_wal.as_path(),
+            config.clone(),
+        )
+        .await
+        .unwrap();
+
+        let app_state = Arc::new(AppState {
+            faucet: simple_faucet,
+            config,
+        });
+
+        start_faucet(app_state, CONCURRENCY_LIMIT, &prometheus_registry).await?;
+    }
+
+    let mut interval = tokio::time::interval(std::time::Duration::from_secs(3));
+    let mut unhealthy_cnt = 0;
+    loop {
+        for node in swarm.validator_nodes() {
+            if let Err(err) = node.health_check(true).await {
+                unhealthy_cnt += 1;
+                if unhealthy_cnt > 3 {
+                    // The network could temporarily go down during reconfiguration.
+                    // If we detect a failed validator 3 times in a row, give up.
+                    return Err(err.into());
+                }
+                // Break the inner loop so that we could retry latter.
+                break;
+            } else {
+                unhealthy_cnt = 0;
+            }
+        }
+
+        interval.tick().await;
+    }
+}
+
 async fn genesis(
     from_config: Option,
     write_config: Option,
diff --git a/crates/sui/tests/cli_tests.rs b/crates/sui/tests/cli_tests.rs
index 924ea8892f925..7f0deb7791b1c 100644
--- a/crates/sui/tests/cli_tests.rs
+++ b/crates/sui/tests/cli_tests.rs
@@ -14,6 +14,8 @@ use move_package::{lock_file::schema::ManagedPackage, BuildConfig as MoveBuildCo
 use serde_json::json;
 use sui::client_ptb::ptb::PTB;
 use sui::key_identity::{get_identity_address, KeyIdentity};
+#[cfg(feature = "indexer")]
+use sui::sui_commands::IndexerFeatureArgs;
 use sui_sdk::SuiClient;
 use sui_test_transaction_builder::batch_make_transfer_transactions;
 use sui_types::object::Owner;
@@ -66,8 +68,14 @@ async fn test_genesis() -> Result<(), anyhow::Error> {
 
     // Start network without authorities
     let start = SuiCommand::Start {
-        config: Some(config),
+        config_dir: Some(config),
+        force_regenesis: false,
+        with_faucet: None,
+        fullnode_rpc_port: 9000,
+        epoch_duration_ms: None,
         no_full_node: false,
+        #[cfg(feature = "indexer")]
+        indexer_feature_args: IndexerFeatureArgs::for_testing(),
     }
     .execute()
     .await;
diff --git a/scripts/sui-test-validator.sh b/scripts/sui-test-validator.sh
new file mode 100755
index 0000000000000..ec1209358e646
--- /dev/null
+++ b/scripts/sui-test-validator.sh
@@ -0,0 +1,105 @@
+#!/bin/bash
+# Copyright (c) Mysten Labs, Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+echo "sui-test-validator binary has been deprecated in favor of sui start, which is a more powerful command that allows you to start the local network with more options.
+This script offers backward compatibiltiy, but ideally, you should migrate to sui start instead. Use sui start --help to see all the flags and options. 
+
+To recreate the exact basic functionality of sui-test-validator, you must use the following options:
+  * --with-faucet --> to start the faucet server on the default host and port
+  * --force-regenesis --> to start the local network without persisting the state and from a new genesis
+
+You can also use the following options to start the local network with more features:
+  * --with-indexer --> to start the indexer on the default host and port. Note that this requires a Postgres database to be running locally, or you need to set the different options to connect to a remote indexer database.
+  * --with-graphql --> to start the GraphQL server on the default host and port"
+
+# holds the args names
+named_args=()
+config_dir=false;
+indexer_port_set=false;
+with_indexer=false;
+
+# Iterate over all arguments
+while [[ $# -gt 0 ]]; do
+    case $1 in
+       
+        --with-indexer)
+            with_indexer=true
+            shift # Remove argument from processing
+            ;;
+        --config-dir=*)
+            value="${1#*=}"
+            named_args+=("--network.config=$value")
+            config_dir=true
+            shift # Remove argument from processing
+            ;;
+        --config-dir)
+            if [[ -n $2 && $2 != --* ]]; then
+                named_args+=("--network.config=$2")
+                config_dir=true
+                shift # Remove value from processing
+            fi
+            shift # Remove argument from processing
+            ;;
+        --faucet-port=*)
+            port_value="${1#*=}"
+            named_args+=("--with-faucet=$port_value")
+            shift # Remove argument from processing
+            ;;
+        --faucet-port)
+            if [[ -n $2 && $2 != --* ]]; then
+                named_args+=("--with-faucet=$2")
+                shift # Remove value from processing
+            fi
+            shift # Remove argument from processing
+            ;;
+        --indexer-rpc-port=*)
+            port_value="${1#*=}"
+            named_args+=("--with-indexer=$port_value")
+            indexer_port_set=true
+            shift # Remove argument from processing
+            ;;
+        --indexer-rpc-port)
+            if [[ -n $2 && $2 != --* ]]; then
+                named_args+=("--with-indexer=$2")
+                indexer_port_set=true
+                shift # Remove value from processing
+            fi
+            shift # Remove argument from processing
+            ;;
+        --graphql-port=*)
+            port_value="${1#*=}"
+            named_args+=("--with-graphql=$port_value")
+            shift # Remove argument from processing
+            ;;
+        --graphql-port)
+            if [[ -n $2 && $2 != --* ]]; then
+                named_args+=("--with-graphql=$2")
+                shift # Remove value from processing
+            fi
+            shift # Remove argument from processing
+            ;;
+        *)
+            named_args+=("$1")
+            shift # Remove unknown arguments from processing
+            ;;
+    esac
+done
+
+if [[ $indexer_port_set = false ]] && [[ $with_indexer = true ]]; then
+  named_args+=("--with-indexer")
+fi
+
+# Basic command that replicates the command line arguments of sui-test-validator
+cmd="sui start --with-faucet --force-regenesis"
+
+
+# To maintain compatibility, when passing a network configuration in a directory, --force-regenesis cannot be passed.
+if [ "$config_dir" = true ]; then
+    echo "Starting with the provided network configuration."
+    cmd="sui start --with-faucet"
+fi
+
+echo "Running command: $cmd ${named_args[@]}"
+$cmd "${named_args[@]}"
+

From 926a1c3db5af9765dcb8fb1357415ac20b1efb89 Mon Sep 17 00:00:00 2001
From: William Smith 
Date: Thu, 27 Jun 2024 11:46:14 -0700
Subject: [PATCH 06/57] Cp traffic control changes (#18441)

## Description

CP https://github.com/MystenLabs/sui/pull/18396 and
https://github.com/MystenLabs/sui/pull/18324

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 crates/sui-core/src/authority_server.rs       | 139 ++++---
 .../src/traffic_controller/metrics.rs         |   8 +
 crates/sui-core/src/traffic_controller/mod.rs |  47 ++-
 .../src/traffic_controller/policies.rs        |   6 +
 .../tests/traffic_control_tests.rs            | 350 ++++++++++++------
 crates/sui-json-rpc/src/axum_router.rs        |  11 +-
 crates/sui-types/src/traffic_control.rs       |   7 +-
 crates/test-cluster/src/lib.rs                |   5 +
 8 files changed, 400 insertions(+), 173 deletions(-)

diff --git a/crates/sui-core/src/authority_server.rs b/crates/sui-core/src/authority_server.rs
index 11a709638cee8..b71f79cab25e5 100644
--- a/crates/sui-core/src/authority_server.rs
+++ b/crates/sui-core/src/authority_server.rs
@@ -339,7 +339,7 @@ impl ValidatorService {
     async fn handle_transaction(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let Self {
             state,
             consensus_adapter,
@@ -410,9 +410,14 @@ impl ValidatorService {
             // to save more CPU.
             return Err(error.into());
         }
-        Ok(tonic::Response::new(info))
+        Ok((tonic::Response::new(info), Weight::zero()))
     }
 
+    // In addition to the response from handling the certificates,
+    // returns a bool indicating whether the request should be tallied
+    // toward spam count. In general, this should be set to true for
+    // requests that are read-only and thus do not consume gas, such
+    // as when the transaction is already executed.
     async fn handle_certificates(
         &self,
         certificates: NonEmpty,
@@ -422,7 +427,7 @@ impl ValidatorService {
         _include_auxiliary_data: bool,
         epoch_store: &Arc,
         wait_for_effects: bool,
-    ) -> Result>, tonic::Status> {
+    ) -> Result<(Option>, Weight), tonic::Status> {
         // Validate if cert can be executed
         // Fullnode does not serve handle_certificate call.
         fp_ensure!(
@@ -468,13 +473,16 @@ impl ValidatorService {
                     None
                 };
 
-                return Ok(Some(vec![HandleCertificateResponseV3 {
-                    effects: signed_effects.into_inner(),
-                    events,
-                    input_objects: None,
-                    output_objects: None,
-                    auxiliary_data: None,
-                }]));
+                return Ok((
+                    Some(vec![HandleCertificateResponseV3 {
+                        effects: signed_effects.into_inner(),
+                        events,
+                        input_objects: None,
+                        output_objects: None,
+                        auxiliary_data: None,
+                    }]),
+                    Weight::one(),
+                ));
             };
         }
 
@@ -558,7 +566,7 @@ impl ValidatorService {
                     epoch_store,
                 );
             }
-            return Ok(None);
+            return Ok((None, Weight::zero()));
         }
 
         // 4) Execute the certificates immediately if they contain only owned object transactions,
@@ -598,22 +606,24 @@ impl ValidatorService {
         ))
         .await?;
 
-        Ok(Some(responses))
+        Ok((Some(responses), Weight::zero()))
     }
 }
 
+type WrappedServiceResponse = Result<(tonic::Response, Weight), tonic::Status>;
+
 impl ValidatorService {
     async fn transaction_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         self.handle_transaction(request).await
     }
 
     async fn submit_certificate_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let epoch_store = self.state.load_epoch_store_one_call_per_task();
         let certificate = request.into_inner();
         Self::transaction_validity_check(&epoch_store, certificate.data())?;
@@ -630,17 +640,20 @@ impl ValidatorService {
         )
         .instrument(span)
         .await
-        .map(|executed| {
-            tonic::Response::new(SubmitCertificateResponse {
-                executed: executed.map(|mut x| x.remove(0)).map(Into::into),
-            })
+        .map(|(executed, spam_weight)| {
+            (
+                tonic::Response::new(SubmitCertificateResponse {
+                    executed: executed.map(|mut x| x.remove(0)).map(Into::into),
+                }),
+                spam_weight,
+            )
         })
     }
 
     async fn handle_certificate_v2_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let epoch_store = self.state.load_epoch_store_one_call_per_task();
         let certificate = request.into_inner();
         Self::transaction_validity_check(&epoch_store, certificate.data())?;
@@ -657,11 +670,16 @@ impl ValidatorService {
         )
         .instrument(span)
         .await
-        .map(|v| {
-            tonic::Response::new(
-                v.expect("handle_certificate should not return none with wait_for_effects=true")
+        .map(|(resp, spam_weight)| {
+            (
+                tonic::Response::new(
+                    resp.expect(
+                        "handle_certificate should not return none with wait_for_effects=true",
+                    )
                     .remove(0)
                     .into(),
+                ),
+                spam_weight,
             )
         })
     }
@@ -669,7 +687,7 @@ impl ValidatorService {
     async fn handle_certificate_v3_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let epoch_store = self.state.load_epoch_store_one_call_per_task();
         let request = request.into_inner();
         Self::transaction_validity_check(&epoch_store, request.certificate.data())?;
@@ -686,10 +704,15 @@ impl ValidatorService {
         )
         .instrument(span)
         .await
-        .map(|v| {
-            tonic::Response::new(
-                v.expect("handle_certificate should not return none with wait_for_effects=true")
+        .map(|(resp, spam_weight)| {
+            (
+                tonic::Response::new(
+                    resp.expect(
+                        "handle_certificate should not return none with wait_for_effects=true",
+                    )
                     .remove(0),
+                ),
+                spam_weight,
             )
         })
     }
@@ -781,7 +804,7 @@ impl ValidatorService {
     async fn handle_soft_bundle_certificates_v3_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let epoch_store = self.state.load_epoch_store_one_call_per_task();
         let request = request.into_inner();
 
@@ -811,10 +834,13 @@ impl ValidatorService {
         )
         .instrument(span)
         .await
-        .map(|v| {
-            tonic::Response::new(HandleSoftBundleCertificatesResponseV3 {
-                responses: v.unwrap_or_default(),
-            })
+        .map(|(resp, spam_weight)| {
+            (
+                tonic::Response::new(HandleSoftBundleCertificatesResponseV3 {
+                    responses: resp.unwrap_or_default(),
+                }),
+                spam_weight,
+            )
         })
     }
 
@@ -841,49 +867,48 @@ impl ValidatorService {
     async fn object_info_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let request = request.into_inner();
         let response = self.state.handle_object_info_request(request).await?;
-        Ok(tonic::Response::new(response))
+        Ok((tonic::Response::new(response), Weight::one()))
     }
 
     async fn transaction_info_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let request = request.into_inner();
         let response = self.state.handle_transaction_info_request(request).await?;
-        Ok(tonic::Response::new(response))
+        Ok((tonic::Response::new(response), Weight::one()))
     }
 
     async fn checkpoint_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let request = request.into_inner();
         let response = self.state.handle_checkpoint_request(&request)?;
-        Ok(tonic::Response::new(response))
+        Ok((tonic::Response::new(response), Weight::one()))
     }
 
     async fn checkpoint_v2_impl(
         &self,
         request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let request = request.into_inner();
         let response = self.state.handle_checkpoint_request_v2(&request)?;
-        Ok(tonic::Response::new(response))
+        Ok((tonic::Response::new(response), Weight::one()))
     }
 
     async fn get_system_state_object_impl(
         &self,
         _request: tonic::Request,
-    ) -> Result, tonic::Status> {
+    ) -> WrappedServiceResponse {
         let response = self
             .state
             .get_object_cache_reader()
             .get_sui_system_state_object_unsafe()?;
-
-        Ok(tonic::Response::new(response))
+        Ok((tonic::Response::new(response), Weight::one()))
     }
 
     async fn handle_traffic_req(&self, client: Option) -> Result<(), tonic::Status> {
@@ -902,12 +927,15 @@ impl ValidatorService {
     fn handle_traffic_resp(
         &self,
         client: Option,
-        response: &Result, tonic::Status>,
-    ) {
-        let error: Option = if let Err(status) = response {
-            Some(SuiError::from(status.clone()))
-        } else {
-            None
+        wrapped_response: WrappedServiceResponse,
+    ) -> Result, tonic::Status> {
+        let (error, spam_weight, unwrapped_response) = match wrapped_response {
+            Ok((result, spam_weight)) => (None, spam_weight.clone(), Ok(result)),
+            Err(status) => (
+                Some(SuiError::from(status.clone())),
+                Weight::zero(),
+                Err(status.clone()),
+            ),
         };
 
         if let Some(traffic_controller) = self.traffic_controller.clone() {
@@ -915,9 +943,11 @@ impl ValidatorService {
                 direct: client,
                 through_fullnode: None,
                 error_weight: error.map(normalize).unwrap_or(Weight::zero()),
+                spam_weight,
                 timestamp: SystemTime::now(),
             })
         }
+        unwrapped_response
     }
 }
 
@@ -935,7 +965,7 @@ fn make_tonic_request_for_testing(message: T) -> tonic::Request {
 
 // TODO: refine error matching here
 fn normalize(err: SuiError) -> Weight {
-    match err {
+    match dbg!(err) {
         SuiError::UserInputError { .. }
         | SuiError::InvalidSignature { .. }
         | SuiError::SignerSignatureAbsent { .. }
@@ -954,7 +984,7 @@ fn normalize(err: SuiError) -> Weight {
 macro_rules! handle_with_decoration {
     ($self:ident, $func_name:ident, $request:ident) => {{
         if $self.client_id_source.is_none() {
-            return $self.$func_name($request).await;
+            return $self.$func_name($request).await.map(|(result, _)| result);
         }
 
         let client = match $self.client_id_source.as_ref().unwrap() {
@@ -1018,11 +1048,10 @@ macro_rules! handle_with_decoration {
 
         // check if either IP is blocked, in which case return early
         $self.handle_traffic_req(client.clone()).await?;
-        // handle request
-        let response = $self.$func_name($request).await;
-        // handle response tallying
-        $self.handle_traffic_resp(client, &response);
-        response
+
+        // handle traffic tallying
+        let wrapped_response = $self.$func_name($request).await;
+        $self.handle_traffic_resp(client, wrapped_response)
     }};
 }
 
diff --git a/crates/sui-core/src/traffic_controller/metrics.rs b/crates/sui-core/src/traffic_controller/metrics.rs
index b9264b3163c9e..1762f69c08fc7 100644
--- a/crates/sui-core/src/traffic_controller/metrics.rs
+++ b/crates/sui-core/src/traffic_controller/metrics.rs
@@ -18,6 +18,7 @@ pub struct TrafficControllerMetrics {
     pub num_dry_run_blocked_requests: IntCounter,
     pub tally_handled: IntCounter,
     pub error_tally_handled: IntCounter,
+    pub deadmans_switch_enabled: IntGauge,
 }
 
 impl TrafficControllerMetrics {
@@ -85,6 +86,13 @@ impl TrafficControllerMetrics {
                 registry
             )
             .unwrap(),
+            deadmans_switch_enabled: register_int_gauge_with_registry!(
+                "deadmans_switch_enabled",
+                "If 1, the deadman's switch is enabled and all traffic control
+                should be getting bypassed",
+                registry
+            )
+            .unwrap(),
         }
     }
 
diff --git a/crates/sui-core/src/traffic_controller/mod.rs b/crates/sui-core/src/traffic_controller/mod.rs
index 933bb1b68f6c8..a133a90adaff0 100644
--- a/crates/sui-core/src/traffic_controller/mod.rs
+++ b/crates/sui-core/src/traffic_controller/mod.rs
@@ -80,6 +80,9 @@ impl TrafficController {
             .as_ref()
             .map(|config| config.drain_path.exists())
             .unwrap_or(false);
+        metrics
+            .deadmans_switch_enabled
+            .set(mem_drainfile_present as i64);
 
         let ret = Self {
             tally_channel: tx,
@@ -90,15 +93,22 @@ impl TrafficController {
             metrics: metrics.clone(),
             dry_run_mode: policy_config.dry_run,
         };
-        let blocklists = ret.blocklists.clone();
+        let tally_loop_blocklists = ret.blocklists.clone();
+        let clear_loop_blocklists = ret.blocklists.clone();
+        let tally_loop_metrics = metrics.clone();
+        let clear_loop_metrics = metrics.clone();
         spawn_monitored_task!(run_tally_loop(
             rx,
             policy_config,
             fw_config,
-            blocklists,
-            metrics,
+            tally_loop_blocklists,
+            tally_loop_metrics,
             mem_drainfile_present,
         ));
+        spawn_monitored_task!(run_clear_blocklists_loop(
+            clear_loop_blocklists,
+            clear_loop_metrics,
+        ));
         ret
     }
 
@@ -206,6 +216,29 @@ impl TrafficController {
     }
 }
 
+/// Although we clear IPs from the blocklist lazily when they are checked,
+/// it's possible that over time we may accumulate a large number of stale
+/// IPs in the blocklist for clients that are added, then once blocked,
+/// never checked again. This function runs periodically to clear out any
+/// such stale IPs. This also ensures that the blocklist length metric
+/// accurately reflects TTL.
+async fn run_clear_blocklists_loop(blocklists: Blocklists, metrics: Arc) {
+    loop {
+        tokio::time::sleep(Duration::from_secs(3)).await;
+        let now = SystemTime::now();
+        blocklists.clients.retain(|_, expiration| now < *expiration);
+        blocklists
+            .proxied_clients
+            .retain(|_, expiration| now < *expiration);
+        metrics
+            .connection_ip_blocklist_len
+            .set(blocklists.clients.len() as i64);
+        metrics
+            .proxy_ip_blocklist_len
+            .set(blocklists.proxied_clients.len() as i64);
+    }
+}
+
 async fn run_tally_loop(
     mut receiver: mpsc::Receiver,
     policy_config: PolicyConfig,
@@ -279,6 +312,7 @@ async fn run_tally_loop(
                         warn!("Draining Node firewall.");
                         File::create(&fw_config.drain_path)
                             .expect("Failed to touch nodefw drain file");
+                        metrics.deadmans_switch_enabled.set(1);
                     }
                 }
             }
@@ -296,7 +330,7 @@ async fn handle_error_tally(
     metrics: Arc,
     mem_drainfile_present: bool,
 ) -> Result<(), reqwest::Error> {
-    if !tally.error_weight.is_sampled().await {
+    if !tally.error_weight.is_sampled() {
         return Ok(());
     }
     let resp = policy.handle_tally(tally.clone());
@@ -330,7 +364,7 @@ async fn handle_spam_tally(
     metrics: Arc,
     mem_drainfile_present: bool,
 ) -> Result<(), reqwest::Error> {
-    if !policy_config.spam_sample_rate.is_sampled().await {
+    if !(tally.spam_weight.is_sampled() && policy_config.spam_sample_rate.is_sampled()) {
         return Ok(());
     }
     let resp = policy.handle_tally(tally.clone());
@@ -615,7 +649,8 @@ impl TrafficSim {
                     client,
                     // TODO add proxy IP for testing
                     None,
-                    // TODO add weight adjustment
+                    // TODO add weight adjustments
+                    Weight::one(),
                     Weight::one(),
                 ));
             } else {
diff --git a/crates/sui-core/src/traffic_controller/policies.rs b/crates/sui-core/src/traffic_controller/policies.rs
index 64ebfe8cbb59b..806206dc68028 100644
--- a/crates/sui-core/src/traffic_controller/policies.rs
+++ b/crates/sui-core/src/traffic_controller/policies.rs
@@ -137,6 +137,7 @@ pub struct TrafficTally {
     pub direct: Option,
     pub through_fullnode: Option,
     pub error_weight: Weight,
+    pub spam_weight: Weight,
     pub timestamp: SystemTime,
 }
 
@@ -145,11 +146,13 @@ impl TrafficTally {
         direct: Option,
         through_fullnode: Option,
         error_weight: Weight,
+        spam_weight: Weight,
     ) -> Self {
         Self {
             direct,
             through_fullnode,
             error_weight,
+            spam_weight,
             timestamp: SystemTime::now(),
         }
     }
@@ -418,18 +421,21 @@ mod tests {
             direct: Some(IpAddr::V4(Ipv4Addr::new(8, 7, 6, 5))),
             through_fullnode: Some(IpAddr::V4(Ipv4Addr::new(1, 2, 3, 4))),
             error_weight: Weight::zero(),
+            spam_weight: Weight::one(),
             timestamp: SystemTime::now(),
         };
         let bob = TrafficTally {
             direct: Some(IpAddr::V4(Ipv4Addr::new(8, 7, 6, 5))),
             through_fullnode: Some(IpAddr::V4(Ipv4Addr::new(4, 3, 2, 1))),
             error_weight: Weight::zero(),
+            spam_weight: Weight::one(),
             timestamp: SystemTime::now(),
         };
         let charlie = TrafficTally {
             direct: Some(IpAddr::V4(Ipv4Addr::new(8, 7, 6, 5))),
             through_fullnode: Some(IpAddr::V4(Ipv4Addr::new(5, 6, 7, 8))),
             error_weight: Weight::zero(),
+            spam_weight: Weight::one(),
             timestamp: SystemTime::now(),
         };
 
diff --git a/crates/sui-e2e-tests/tests/traffic_control_tests.rs b/crates/sui-e2e-tests/tests/traffic_control_tests.rs
index df12c95bee009..9fd583c017c95 100644
--- a/crates/sui-e2e-tests/tests/traffic_control_tests.rs
+++ b/crates/sui-e2e-tests/tests/traffic_control_tests.rs
@@ -4,12 +4,15 @@
 //! NB: Most tests in this module expect real network connections and interactions, thus
 //! they should nearly all be tokio::test rather than simtest.
 
+use core::panic;
 use jsonrpsee::{
     core::{client::ClientT, RpcResult},
     rpc_params,
 };
 use std::fs::File;
 use std::time::Duration;
+use sui_core::authority_client::make_network_authority_clients_with_network_config;
+use sui_core::authority_client::AuthorityAPI;
 use sui_core::traffic_controller::{
     nodefw_test_server::NodeFwTestServer, TrafficController, TrafficSim,
 };
@@ -17,6 +20,7 @@ use sui_json_rpc_types::{
     SuiTransactionBlockEffectsAPI, SuiTransactionBlockResponse, SuiTransactionBlockResponseOptions,
 };
 use sui_macros::sim_test;
+use sui_network::default_mysten_network_config;
 use sui_swarm_config::network_config_builder::ConfigBuilder;
 use sui_test_transaction_builder::batch_make_transfer_transactions;
 use sui_types::{
@@ -135,16 +139,16 @@ async fn test_validator_traffic_control_dry_run() -> Result<(), anyhow::Error> {
         .build()
         .await;
 
-    assert_traffic_control_dry_run(test_cluster, n as usize).await
+    assert_validator_traffic_control_dry_run(test_cluster, n as usize).await
 }
 
 #[tokio::test]
 async fn test_fullnode_traffic_control_dry_run() -> Result<(), anyhow::Error> {
-    let n = 15;
+    let txn_count = 15;
     let policy_config = PolicyConfig {
         connection_blocklist_ttl_sec: 1,
         proxy_blocklist_ttl_sec: 5,
-        spam_policy_type: PolicyType::TestNConnIP(n - 1),
+        spam_policy_type: PolicyType::TestNConnIP(txn_count - 1),
         spam_sample_rate: Weight::one(),
         // This should never be invoked when set as an error policy
         // as we are not sending requests that error
@@ -156,37 +160,102 @@ async fn test_fullnode_traffic_control_dry_run() -> Result<(), anyhow::Error> {
         .with_fullnode_policy_config(Some(policy_config))
         .build()
         .await;
-    assert_traffic_control_dry_run(test_cluster, n as usize).await
+
+    let context = test_cluster.wallet;
+    let jsonrpc_client = &test_cluster.fullnode_handle.rpc_client;
+    let mut txns = batch_make_transfer_transactions(&context, txn_count as usize).await;
+    assert!(
+        txns.len() >= txn_count as usize,
+        "Expect at least {} txns. Do we generate enough gas objects during genesis?",
+        txn_count,
+    );
+
+    let txn = txns.swap_remove(0);
+    let tx_digest = txn.digest();
+    let (tx_bytes, signatures) = txn.to_tx_bytes_and_signatures();
+    let params = rpc_params![
+        tx_bytes,
+        signatures,
+        SuiTransactionBlockResponseOptions::new(),
+        ExecuteTransactionRequestType::WaitForLocalExecution
+    ];
+
+    let response: SuiTransactionBlockResponse = jsonrpc_client
+        .request("sui_executeTransactionBlock", params.clone())
+        .await
+        .unwrap();
+    let SuiTransactionBlockResponse {
+        digest,
+        confirmed_local_execution,
+        ..
+    } = response;
+    assert_eq!(&digest, tx_digest);
+    assert!(confirmed_local_execution.unwrap());
+
+    // it should take no more than 4 requests to be added to the blocklist
+    for _ in 0..txn_count {
+        let response: RpcResult = jsonrpc_client
+            .request("sui_getTransactionBlock", rpc_params![*tx_digest])
+            .await;
+        assert!(
+            response.is_ok(),
+            "Expected request to succeed in dry-run mode"
+        );
+    }
+    Ok(())
 }
 
 #[tokio::test]
-async fn test_validator_traffic_control_spam_blocked() -> Result<(), anyhow::Error> {
+async fn test_validator_traffic_control_error_blocked() -> Result<(), anyhow::Error> {
     let n = 5;
     let policy_config = PolicyConfig {
         connection_blocklist_ttl_sec: 1,
         // Test that any N requests will cause an IP to be added to the blocklist.
-        spam_policy_type: PolicyType::TestNConnIP(n - 1),
-        spam_sample_rate: Weight::one(),
+        error_policy_type: PolicyType::TestNConnIP(n - 1),
         dry_run: false,
         ..Default::default()
     };
     let network_config = ConfigBuilder::new_with_temp_dir()
         .with_policy_config(Some(policy_config))
         .build();
-    let test_cluster = TestClusterBuilder::new()
+    let committee = network_config.committee_with_network();
+    let _test_cluster = TestClusterBuilder::new()
         .set_network_config(network_config)
         .build()
         .await;
-    assert_traffic_control_spam_blocked(test_cluster, n as usize).await
+    let local_clients = make_network_authority_clients_with_network_config(
+        &committee,
+        &default_mysten_network_config(),
+    )
+    .unwrap();
+    let (_, auth_client) = local_clients.first_key_value().unwrap();
+
+    // transaction signed using user wallet from a different chain/genesis,
+    // therefore we should fail with UserInputError
+    let other_cluster = TestClusterBuilder::new().build().await;
+
+    let mut txns = batch_make_transfer_transactions(&other_cluster.wallet, n as usize).await;
+    let tx = txns.swap_remove(0);
+
+    // it should take no more than 4 requests to be added to the blocklist
+    for _ in 0..n {
+        let response = auth_client.handle_transaction(tx.clone(), None).await;
+        if let Err(err) = response {
+            if err.to_string().contains("Too many requests") {
+                return Ok(());
+            }
+        }
+    }
+    panic!("Expected spam policy to trigger within {n} requests");
 }
 
 #[tokio::test]
 async fn test_fullnode_traffic_control_spam_blocked() -> Result<(), anyhow::Error> {
-    let n = 15;
+    let txn_count = 15;
     let policy_config = PolicyConfig {
         connection_blocklist_ttl_sec: 3,
         // Test that any N requests will cause an IP to be added to the blocklist.
-        spam_policy_type: PolicyType::TestNConnIP(n - 1),
+        spam_policy_type: PolicyType::TestNConnIP(txn_count - 1),
         spam_sample_rate: Weight::one(),
         dry_run: false,
         ..Default::default()
@@ -195,19 +264,68 @@ async fn test_fullnode_traffic_control_spam_blocked() -> Result<(), anyhow::Erro
         .with_fullnode_policy_config(Some(policy_config))
         .build()
         .await;
-    assert_traffic_control_spam_blocked(test_cluster, n as usize).await
+
+    let context = test_cluster.wallet;
+    let jsonrpc_client = &test_cluster.fullnode_handle.rpc_client;
+
+    let mut txns = batch_make_transfer_transactions(&context, txn_count as usize).await;
+    assert!(
+        txns.len() >= txn_count as usize,
+        "Expect at least {} txns. Do we generate enough gas objects during genesis?",
+        txn_count,
+    );
+
+    let txn = txns.swap_remove(0);
+    let tx_digest = txn.digest();
+    let (tx_bytes, signatures) = txn.to_tx_bytes_and_signatures();
+    let params = rpc_params![
+        tx_bytes,
+        signatures,
+        SuiTransactionBlockResponseOptions::new(),
+        ExecuteTransactionRequestType::WaitForLocalExecution
+    ];
+
+    let response: SuiTransactionBlockResponse = jsonrpc_client
+        .request("sui_executeTransactionBlock", params.clone())
+        .await
+        .unwrap();
+    let SuiTransactionBlockResponse {
+        digest,
+        confirmed_local_execution,
+        ..
+    } = response;
+    assert_eq!(&digest, tx_digest);
+    assert!(confirmed_local_execution.unwrap());
+
+    // it should take no more than 4 requests to be added to the blocklist
+    for _ in 0..txn_count {
+        let response: RpcResult = jsonrpc_client
+            .request("sui_getTransactionBlock", rpc_params![*tx_digest])
+            .await;
+        if let Err(err) = response {
+            // TODO: fix validator blocking error handling such that the error message
+            // is not misleading. The full error message currently is the following:
+            //  Transaction execution failed due to issues with transaction inputs, please
+            //  review the errors and try again: Too many requests.
+            assert!(
+                err.to_string().contains("Too many requests"),
+                "Error not due to spam policy"
+            );
+            return Ok(());
+        }
+    }
+    panic!("Expected spam policy to trigger within {txn_count} requests");
 }
 
 #[tokio::test]
-async fn test_validator_traffic_control_spam_delegated() -> Result<(), anyhow::Error> {
-    let n = 4;
+async fn test_validator_traffic_control_error_delegated() -> Result<(), anyhow::Error> {
+    let n = 5;
     let port = 65000;
     let policy_config = PolicyConfig {
         connection_blocklist_ttl_sec: 120,
         proxy_blocklist_ttl_sec: 120,
         // Test that any N - 1 requests will cause an IP to be added to the blocklist.
-        spam_policy_type: PolicyType::TestNConnIP(n - 1),
-        spam_sample_rate: Weight::one(),
+        error_policy_type: PolicyType::TestNConnIP(n - 1),
         dry_run: false,
         ..Default::default()
     };
@@ -224,22 +342,58 @@ async fn test_validator_traffic_control_spam_delegated() -> Result<(), anyhow::E
         .with_policy_config(Some(policy_config))
         .with_firewall_config(Some(firewall_config))
         .build();
-    let test_cluster = TestClusterBuilder::new()
+    let committee = network_config.committee_with_network();
+    let _test_cluster = TestClusterBuilder::new()
         .set_network_config(network_config)
         .build()
         .await;
-    assert_traffic_control_spam_delegated(test_cluster, n as usize, port).await
+    let local_clients = make_network_authority_clients_with_network_config(
+        &committee,
+        &default_mysten_network_config(),
+    )
+    .unwrap();
+    let (_, auth_client) = local_clients.first_key_value().unwrap();
+
+    // transaction signed using user wallet from a different chain/genesis,
+    // therefore we should fail with UserInputError
+    let other_cluster = TestClusterBuilder::new().build().await;
+
+    let mut txns = batch_make_transfer_transactions(&other_cluster.wallet, n as usize).await;
+    let tx = txns.swap_remove(0);
+
+    // start test firewall server
+    let mut server = NodeFwTestServer::new();
+    server.start(port).await;
+    // await for the server to start
+    tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
+
+    // it should take no more than 4 requests to be added to the blocklist
+    for _ in 0..n {
+        let response = auth_client.handle_transaction(tx.clone(), None).await;
+        if let Err(err) = response {
+            if err.to_string().contains("Too many requests") {
+                return Ok(());
+            }
+        }
+    }
+    let fw_blocklist = server.list_addresses_rpc().await;
+    assert!(
+        !fw_blocklist.is_empty(),
+        "Expected blocklist to be non-empty"
+    );
+    server.stop().await;
+    Ok(())
 }
 
 #[tokio::test]
 async fn test_fullnode_traffic_control_spam_delegated() -> Result<(), anyhow::Error> {
-    let n = 10;
+    let txn_count = 10;
     let port = 65001;
     let policy_config = PolicyConfig {
         connection_blocklist_ttl_sec: 120,
         proxy_blocklist_ttl_sec: 120,
         // Test that any N - 1 requests will cause an IP to be added to the blocklist.
-        spam_policy_type: PolicyType::TestNConnIP(n - 1),
+        spam_policy_type: PolicyType::TestNConnIP(txn_count - 1),
         spam_sample_rate: Weight::one(),
         dry_run: false,
         ..Default::default()
@@ -258,7 +412,57 @@ async fn test_fullnode_traffic_control_spam_delegated() -> Result<(), anyhow::Er
         .with_fullnode_fw_config(Some(firewall_config.clone()))
         .build()
         .await;
-    assert_traffic_control_spam_delegated(test_cluster, n as usize, port).await
+
+    // start test firewall server
+    let mut server = NodeFwTestServer::new();
+    server.start(port).await;
+    // await for the server to start
+    tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
+    let context = test_cluster.wallet;
+    let jsonrpc_client = &test_cluster.fullnode_handle.rpc_client;
+    let mut txns = batch_make_transfer_transactions(&context, txn_count as usize).await;
+    assert!(
+        txns.len() >= txn_count as usize,
+        "Expect at least {} txns. Do we generate enough gas objects during genesis?",
+        txn_count,
+    );
+
+    let txn = txns.swap_remove(0);
+    let tx_digest = txn.digest();
+    let (tx_bytes, signatures) = txn.to_tx_bytes_and_signatures();
+    let params = rpc_params![
+        tx_bytes,
+        signatures,
+        SuiTransactionBlockResponseOptions::new(),
+        ExecuteTransactionRequestType::WaitForLocalExecution
+    ];
+
+    // it should take no more than 4 requests to be added to the blocklist
+    let response: SuiTransactionBlockResponse = jsonrpc_client
+        .request("sui_executeTransactionBlock", params.clone())
+        .await
+        .unwrap();
+    let SuiTransactionBlockResponse {
+        digest,
+        confirmed_local_execution,
+        ..
+    } = response;
+    assert_eq!(&digest, tx_digest);
+    assert!(confirmed_local_execution.unwrap());
+
+    for _ in 0..txn_count {
+        let response: RpcResult = jsonrpc_client
+            .request("sui_getTransactionBlock", rpc_params![*tx_digest])
+            .await;
+        assert!(response.is_ok(), "Expected request to succeed");
+    }
+    let fw_blocklist = server.list_addresses_rpc().await;
+    assert!(
+        !fw_blocklist.is_empty(),
+        "Expected blocklist to be non-empty"
+    );
+    server.stop().await;
+    Ok(())
 }
 
 #[tokio::test]
@@ -511,7 +715,7 @@ async fn assert_traffic_control_ok(mut test_cluster: TestCluster) -> Result<(),
 /// Test that in dry-run mode, actions that would otherwise
 /// lead to request blocking (in this case, a spammy client)
 /// are allowed to proceed.
-async fn assert_traffic_control_dry_run(
+async fn assert_validator_traffic_control_dry_run(
     mut test_cluster: TestCluster,
     txn_count: usize,
 ) -> Result<(), anyhow::Error> {
@@ -525,6 +729,7 @@ async fn assert_traffic_control_dry_run(
     );
 
     let txn = txns.swap_remove(0);
+    let tx_digest = txn.digest();
     let (tx_bytes, signatures) = txn.to_tx_bytes_and_signatures();
     let params = rpc_params![
         tx_bytes,
@@ -533,10 +738,22 @@ async fn assert_traffic_control_dry_run(
         ExecuteTransactionRequestType::WaitForLocalExecution
     ];
 
+    let response: SuiTransactionBlockResponse = jsonrpc_client
+        .request("sui_executeTransactionBlock", params.clone())
+        .await
+        .unwrap();
+    let SuiTransactionBlockResponse {
+        digest,
+        confirmed_local_execution,
+        ..
+    } = response;
+    assert_eq!(&digest, tx_digest);
+    assert!(confirmed_local_execution.unwrap());
+
     // it should take no more than 4 requests to be added to the blocklist
     for _ in 0..txn_count {
         let response: RpcResult = jsonrpc_client
-            .request("sui_executeTransactionBlock", params.clone())
+            .request("sui_getTransactionBlock", rpc_params![*tx_digest])
             .await;
         assert!(
             response.is_ok(),
@@ -545,90 +762,3 @@ async fn assert_traffic_control_dry_run(
     }
     Ok(())
 }
-
-async fn assert_traffic_control_spam_blocked(
-    mut test_cluster: TestCluster,
-    txn_count: usize,
-) -> Result<(), anyhow::Error> {
-    let context = &mut test_cluster.wallet;
-    let jsonrpc_client = &test_cluster.fullnode_handle.rpc_client;
-
-    let mut txns = batch_make_transfer_transactions(context, txn_count).await;
-    assert!(
-        txns.len() >= txn_count,
-        "Expect at least {} txns. Do we generate enough gas objects during genesis?",
-        txn_count,
-    );
-
-    let txn = txns.swap_remove(0);
-    let (tx_bytes, signatures) = txn.to_tx_bytes_and_signatures();
-    let params = rpc_params![
-        tx_bytes,
-        signatures,
-        SuiTransactionBlockResponseOptions::new(),
-        ExecuteTransactionRequestType::WaitForLocalExecution
-    ];
-
-    // it should take no more than 4 requests to be added to the blocklist
-    for _ in 0..txn_count {
-        let response: RpcResult = jsonrpc_client
-            .request("sui_executeTransactionBlock", params.clone())
-            .await;
-        if let Err(err) = response {
-            // TODO: fix validator blocking error handling such that the error message
-            // is not misleading. The full error message currently is the following:
-            //  Transaction execution failed due to issues with transaction inputs, please
-            //  review the errors and try again: Too many requests.
-            assert!(
-                err.to_string().contains("Too many requests"),
-                "Error not due to spam policy"
-            );
-            return Ok(());
-        }
-    }
-    panic!("Expected spam policy to trigger within {txn_count} requests");
-}
-
-async fn assert_traffic_control_spam_delegated(
-    mut test_cluster: TestCluster,
-    txn_count: usize,
-    listen_port: u16,
-) -> Result<(), anyhow::Error> {
-    // start test firewall server
-    let mut server = NodeFwTestServer::new();
-    server.start(listen_port).await;
-    // await for the server to start
-    tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
-    let context = &mut test_cluster.wallet;
-    let jsonrpc_client = &test_cluster.fullnode_handle.rpc_client;
-    let mut txns = batch_make_transfer_transactions(context, txn_count).await;
-    assert!(
-        txns.len() >= txn_count,
-        "Expect at least {} txns. Do we generate enough gas objects during genesis?",
-        txn_count,
-    );
-
-    let txn = txns.swap_remove(0);
-    let (tx_bytes, signatures) = txn.to_tx_bytes_and_signatures();
-    let params = rpc_params![
-        tx_bytes,
-        signatures,
-        SuiTransactionBlockResponseOptions::new(),
-        ExecuteTransactionRequestType::WaitForLocalExecution
-    ];
-
-    // it should take no more than 4 requests to be added to the blocklist
-    for _ in 0..txn_count {
-        let response: RpcResult = jsonrpc_client
-            .request("sui_executeTransactionBlock", params.clone())
-            .await;
-        assert!(response.is_ok(), "Expected request to succeed");
-    }
-    let fw_blocklist = server.list_addresses_rpc().await;
-    assert!(
-        !fw_blocklist.is_empty(),
-        "Expected blocklist to be non-empty"
-    );
-    server.stop().await;
-    Ok(())
-}
diff --git a/crates/sui-json-rpc/src/axum_router.rs b/crates/sui-json-rpc/src/axum_router.rs
index 5700f708f37e9..f7ef9d7693b67 100644
--- a/crates/sui-json-rpc/src/axum_router.rs
+++ b/crates/sui-json-rpc/src/axum_router.rs
@@ -165,12 +165,13 @@ async fn process_raw_request(
                 return blocked_response;
             }
         }
-        let response = process_request(request, api_version, service.call_data()).await;
 
         // handle response tallying
+        let response = process_request(request, api_version, service.call_data()).await;
         if let Some(traffic_controller) = &service.traffic_controller {
             handle_traffic_resp(traffic_controller.clone(), client, &response);
         }
+
         response
     } else if let Ok(_batch) = serde_json::from_str::>(raw_request) {
         MethodResponse::error(
@@ -207,6 +208,14 @@ fn handle_traffic_resp(
         direct: client,
         through_fullnode: None,
         error_weight: error.map(normalize).unwrap_or(Weight::zero()),
+        // For now, count everything as spam with equal weight
+        // on the rpc node side, including gas-charging endpoints
+        // such as `sui_executeTransactionBlock`, as this can enable
+        // node operators who wish to rate limit their transcation
+        // traffic and incentivize high volume clients to choose a
+        // suitable rpc provider (or run their own). Later we may want
+        // to provide a weight distribution based on the method being called.
+        spam_weight: Weight::one(),
         timestamp: SystemTime::now(),
     });
 }
diff --git a/crates/sui-types/src/traffic_control.rs b/crates/sui-types/src/traffic_control.rs
index c5d5d41116f0a..e976081abcecd 100644
--- a/crates/sui-types/src/traffic_control.rs
+++ b/crates/sui-types/src/traffic_control.rs
@@ -53,7 +53,7 @@ impl Weight {
         self.0
     }
 
-    pub async fn is_sampled(&self) -> bool {
+    pub fn is_sampled(&self) -> bool {
         let mut rng = rand::thread_rng();
         let sample = rand::distributions::Uniform::new(0.0, 1.0).sample(&mut rng);
         sample <= self.value()
@@ -201,6 +201,11 @@ pub struct PolicyConfig {
     #[serde(default = "default_channel_capacity")]
     pub channel_capacity: usize,
     #[serde(default = "default_spam_sample_rate")]
+    /// Note that this sample policy is applied on top of the
+    /// endpoint-specific sample policy (not configurable) which
+    /// weighs endpoints by the relative effort required to serve
+    /// them. Therefore a sample rate of N will yield an actual
+    /// sample rate <= N.
     pub spam_sample_rate: Weight,
     #[serde(default = "default_dry_run")]
     pub dry_run: bool,
diff --git a/crates/test-cluster/src/lib.rs b/crates/test-cluster/src/lib.rs
index 7b2b084832ab5..78f7d65a077cd 100644
--- a/crates/test-cluster/src/lib.rs
+++ b/crates/test-cluster/src/lib.rs
@@ -23,6 +23,7 @@ use sui_bridge::types::CertifiedBridgeAction;
 use sui_bridge::types::VerifiedCertifiedBridgeAction;
 use sui_bridge::utils::publish_and_register_coins_return_add_coins_on_sui_action;
 use sui_bridge::utils::wait_for_server_to_be_up;
+use sui_config::genesis::Genesis;
 use sui_config::local_ip_utils::get_available_port;
 use sui_config::node::{AuthorityOverloadConfig, DBCheckpointConfig, RunWithRange};
 use sui_config::{Config, SUI_CLIENT_CONFIG, SUI_NETWORK_CONFIG};
@@ -210,6 +211,10 @@ impl TestCluster {
         self.swarm.active_validators().map(|v| v.name()).collect()
     }
 
+    pub fn get_genesis(&self) -> Genesis {
+        self.swarm.config().genesis.clone()
+    }
+
     pub fn stop_node(&self, name: &AuthorityName) {
         self.swarm.node(name).unwrap().stop();
     }

From 8ff8f2e1e29bc92b5a4dccfe74a899974fa11199 Mon Sep 17 00:00:00 2001
From: William Smith 
Date: Thu, 27 Jun 2024 12:18:09 -0700
Subject: [PATCH 07/57] Cp accum per epoch component (#18442)

## Description

CP https://github.com/MystenLabs/sui/pull/18281

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:

Co-authored-by: Mark Logan 
---
 crates/sui-core/src/authority.rs              | 14 +---
 .../authority/authority_per_epoch_store.rs    |  1 +
 .../src/authority/authority_test_utils.rs     |  3 +-
 .../checkpoint_executor/metrics.rs            |  7 --
 .../checkpoints/checkpoint_executor/mod.rs    | 27 ++----
 .../checkpoints/checkpoint_executor/tests.rs  |  4 +-
 crates/sui-core/src/checkpoints/mod.rs        | 46 ++++++-----
 crates/sui-core/src/state_accumulator.rs      | 67 +++++++++++++--
 crates/sui-core/src/test_utils.rs             |  3 +-
 .../src/unit_tests/narwhal_manager_tests.rs   |  7 +-
 .../tests/reconfiguration_tests.rs            | 66 +++++++++++++++
 crates/sui-node/src/lib.rs                    | 82 +++++++++++++------
 .../src/single_node.rs                        |  2 +-
 13 files changed, 236 insertions(+), 93 deletions(-)

diff --git a/crates/sui-core/src/authority.rs b/crates/sui-core/src/authority.rs
index 76d2a1f31fe09..a8e89b9e27690 100644
--- a/crates/sui-core/src/authority.rs
+++ b/crates/sui-core/src/authority.rs
@@ -136,7 +136,6 @@ use crate::authority::authority_store_pruner::{
 };
 use crate::authority::epoch_start_configuration::EpochStartConfigTrait;
 use crate::authority::epoch_start_configuration::EpochStartConfiguration;
-use crate::checkpoints::checkpoint_executor::CheckpointExecutor;
 use crate::checkpoints::CheckpointStore;
 use crate::consensus_adapter::ConsensusAdapter;
 use crate::epoch::committee_store::CommitteeStore;
@@ -2838,7 +2837,6 @@ impl AuthorityState {
         supported_protocol_versions: SupportedProtocolVersions,
         new_committee: Committee,
         epoch_start_configuration: EpochStartConfiguration,
-        checkpoint_executor: &CheckpointExecutor,
         accumulator: Arc,
         expensive_safety_check_config: &ExpensiveSafetyCheckConfig,
     ) -> SuiResult> {
@@ -2857,12 +2855,7 @@ impl AuthorityState {
             .await?;
         self.get_reconfig_api()
             .clear_state_end_of_epoch(&execution_lock);
-        self.check_system_consistency(
-            cur_epoch_store,
-            checkpoint_executor,
-            accumulator,
-            expensive_safety_check_config,
-        );
+        self.check_system_consistency(cur_epoch_store, accumulator, expensive_safety_check_config);
         self.maybe_reaccumulate_state_hash(
             cur_epoch_store,
             epoch_start_configuration
@@ -2955,7 +2948,6 @@ impl AuthorityState {
     fn check_system_consistency(
         &self,
         cur_epoch_store: &AuthorityPerEpochStore,
-        checkpoint_executor: &CheckpointExecutor,
         accumulator: Arc,
         expensive_safety_check_config: &ExpensiveSafetyCheckConfig,
     ) {
@@ -2986,7 +2978,6 @@ impl AuthorityState {
                 cur_epoch_store.epoch()
             );
             self.expensive_check_is_consistent_state(
-                checkpoint_executor,
                 accumulator,
                 cur_epoch_store,
                 cfg!(debug_assertions), // panic in debug mode only
@@ -3003,7 +2994,6 @@ impl AuthorityState {
 
     fn expensive_check_is_consistent_state(
         &self,
-        checkpoint_executor: &CheckpointExecutor,
         accumulator: Arc,
         cur_epoch_store: &AuthorityPerEpochStore,
         panic: bool,
@@ -3041,7 +3031,7 @@ impl AuthorityState {
         }
 
         if !panic {
-            checkpoint_executor.set_inconsistent_state(is_inconsistent);
+            accumulator.set_inconsistent_state(is_inconsistent);
         }
     }
 
diff --git a/crates/sui-core/src/authority/authority_per_epoch_store.rs b/crates/sui-core/src/authority/authority_per_epoch_store.rs
index 4f0ca326b23fe..e6e7315ad7224 100644
--- a/crates/sui-core/src/authority/authority_per_epoch_store.rs
+++ b/crates/sui-core/src/authority/authority_per_epoch_store.rs
@@ -726,6 +726,7 @@ impl AuthorityPerEpochStore {
             epoch_id
         );
         let epoch_start_configuration = Arc::new(epoch_start_configuration);
+        info!("epoch flags: {:?}", epoch_start_configuration.flags());
         metrics.current_epoch.set(epoch_id as i64);
         metrics
             .current_voting_right
diff --git a/crates/sui-core/src/authority/authority_test_utils.rs b/crates/sui-core/src/authority/authority_test_utils.rs
index 74bd74b49f9b9..335872122d324 100644
--- a/crates/sui-core/src/authority/authority_test_utils.rs
+++ b/crates/sui-core/src/authority/authority_test_utils.rs
@@ -88,7 +88,8 @@ pub async fn execute_certificate_with_execution_error(
     // for testing and regression detection.
     // We must do this before sending to consensus, otherwise consensus may already
     // lead to transaction execution and state change.
-    let state_acc = StateAccumulator::new(authority.get_accumulator_store().clone(), &epoch_store);
+    let state_acc =
+        StateAccumulator::new_for_tests(authority.get_accumulator_store().clone(), &epoch_store);
     let include_wrapped_tombstone = !authority
         .epoch_store_for_testing()
         .protocol_config()
diff --git a/crates/sui-core/src/checkpoints/checkpoint_executor/metrics.rs b/crates/sui-core/src/checkpoints/checkpoint_executor/metrics.rs
index 33b82682416ac..c51c4c6e61a8f 100644
--- a/crates/sui-core/src/checkpoints/checkpoint_executor/metrics.rs
+++ b/crates/sui-core/src/checkpoints/checkpoint_executor/metrics.rs
@@ -20,7 +20,6 @@ pub struct CheckpointExecutorMetrics {
     pub checkpoint_transaction_count: Histogram,
     pub checkpoint_contents_age_ms: Histogram,
     pub last_executed_checkpoint_age_ms: Histogram,
-    pub accumulator_inconsistent_state: IntGauge,
 }
 
 impl CheckpointExecutorMetrics {
@@ -87,12 +86,6 @@ impl CheckpointExecutorMetrics {
                 "Age of the last executed checkpoint",
                 registry
             ),
-            accumulator_inconsistent_state: register_int_gauge_with_registry!(
-                "accumulator_inconsistent_state",
-                "1 if accumulated live object set differs from StateAccumulator root state hash for the previous epoch",
-                registry,
-            )
-            .unwrap(),
         };
         Arc::new(this)
     }
diff --git a/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs b/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs
index b269c4a753f92..201774ed46776 100644
--- a/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs
+++ b/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs
@@ -29,7 +29,6 @@ use either::Either;
 use futures::stream::FuturesOrdered;
 use itertools::izip;
 use mysten_metrics::spawn_monitored_task;
-use prometheus::Registry;
 use sui_config::node::{CheckpointExecutorConfig, RunWithRange};
 use sui_macros::{fail_point, fail_point_async};
 use sui_types::accumulator::Accumulator;
@@ -68,7 +67,8 @@ use crate::{
 };
 
 mod data_ingestion_handler;
-mod metrics;
+pub mod metrics;
+
 #[cfg(test)]
 pub(crate) mod tests;
 
@@ -157,7 +157,7 @@ impl CheckpointExecutor {
         state: Arc,
         accumulator: Arc,
         config: CheckpointExecutorConfig,
-        prometheus_registry: &Registry,
+        metrics: Arc,
     ) -> Self {
         Self {
             mailbox,
@@ -168,7 +168,7 @@ impl CheckpointExecutor {
             tx_manager: state.transaction_manager().clone(),
             accumulator,
             config,
-            metrics: CheckpointExecutorMetrics::new(prometheus_registry),
+            metrics,
         }
     }
 
@@ -178,17 +178,14 @@ impl CheckpointExecutor {
         state: Arc,
         accumulator: Arc,
     ) -> Self {
-        Self {
+        Self::new(
             mailbox,
-            state: state.clone(),
             checkpoint_store,
-            object_cache_reader: state.get_object_cache_reader().clone(),
-            transaction_cache_reader: state.get_transaction_cache_reader().clone(),
-            tx_manager: state.transaction_manager().clone(),
+            state,
             accumulator,
-            config: Default::default(),
-            metrics: CheckpointExecutorMetrics::new_for_tests(),
-        }
+            Default::default(),
+            CheckpointExecutorMetrics::new_for_tests(),
+        )
     }
 
     /// Ensure that all checkpoints in the current epoch will be executed.
@@ -358,12 +355,6 @@ impl CheckpointExecutor {
         }
     }
 
-    pub fn set_inconsistent_state(&self, is_inconsistent_state: bool) {
-        self.metrics
-            .accumulator_inconsistent_state
-            .set(is_inconsistent_state as i64);
-    }
-
     fn bump_highest_executed_checkpoint(&self, checkpoint: &VerifiedCheckpoint) {
         // Ensure that we are not skipping checkpoints at any point
         let seq = *checkpoint.sequence_number();
diff --git a/crates/sui-core/src/checkpoints/checkpoint_executor/tests.rs b/crates/sui-core/src/checkpoints/checkpoint_executor/tests.rs
index c156a1676879f..4efa9a57714b2 100644
--- a/crates/sui-core/src/checkpoints/checkpoint_executor/tests.rs
+++ b/crates/sui-core/src/checkpoints/checkpoint_executor/tests.rs
@@ -234,7 +234,6 @@ pub async fn test_checkpoint_executor_cross_epoch() {
                 EpochFlag::default_flags_for_new_epoch(&authority_state.config),
             )
             .unwrap(),
-            &executor,
             accumulator,
             &ExpensiveSafetyCheckConfig::default(),
         )
@@ -394,7 +393,8 @@ async fn init_executor_test(
         broadcast::channel(buffer_size);
     let epoch_store = state.epoch_store_for_testing();
 
-    let accumulator = StateAccumulator::new(state.get_accumulator_store().clone(), &epoch_store);
+    let accumulator =
+        StateAccumulator::new_for_tests(state.get_accumulator_store().clone(), &epoch_store);
     let accumulator = Arc::new(accumulator);
 
     let executor = CheckpointExecutor::new_for_tests(
diff --git a/crates/sui-core/src/checkpoints/mod.rs b/crates/sui-core/src/checkpoints/mod.rs
index a0437a0ff6e77..8f329e4ea2789 100644
--- a/crates/sui-core/src/checkpoints/mod.rs
+++ b/crates/sui-core/src/checkpoints/mod.rs
@@ -41,6 +41,7 @@ use std::fs::File;
 use std::io::Write;
 use std::path::Path;
 use std::sync::Arc;
+use std::sync::Weak;
 use std::time::Duration;
 use sui_protocol_config::ProtocolVersion;
 use sui_types::base_types::{AuthorityName, EpochId, TransactionDigest};
@@ -859,7 +860,7 @@ pub struct CheckpointBuilder {
     notify: Arc,
     notify_aggregator: Arc,
     effects_store: Arc,
-    accumulator: Arc,
+    accumulator: Weak,
     output: Box,
     exit: watch::Receiver<()>,
     metrics: Arc,
@@ -897,7 +898,7 @@ impl CheckpointBuilder {
         epoch_store: Arc,
         notify: Arc,
         effects_store: Arc,
-        accumulator: Arc,
+        accumulator: Weak,
         output: Box,
         exit: watch::Receiver<()>,
         notify_aggregator: Arc,
@@ -1432,19 +1433,24 @@ impl CheckpointBuilder {
                 let committee = system_state_obj.get_current_epoch_committee().committee;
 
                 // This must happen after the call to augment_epoch_last_checkpoint,
-                // otherwise we will not capture the change_epoch tx
-                let acc = self.accumulator.accumulate_checkpoint(
-                    effects.clone(),
-                    sequence_number,
-                    &self.epoch_store,
-                )?;
-                self.accumulator
-                    .accumulate_running_root(&self.epoch_store, sequence_number, Some(acc))
-                    .await?;
-                let root_state_digest = self
-                    .accumulator
-                    .digest_epoch(self.epoch_store.clone(), sequence_number)
-                    .await?;
+                // otherwise we will not capture the change_epoch tx.
+                let root_state_digest = {
+                    let state_acc = self
+                        .accumulator
+                        .upgrade()
+                        .expect("No checkpoints should be getting built after local configuration");
+                    let acc = state_acc.accumulate_checkpoint(
+                        effects.clone(),
+                        sequence_number,
+                        &self.epoch_store,
+                    )?;
+                    state_acc
+                        .accumulate_running_root(&self.epoch_store, sequence_number, Some(acc))
+                        .await?;
+                    state_acc
+                        .digest_epoch(self.epoch_store.clone(), sequence_number)
+                        .await?
+                };
                 self.metrics.highest_accumulated_epoch.set(epoch as i64);
                 info!("Epoch {epoch} root state hash digest: {root_state_digest:?}");
 
@@ -2213,7 +2219,7 @@ impl CheckpointService {
         checkpoint_store: Arc,
         epoch_store: Arc,
         effects_store: Arc,
-        accumulator: Arc,
+        accumulator: Weak,
         checkpoint_output: Box,
         certified_checkpoint_output: Box,
         metrics: Arc,
@@ -2503,15 +2509,17 @@ mod tests {
         let checkpoint_store = CheckpointStore::new(ckpt_dir.path());
         let epoch_store = state.epoch_store_for_testing();
 
-        let accumulator =
-            StateAccumulator::new(state.get_accumulator_store().clone(), &epoch_store);
+        let accumulator = Arc::new(StateAccumulator::new_for_tests(
+            state.get_accumulator_store().clone(),
+            &epoch_store,
+        ));
 
         let (checkpoint_service, _exit) = CheckpointService::spawn(
             state.clone(),
             checkpoint_store,
             epoch_store.clone(),
             store,
-            Arc::new(accumulator),
+            Arc::downgrade(&accumulator),
             Box::new(output),
             Box::new(certified_output),
             CheckpointMetrics::new_for_tests(),
diff --git a/crates/sui-core/src/state_accumulator.rs b/crates/sui-core/src/state_accumulator.rs
index 0cc6f6c9d4e3c..f67f150839721 100644
--- a/crates/sui-core/src/state_accumulator.rs
+++ b/crates/sui-core/src/state_accumulator.rs
@@ -3,6 +3,7 @@
 
 use itertools::Itertools;
 use mysten_metrics::monitored_scope;
+use prometheus::{register_int_gauge_with_registry, IntGauge, Registry};
 use serde::Serialize;
 use sui_protocol_config::ProtocolConfig;
 use sui_types::base_types::{ObjectID, ObjectRef, SequenceNumber, VersionNumber};
@@ -25,6 +26,24 @@ use sui_types::messages_checkpoint::{CheckpointSequenceNumber, ECMHLiveObjectSet
 use crate::authority::authority_per_epoch_store::AuthorityPerEpochStore;
 use crate::authority::authority_store_tables::LiveObject;
 
+pub struct StateAccumulatorMetrics {
+    inconsistent_state: IntGauge,
+}
+
+impl StateAccumulatorMetrics {
+    pub fn new(registry: &Registry) -> Arc {
+        let this = Self {
+            inconsistent_state: register_int_gauge_with_registry!(
+                "accumulator_inconsistent_state",
+                "1 if accumulated live object set differs from StateAccumulator root state hash for the previous epoch",
+                registry
+            )
+            .unwrap(),
+        };
+        Arc::new(this)
+    }
+}
+
 pub enum StateAccumulator {
     V1(StateAccumulatorV1),
     V2(StateAccumulatorV2),
@@ -32,10 +51,12 @@ pub enum StateAccumulator {
 
 pub struct StateAccumulatorV1 {
     store: Arc,
+    metrics: Arc,
 }
 
 pub struct StateAccumulatorV2 {
     store: Arc,
+    metrics: Arc,
 }
 
 pub trait AccumulatorStore: ObjectStore + Send + Sync {
@@ -366,16 +387,44 @@ impl StateAccumulator {
     pub fn new(
         store: Arc,
         epoch_store: &Arc,
+        metrics: Arc,
     ) -> Self {
         if cfg!(msim) {
             if epoch_store.state_accumulator_v2_enabled() {
-                return StateAccumulator::V2(StateAccumulatorV2::new(store));
+                return StateAccumulator::V2(StateAccumulatorV2::new(store, metrics));
             } else {
-                return StateAccumulator::V1(StateAccumulatorV1::new(store));
+                return StateAccumulator::V1(StateAccumulatorV1::new(store, metrics));
             }
         }
 
-        StateAccumulator::V1(StateAccumulatorV1::new(store))
+        StateAccumulator::V1(StateAccumulatorV1::new(store, metrics))
+    }
+
+    pub fn new_for_tests(
+        store: Arc,
+        epoch_store: &Arc,
+    ) -> Self {
+        Self::new(
+            store,
+            epoch_store,
+            StateAccumulatorMetrics::new(&Registry::new()),
+        )
+    }
+
+    pub fn metrics(&self) -> Arc {
+        match self {
+            StateAccumulator::V1(impl_v1) => impl_v1.metrics.clone(),
+            StateAccumulator::V2(impl_v2) => impl_v2.metrics.clone(),
+        }
+    }
+
+    pub fn set_inconsistent_state(&self, is_inconsistent_state: bool) {
+        match self {
+            StateAccumulator::V1(impl_v1) => &impl_v1.metrics,
+            StateAccumulator::V2(impl_v2) => &impl_v2.metrics,
+        }
+        .inconsistent_state
+        .set(is_inconsistent_state as i64);
     }
 
     /// Accumulates the effects of a single checkpoint and persists the accumulator.
@@ -528,8 +577,8 @@ impl StateAccumulator {
 }
 
 impl StateAccumulatorV1 {
-    pub fn new(store: Arc) -> Self {
-        Self { store }
+    pub fn new(store: Arc, metrics: Arc) -> Self {
+        Self { store, metrics }
     }
 
     /// Unions all checkpoint accumulators at the end of the epoch to generate the
@@ -618,8 +667,8 @@ impl StateAccumulatorV1 {
 }
 
 impl StateAccumulatorV2 {
-    pub fn new(store: Arc) -> Self {
-        Self { store }
+    pub fn new(store: Arc, metrics: Arc) -> Self {
+        Self { store, metrics }
     }
 
     pub async fn accumulate_running_root(
@@ -629,6 +678,10 @@ impl StateAccumulatorV2 {
         checkpoint_acc: Option,
     ) -> SuiResult {
         let _scope = monitored_scope("AccumulateRunningRoot");
+        tracing::info!(
+            "accumulating running root for checkpoint {}",
+            checkpoint_seq_num
+        );
 
         // For the last checkpoint of the epoch, this function will be called once by the
         // checkpoint builder, and again by checkpoint executor.
diff --git a/crates/sui-core/src/test_utils.rs b/crates/sui-core/src/test_utils.rs
index 3c2b8a6ae5ef3..d9ccdd467af78 100644
--- a/crates/sui-core/src/test_utils.rs
+++ b/crates/sui-core/src/test_utils.rs
@@ -80,7 +80,8 @@ pub async fn send_and_confirm_transaction(
     //
     // We also check the incremental effects of the transaction on the live object set against StateAccumulator
     // for testing and regression detection
-    let state_acc = StateAccumulator::new(authority.get_accumulator_store().clone(), &epoch_store);
+    let state_acc =
+        StateAccumulator::new_for_tests(authority.get_accumulator_store().clone(), &epoch_store);
     let include_wrapped_tombstone = !authority
         .epoch_store_for_testing()
         .protocol_config()
diff --git a/crates/sui-core/src/unit_tests/narwhal_manager_tests.rs b/crates/sui-core/src/unit_tests/narwhal_manager_tests.rs
index 2fb2873ee63d9..5f6e52ebfd15e 100644
--- a/crates/sui-core/src/unit_tests/narwhal_manager_tests.rs
+++ b/crates/sui-core/src/unit_tests/narwhal_manager_tests.rs
@@ -70,7 +70,10 @@ async fn send_transactions(
 pub fn checkpoint_service_for_testing(state: Arc) -> Arc {
     let (output, _result) = mpsc::channel::<(CheckpointContents, CheckpointSummary)>(10);
     let epoch_store = state.epoch_store_for_testing();
-    let accumulator = StateAccumulator::new(state.get_accumulator_store().clone(), &epoch_store);
+    let accumulator = Arc::new(StateAccumulator::new_for_tests(
+        state.get_accumulator_store().clone(),
+        &epoch_store,
+    ));
     let (certified_output, _certified_result) = mpsc::channel::(10);
 
     let (checkpoint_service, _) = CheckpointService::spawn(
@@ -78,7 +81,7 @@ pub fn checkpoint_service_for_testing(state: Arc) -> Arc= 2 || !initial_flags_nodes.insert(current_node) {
+            return None;
+        }
+
+        // start with no flags set
+        Some(Vec::::new())
+    });
+
+    let test_cluster = TestClusterBuilder::new()
+        .with_epoch_duration_ms(30000)
+        .build()
+        .await;
+
+    let mut any_empty = false;
+    for node in test_cluster.all_node_handles() {
+        any_empty = any_empty
+            || node.with(|node| {
+                node.state()
+                    .epoch_store_for_testing()
+                    .epoch_start_config()
+                    .flags()
+                    .is_empty()
+            });
+    }
+    assert!(any_empty);
+
+    test_cluster.wait_for_epoch_all_nodes(1).await;
+
+    let mut any_empty = false;
+    for node in test_cluster.all_node_handles() {
+        any_empty = any_empty
+            || node.with(|node| {
+                node.state()
+                    .epoch_store_for_testing()
+                    .epoch_start_config()
+                    .flags()
+                    .is_empty()
+            });
+    }
+    assert!(!any_empty);
+
+    sleep(Duration::from_secs(15)).await;
+
+    test_cluster.stop_all_validators().await;
+    test_cluster.start_all_validators().await;
+
+    test_cluster.wait_for_epoch_all_nodes(2).await;
+}
+
 #[cfg(msim)]
 #[sim_test]
 async fn safe_mode_reconfig_test() {
diff --git a/crates/sui-node/src/lib.rs b/crates/sui-node/src/lib.rs
index 1070caa2431e7..85510eb78274f 100644
--- a/crates/sui-node/src/lib.rs
+++ b/crates/sui-node/src/lib.rs
@@ -20,7 +20,7 @@ use std::path::PathBuf;
 use std::str::FromStr;
 #[cfg(msim)]
 use std::sync::atomic::Ordering;
-use std::sync::Arc;
+use std::sync::{Arc, Weak};
 use std::time::Duration;
 use sui_core::authority::epoch_start_configuration::EpochFlag;
 use sui_core::authority::RandomnessRoundReceiver;
@@ -29,6 +29,7 @@ use sui_core::consensus_adapter::SubmitToConsensus;
 use sui_core::consensus_manager::ConsensusClient;
 use sui_core::epoch::randomness::RandomnessManager;
 use sui_core::execution_cache::build_execution_cache;
+use sui_core::state_accumulator::StateAccumulatorMetrics;
 use sui_core::storage::RestReadStore;
 use sui_core::traffic_controller::metrics::TrafficControllerMetrics;
 use sui_json_rpc::bridge_api::BridgeReadApi;
@@ -67,6 +68,7 @@ use sui_core::authority::epoch_start_configuration::EpochStartConfigTrait;
 use sui_core::authority::epoch_start_configuration::EpochStartConfiguration;
 use sui_core::authority_aggregator::AuthorityAggregator;
 use sui_core::authority_server::{ValidatorService, ValidatorServiceMetrics};
+use sui_core::checkpoints::checkpoint_executor::metrics::CheckpointExecutorMetrics;
 use sui_core::checkpoints::checkpoint_executor::{CheckpointExecutor, StopReason};
 use sui_core::checkpoints::{
     CheckpointMetrics, CheckpointService, CheckpointStore, SendCheckpointToStateSync,
@@ -225,7 +227,7 @@ pub struct SuiNode {
     state_sync_handle: state_sync::Handle,
     randomness_handle: randomness::Handle,
     checkpoint_store: Arc,
-    accumulator: Arc,
+    accumulator: Mutex>>,
     connection_monitor_status: Arc,
 
     /// Broadcast channel to send the starting system state for the next epoch.
@@ -714,6 +716,7 @@ impl SuiNode {
         let accumulator = Arc::new(StateAccumulator::new(
             cache_traits.accumulator_store.clone(),
             &epoch_store,
+            StateAccumulatorMetrics::new(&prometheus_registry),
         ));
 
         let authority_names_to_peer_ids = epoch_store
@@ -750,7 +753,7 @@ impl SuiNode {
                 checkpoint_store.clone(),
                 state_sync_handle.clone(),
                 randomness_handle.clone(),
-                accumulator.clone(),
+                Arc::downgrade(&accumulator),
                 connection_monitor_status.clone(),
                 ®istry_service,
                 sui_node_metrics.clone(),
@@ -780,7 +783,7 @@ impl SuiNode {
             state_sync_handle,
             randomness_handle,
             checkpoint_store,
-            accumulator,
+            accumulator: Mutex::new(Some(accumulator)),
             end_of_epoch_channel,
             connection_monitor_status,
             trusted_peer_change_tx,
@@ -1112,7 +1115,7 @@ impl SuiNode {
         checkpoint_store: Arc,
         state_sync_handle: state_sync::Handle,
         randomness_handle: randomness::Handle,
-        accumulator: Arc,
+        accumulator: Weak,
         connection_monitor_status: Arc,
         registry_service: &RegistryService,
         sui_node_metrics: Arc,
@@ -1202,7 +1205,7 @@ impl SuiNode {
         randomness_handle: randomness::Handle,
         consensus_manager: ConsensusManager,
         consensus_epoch_data_remover: EpochDataRemover,
-        accumulator: Arc,
+        accumulator: Weak,
         validator_server_handle: JoinHandle>,
         validator_overload_monitor_handle: Option>,
         checkpoint_metrics: Arc,
@@ -1306,7 +1309,7 @@ impl SuiNode {
         epoch_store: Arc,
         state: Arc,
         state_sync_handle: state_sync::Handle,
-        accumulator: Arc,
+        accumulator: Weak,
         checkpoint_metrics: Arc,
     ) -> (Arc, watch::Sender<()>) {
         let epoch_start_timestamp_ms = epoch_store.epoch_start_state().epoch_start_timestamp_ms();
@@ -1456,17 +1459,23 @@ impl SuiNode {
     /// This function awaits the completion of checkpoint execution of the current epoch,
     /// after which it iniitiates reconfiguration of the entire system.
     pub async fn monitor_reconfiguration(self: Arc) -> Result<()> {
-        let mut checkpoint_executor = CheckpointExecutor::new(
-            self.state_sync_handle.subscribe_to_synced_checkpoints(),
-            self.checkpoint_store.clone(),
-            self.state.clone(),
-            self.accumulator.clone(),
-            self.config.checkpoint_executor_config.clone(),
-            &self.registry_service.default_registry(),
-        );
+        let checkpoint_executor_metrics =
+            CheckpointExecutorMetrics::new(&self.registry_service.default_registry());
 
-        let run_with_range = self.config.run_with_range;
         loop {
+            let mut accumulator_guard = self.accumulator.lock().await;
+            let accumulator = accumulator_guard.take().unwrap();
+            let mut checkpoint_executor = CheckpointExecutor::new(
+                self.state_sync_handle.subscribe_to_synced_checkpoints(),
+                self.checkpoint_store.clone(),
+                self.state.clone(),
+                accumulator.clone(),
+                self.config.checkpoint_executor_config.clone(),
+                checkpoint_executor_metrics.clone(),
+            );
+
+            let run_with_range = self.config.run_with_range;
+
             let cur_epoch_store = self.state.load_epoch_store_one_call_per_task();
 
             // Advertise capabilities to committee, if we are a validator.
@@ -1495,6 +1504,7 @@ impl SuiNode {
             let stop_condition = checkpoint_executor
                 .run_epoch(cur_epoch_store.clone(), run_with_range)
                 .await;
+            drop(checkpoint_executor);
 
             if stop_condition == StopReason::RunWithRangeCondition {
                 SuiNode::shutdown(&self).await;
@@ -1565,6 +1575,7 @@ impl SuiNode {
             // The following code handles 4 different cases, depending on whether the node
             // was a validator in the previous epoch, and whether the node is a validator
             // in the new epoch.
+
             let new_validator_components = if let Some(ValidatorComponents {
                 validator_server_handle,
                 validator_overload_monitor_handle,
@@ -1588,10 +1599,23 @@ impl SuiNode {
                         &cur_epoch_store,
                         next_epoch_committee.clone(),
                         new_epoch_start_state,
-                        &checkpoint_executor,
+                        accumulator.clone(),
                     )
                     .await;
 
+                // No other components should be holding a strong reference to state accumulator
+                // at this point. Confirm here before we swap in the new accumulator.
+                let accumulator_metrics = Arc::into_inner(accumulator)
+                    .expect("Accumulator should have no other references at this point")
+                    .metrics();
+                let new_accumulator = Arc::new(StateAccumulator::new(
+                    self.state.get_accumulator_store().clone(),
+                    &new_epoch_store,
+                    accumulator_metrics,
+                ));
+                let weak_accumulator = Arc::downgrade(&new_accumulator);
+                *accumulator_guard = Some(new_accumulator);
+
                 consensus_epoch_data_remover
                     .remove_old_data(next_epoch - 1)
                     .await;
@@ -1609,7 +1633,7 @@ impl SuiNode {
                             self.randomness_handle.clone(),
                             consensus_manager,
                             consensus_epoch_data_remover,
-                            self.accumulator.clone(),
+                            weak_accumulator,
                             validator_server_handle,
                             validator_overload_monitor_handle,
                             checkpoint_metrics,
@@ -1629,10 +1653,23 @@ impl SuiNode {
                         &cur_epoch_store,
                         next_epoch_committee.clone(),
                         new_epoch_start_state,
-                        &checkpoint_executor,
+                        accumulator.clone(),
                     )
                     .await;
 
+                // No other components should be holding a strong reference to state accumulator
+                // at this point. Confirm here before we swap in the new accumulator.
+                let accumulator_metrics = Arc::into_inner(accumulator)
+                    .expect("Accumulator should have no other references at this point")
+                    .metrics();
+                let new_accumulator = Arc::new(StateAccumulator::new(
+                    self.state.get_accumulator_store().clone(),
+                    &new_epoch_store,
+                    accumulator_metrics,
+                ));
+                let weak_accumulator = Arc::downgrade(&new_accumulator);
+                *accumulator_guard = Some(new_accumulator);
+
                 if self.state.is_validator(&new_epoch_store) {
                     info!("Promoting the node from fullnode to validator, starting grpc server");
 
@@ -1645,7 +1682,7 @@ impl SuiNode {
                             self.checkpoint_store.clone(),
                             self.state_sync_handle.clone(),
                             self.randomness_handle.clone(),
-                            self.accumulator.clone(),
+                            weak_accumulator,
                             self.connection_monitor_status.clone(),
                             &self.registry_service,
                             self.metrics.clone(),
@@ -1694,7 +1731,7 @@ impl SuiNode {
         cur_epoch_store: &AuthorityPerEpochStore,
         next_epoch_committee: Committee,
         next_epoch_start_system_state: EpochStartSystemState,
-        checkpoint_executor: &CheckpointExecutor,
+        accumulator: Arc,
     ) -> Arc {
         let next_epoch = next_epoch_committee.epoch();
 
@@ -1719,8 +1756,7 @@ impl SuiNode {
                 self.config.supported_protocol_versions.unwrap(),
                 next_epoch_committee,
                 epoch_start_configuration,
-                checkpoint_executor,
-                self.accumulator.clone(),
+                accumulator,
                 &self.config.expensive_safety_check_config,
             )
             .await
diff --git a/crates/sui-single-node-benchmark/src/single_node.rs b/crates/sui-single-node-benchmark/src/single_node.rs
index d020ce6d4ffa4..5b87afcfff846 100644
--- a/crates/sui-single-node-benchmark/src/single_node.rs
+++ b/crates/sui-single-node-benchmark/src/single_node.rs
@@ -278,7 +278,7 @@ impl SingleValidator {
             ckpt_receiver,
             validator.get_checkpoint_store().clone(),
             validator.clone(),
-            Arc::new(StateAccumulator::new(
+            Arc::new(StateAccumulator::new_for_tests(
                 validator.get_accumulator_store().clone(),
                 self.get_epoch_store(),
             )),

From 1428c71346045112c7adb1a316365c5cba325d9b Mon Sep 17 00:00:00 2001
From: William Smith 
Date: Thu, 27 Jun 2024 13:02:11 -0700
Subject: [PATCH 08/57] [StateAccumulatorV2] Re-enable on testnet (#18443)

## Description

Same as https://github.com/MystenLabs/sui/pull/18444 but against the
release branch

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 .../src/authority/epoch_start_configuration.rs   |  2 +-
 crates/sui-core/src/state_accumulator.rs         | 16 +++++++---------
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/crates/sui-core/src/authority/epoch_start_configuration.rs b/crates/sui-core/src/authority/epoch_start_configuration.rs
index c8c9374b1fc2e..4a35b467a5fb5 100644
--- a/crates/sui-core/src/authority/epoch_start_configuration.rs
+++ b/crates/sui-core/src/authority/epoch_start_configuration.rs
@@ -61,7 +61,7 @@ impl EpochFlag {
 
     /// For situations in which there is no config available (e.g. setting up a downloaded snapshot).
     pub fn default_for_no_config() -> Vec {
-        Self::default_flags_impl(&Default::default(), false)
+        Self::default_flags_impl(&Default::default(), true)
     }
 
     fn default_flags_impl(
diff --git a/crates/sui-core/src/state_accumulator.rs b/crates/sui-core/src/state_accumulator.rs
index f67f150839721..8ec3b5f184b6d 100644
--- a/crates/sui-core/src/state_accumulator.rs
+++ b/crates/sui-core/src/state_accumulator.rs
@@ -5,7 +5,7 @@ use itertools::Itertools;
 use mysten_metrics::monitored_scope;
 use prometheus::{register_int_gauge_with_registry, IntGauge, Registry};
 use serde::Serialize;
-use sui_protocol_config::ProtocolConfig;
+use sui_protocol_config::{Chain, ProtocolConfig};
 use sui_types::base_types::{ObjectID, ObjectRef, SequenceNumber, VersionNumber};
 use sui_types::committee::EpochId;
 use sui_types::digests::{ObjectDigest, TransactionDigest};
@@ -389,15 +389,13 @@ impl StateAccumulator {
         epoch_store: &Arc,
         metrics: Arc,
     ) -> Self {
-        if cfg!(msim) {
-            if epoch_store.state_accumulator_v2_enabled() {
-                return StateAccumulator::V2(StateAccumulatorV2::new(store, metrics));
-            } else {
-                return StateAccumulator::V1(StateAccumulatorV1::new(store, metrics));
-            }
+        if epoch_store.state_accumulator_v2_enabled()
+            && epoch_store.get_chain_identifier().chain() != Chain::Mainnet
+        {
+            StateAccumulator::V2(StateAccumulatorV2::new(store, metrics))
+        } else {
+            StateAccumulator::V1(StateAccumulatorV1::new(store, metrics))
         }
-
-        StateAccumulator::V1(StateAccumulatorV1::new(store, metrics))
     }
 
     pub fn new_for_tests(

From f58faa4c5bbfe76121539d849ca280254575b8ef Mon Sep 17 00:00:00 2001
From: Mark Logan <103447440+mystenmark@users.noreply.github.com>
Date: Thu, 27 Jun 2024 20:41:08 -0700
Subject: [PATCH 09/57] [Cherry-pick] Fix epoch flag logic for state accum v2
 (#18448) (#18449)

Create new epoch flags for state accum v2, since the old one was already
written in some places. Also fix chain-specific logic

Cherry pick of #18448
---
 .../authority/authority_per_epoch_store.rs    |  9 +++++---
 .../authority/epoch_start_configuration.rs    | 22 ++++++++++++++++---
 crates/sui-core/src/state_accumulator.rs      |  6 ++---
 3 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/crates/sui-core/src/authority/authority_per_epoch_store.rs b/crates/sui-core/src/authority/authority_per_epoch_store.rs
index e6e7315ad7224..f54c3c0da6e83 100644
--- a/crates/sui-core/src/authority/authority_per_epoch_store.rs
+++ b/crates/sui-core/src/authority/authority_per_epoch_store.rs
@@ -916,9 +916,12 @@ impl AuthorityPerEpochStore {
     }
 
     pub fn state_accumulator_v2_enabled(&self) -> bool {
-        self.epoch_start_configuration
-            .flags()
-            .contains(&EpochFlag::StateAccumulatorV2Enabled)
+        let flag = match self.get_chain_identifier().chain() {
+            Chain::Unknown | Chain::Testnet => EpochFlag::StateAccumulatorV2EnabledTestnet,
+            Chain::Mainnet => EpochFlag::StateAccumulatorV2EnabledMainnet,
+        };
+
+        self.epoch_start_configuration.flags().contains(&flag)
     }
 
     /// Returns `&Arc`
diff --git a/crates/sui-core/src/authority/epoch_start_configuration.rs b/crates/sui-core/src/authority/epoch_start_configuration.rs
index 4a35b467a5fb5..b7ca15d2d6d47 100644
--- a/crates/sui-core/src/authority/epoch_start_configuration.rs
+++ b/crates/sui-core/src/authority/epoch_start_configuration.rs
@@ -51,7 +51,13 @@ pub enum EpochFlag {
     _ObjectLockSplitTablesDeprecated,
 
     WritebackCacheEnabled,
-    StateAccumulatorV2Enabled,
+
+    // This flag was "burned" because it was deployed with a broken version of the code. The
+    // new flags below are required to enable state accumulator v2
+    _StateAccumulatorV2EnabledDeprecated,
+
+    StateAccumulatorV2EnabledTestnet,
+    StateAccumulatorV2EnabledMainnet,
 }
 
 impl EpochFlag {
@@ -78,7 +84,9 @@ impl EpochFlag {
         }
 
         if enable_state_accumulator_v2 {
-            new_flags.push(EpochFlag::StateAccumulatorV2Enabled);
+            new_flags.push(EpochFlag::StateAccumulatorV2EnabledTestnet);
+            // TODO: enable on mainnet
+            // new_flags.push(EpochFlag::StateAccumulatorV2EnabledMainnet);
         }
 
         new_flags
@@ -99,7 +107,15 @@ impl fmt::Display for EpochFlag {
                 write!(f, "ObjectLockSplitTables (DEPRECATED)")
             }
             EpochFlag::WritebackCacheEnabled => write!(f, "WritebackCacheEnabled"),
-            EpochFlag::StateAccumulatorV2Enabled => write!(f, "StateAccumulatorV2Enabled"),
+            EpochFlag::_StateAccumulatorV2EnabledDeprecated => {
+                write!(f, "StateAccumulatorV2EnabledDeprecated (DEPRECATED)")
+            }
+            EpochFlag::StateAccumulatorV2EnabledTestnet => {
+                write!(f, "StateAccumulatorV2EnabledTestnet")
+            }
+            EpochFlag::StateAccumulatorV2EnabledMainnet => {
+                write!(f, "StateAccumulatorV2EnabledMainnet")
+            }
         }
     }
 }
diff --git a/crates/sui-core/src/state_accumulator.rs b/crates/sui-core/src/state_accumulator.rs
index 8ec3b5f184b6d..0ba94875a0d9b 100644
--- a/crates/sui-core/src/state_accumulator.rs
+++ b/crates/sui-core/src/state_accumulator.rs
@@ -5,7 +5,7 @@ use itertools::Itertools;
 use mysten_metrics::monitored_scope;
 use prometheus::{register_int_gauge_with_registry, IntGauge, Registry};
 use serde::Serialize;
-use sui_protocol_config::{Chain, ProtocolConfig};
+use sui_protocol_config::ProtocolConfig;
 use sui_types::base_types::{ObjectID, ObjectRef, SequenceNumber, VersionNumber};
 use sui_types::committee::EpochId;
 use sui_types::digests::{ObjectDigest, TransactionDigest};
@@ -389,9 +389,7 @@ impl StateAccumulator {
         epoch_store: &Arc,
         metrics: Arc,
     ) -> Self {
-        if epoch_store.state_accumulator_v2_enabled()
-            && epoch_store.get_chain_identifier().chain() != Chain::Mainnet
-        {
+        if epoch_store.state_accumulator_v2_enabled() {
             StateAccumulator::V2(StateAccumulatorV2::new(store, metrics))
         } else {
             StateAccumulator::V1(StateAccumulatorV1::new(store, metrics))

From 0c2a7347e9480ee6cbbdf10ab2d4555930e2fee1 Mon Sep 17 00:00:00 2001
From: stefan-mysten <135084671+stefan-mysten@users.noreply.github.com>
Date: Fri, 28 Jun 2024 10:01:44 -0700
Subject: [PATCH 10/57] [cherry-pick][CI] Cherry pick workflow fix (#18455)

## Description

Fixes a bug I introduced with #18204 in the bash script building
`sui-pg` binary.

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 .github/workflows/release.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 82a960208e2ec..259bb70172c6e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -161,7 +161,7 @@ jobs:
           done
 
           # sui-pg is a special binary that is built with the indexer feature for sui start cmd
-          export binary='sui-pg' | tr -d $'\r')
+          export binary=$(echo "sui-pg" | tr -d $'\r')
           mv ./target/release/${binary}${{ env.extention }} ${{ env.TMP_BUILD_DIR }}/${binary}${{ env.extention }}
 
           mv ./target/debug/sui${{ env.extention }} ${{ env.TMP_BUILD_DIR }}/sui-debug${{ env.extention }}

From 63cd80f780decfa1e90eccf6bcf64d2b7c5232fe Mon Sep 17 00:00:00 2001
From: stefan-mysten <135084671+stefan-mysten@users.noreply.github.com>
Date: Mon, 1 Jul 2024 10:31:35 -0700
Subject: [PATCH 11/57] [cherry-pick][cli] Cherry pick cli fix (#18469)
 (#18476)

## Description
Cherry pick #18469 into release branch v1.28

Prior to #18204, `sui start` accepted a network config file when using
`--network.config`, and `sui-test-validator` accepted a config directory
when using the `--config-dir`, so we need to support both. That PR
introduces a bug as in it accepts only directories.

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 crates/sui/src/sui_commands.rs | 38 ++++++++++++++++++++++------------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/crates/sui/src/sui_commands.rs b/crates/sui/src/sui_commands.rs
index 757d10631fc1b..54ac58f4f4009 100644
--- a/crates/sui/src/sui_commands.rs
+++ b/crates/sui/src/sui_commands.rs
@@ -601,21 +601,31 @@ async fn start(
         let epoch_duration_ms = epoch_duration_ms.unwrap_or(DEFAULT_EPOCH_DURATION_MS);
         swarm_builder = swarm_builder.with_epoch_duration_ms(epoch_duration_ms);
     } else {
-        // load from config dir that was passed, or generate a new genesis if there is no config
-        // dir passed and there is no config_dir in the default location
-        // and if a dir exists, then use that one
-        if let Some(config) = config.clone() {
-            swarm_builder = swarm_builder.dir(config);
-        } else if config.is_none() && !sui_config_dir()?.join(SUI_NETWORK_CONFIG).exists() {
+        if config.is_none() && !sui_config_dir()?.join(SUI_NETWORK_CONFIG).exists() {
             genesis(None, None, None, false, epoch_duration_ms, None, false).await?;
-            swarm_builder = swarm_builder.dir(sui_config_dir()?);
-        } else {
-            swarm_builder = swarm_builder.dir(sui_config_dir()?);
         }
+
         // Load the config of the Sui authority.
-        let network_config_path = config
-            .clone()
-            .unwrap_or(sui_config_dir()?.join(SUI_NETWORK_CONFIG));
+        // To keep compatibility with sui-test-validator where the user can pass a config
+        // directory, this checks if the config is a file or a directory
+        let network_config_path = if let Some(ref config) = config {
+            if config.is_dir() {
+                config.join(SUI_NETWORK_CONFIG)
+            } else if config.is_file()
+                && config
+                    .extension()
+                    .is_some_and(|ext| (ext == "yml" || ext == "yaml"))
+            {
+                config.clone()
+            } else {
+                config.join(SUI_NETWORK_CONFIG)
+            }
+        } else {
+            config
+                .clone()
+                .unwrap_or(sui_config_dir()?)
+                .join(SUI_NETWORK_CONFIG)
+        };
         let network_config: NetworkConfig =
             PersistedConfig::read(&network_config_path).map_err(|err| {
                 err.context(format!(
@@ -624,7 +634,9 @@ async fn start(
                 ))
             })?;
 
-        swarm_builder = swarm_builder.with_network_config(network_config);
+        swarm_builder = swarm_builder
+            .dir(sui_config_dir()?)
+            .with_network_config(network_config);
     }
 
     #[cfg(feature = "indexer")]

From 9a3ccbb314dca75e3c29192f1747ef265a8da8b5 Mon Sep 17 00:00:00 2001
From: Jk Jensen 
Date: Mon, 1 Jul 2024 14:16:42 -0700
Subject: [PATCH 12/57] update to 1.28.2

---
 Cargo.lock | 108 ++++++++++++++++++++++++++---------------------------
 Cargo.toml |  10 +++--
 2 files changed, 61 insertions(+), 57 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 567422cdea2b3..7c9cf87fe4901 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1806,7 +1806,7 @@ checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
 
 [[package]]
 name = "bin-version"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "const-str",
  "git-version",
@@ -11687,7 +11687,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
 
 [[package]]
 name = "sui"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anemo",
  "anyhow",
@@ -11758,7 +11758,7 @@ dependencies = [
  "sui-package-management",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-simulator",
  "sui-source-validation",
  "sui-swarm",
@@ -11902,7 +11902,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "arrow",
@@ -11956,7 +11956,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer-derive"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "proc-macro2 1.0.78",
  "quote 1.0.35",
@@ -11965,7 +11965,7 @@ dependencies = [
 
 [[package]]
 name = "sui-archival"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "byteorder",
@@ -12073,7 +12073,7 @@ dependencies = [
  "sui-macros",
  "sui-network",
  "sui-protocol-config",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-simulator",
  "sui-storage",
  "sui-surfer",
@@ -12091,7 +12091,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -12126,7 +12126,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12142,7 +12142,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge-cli"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "clap",
@@ -12159,7 +12159,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-types",
  "telemetry-subscribers",
  "tokio",
@@ -12196,7 +12196,7 @@ dependencies = [
 
 [[package]]
 name = "sui-cluster-test"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12220,7 +12220,7 @@ dependencies = [
  "sui-json",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-swarm",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -12407,7 +12407,7 @@ dependencies = [
 
 [[package]]
 name = "sui-data-ingestion"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12469,7 +12469,7 @@ dependencies = [
 
 [[package]]
 name = "sui-e2e-tests"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -12508,7 +12508,7 @@ dependencies = [
  "sui-node",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-simulator",
  "sui-storage",
  "sui-swarm",
@@ -12580,7 +12580,7 @@ dependencies = [
 
 [[package]]
 name = "sui-faucet"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -12600,7 +12600,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -12637,7 +12637,7 @@ dependencies = [
 
 [[package]]
 name = "sui-framework-snapshot"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "bcs",
@@ -12767,7 +12767,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-swarm-config",
  "sui-test-transaction-builder",
  "sui-types",
@@ -12807,7 +12807,7 @@ dependencies = [
 
 [[package]]
 name = "sui-indexer"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12850,7 +12850,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-test-transaction-builder",
  "sui-transaction-builder",
  "sui-types",
@@ -12983,7 +12983,7 @@ dependencies = [
  "sui-open-rpc",
  "sui-open-rpc-macros",
  "sui-protocol-config",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-simulator",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -13044,7 +13044,7 @@ dependencies = [
 
 [[package]]
 name = "sui-light-client"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13061,7 +13061,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-package-resolver",
  "sui-rest-api",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-types",
  "tokio",
 ]
@@ -13078,7 +13078,7 @@ dependencies = [
 
 [[package]]
 name = "sui-metric-checker"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "backoff",
@@ -13099,7 +13099,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -13141,7 +13141,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-build"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "datatest-stable",
@@ -13164,7 +13164,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-lsp"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "bin-version",
  "clap",
@@ -13294,7 +13294,7 @@ dependencies = [
 
 [[package]]
 name = "sui-node"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anemo",
  "anemo-tower",
@@ -13343,7 +13343,7 @@ dependencies = [
 
 [[package]]
 name = "sui-open-rpc"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13379,7 +13379,7 @@ dependencies = [
 
 [[package]]
 name = "sui-oracle"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13399,7 +13399,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-keys",
  "sui-move-build",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -13409,12 +13409,12 @@ dependencies = [
 
 [[package]]
 name = "sui-package-management"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "move-package",
  "sui-json-rpc-types",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "tracing",
 ]
 
@@ -13554,7 +13554,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-protocol-config",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-storage",
  "sui-transaction-checks",
  "sui-types",
@@ -13594,7 +13594,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rosetta"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13622,7 +13622,7 @@ dependencies = [
  "sui-keys",
  "sui-move-build",
  "sui-node",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-swarm-config",
  "sui-types",
  "telemetry-subscribers",
@@ -13636,7 +13636,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rpc-loadgen"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13654,7 +13654,7 @@ dependencies = [
  "sui-json-rpc",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-types",
  "telemetry-subscribers",
  "test-cluster",
@@ -13682,7 +13682,7 @@ dependencies = [
 
 [[package]]
 name = "sui-sdk"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -13718,7 +13718,7 @@ dependencies = [
 
 [[package]]
 name = "sui-security-watchdog"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "arrow-array",
@@ -13765,7 +13765,7 @@ dependencies = [
 
 [[package]]
 name = "sui-single-node-benchmark"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "async-trait",
  "bcs",
@@ -13827,7 +13827,7 @@ dependencies = [
 
 [[package]]
 name = "sui-source-validation"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "colored",
@@ -13844,7 +13844,7 @@ dependencies = [
  "rand 0.8.5",
  "sui-json-rpc-types",
  "sui-move-build",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-test-transaction-builder",
  "sui-types",
  "tar",
@@ -13880,7 +13880,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-move",
  "sui-move-build",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-source-validation",
  "telemetry-subscribers",
  "tempfile",
@@ -13952,7 +13952,7 @@ dependencies = [
 
 [[package]]
 name = "sui-surfer"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "async-trait",
  "bcs",
@@ -14050,13 +14050,13 @@ dependencies = [
  "shared-crypto",
  "sui-genesis-builder",
  "sui-move-build",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-types",
 ]
 
 [[package]]
 name = "sui-test-validator"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "axum",
@@ -14094,7 +14094,7 @@ dependencies = [
 
 [[package]]
 name = "sui-tool"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anemo",
  "anemo-cli",
@@ -14130,7 +14130,7 @@ dependencies = [
  "sui-network",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-snapshot",
  "sui-storage",
  "sui-types",
@@ -14376,7 +14376,7 @@ dependencies = [
 
 [[package]]
 name = "suins-indexer"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -14737,7 +14737,7 @@ dependencies = [
  "sui-macros",
  "sui-node",
  "sui-protocol-config",
- "sui-sdk 1.28.0",
+ "sui-sdk 1.28.2",
  "sui-simulator",
  "sui-swarm",
  "sui-swarm-config",
@@ -16449,7 +16449,7 @@ dependencies = [
 
 [[package]]
 name = "x"
-version = "1.28.0"
+version = "1.28.2"
 dependencies = [
  "anyhow",
  "camino",
diff --git a/Cargo.toml b/Cargo.toml
index becf087920ab3..b14afbc69e99b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -197,7 +197,7 @@ members = [
 
 [workspace.package]
 # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates.
-version = "1.28.0"
+version = "1.28.2"
 
 [profile.release]
 # debug = 1 means line charts only, which is minimum needed for good stack traces
@@ -567,7 +567,9 @@ move-analyzer = { path = "external-crates/move/crates/move-analyzer" }
 fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538" }
 fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538" }
 fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", package = "fastcrypto-zkp" }
-fastcrypto-vdf = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", features = ["experimental"] }
+fastcrypto-vdf = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", features = [
+  "experimental",
+] }
 
 # anemo dependencies
 anemo = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" }
@@ -576,7 +578,9 @@ anemo-cli = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9a
 anemo-tower = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" }
 
 # core-types with json format for REST api
-sui-sdk2 = { package = "sui-sdk", git = "https://github.com/mystenlabs/sui-rust-sdk.git", rev = "bb224b9e6b6edf5eeedcdf71c750a30b68073057", features = ["serde"] }
+sui-sdk2 = { package = "sui-sdk", git = "https://github.com/mystenlabs/sui-rust-sdk.git", rev = "bb224b9e6b6edf5eeedcdf71c750a30b68073057", features = [
+  "serde",
+] }
 
 ### Workspace Members ###
 anemo-benchmark = { path = "crates/anemo-benchmark" }

From 9e2b0211dad633e9ffbe3170f0ca6864f6a4113b Mon Sep 17 00:00:00 2001
From: phoenix <51927076+phoenix-o@users.noreply.github.com>
Date: Tue, 2 Jul 2024 13:42:48 -0500
Subject: [PATCH 13/57] [typed store] don't report metrics on deprecated tables
 (#18492)

---
 .../src/authority/authority_store_pruner.rs   |  1 +
 crates/sui-open-rpc/spec/openrpc.json         |  2 +-
 crates/typed-store-derive/src/lib.rs          |  5 +-
 crates/typed-store/src/rocks/mod.rs           | 58 +++++++++++--------
 crates/typed-store/src/rocks/tests.rs         | 53 +++++++++++------
 5 files changed, 74 insertions(+), 45 deletions(-)

diff --git a/crates/sui-core/src/authority/authority_store_pruner.rs b/crates/sui-core/src/authority/authority_store_pruner.rs
index 8374910ea2509..ad32205ba0656 100644
--- a/crates/sui-core/src/authority/authority_store_pruner.rs
+++ b/crates/sui-core/src/authority/authority_store_pruner.rs
@@ -798,6 +798,7 @@ mod tests {
             // open the db to bypass default db options which ignores range tombstones
             // so we can read the accurate number of retained versions
             &ReadWriteOptions::default(),
+            false,
         )?;
         let iter = objects.unbounded_iter();
         for (k, _v) in iter {
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index 1f6237018ce94..d3e9f4806c6ad 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -12,7 +12,7 @@
       "name": "Apache-2.0",
       "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE"
     },
-    "version": "1.28.0"
+    "version": "1.28.2"
   },
   "methods": [
     {
diff --git a/crates/typed-store-derive/src/lib.rs b/crates/typed-store-derive/src/lib.rs
index 32206a873a18c..907db02f06f95 100644
--- a/crates/typed-store-derive/src/lib.rs
+++ b/crates/typed-store-derive/src/lib.rs
@@ -465,12 +465,13 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream {
                     };
                     db.map(|d| (d, rwopt_cfs))
                 }.expect(&format!("Cannot open DB at {:?}", path));
+                let deprecated_tables = vec![#(stringify!(#deprecated_cfs),)*];
                 let (
                         #(
                             #field_names
                         ),*
                 ) = (#(
-                        DBMap::#inner_types::reopen(&db, Some(stringify!(#cf_names)), rwopt_cfs.get(stringify!(#cf_names)).unwrap_or(&typed_store::rocks::ReadWriteOptions::default())).expect(&format!("Cannot open {} CF.", stringify!(#cf_names))[..])
+                        DBMap::#inner_types::reopen(&db, Some(stringify!(#cf_names)), rwopt_cfs.get(stringify!(#cf_names)).unwrap_or(&typed_store::rocks::ReadWriteOptions::default()), remove_deprecated_tables && deprecated_tables.contains(&stringify!(#cf_names))).expect(&format!("Cannot open {} CF.", stringify!(#cf_names))[..])
                     ),*);
 
                 if as_secondary_with_path.is_none() && remove_deprecated_tables {
@@ -887,7 +888,7 @@ pub fn derive_sallydb_general(input: TokenStream) -> TokenStream {
                                 #field_names
                             ),*
                         ) = (#(
-                            SallyColumn::RocksDB((DBMap::#inner_types::reopen(&db, Some(stringify!(#field_names)), rwopt_cfs.get(stringify!(#field_names)).unwrap_or(&typed_store::rocks::ReadWriteOptions::default())).expect(&format!("Cannot open {} CF.", stringify!(#field_names))[..]), typed_store::sally::SallyConfig::default()))
+                            SallyColumn::RocksDB((DBMap::#inner_types::reopen(&db, Some(stringify!(#field_names)), rwopt_cfs.get(stringify!(#field_names)).unwrap_or(&typed_store::rocks::ReadWriteOptions::default()), false).expect(&format!("Cannot open {} CF.", stringify!(#field_names))[..]), typed_store::sally::SallyConfig::default()))
                             ),*);
 
                         Self {
diff --git a/crates/typed-store/src/rocks/mod.rs b/crates/typed-store/src/rocks/mod.rs
index e4f0f2f0ec744..8fa927cd35c55 100644
--- a/crates/typed-store/src/rocks/mod.rs
+++ b/crates/typed-store/src/rocks/mod.rs
@@ -124,7 +124,7 @@ macro_rules! reopen {
     ( $db:expr, $($cf:expr;<$K:ty, $V:ty>),*) => {
         (
             $(
-                DBMap::<$K, $V>::reopen($db, Some($cf), &ReadWriteOptions::default()).expect(&format!("Cannot open {} CF.", $cf)[..])
+                DBMap::<$K, $V>::reopen($db, Some($cf), &ReadWriteOptions::default(), false).expect(&format!("Cannot open {} CF.", $cf)[..])
             ),*
         )
     };
@@ -727,32 +727,39 @@ pub struct DBMap {
 unsafe impl Send for DBMap {}
 
 impl DBMap {
-    pub(crate) fn new(db: Arc, opts: &ReadWriteOptions, opt_cf: &str) -> Self {
+    pub(crate) fn new(
+        db: Arc,
+        opts: &ReadWriteOptions,
+        opt_cf: &str,
+        is_deprecated: bool,
+    ) -> Self {
         let db_cloned = db.clone();
         let db_metrics = DBMetrics::get();
         let db_metrics_cloned = db_metrics.clone();
         let cf = opt_cf.to_string();
         let (sender, mut recv) = tokio::sync::oneshot::channel();
-        tokio::task::spawn(async move {
-            let mut interval =
-                tokio::time::interval(Duration::from_millis(CF_METRICS_REPORT_PERIOD_MILLIS));
-            loop {
-                tokio::select! {
-                    _ = interval.tick() => {
-                        let db = db_cloned.clone();
-                        let cf = cf.clone();
-                        let db_metrics = db_metrics.clone();
-                        if let Err(e) = tokio::task::spawn_blocking(move || {
-                            Self::report_metrics(&db, &cf, &db_metrics);
-                        }).await {
-                            error!("Failed to log metrics with error: {}", e);
+        if !is_deprecated {
+            tokio::task::spawn(async move {
+                let mut interval =
+                    tokio::time::interval(Duration::from_millis(CF_METRICS_REPORT_PERIOD_MILLIS));
+                loop {
+                    tokio::select! {
+                        _ = interval.tick() => {
+                            let db = db_cloned.clone();
+                            let cf = cf.clone();
+                            let db_metrics = db_metrics.clone();
+                            if let Err(e) = tokio::task::spawn_blocking(move || {
+                                Self::report_metrics(&db, &cf, &db_metrics);
+                            }).await {
+                                error!("Failed to log metrics with error: {}", e);
+                            }
                         }
+                        _ = &mut recv => break,
                     }
-                    _ = &mut recv => break,
                 }
-            }
-            debug!("Returning the cf metric logging task for DBMap: {}", &cf);
-        });
+                debug!("Returning the cf metric logging task for DBMap: {}", &cf);
+            });
+        }
         DBMap {
             rocksdb: db.clone(),
             opts: opts.clone(),
@@ -782,7 +789,7 @@ impl DBMap {
         let cf_key = opt_cf.unwrap_or(rocksdb::DEFAULT_COLUMN_FAMILY_NAME);
         let cfs = vec![cf_key];
         let rocksdb = open_cf(path, db_options, metric_conf, &cfs)?;
-        Ok(DBMap::new(rocksdb, rw_options, cf_key))
+        Ok(DBMap::new(rocksdb, rw_options, cf_key, false))
     }
 
     /// Reopens an open database as a typed map operating under a specific column family.
@@ -800,8 +807,8 @@ impl DBMap {
     ///    /// Open the DB with all needed column families first.
     ///    let rocks = open_cf(tempdir().unwrap(), None, MetricConf::default(), &["First_CF", "Second_CF"]).unwrap();
     ///    /// Attach the column families to specific maps.
-    ///    let db_cf_1 = DBMap::::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default()).expect("Failed to open storage");
-    ///    let db_cf_2 = DBMap::::reopen(&rocks, Some("Second_CF"), &ReadWriteOptions::default()).expect("Failed to open storage");
+    ///    let db_cf_1 = DBMap::::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default(), false).expect("Failed to open storage");
+    ///    let db_cf_2 = DBMap::::reopen(&rocks, Some("Second_CF"), &ReadWriteOptions::default(), false).expect("Failed to open storage");
     ///    Ok(())
     ///    }
     /// ```
@@ -810,6 +817,7 @@ impl DBMap {
         db: &Arc,
         opt_cf: Option<&str>,
         rw_options: &ReadWriteOptions,
+        is_deprecated: bool,
     ) -> Result {
         let cf_key = opt_cf
             .unwrap_or(rocksdb::DEFAULT_COLUMN_FAMILY_NAME)
@@ -818,7 +826,7 @@ impl DBMap {
         db.cf_handle(&cf_key)
             .ok_or_else(|| TypedStoreError::UnregisteredColumn(cf_key.clone()))?;
 
-        Ok(DBMap::new(db.clone(), rw_options, &cf_key))
+        Ok(DBMap::new(db.clone(), rw_options, &cf_key, is_deprecated))
     }
 
     pub fn batch(&self) -> DBBatch {
@@ -1278,11 +1286,11 @@ impl DBMap {
 /// async fn main() -> Result<(), Error> {
 /// let rocks = open_cf(tempfile::tempdir().unwrap(), None, MetricConf::default(), &["First_CF", "Second_CF"]).unwrap();
 ///
-/// let db_cf_1 = DBMap::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default())
+/// let db_cf_1 = DBMap::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default(), false)
 ///     .expect("Failed to open storage");
 /// let keys_vals_1 = (1..100).map(|i| (i, i.to_string()));
 ///
-/// let db_cf_2 = DBMap::reopen(&rocks, Some("Second_CF"), &ReadWriteOptions::default())
+/// let db_cf_2 = DBMap::reopen(&rocks, Some("Second_CF"), &ReadWriteOptions::default(), false)
 ///     .expect("Failed to open storage");
 /// let keys_vals_2 = (1000..1100).map(|i| (i, i.to_string()));
 ///
diff --git a/crates/typed-store/src/rocks/tests.rs b/crates/typed-store/src/rocks/tests.rs
index 5129b8ee1130b..259f9672f8c13 100644
--- a/crates/typed-store/src/rocks/tests.rs
+++ b/crates/typed-store/src/rocks/tests.rs
@@ -138,7 +138,7 @@ async fn test_reopen(#[values(true, false)] is_transactional: bool) {
             .expect("Failed to insert");
         db
     };
-    let db = DBMap::::reopen(&arc.rocksdb, None, &ReadWriteOptions::default())
+    let db = DBMap::::reopen(&arc.rocksdb, None, &ReadWriteOptions::default(), false)
         .expect("Failed to re-open storage");
     assert!(db
         .contains_key(&123456789)
@@ -174,7 +174,7 @@ async fn test_reopen_macro() {
 #[tokio::test]
 async fn test_wrong_reopen(#[values(true, false)] is_transactional: bool) {
     let rocks = open_rocksdb(temp_dir(), &["foo", "bar", "baz"], is_transactional);
-    let db = DBMap::::reopen(&rocks, Some("quux"), &ReadWriteOptions::default());
+    let db = DBMap::::reopen(&rocks, Some("quux"), &ReadWriteOptions::default(), false);
     assert!(db.is_err());
 }
 
@@ -567,12 +567,22 @@ async fn test_insert_batch(#[values(true, false)] is_transactional: bool) {
 async fn test_insert_batch_across_cf(#[values(true, false)] is_transactional: bool) {
     let rocks = open_rocksdb(temp_dir(), &["First_CF", "Second_CF"], is_transactional);
 
-    let db_cf_1 = DBMap::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default())
-        .expect("Failed to open storage");
+    let db_cf_1 = DBMap::reopen(
+        &rocks,
+        Some("First_CF"),
+        &ReadWriteOptions::default(),
+        false,
+    )
+    .expect("Failed to open storage");
     let keys_vals_1 = (1..100).map(|i| (i, i.to_string()));
 
-    let db_cf_2 = DBMap::reopen(&rocks, Some("Second_CF"), &ReadWriteOptions::default())
-        .expect("Failed to open storage");
+    let db_cf_2 = DBMap::reopen(
+        &rocks,
+        Some("Second_CF"),
+        &ReadWriteOptions::default(),
+        false,
+    )
+    .expect("Failed to open storage");
     let keys_vals_2 = (1000..1100).map(|i| (i, i.to_string()));
 
     let mut batch = db_cf_1.batch();
@@ -600,14 +610,22 @@ async fn test_insert_batch_across_different_db(#[values(true, false)] is_transac
     let rocks = open_rocksdb(temp_dir(), &["First_CF", "Second_CF"], is_transactional);
     let rocks2 = open_rocksdb(temp_dir(), &["First_CF", "Second_CF"], is_transactional);
 
-    let db_cf_1: DBMap =
-        DBMap::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default())
-            .expect("Failed to open storage");
+    let db_cf_1: DBMap = DBMap::reopen(
+        &rocks,
+        Some("First_CF"),
+        &ReadWriteOptions::default(),
+        false,
+    )
+    .expect("Failed to open storage");
     let keys_vals_1 = (1..100).map(|i| (i, i.to_string()));
 
-    let db_cf_2: DBMap =
-        DBMap::reopen(&rocks2, Some("Second_CF"), &ReadWriteOptions::default())
-            .expect("Failed to open storage");
+    let db_cf_2: DBMap = DBMap::reopen(
+        &rocks2,
+        Some("Second_CF"),
+        &ReadWriteOptions::default(),
+        false,
+    )
+    .expect("Failed to open storage");
     let keys_vals_2 = (1000..1100).map(|i| (i, i.to_string()));
 
     assert!(db_cf_1
@@ -1089,7 +1107,7 @@ async fn test_transactional() {
     let opt = rocksdb::Options::default();
     let rocksdb =
         open_cf_opts_transactional(path, None, MetricConf::default(), &[("cf", opt)]).unwrap();
-    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default())
+    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default(), false)
         .expect("Failed to re-open storage");
 
     // transaction is used instead
@@ -1113,7 +1131,7 @@ async fn test_transaction_snapshot() {
     let opt = rocksdb::Options::default();
     let rocksdb =
         open_cf_opts_transactional(path, None, MetricConf::default(), &[("cf", opt)]).unwrap();
-    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default())
+    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default(), false)
         .expect("Failed to re-open storage");
 
     // transaction without set_snapshot succeeds when extraneous write occurs before transaction
@@ -1200,7 +1218,7 @@ async fn test_retry_transaction() {
     let opt = rocksdb::Options::default();
     let rocksdb =
         open_cf_opts_transactional(path, None, MetricConf::default(), &[("cf", opt)]).unwrap();
-    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default())
+    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default(), false)
         .expect("Failed to re-open storage");
 
     let mut conflicts = 0;
@@ -1260,7 +1278,7 @@ async fn test_transaction_read_your_write() {
     let opt = rocksdb::Options::default();
     let rocksdb =
         open_cf_opts_transactional(path, None, MetricConf::default(), &[("cf", opt)]).unwrap();
-    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default())
+    let db = DBMap::::reopen(&rocksdb, None, &ReadWriteOptions::default(), false)
         .expect("Failed to re-open storage");
     db.insert(&key1.to_string(), &"1".to_string()).unwrap();
     let mut tx = db.transaction().expect("failed to initiate transaction");
@@ -1331,6 +1349,7 @@ async fn open_as_secondary_test() {
         &secondary_store,
         Some("table"),
         &ReadWriteOptions::default(),
+        false,
     )
     .unwrap();
 
@@ -1482,7 +1501,7 @@ fn open_map, K, V>(
             MetricConf::default(),
             &[(cf, default_db_options().options)],
         )
-        .map(|db| DBMap::new(db, &ReadWriteOptions::default(), cf))
+        .map(|db| DBMap::new(db, &ReadWriteOptions::default(), cf, false))
         .expect("failed to open rocksdb")
     } else {
         DBMap::::open(

From 08b50387a184d842060888def915c4cf75c022aa Mon Sep 17 00:00:00 2001
From: stefan-mysten <135084671+stefan-mysten@users.noreply.github.com>
Date: Tue, 2 Jul 2024 12:19:38 -0700
Subject: [PATCH 14/57] [cherry-pick][indexer] Cherry-pick to `v1.28.0-release`
 branch: Fix indexer to compile for Rust 1.75 (#18490) (#18496)

## Description

These changes ensure that brew can compile our code to release `sui`
binary, and similarly, that `cargo install [..] sui --branch testnet`
does not break. We need this to go with the testnet release today.

## Test plan

How did you test the new or updated feature?

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 crates/sui-indexer/src/handlers/checkpoint_handler.rs | 2 +-
 crates/sui-indexer/src/test_utils.rs                  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs
index a0fd533cabda2..b3897f2fe8935 100644
--- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs
+++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs
@@ -69,7 +69,7 @@ pub async fn new_handlers(
 ) -> Result, IndexerError>
 where
     S: IndexerStore + Clone + Sync + Send + 'static,
-    T: R2D2Connection,
+    T: R2D2Connection + 'static,
 {
     let checkpoint_queue_size = std::env::var("CHECKPOINT_QUEUE_SIZE")
         .unwrap_or(CHECKPOINT_QUEUE_SIZE.to_string())
diff --git a/crates/sui-indexer/src/test_utils.rs b/crates/sui-indexer/src/test_utils.rs
index 22b243cd7279a..421039555ca9c 100644
--- a/crates/sui-indexer/src/test_utils.rs
+++ b/crates/sui-indexer/src/test_utils.rs
@@ -40,7 +40,7 @@ impl ReaderWriterConfig {
     }
 }
 
-pub async fn start_test_indexer(
+pub async fn start_test_indexer(
     db_url: Option,
     rpc_url: String,
     reader_writer_config: ReaderWriterConfig,
@@ -57,7 +57,7 @@ pub async fn start_test_indexer(
     .await
 }
 
-pub async fn start_test_indexer_impl(
+pub async fn start_test_indexer_impl(
     db_url: Option,
     rpc_url: String,
     reader_writer_config: ReaderWriterConfig,

From 902107fc6de5fc6afe526b4ee7c80eecbf512d5c Mon Sep 17 00:00:00 2001
From: Brandon Williams 
Date: Fri, 5 Jul 2024 13:29:35 -0500
Subject: [PATCH 15/57] authority_client: rewrite udp address to tcp

---
 crates/mysten-network/src/multiaddr.rs  | 14 ++++++++++++++
 crates/sui-core/src/authority_client.rs | 12 +++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/crates/mysten-network/src/multiaddr.rs b/crates/mysten-network/src/multiaddr.rs
index 76a3c202b4c85..b628f6a4bdf97 100644
--- a/crates/mysten-network/src/multiaddr.rs
+++ b/crates/mysten-network/src/multiaddr.rs
@@ -179,6 +179,20 @@ impl Multiaddr {
         }
         None
     }
+
+    pub fn rewrite_udp_to_tcp(&self) -> Self {
+        let mut new = Self::empty();
+
+        for component in self.iter() {
+            if let Protocol::Udp(port) = component {
+                new.push(Protocol::Tcp(port));
+            } else {
+                new.push(component);
+            }
+        }
+
+        new
+    }
 }
 
 impl std::fmt::Display for Multiaddr {
diff --git a/crates/sui-core/src/authority_client.rs b/crates/sui-core/src/authority_client.rs
index e3c9f2d01c28d..2b9f93ad588e5 100644
--- a/crates/sui-core/src/authority_client.rs
+++ b/crates/sui-core/src/authority_client.rs
@@ -235,9 +235,15 @@ pub fn make_network_authority_clients_with_network_config(
                 SuiError::from("Missing network metadata in CommitteeWithNetworkMetadata")
             })?
             .network_address;
-        let channel = network_config
-            .connect_lazy(address)
-            .map_err(|err| anyhow!(err.to_string()))?;
+        let address = address.rewrite_udp_to_tcp();
+        let channel = network_config.connect_lazy(&address).map_err(|e| {
+            tracing::error!(
+                address = %address,
+                name = %name,
+                "unable to create authority client: {e}"
+            );
+            anyhow!(e.to_string())
+        })?;
         let client = NetworkAuthorityClient::new(channel);
         authority_clients.insert(*name, client);
     }

From dab73eb3599274fb41af445913ddd0e1f626ccf9 Mon Sep 17 00:00:00 2001
From: Brandon Williams 
Date: Fri, 5 Jul 2024 14:15:32 -0500
Subject: [PATCH 16/57] mysten-network: default to http if not present

---
 crates/mysten-network/src/multiaddr.rs | 11 ++++-------
 crates/mysten-network/src/server.rs    |  7 -------
 2 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/crates/mysten-network/src/multiaddr.rs b/crates/mysten-network/src/multiaddr.rs
index b628f6a4bdf97..206363623786d 100644
--- a/crates/mysten-network/src/multiaddr.rs
+++ b/crates/mysten-network/src/multiaddr.rs
@@ -260,13 +260,10 @@ pub(crate) fn parse_tcp<'a, T: Iterator>>(protocols: &mut T)
 pub(crate) fn parse_http_https<'a, T: Iterator>>(
     protocols: &mut T,
 ) -> Result<&'static str> {
-    match protocols
-        .next()
-        .ok_or_else(|| eyre!("unexpected end of multiaddr"))?
-    {
-        Protocol::Http => Ok("http"),
-        Protocol::Https => Ok("https"),
-        _ => Err(eyre!("expected http/https protocol")),
+    match protocols.next() {
+        Some(Protocol::Http) => Ok("http"),
+        Some(Protocol::Https) => Ok("https"),
+        _ => Ok("http"),
     }
 }
 
diff --git a/crates/mysten-network/src/server.rs b/crates/mysten-network/src/server.rs
index 7842ef7100837..bbeb4d63d33c3 100644
--- a/crates/mysten-network/src/server.rs
+++ b/crates/mysten-network/src/server.rs
@@ -467,13 +467,6 @@ mod test {
         test_multiaddr(address).await;
         std::fs::remove_file(path).unwrap();
     }
-
-    #[should_panic]
-    #[tokio::test]
-    async fn missing_http_protocol() {
-        let address: Multiaddr = "/dns/localhost/tcp/0".parse().unwrap();
-        test_multiaddr(address).await;
-    }
 }
 
 #[derive(Clone)]

From 3781a7e6b56c55d9a0d12dd69feed3e5f698487c Mon Sep 17 00:00:00 2001
From: Pei Deng 
Date: Fri, 5 Jul 2024 15:52:08 -0700
Subject: [PATCH 17/57] bump 1.28.3

---
 Cargo.lock                            | 108 +++----
 Cargo.toml                            | 436 +++++++++++++-------------
 crates/sui-open-rpc/spec/openrpc.json |   2 +-
 3 files changed, 273 insertions(+), 273 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 7c9cf87fe4901..76008b03cde97 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1806,7 +1806,7 @@ checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
 
 [[package]]
 name = "bin-version"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "const-str",
  "git-version",
@@ -11687,7 +11687,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
 
 [[package]]
 name = "sui"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anemo",
  "anyhow",
@@ -11758,7 +11758,7 @@ dependencies = [
  "sui-package-management",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-simulator",
  "sui-source-validation",
  "sui-swarm",
@@ -11902,7 +11902,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "arrow",
@@ -11956,7 +11956,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer-derive"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "proc-macro2 1.0.78",
  "quote 1.0.35",
@@ -11965,7 +11965,7 @@ dependencies = [
 
 [[package]]
 name = "sui-archival"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "byteorder",
@@ -12073,7 +12073,7 @@ dependencies = [
  "sui-macros",
  "sui-network",
  "sui-protocol-config",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-simulator",
  "sui-storage",
  "sui-surfer",
@@ -12091,7 +12091,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -12126,7 +12126,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12142,7 +12142,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge-cli"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "clap",
@@ -12159,7 +12159,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-types",
  "telemetry-subscribers",
  "tokio",
@@ -12196,7 +12196,7 @@ dependencies = [
 
 [[package]]
 name = "sui-cluster-test"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12220,7 +12220,7 @@ dependencies = [
  "sui-json",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-swarm",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -12407,7 +12407,7 @@ dependencies = [
 
 [[package]]
 name = "sui-data-ingestion"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12469,7 +12469,7 @@ dependencies = [
 
 [[package]]
 name = "sui-e2e-tests"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -12508,7 +12508,7 @@ dependencies = [
  "sui-node",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-simulator",
  "sui-storage",
  "sui-swarm",
@@ -12580,7 +12580,7 @@ dependencies = [
 
 [[package]]
 name = "sui-faucet"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -12600,7 +12600,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -12637,7 +12637,7 @@ dependencies = [
 
 [[package]]
 name = "sui-framework-snapshot"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "bcs",
@@ -12767,7 +12767,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-swarm-config",
  "sui-test-transaction-builder",
  "sui-types",
@@ -12807,7 +12807,7 @@ dependencies = [
 
 [[package]]
 name = "sui-indexer"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12850,7 +12850,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-test-transaction-builder",
  "sui-transaction-builder",
  "sui-types",
@@ -12983,7 +12983,7 @@ dependencies = [
  "sui-open-rpc",
  "sui-open-rpc-macros",
  "sui-protocol-config",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-simulator",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -13044,7 +13044,7 @@ dependencies = [
 
 [[package]]
 name = "sui-light-client"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13061,7 +13061,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-package-resolver",
  "sui-rest-api",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-types",
  "tokio",
 ]
@@ -13078,7 +13078,7 @@ dependencies = [
 
 [[package]]
 name = "sui-metric-checker"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "backoff",
@@ -13099,7 +13099,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -13141,7 +13141,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-build"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "datatest-stable",
@@ -13164,7 +13164,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-lsp"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "bin-version",
  "clap",
@@ -13294,7 +13294,7 @@ dependencies = [
 
 [[package]]
 name = "sui-node"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anemo",
  "anemo-tower",
@@ -13343,7 +13343,7 @@ dependencies = [
 
 [[package]]
 name = "sui-open-rpc"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13379,7 +13379,7 @@ dependencies = [
 
 [[package]]
 name = "sui-oracle"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13399,7 +13399,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-keys",
  "sui-move-build",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -13409,12 +13409,12 @@ dependencies = [
 
 [[package]]
 name = "sui-package-management"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "move-package",
  "sui-json-rpc-types",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "tracing",
 ]
 
@@ -13554,7 +13554,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-protocol-config",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-storage",
  "sui-transaction-checks",
  "sui-types",
@@ -13594,7 +13594,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rosetta"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13622,7 +13622,7 @@ dependencies = [
  "sui-keys",
  "sui-move-build",
  "sui-node",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-swarm-config",
  "sui-types",
  "telemetry-subscribers",
@@ -13636,7 +13636,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rpc-loadgen"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13654,7 +13654,7 @@ dependencies = [
  "sui-json-rpc",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-types",
  "telemetry-subscribers",
  "test-cluster",
@@ -13682,7 +13682,7 @@ dependencies = [
 
 [[package]]
 name = "sui-sdk"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -13718,7 +13718,7 @@ dependencies = [
 
 [[package]]
 name = "sui-security-watchdog"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "arrow-array",
@@ -13765,7 +13765,7 @@ dependencies = [
 
 [[package]]
 name = "sui-single-node-benchmark"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "async-trait",
  "bcs",
@@ -13827,7 +13827,7 @@ dependencies = [
 
 [[package]]
 name = "sui-source-validation"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "colored",
@@ -13844,7 +13844,7 @@ dependencies = [
  "rand 0.8.5",
  "sui-json-rpc-types",
  "sui-move-build",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-test-transaction-builder",
  "sui-types",
  "tar",
@@ -13880,7 +13880,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-move",
  "sui-move-build",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-source-validation",
  "telemetry-subscribers",
  "tempfile",
@@ -13952,7 +13952,7 @@ dependencies = [
 
 [[package]]
 name = "sui-surfer"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "async-trait",
  "bcs",
@@ -14050,13 +14050,13 @@ dependencies = [
  "shared-crypto",
  "sui-genesis-builder",
  "sui-move-build",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-types",
 ]
 
 [[package]]
 name = "sui-test-validator"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "axum",
@@ -14094,7 +14094,7 @@ dependencies = [
 
 [[package]]
 name = "sui-tool"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anemo",
  "anemo-cli",
@@ -14130,7 +14130,7 @@ dependencies = [
  "sui-network",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-snapshot",
  "sui-storage",
  "sui-types",
@@ -14376,7 +14376,7 @@ dependencies = [
 
 [[package]]
 name = "suins-indexer"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -14737,7 +14737,7 @@ dependencies = [
  "sui-macros",
  "sui-node",
  "sui-protocol-config",
- "sui-sdk 1.28.2",
+ "sui-sdk 1.28.3",
  "sui-simulator",
  "sui-swarm",
  "sui-swarm-config",
@@ -16449,7 +16449,7 @@ dependencies = [
 
 [[package]]
 name = "x"
-version = "1.28.2"
+version = "1.28.3"
 dependencies = [
  "anyhow",
  "camino",
diff --git a/Cargo.toml b/Cargo.toml
index b14afbc69e99b..ee87972a2144c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -197,7 +197,7 @@ members = [
 
 [workspace.package]
 # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates.
-version = "1.28.2"
+version = "1.28.3"
 
 [profile.release]
 # debug = 1 means line charts only, which is minimum needed for good stack traces
@@ -226,9 +226,9 @@ strip = 'none'
 opt-level = 2
 
 [profile.simulator]
-inherits = "test"
 debug = true
 debug-assertions = true
+inherits = "test"
 overflow-checks = true
 # opt-level 1 gives >5x speedup for simulator tests without slowing down build times very much.
 opt-level = 1
@@ -236,8 +236,8 @@ opt-level = 1
 # Dependencies that should be kept in sync through the whole workspace
 [workspace.dependencies]
 anyhow = "1.0.71"
+arc-swap = {version = "1.5.1", features = ["serde"]}
 arrow-array = "50.0.0"
-arc-swap = { version = "1.5.1", features = ["serde"] }
 assert_cmd = "2.0.6"
 async-graphql = "6.0.7"
 async-graphql-axum = "6.0.7"
@@ -246,12 +246,12 @@ async-recursion = "1.0.4"
 async-trait = "0.1.61"
 atomic_float = "0.1"
 aws-config = "0.56"
-aws-sdk-ec2 = "0.29.0"
 aws-sdk-dynamodb = "0.29.0"
+aws-sdk-ec2 = "0.29.0"
 aws-sdk-s3 = "0.29.0"
 aws-smithy-http = "0.56"
 aws-smithy-runtime-api = "0.56"
-axum = { version = "0.6.6", default-features = false, features = [
+axum = {version = "0.6.6", default-features = false, features = [
   "headers",
   "tokio",
   "http1",
@@ -262,18 +262,18 @@ axum = { version = "0.6.6", default-features = false, features = [
   "form",
   "query",
   "ws",
-] }
+]}
 axum-extra = "0.4.2"
-axum-server = { version = "0.5.1", default-features = false, features = [
+axum-server = {version = "0.5.1", default-features = false, features = [
   "tls-rustls",
-] }
-backoff = { version = "0.4.0", features = [
+]}
+backoff = {version = "0.4.0", features = [
   "futures",
   "futures-core",
   "pin-project-lite",
   "tokio",
   "tokio_1",
-] }
+]}
 base64 = "0.21.2"
 base64-url = "2"
 bcs = "0.1.4"
@@ -282,48 +282,47 @@ bimap = "0.6.2"
 bincode = "1.3.3"
 bip32 = "0.4.0"
 byteorder = "1.4.3"
-bytes = { version = "1.5.0", features = ["serde"] }
+bytes = {version = "1.5.0", features = ["serde"]}
 cached = "0.43.0"
 camino = "1.1.1"
 cfg-if = "1.0.0"
-chrono = { version = "0.4.26", features = ["clock", "serde"] }
-clap = { version = "4.4", features = ["derive", "wrap_help"] }
+chrono = {version = "0.4.26", features = ["clock", "serde"]}
+clap = {version = "4.4", features = ["derive", "wrap_help"]}
 collectable = "0.0.2"
-colored = "2.0.0"
 color-eyre = "0.6.2"
+colored = "2.0.0"
 comfy-table = "6.1.3"
 console-subscriber = "0.2"
 const-str = "0.5.3"
 count-min-sketch = "0.1.7"
-criterion = { version = "0.5.0", features = [
+criterion = {version = "0.5.0", features = [
   "async",
   "async_tokio",
   "html_reports",
-] }
+]}
 crossterm = "0.25.0"
 csv = "1.2.1"
 dashmap = "5.5.3"
 # datatest-stable = "0.1.2"
-datatest-stable = { git = "https://github.com/nextest-rs/datatest-stable.git", rev = "72db7f6d1bbe36a5407e96b9488a581f763e106f" }
+datatest-stable = {git = "https://github.com/nextest-rs/datatest-stable.git", rev = "72db7f6d1bbe36a5407e96b9488a581f763e106f"}
 derivative = "2.2.0"
 derive-syn-parse = "0.1.5"
 derive_builder = "0.12.0"
 derive_more = "0.99.17"
-diesel = { version = "2.1.0", features = [
+diesel = {version = "2.1.0", features = [
   "chrono",
   "r2d2",
   "serde_json",
   "64-column-tables",
   "i-implement-a-third-party-backend-and-opt-into-breaking-changes",
-] }
-diesel-derive-enum = { version = "2.0.1" }
-diesel_migrations = { version = "2.0.0" }
+]}
+diesel-derive-enum = {version = "2.0.1"}
+diesel_migrations = {version = "2.0.0"}
 dirs = "4.0.0"
 duration-str = "0.5.0"
-ed25519 = { version = "1.5.0", features = ["pkcs8", "alloc", "zeroize"] }
-ed25519-consensus = { version = "2.0.1", features = ["serde"] }
+ed25519 = {version = "1.5.0", features = ["pkcs8", "alloc", "zeroize"]}
+ed25519-consensus = {version = "2.0.1", features = ["serde"]}
 either = "1.8.0"
-petgraph = "0.5.1"
 enum_dispatch = "^0.3"
 expect-test = "1.4.0"
 eyre = "0.6.8"
@@ -344,68 +343,69 @@ http = "0.2.8"
 http-body = "0.4.5"
 humantime = "2.1.0"
 hyper = "0.14.20"
-hyper-rustls = { version = "0.24", features = ["webpki-roots", "http2"] }
+hyper-rustls = {version = "0.24", features = ["webpki-roots", "http2"]}
 im = "15"
 impl-trait-for-tuples = "0.2.0"
-indexmap = { version = "2.1.0", features = ["serde"] }
+indexmap = {version = "2.1.0", features = ["serde"]}
 indicatif = "0.17.2"
 inquire = "0.6.0"
-insta = { version = "1.21.1", features = ["redactions", "yaml", "json"] }
+insta = {version = "1.21.1", features = ["redactions", "yaml", "json"]}
 integer-encoding = "3.0.1"
 ipnetwork = "0.20.0"
 itertools = "0.10.5"
 jemalloc-ctl = "^0.5"
-jsonrpsee = { git = "https://github.com/wlmyng/jsonrpsee.git", rev = "b1b300784795f6a64d0fcdf8f03081a9bc38bde8", features = [
+json_to_table = {git = "https://github.com/zhiburt/tabled/", rev = "e449317a1c02eb6b29e409ad6617e5d9eb7b3bd4"}
+jsonrpsee = {git = "https://github.com/wlmyng/jsonrpsee.git", rev = "b1b300784795f6a64d0fcdf8f03081a9bc38bde8", features = [
   "server",
   "macros",
   "ws-client",
   "http-client",
   "jsonrpsee-core",
-] }
-json_to_table = { git = "https://github.com/zhiburt/tabled/", rev = "e449317a1c02eb6b29e409ad6617e5d9eb7b3bd4" }
+]}
 leb128 = "0.2.5"
 lru = "0.10"
 markdown-gen = "1.2.1"
 match_opt = "0.1.2"
-miette = { version = "7", features = ["fancy"] }
+miette = {version = "7", features = ["fancy"]}
 mime = "0.3"
 mockall = "0.11.4"
-moka = { version = "0.12", default-features = false, features = [
+moka = {version = "0.12", default-features = false, features = [
   "sync",
   "atomic64",
-] }
+]}
 more-asserts = "0.3.1"
-msim = { git = "https://github.com/MystenLabs/mysten-sim.git", rev = "3a490f1f1035cc6b7845f6a82d697ce47b067fd9", package = "msim" }
-msim-macros = { git = "https://github.com/MystenLabs/mysten-sim.git", rev = "3a490f1f1035cc6b7845f6a82d697ce47b067fd9", package = "msim-macros" }
+msim = {git = "https://github.com/MystenLabs/mysten-sim.git", rev = "3a490f1f1035cc6b7845f6a82d697ce47b067fd9", package = "msim"}
+msim-macros = {git = "https://github.com/MystenLabs/mysten-sim.git", rev = "3a490f1f1035cc6b7845f6a82d697ce47b067fd9", package = "msim-macros"}
 multiaddr = "0.17.0"
-nexlint = { git = "https://github.com/nextest-rs/nexlint.git", rev = "94da5c787636dad779c340affa65219134d127f5" }
-nexlint-lints = { git = "https://github.com/nextest-rs/nexlint.git", rev = "94da5c787636dad779c340affa65219134d127f5" }
+nexlint = {git = "https://github.com/nextest-rs/nexlint.git", rev = "94da5c787636dad779c340affa65219134d127f5"}
+nexlint-lints = {git = "https://github.com/nextest-rs/nexlint.git", rev = "94da5c787636dad779c340affa65219134d127f5"}
 nonempty = "0.9.0"
 notify = "6.1.1"
 ntest = "0.9.0"
 num-bigint = "0.4.4"
 num_cpus = "1.15.0"
 num_enum = "0.6.1"
-object_store = { version = "0.7", features = ["aws", "gcp", "azure", "http"] }
+object_store = {version = "0.7", features = ["aws", "gcp", "azure", "http"]}
 once_cell = "1.18.0"
 ouroboros = "0.17"
 parking_lot = "0.12.1"
 parquet = "50.0.0"
-pkcs8 = { version = "0.9.0", features = ["std"] }
-pprof = { version = "0.11.0", features = ["cpp", "frame-pointer"] }
+petgraph = "0.5.1"
+pkcs8 = {version = "0.9.0", features = ["std"]}
+pprof = {version = "0.11.0", features = ["cpp", "frame-pointer"]}
 pretty_assertions = "1.3.0"
 prettytable-rs = "0.10.0"
 proc-macro2 = "1.0.47"
 prometheus = "0.13.3"
-prometheus-http-query = { version = "0.6.6", default_features = false, features = [
+prometheus-http-query = {version = "0.6.6", default_features = false, features = [
   "rustls-tls",
-] }
-prometheus-parse = { git = "https://github.com/asonnino/prometheus-parser.git", rev = "75334db" }
+]}
+prometheus-parse = {git = "https://github.com/asonnino/prometheus-parser.git", rev = "75334db"}
 proptest = "1.1.0"
 proptest-derive = "0.3.0"
 prost = "0.12.3"
 prost-build = "0.12.3"
-protobuf = { version = "2.28", features = ["with-bytes"] }
+protobuf = {version = "2.28", features = ["with-bytes"]}
 protobuf-src = "1.1.0"
 quinn-proto = "^0.10.5"
 quote = "1.0.23"
@@ -413,48 +413,48 @@ rand = "0.8.5"
 rayon = "1.5.3"
 rcgen = "0.9.2"
 regex = "1.7.1"
-reqwest = { version = "0.11.20", default_features = false, features = [
+reqwest = {version = "0.11.20", default_features = false, features = [
   "blocking",
   "json",
   "rustls-tls",
-] }
+]}
 roaring = "=0.10.3"
-rocksdb = { version = "0.21.0", features = [
+rocksdb = {version = "0.21.0", features = [
   "snappy",
   "lz4",
   "zstd",
   "zlib",
   "multi-threaded-cf",
-], default-features = false }
+], default-features = false}
 ron = "0.8.0"
 rstest = "0.16.0"
-rusoto_core = { version = "0.48.0", default_features = false, features = [
+rusoto_core = {version = "0.48.0", default_features = false, features = [
   "rustls",
-] }
-rusoto_kms = { version = "0.48.0", default_features = false, features = [
+]}
+rusoto_kms = {version = "0.48.0", default_features = false, features = [
   "rustls",
-] }
+]}
 russh = "0.38.0"
 russh-keys = "0.38.0"
 rust-version = "1.56.1"
-rustls = { version = "0.21.12", features = ["dangerous_configuration"] }
+rustls = {version = "0.21.12", features = ["dangerous_configuration"]}
 rustls-pemfile = "1.0.2"
 rustversion = "1.0.9"
 rustyline = "9.1.2"
 rustyline-derive = "0.7.0"
-schemars = { version = "0.8.10", features = ["either"] }
+schemars = {version = "0.8.10", features = ["either"]}
 scopeguard = "1.1"
-serial_test = "2.0.0"
-serde = { version = "1.0.144", features = ["derive", "rc"] }
+serde = {version = "1.0.144", features = ["derive", "rc"]}
 serde-name = "0.2.1"
 serde-reflection = "0.3.6"
-serde_json = { version = "1.0.95", features = [
+serde_json = {version = "1.0.95", features = [
   "preserve_order",
   "arbitrary_precision",
-] }
+]}
 serde_repr = "0.1"
 serde_test = "1.0.147"
-serde_with = { version = "2.1.0", features = ["hex"] }
+serde_with = {version = "2.1.0", features = ["hex"]}
+serial_test = "2.0.0"
 # serde_yaml = "0.9.21"
 serde_yaml = "0.8.26"
 shell-words = "1.1.0"
@@ -465,13 +465,13 @@ slip10_ed25519 = "0.1.3"
 smallvec = "1.10.0"
 snap = "1.1.0"
 static_assertions = "1.1.0"
-strum = { version = "0.24", features = ["derive"] }
+strum = {version = "0.24", features = ["derive"]}
 strum_macros = "0.24.3"
-syn = { version = "1.0.104", features = ["full", "derive", "extra-traits"] }
+syn = {version = "1.0.104", features = ["full", "derive", "extra-traits"]}
 # syn = { version = "2", features = ["full", "fold", "extra-traits"] }
 synstructure = "0.12"
 sysinfo = "0.27.5"
-tabled = { version = "0.12" }
+tabled = {version = "0.12"}
 tap = "1.0.1"
 tar = "0.4.40"
 tempfile = "3.3.0"
@@ -481,36 +481,37 @@ tiny-bip39 = "1.0.0"
 tokio = "1.36.0"
 tokio-retry = "0.3"
 tokio-rustls = "0.24"
-tokio-stream = { version = "0.1.14", features = ["sync", "net"] }
+tokio-stream = {version = "0.1.14", features = ["sync", "net"]}
 tokio-util = "0.7.10"
-toml = { version = "0.7.4", features = ["preserve_order"] }
-toml_edit = { version = "0.19.10" }
+toml = {version = "0.7.4", features = ["preserve_order"]}
+toml_edit = {version = "0.19.10"}
 # NOTE: do not enable the `tls` feature on tonic. It will break custom TLS handling
 # for self signed certificates. Unit tests under consensus/core and other integration
 # tests will fail.
-tonic = { version = "0.11", features = ["transport"] }
-tonic-build = { version = "0.11", features = ["prost", "transport"] }
+tonic = {version = "0.11", features = ["transport"]}
+tonic-build = {version = "0.11", features = ["prost", "transport"]}
 tonic-health = "0.11"
-tower = { version = "0.4.12", features = [
+tower = {version = "0.4.12", features = [
   "full",
   "util",
   "timeout",
   "load-shed",
   "limit",
-] }
-tower-http = { version = "0.3.4", features = [
+]}
+tower-http = {version = "0.3.4", features = [
   "cors",
   "full",
   "trace",
   "set-header",
   "propagate-header",
-] }
+]}
 # tower-http = { version="0.4", features = ["trace"] }
+linked-hash-map = "0.5.6"
+shlex = "1.3.0"
 tower-layer = "0.3.2"
-twox-hash = "1.6.3"
 tracing = "0.1.37"
 tracing-appender = "0.2.2"
-tracing-subscriber = { version = "0.3.15", default-features = false, features = [
+tracing-subscriber = {version = "0.3.15", default-features = false, features = [
   "std",
   "smallvec",
   "fmt",
@@ -519,174 +520,173 @@ tracing-subscriber = { version = "0.3.15", default-features = false, features =
   "json",
   "registry",
   "env-filter",
-] }
+]}
 ttl_cache = "0.5.1"
+twox-hash = "1.6.3"
 uint = "0.9.4"
 unescape = "0.1.0"
 ureq = "2.9.1"
 url = "2.3.1"
-uuid = { version = "1.1.2", features = ["v4", "fast-rng"] }
-webpki = { version = "0.101.0", package = "rustls-webpki", features = [
+uuid = {version = "1.1.2", features = ["v4", "fast-rng"]}
+versions = "4.1.0"
+webpki = {version = "0.101.0", package = "rustls-webpki", features = [
   "alloc",
   "std",
-] }
+]}
 x509-parser = "0.14.0"
-zstd = "0.12.3"
 zeroize = "1.6.0"
-versions = "4.1.0"
-linked-hash-map = "0.5.6"
-shlex = "1.3.0"
+zstd = "0.12.3"
 
 # Move dependencies
-move-binary-format = { path = "external-crates/move/crates/move-binary-format" }
-move-bytecode-utils = { path = "external-crates/move/crates/move-bytecode-utils" }
-move-bytecode-source-map = { path = "external-crates/move/crates/move-bytecode-source-map" }
-move-bytecode-verifier-meter = { path = "external-crates/move/crates/move-bytecode-verifier-meter" }
-move-cli = { path = "external-crates/move/crates/move-cli" }
-move-compiler = { path = "external-crates/move/crates/move-compiler" }
-move-core-types = { path = "external-crates/move/crates/move-core-types" }
-move-disassembler = { path = "external-crates/move/crates/move-disassembler" }
-move-package = { path = "external-crates/move/crates/move-package" }
-move-unit-test = { path = "external-crates/move/crates/move-unit-test" }
-move-vm-config = { path = "external-crates/move/crates/move-vm-config" }
-move-vm-test-utils = { path = "external-crates/move/crates/move-vm-test-utils/", features = [
+move-abstract-interpreter = {path = "external-crates/move/crates/move-abstract-interpreter"}
+move-abstract-stack = {path = "external-crates/move/crates/move-abstract-stack"}
+move-analyzer = {path = "external-crates/move/crates/move-analyzer"}
+move-binary-format = {path = "external-crates/move/crates/move-binary-format"}
+move-bytecode-source-map = {path = "external-crates/move/crates/move-bytecode-source-map"}
+move-bytecode-utils = {path = "external-crates/move/crates/move-bytecode-utils"}
+move-bytecode-verifier-meter = {path = "external-crates/move/crates/move-bytecode-verifier-meter"}
+move-cli = {path = "external-crates/move/crates/move-cli"}
+move-command-line-common = {path = "external-crates/move/crates/move-command-line-common"}
+move-compiler = {path = "external-crates/move/crates/move-compiler"}
+move-core-types = {path = "external-crates/move/crates/move-core-types"}
+move-disassembler = {path = "external-crates/move/crates/move-disassembler"}
+move-ir-types = {path = "external-crates/move/crates/move-ir-types"}
+move-package = {path = "external-crates/move/crates/move-package"}
+move-prover = {path = "external-crates/move/crates/move-prover"}
+move-stackless-bytecode = {path = "external-crates/move/crates/move-stackless-bytecode"}
+move-symbol-pool = {path = "external-crates/move/crates/move-symbol-pool"}
+move-transactional-test-runner = {path = "external-crates/move/crates/move-transactional-test-runner"}
+move-unit-test = {path = "external-crates/move/crates/move-unit-test"}
+move-vm-config = {path = "external-crates/move/crates/move-vm-config"}
+move-vm-profiler = {path = "external-crates/move/crates/move-vm-profiler"}
+move-vm-test-utils = {path = "external-crates/move/crates/move-vm-test-utils/", features = [
   "tiered-gas",
-] }
-move-vm-types = { path = "external-crates/move/crates/move-vm-types" }
-move-vm-profiler = { path = "external-crates/move/crates/move-vm-profiler" }
-move-command-line-common = { path = "external-crates/move/crates/move-command-line-common" }
-move-transactional-test-runner = { path = "external-crates/move/crates/move-transactional-test-runner" }
-move-ir-types = { path = "external-crates/move/crates/move-ir-types" }
-move-prover = { path = "external-crates/move/crates/move-prover" }
-move-stackless-bytecode = { path = "external-crates/move/crates/move-stackless-bytecode" }
-move-symbol-pool = { path = "external-crates/move/crates/move-symbol-pool" }
-move-abstract-interpreter = { path = "external-crates/move/crates/move-abstract-interpreter" }
-move-abstract-stack = { path = "external-crates/move/crates/move-abstract-stack" }
-move-analyzer = { path = "external-crates/move/crates/move-analyzer" }
+]}
+move-vm-types = {path = "external-crates/move/crates/move-vm-types"}
 
-fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538" }
-fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538" }
-fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", package = "fastcrypto-zkp" }
-fastcrypto-vdf = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", features = [
+fastcrypto = {git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538"}
+fastcrypto-tbls = {git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538"}
+fastcrypto-vdf = {git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", features = [
   "experimental",
-] }
+]}
+fastcrypto-zkp = {git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", package = "fastcrypto-zkp"}
 
 # anemo dependencies
-anemo = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" }
-anemo-build = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" }
-anemo-cli = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" }
-anemo-tower = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" }
+anemo = {git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7"}
+anemo-build = {git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7"}
+anemo-cli = {git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7"}
+anemo-tower = {git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7"}
 
 # core-types with json format for REST api
-sui-sdk2 = { package = "sui-sdk", git = "https://github.com/mystenlabs/sui-rust-sdk.git", rev = "bb224b9e6b6edf5eeedcdf71c750a30b68073057", features = [
+sui-sdk2 = {package = "sui-sdk", git = "https://github.com/mystenlabs/sui-rust-sdk.git", rev = "bb224b9e6b6edf5eeedcdf71c750a30b68073057", features = [
   "serde",
-] }
+]}
 
 ### Workspace Members ###
-anemo-benchmark = { path = "crates/anemo-benchmark" }
-bin-version = { path = "crates/bin-version" }
-mysten-common = { path = "crates/mysten-common" }
-mysten-metrics = { path = "crates/mysten-metrics" }
-mysten-network = { path = "crates/mysten-network" }
-mysten-service = { path = "crates/mysten-service" }
-mysten-util-mem = { path = "crates/mysten-util-mem" }
-mysten-util-mem-derive = { path = "crates/mysten-util-mem-derive" }
-prometheus-closure-metric = { path = "crates/prometheus-closure-metric" }
-shared-crypto = { path = "crates/shared-crypto" }
-simulacrum = { path = "crates/simulacrum" }
-sui = { path = "crates/sui" }
-sui-adapter-transactional-tests = { path = "crates/sui-adapter-transactional-tests" }
-sui-analytics-indexer = { path = "crates/sui-analytics-indexer" }
-sui-analytics-indexer-derive = { path = "crates/sui-analytics-indexer-derive" }
-sui-archival = { path = "crates/sui-archival" }
-sui-authority-aggregation = { path = "crates/sui-authority-aggregation" }
-sui-benchmark = { path = "crates/sui-benchmark" }
-sui-bridge = { path = "crates/sui-bridge" }
-sui-cluster-test = { path = "crates/sui-cluster-test" }
-sui-common = { path = "crates/sui-common" }
-sui-config = { path = "crates/sui-config" }
-sui-core = { path = "crates/sui-core" }
-sui-cost = { path = "crates/sui-cost" }
-sui-data-ingestion = { path = "crates/sui-data-ingestion" }
-sui-data-ingestion-core = { path = "crates/sui-data-ingestion-core" }
-sui-e2e-tests = { path = "crates/sui-e2e-tests" }
-sui-enum-compat-util = { path = "crates/sui-enum-compat-util" }
-sui-faucet = { path = "crates/sui-faucet" }
-sui-framework = { path = "crates/sui-framework" }
-sui-framework-snapshot = { path = "crates/sui-framework-snapshot" }
-sui-framework-tests = { path = "crates/sui-framework-tests" }
-sui-graphql-rpc = { path = "crates/sui-graphql-rpc" }
-sui-graphql-rpc-client = { path = "crates/sui-graphql-rpc-client" }
-sui-graphql-rpc-headers = { path = "crates/sui-graphql-rpc-headers" }
-sui-genesis-builder = { path = "crates/sui-genesis-builder" }
-sui-indexer = { path = "crates/sui-indexer" }
-sui-json = { path = "crates/sui-json" }
-sui-json-rpc = { path = "crates/sui-json-rpc" }
-sui-json-rpc-api = { path = "crates/sui-json-rpc-api" }
-sui-json-rpc-types = { path = "crates/sui-json-rpc-types" }
-sui-keys = { path = "crates/sui-keys" }
-sui-macros = { path = "crates/sui-macros" }
-sui-metric-checker = { path = "crates/sui-metric-checker" }
-sui-move = { path = "crates/sui-move" }
-sui-move-build = { path = "crates/sui-move-build" }
-sui-move-lsp = { path = "crates/sui-move-lsp" }
-sui-network = { path = "crates/sui-network" }
-sui-node = { path = "crates/sui-node" }
-sui-open-rpc = { path = "crates/sui-open-rpc" }
-sui-open-rpc-macros = { path = "crates/sui-open-rpc-macros" }
-sui-package-management = { path = "crates/sui-package-management" }
-sui-package-resolver = { path = "crates/sui-package-resolver" }
-sui-proc-macros = { path = "crates/sui-proc-macros" }
-sui-protocol-config = { path = "crates/sui-protocol-config" }
-sui-protocol-config-macros = { path = "crates/sui-protocol-config-macros" }
-sui-proxy = { path = "crates/sui-proxy" }
-sui-replay = { path = "crates/sui-replay" }
-sui-rosetta = { path = "crates/sui-rosetta" }
-sui-rpc-loadgen = { path = "crates/sui-rpc-loadgen" }
-sui-sdk = { path = "crates/sui-sdk" }
-sui-simulator = { path = "crates/sui-simulator" }
-sui-snapshot = { path = "crates/sui-snapshot" }
-sui-source-validation = { path = "crates/sui-source-validation" }
-sui-source-validation-service = { path = "crates/sui-source-validation-service" }
-sui-storage = { path = "crates/sui-storage" }
-sui-surfer = { path = "crates/sui-surfer" }
-sui-swarm = { path = "crates/sui-swarm" }
-sui-swarm-config = { path = "crates/sui-swarm-config" }
-sui-telemetry = { path = "crates/sui-telemetry" }
-sui-test-transaction-builder = { path = "crates/sui-test-transaction-builder" }
-sui-test-validator = { path = "crates/sui-test-validator" }
-sui-tls = { path = "crates/sui-tls" }
-sui-rest-api = { path = "crates/sui-rest-api" }
-sui-tool = { path = "crates/sui-tool" }
-sui-transaction-builder = { path = "crates/sui-transaction-builder" }
-sui-transaction-checks = { path = "crates/sui-transaction-checks" }
-sui-transactional-test-runner = { path = "crates/sui-transactional-test-runner" }
-sui-types = { path = "crates/sui-types" }
-sui-upgrade-compatibility-transactional-tests = { path = "crates/sui-upgrade-compatibility-transactional-tests" }
-sui-verifier-transactional-tests = { path = "crates/sui-verifier-transactional-tests" }
-telemetry-subscribers = { path = "crates/telemetry-subscribers" }
-test-cluster = { path = "crates/test-cluster" }
-transaction-fuzzer = { path = "crates/transaction-fuzzer" }
-typed-store = { path = "crates/typed-store" }
-typed-store-derive = { path = "crates/typed-store-derive" }
-typed-store-error = { path = "crates/typed-store-error" }
-x = { path = "crates/x" }
+anemo-benchmark = {path = "crates/anemo-benchmark"}
+bin-version = {path = "crates/bin-version"}
+mysten-common = {path = "crates/mysten-common"}
+mysten-metrics = {path = "crates/mysten-metrics"}
+mysten-network = {path = "crates/mysten-network"}
+mysten-service = {path = "crates/mysten-service"}
+mysten-util-mem = {path = "crates/mysten-util-mem"}
+mysten-util-mem-derive = {path = "crates/mysten-util-mem-derive"}
+prometheus-closure-metric = {path = "crates/prometheus-closure-metric"}
+shared-crypto = {path = "crates/shared-crypto"}
+simulacrum = {path = "crates/simulacrum"}
+sui = {path = "crates/sui"}
+sui-adapter-transactional-tests = {path = "crates/sui-adapter-transactional-tests"}
+sui-analytics-indexer = {path = "crates/sui-analytics-indexer"}
+sui-analytics-indexer-derive = {path = "crates/sui-analytics-indexer-derive"}
+sui-archival = {path = "crates/sui-archival"}
+sui-authority-aggregation = {path = "crates/sui-authority-aggregation"}
+sui-benchmark = {path = "crates/sui-benchmark"}
+sui-bridge = {path = "crates/sui-bridge"}
+sui-cluster-test = {path = "crates/sui-cluster-test"}
+sui-common = {path = "crates/sui-common"}
+sui-config = {path = "crates/sui-config"}
+sui-core = {path = "crates/sui-core"}
+sui-cost = {path = "crates/sui-cost"}
+sui-data-ingestion = {path = "crates/sui-data-ingestion"}
+sui-data-ingestion-core = {path = "crates/sui-data-ingestion-core"}
+sui-e2e-tests = {path = "crates/sui-e2e-tests"}
+sui-enum-compat-util = {path = "crates/sui-enum-compat-util"}
+sui-faucet = {path = "crates/sui-faucet"}
+sui-framework = {path = "crates/sui-framework"}
+sui-framework-snapshot = {path = "crates/sui-framework-snapshot"}
+sui-framework-tests = {path = "crates/sui-framework-tests"}
+sui-genesis-builder = {path = "crates/sui-genesis-builder"}
+sui-graphql-rpc = {path = "crates/sui-graphql-rpc"}
+sui-graphql-rpc-client = {path = "crates/sui-graphql-rpc-client"}
+sui-graphql-rpc-headers = {path = "crates/sui-graphql-rpc-headers"}
+sui-indexer = {path = "crates/sui-indexer"}
+sui-json = {path = "crates/sui-json"}
+sui-json-rpc = {path = "crates/sui-json-rpc"}
+sui-json-rpc-api = {path = "crates/sui-json-rpc-api"}
+sui-json-rpc-types = {path = "crates/sui-json-rpc-types"}
+sui-keys = {path = "crates/sui-keys"}
+sui-macros = {path = "crates/sui-macros"}
+sui-metric-checker = {path = "crates/sui-metric-checker"}
+sui-move = {path = "crates/sui-move"}
+sui-move-build = {path = "crates/sui-move-build"}
+sui-move-lsp = {path = "crates/sui-move-lsp"}
+sui-network = {path = "crates/sui-network"}
+sui-node = {path = "crates/sui-node"}
+sui-open-rpc = {path = "crates/sui-open-rpc"}
+sui-open-rpc-macros = {path = "crates/sui-open-rpc-macros"}
+sui-package-management = {path = "crates/sui-package-management"}
+sui-package-resolver = {path = "crates/sui-package-resolver"}
+sui-proc-macros = {path = "crates/sui-proc-macros"}
+sui-protocol-config = {path = "crates/sui-protocol-config"}
+sui-protocol-config-macros = {path = "crates/sui-protocol-config-macros"}
+sui-proxy = {path = "crates/sui-proxy"}
+sui-replay = {path = "crates/sui-replay"}
+sui-rest-api = {path = "crates/sui-rest-api"}
+sui-rosetta = {path = "crates/sui-rosetta"}
+sui-rpc-loadgen = {path = "crates/sui-rpc-loadgen"}
+sui-sdk = {path = "crates/sui-sdk"}
+sui-simulator = {path = "crates/sui-simulator"}
+sui-snapshot = {path = "crates/sui-snapshot"}
+sui-source-validation = {path = "crates/sui-source-validation"}
+sui-source-validation-service = {path = "crates/sui-source-validation-service"}
+sui-storage = {path = "crates/sui-storage"}
+sui-surfer = {path = "crates/sui-surfer"}
+sui-swarm = {path = "crates/sui-swarm"}
+sui-swarm-config = {path = "crates/sui-swarm-config"}
+sui-telemetry = {path = "crates/sui-telemetry"}
+sui-test-transaction-builder = {path = "crates/sui-test-transaction-builder"}
+sui-test-validator = {path = "crates/sui-test-validator"}
+sui-tls = {path = "crates/sui-tls"}
+sui-tool = {path = "crates/sui-tool"}
+sui-transaction-builder = {path = "crates/sui-transaction-builder"}
+sui-transaction-checks = {path = "crates/sui-transaction-checks"}
+sui-transactional-test-runner = {path = "crates/sui-transactional-test-runner"}
+sui-types = {path = "crates/sui-types"}
+sui-upgrade-compatibility-transactional-tests = {path = "crates/sui-upgrade-compatibility-transactional-tests"}
+sui-verifier-transactional-tests = {path = "crates/sui-verifier-transactional-tests"}
+telemetry-subscribers = {path = "crates/telemetry-subscribers"}
+test-cluster = {path = "crates/test-cluster"}
+transaction-fuzzer = {path = "crates/transaction-fuzzer"}
+typed-store = {path = "crates/typed-store"}
+typed-store-derive = {path = "crates/typed-store-derive"}
+typed-store-error = {path = "crates/typed-store-error"}
+x = {path = "crates/x"}
 
-consensus-config = { path = "consensus/config" }
-consensus-core = { path = "consensus/core" }
+consensus-config = {path = "consensus/config"}
+consensus-core = {path = "consensus/core"}
 
-narwhal-config = { path = "narwhal/config" }
-narwhal-crypto = { path = "narwhal/crypto" }
-narwhal-executor = { path = "narwhal/executor" }
-narwhal-network = { path = "narwhal/network" }
-narwhal-node = { path = "narwhal/node" }
-narwhal-primary = { path = "narwhal/primary" }
-narwhal-storage = { path = "narwhal/storage" }
-narwhal-test-utils = { path = "narwhal/test-utils" }
-narwhal-types = { path = "narwhal/types" }
-narwhal-worker = { path = "narwhal/worker" }
+narwhal-config = {path = "narwhal/config"}
+narwhal-crypto = {path = "narwhal/crypto"}
+narwhal-executor = {path = "narwhal/executor"}
+narwhal-network = {path = "narwhal/network"}
+narwhal-node = {path = "narwhal/node"}
+narwhal-primary = {path = "narwhal/primary"}
+narwhal-storage = {path = "narwhal/storage"}
+narwhal-test-utils = {path = "narwhal/test-utils"}
+narwhal-types = {path = "narwhal/types"}
+narwhal-worker = {path = "narwhal/worker"}
 
-sui-execution = { path = "sui-execution" }
+sui-execution = {path = "sui-execution"}
 # sui-move-natives = { path = "sui-execution/latest/sui-move-natives", package = "sui-move-natives-latest" }
 # sui-adapter = { path = "sui-execution/latest/sui-adapter", package = "sui-adapter-latest" }
 # sui-verifier = { path = "sui-execution/latest/sui-verifier", package = "sui-verifier-latest" }
@@ -697,6 +697,6 @@ sui-execution = { path = "sui-execution" }
 # suiop dependencies
 docker-api = "0.12.2"
 field_names = "0.2.0"
+include_dir = "0.7.3"
 semver = "1.0.16"
 spinners = "4.1.0"
-include_dir = "0.7.3"
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index d3e9f4806c6ad..2da6c93613492 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -12,7 +12,7 @@
       "name": "Apache-2.0",
       "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE"
     },
-    "version": "1.28.2"
+    "version": "1.28.3"
   },
   "methods": [
     {

From 0a1998e1313575fe26be959a6279e10d16ca42b4 Mon Sep 17 00:00:00 2001
From: Mark Logan <103447440+mystenmark@users.noreply.github.com>
Date: Wed, 10 Jul 2024 09:58:28 -0700
Subject: [PATCH 18/57] Cherry pick 18536 (#18541)

Cherry pick of #18536
---
 crates/sui-core/src/authority_client.rs | 50 +++++++++++++++----------
 crates/sui-types/src/error.rs           |  6 +++
 2 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/crates/sui-core/src/authority_client.rs b/crates/sui-core/src/authority_client.rs
index 2b9f93ad588e5..bc62d8166c774 100644
--- a/crates/sui-core/src/authority_client.rs
+++ b/crates/sui-core/src/authority_client.rs
@@ -16,7 +16,10 @@ use sui_types::messages_checkpoint::{
 };
 use sui_types::multiaddr::Multiaddr;
 use sui_types::sui_system_state::SuiSystemState;
-use sui_types::{error::SuiError, transaction::*};
+use sui_types::{
+    error::{SuiError, SuiResult},
+    transaction::*,
+};
 
 use crate::authority_client::tonic::IntoRequest;
 use sui_network::tonic::metadata::KeyAndValueRef;
@@ -82,7 +85,7 @@ pub trait AuthorityAPI {
 
 #[derive(Clone)]
 pub struct NetworkAuthorityClient {
-    client: ValidatorClient,
+    client: SuiResult>,
 }
 
 impl NetworkAuthorityClient {
@@ -93,19 +96,26 @@ impl NetworkAuthorityClient {
         Ok(Self::new(channel))
     }
 
-    pub fn connect_lazy(address: &Multiaddr) -> anyhow::Result {
-        let channel = mysten_network::client::connect_lazy(address)
-            .map_err(|err| anyhow!(err.to_string()))?;
-        Ok(Self::new(channel))
+    pub fn connect_lazy(address: &Multiaddr) -> Self {
+        let client: SuiResult<_> = mysten_network::client::connect_lazy(address)
+            .map(ValidatorClient::new)
+            .map_err(|err| err.to_string().into());
+        Self { client }
     }
 
     pub fn new(channel: Channel) -> Self {
         Self {
-            client: ValidatorClient::new(channel),
+            client: Ok(ValidatorClient::new(channel)),
+        }
+    }
+
+    fn new_lazy(client: SuiResult) -> Self {
+        Self {
+            client: client.map(ValidatorClient::new),
         }
     }
 
-    fn client(&self) -> ValidatorClient {
+    fn client(&self) -> SuiResult> {
         self.client.clone()
     }
 }
@@ -121,7 +131,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         let mut request = transaction.into_request();
         insert_metadata(&mut request, client_addr);
 
-        self.client()
+        self.client()?
             .transaction(request)
             .await
             .map(tonic::Response::into_inner)
@@ -138,7 +148,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         insert_metadata(&mut request, client_addr);
 
         let response = self
-            .client()
+            .client()?
             .handle_certificate_v2(request)
             .await
             .map(tonic::Response::into_inner);
@@ -155,7 +165,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         insert_metadata(&mut request, client_addr);
 
         let response = self
-            .client()
+            .client()?
             .handle_certificate_v3(request)
             .await
             .map(tonic::Response::into_inner);
@@ -167,7 +177,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         &self,
         request: ObjectInfoRequest,
     ) -> Result {
-        self.client()
+        self.client()?
             .object_info(request)
             .await
             .map(tonic::Response::into_inner)
@@ -179,7 +189,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         &self,
         request: TransactionInfoRequest,
     ) -> Result {
-        self.client()
+        self.client()?
             .transaction_info(request)
             .await
             .map(tonic::Response::into_inner)
@@ -191,7 +201,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         &self,
         request: CheckpointRequest,
     ) -> Result {
-        self.client()
+        self.client()?
             .checkpoint(request)
             .await
             .map(tonic::Response::into_inner)
@@ -203,7 +213,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         &self,
         request: CheckpointRequestV2,
     ) -> Result {
-        self.client()
+        self.client()?
             .checkpoint_v2(request)
             .await
             .map(tonic::Response::into_inner)
@@ -214,7 +224,7 @@ impl AuthorityAPI for NetworkAuthorityClient {
         &self,
         request: SystemStateRequest,
     ) -> Result {
-        self.client()
+        self.client()?
             .get_system_state_object(request)
             .await
             .map(tonic::Response::into_inner)
@@ -236,15 +246,15 @@ pub fn make_network_authority_clients_with_network_config(
             })?
             .network_address;
         let address = address.rewrite_udp_to_tcp();
-        let channel = network_config.connect_lazy(&address).map_err(|e| {
+        let maybe_channel = network_config.connect_lazy(&address).map_err(|e| {
             tracing::error!(
                 address = %address,
                 name = %name,
                 "unable to create authority client: {e}"
             );
-            anyhow!(e.to_string())
-        })?;
-        let client = NetworkAuthorityClient::new(channel);
+            e.to_string().into()
+        });
+        let client = NetworkAuthorityClient::new_lazy(maybe_channel);
         authority_clients.insert(*name, client);
     }
     Ok(authority_clients)
diff --git a/crates/sui-types/src/error.rs b/crates/sui-types/src/error.rs
index 9b62a3bb2cbe7..e1df3c3db7912 100644
--- a/crates/sui-types/src/error.rs
+++ b/crates/sui-types/src/error.rs
@@ -749,6 +749,12 @@ impl From<&str> for SuiError {
     }
 }
 
+impl From for SuiError {
+    fn from(error: String) -> Self {
+        SuiError::GenericAuthorityError { error }
+    }
+}
+
 impl TryFrom for UserInputError {
     type Error = anyhow::Error;
 

From 261a34a6f1bc583ea5283e70dd79263f39d36172 Mon Sep 17 00:00:00 2001
From: Eugene Boguslavsky 
Date: Tue, 16 Jul 2024 00:02:11 +0000
Subject: [PATCH 19/57] Sui v1.29.1 Version Bump

---
 Cargo.lock                            | 112 +++++++++++++-------------
 Cargo.toml                            |   2 +-
 crates/sui-open-rpc/spec/openrpc.json |   2 +-
 3 files changed, 58 insertions(+), 58 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 55d85f7c3457b..ce1369d00a845 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1806,7 +1806,7 @@ checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
 
 [[package]]
 name = "bin-version"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "const-str",
  "git-version",
@@ -11808,7 +11808,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
 
 [[package]]
 name = "sui"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anemo",
  "anyhow",
@@ -11879,7 +11879,7 @@ dependencies = [
  "sui-package-management",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-simulator",
  "sui-source-validation",
  "sui-swarm",
@@ -12023,7 +12023,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "arrow",
@@ -12077,7 +12077,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer-derive"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "proc-macro2 1.0.78",
  "quote 1.0.35",
@@ -12086,7 +12086,7 @@ dependencies = [
 
 [[package]]
 name = "sui-archival"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "byteorder",
@@ -12194,7 +12194,7 @@ dependencies = [
  "sui-macros",
  "sui-network",
  "sui-protocol-config",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-simulator",
  "sui-storage",
  "sui-surfer",
@@ -12212,7 +12212,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -12247,7 +12247,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12263,7 +12263,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge-cli"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "clap",
@@ -12280,7 +12280,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
  "telemetry-subscribers",
  "tokio",
@@ -12309,7 +12309,7 @@ dependencies = [
  "sui-config",
  "sui-data-ingestion-core",
  "sui-json-rpc-types",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12321,7 +12321,7 @@ dependencies = [
 
 [[package]]
 name = "sui-cluster-test"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12345,7 +12345,7 @@ dependencies = [
  "sui-json",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-swarm",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -12531,7 +12531,7 @@ dependencies = [
 
 [[package]]
 name = "sui-data-ingestion"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12593,7 +12593,7 @@ dependencies = [
 
 [[package]]
 name = "sui-e2e-tests"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -12637,7 +12637,7 @@ dependencies = [
  "sui-node",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-simulator",
  "sui-storage",
  "sui-swarm",
@@ -12710,7 +12710,7 @@ dependencies = [
 
 [[package]]
 name = "sui-faucet"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -12730,7 +12730,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -12768,7 +12768,7 @@ dependencies = [
 
 [[package]]
 name = "sui-framework-snapshot"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "bcs",
@@ -12830,7 +12830,7 @@ dependencies = [
 
 [[package]]
 name = "sui-graphql-config"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "quote 1.0.35",
  "syn 1.0.107",
@@ -12907,7 +12907,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-swarm-config",
  "sui-test-transaction-builder",
  "sui-types",
@@ -12947,7 +12947,7 @@ dependencies = [
 
 [[package]]
 name = "sui-indexer"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12990,7 +12990,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-test-transaction-builder",
  "sui-transaction-builder",
  "sui-types",
@@ -13123,7 +13123,7 @@ dependencies = [
  "sui-open-rpc",
  "sui-open-rpc-macros",
  "sui-protocol-config",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-simulator",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -13184,7 +13184,7 @@ dependencies = [
 
 [[package]]
 name = "sui-light-client"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13201,7 +13201,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-package-resolver",
  "sui-rest-api",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
  "tokio",
 ]
@@ -13218,7 +13218,7 @@ dependencies = [
 
 [[package]]
 name = "sui-metric-checker"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "backoff",
@@ -13239,7 +13239,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -13281,7 +13281,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-build"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "datatest-stable",
@@ -13305,7 +13305,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-lsp"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "bin-version",
  "clap",
@@ -13435,7 +13435,7 @@ dependencies = [
 
 [[package]]
 name = "sui-node"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anemo",
  "anemo-tower",
@@ -13484,7 +13484,7 @@ dependencies = [
 
 [[package]]
 name = "sui-open-rpc"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13520,7 +13520,7 @@ dependencies = [
 
 [[package]]
 name = "sui-oracle"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13540,7 +13540,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-keys",
  "sui-move-build",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -13550,14 +13550,14 @@ dependencies = [
 
 [[package]]
 name = "sui-package-management"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "move-core-types",
  "move-package",
  "move-symbol-pool",
  "sui-json-rpc-types",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
  "tracing",
 ]
@@ -13698,7 +13698,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-protocol-config",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-storage",
  "sui-transaction-checks",
  "sui-types",
@@ -13742,7 +13742,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rosetta"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13770,7 +13770,7 @@ dependencies = [
  "sui-keys",
  "sui-move-build",
  "sui-node",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-swarm-config",
  "sui-types",
  "telemetry-subscribers",
@@ -13784,7 +13784,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rpc-loadgen"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13802,7 +13802,7 @@ dependencies = [
  "sui-json-rpc",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
  "telemetry-subscribers",
  "test-cluster",
@@ -13832,7 +13832,7 @@ dependencies = [
 
 [[package]]
 name = "sui-sdk"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -13868,7 +13868,7 @@ dependencies = [
 
 [[package]]
 name = "sui-security-watchdog"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "arrow-array",
@@ -13915,7 +13915,7 @@ dependencies = [
 
 [[package]]
 name = "sui-single-node-benchmark"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "async-trait",
  "bcs",
@@ -13977,7 +13977,7 @@ dependencies = [
 
 [[package]]
 name = "sui-source-validation"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "colored",
@@ -13994,7 +13994,7 @@ dependencies = [
  "rand 0.8.5",
  "sui-json-rpc-types",
  "sui-move-build",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-test-transaction-builder",
  "sui-types",
  "tar",
@@ -14030,7 +14030,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-move",
  "sui-move-build",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-source-validation",
  "telemetry-subscribers",
  "tempfile",
@@ -14102,7 +14102,7 @@ dependencies = [
 
 [[package]]
 name = "sui-surfer"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "async-trait",
  "bcs",
@@ -14200,13 +14200,13 @@ dependencies = [
  "shared-crypto",
  "sui-genesis-builder",
  "sui-move-build",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-types",
 ]
 
 [[package]]
 name = "sui-test-validator"
-version = "1.29.0"
+version = "1.29.1"
 
 [[package]]
 name = "sui-tls"
@@ -14231,7 +14231,7 @@ dependencies = [
 
 [[package]]
 name = "sui-tool"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anemo",
  "anemo-cli",
@@ -14267,7 +14267,7 @@ dependencies = [
  "sui-network",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-snapshot",
  "sui-storage",
  "sui-types",
@@ -14521,7 +14521,7 @@ dependencies = [
 
 [[package]]
 name = "suins-indexer"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -14882,7 +14882,7 @@ dependencies = [
  "sui-macros",
  "sui-node",
  "sui-protocol-config",
- "sui-sdk 1.29.0",
+ "sui-sdk 1.29.1",
  "sui-simulator",
  "sui-swarm",
  "sui-swarm-config",
@@ -16616,7 +16616,7 @@ dependencies = [
 
 [[package]]
 name = "x"
-version = "1.29.0"
+version = "1.29.1"
 dependencies = [
  "anyhow",
  "camino",
diff --git a/Cargo.toml b/Cargo.toml
index 8d02dd4d6df0a..a70f3295940b9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -199,7 +199,7 @@ members = [
 
 [workspace.package]
 # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates.
-version = "1.29.0"
+version = "1.29.1"
 
 [profile.release]
 # debug = 1 means line charts only, which is minimum needed for good stack traces
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index 8aaf95972d1de..8bad82b39409c 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -12,7 +12,7 @@
       "name": "Apache-2.0",
       "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE"
     },
-    "version": "1.29.0"
+    "version": "1.29.1"
   },
   "methods": [
     {

From 0e22aedc6f26952e10b4c02dc4ec643018013877 Mon Sep 17 00:00:00 2001
From: Mark Logan <103447440+mystenmark@users.noreply.github.com>
Date: Mon, 15 Jul 2024 17:58:07 -0700
Subject: [PATCH 20/57] [Cherry Pick] Re-order flags to match order in v1.28
 (#18682) (#18684)

Cherry pick of #18682
---
 crates/sui-core/src/authority/epoch_start_configuration.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/crates/sui-core/src/authority/epoch_start_configuration.rs b/crates/sui-core/src/authority/epoch_start_configuration.rs
index 2280d166dcf91..e96a10ebb1b0c 100644
--- a/crates/sui-core/src/authority/epoch_start_configuration.rs
+++ b/crates/sui-core/src/authority/epoch_start_configuration.rs
@@ -55,10 +55,10 @@ pub enum EpochFlag {
     // This flag was "burned" because it was deployed with a broken version of the code. The
     // new flags below are required to enable state accumulator v2
     _StateAccumulatorV2EnabledDeprecated,
-
-    ExecutedInEpochTable,
     StateAccumulatorV2EnabledTestnet,
     StateAccumulatorV2EnabledMainnet,
+
+    ExecutedInEpochTable,
 }
 
 impl EpochFlag {

From 3bc4323f47048d00817921ee5eacc3aeab650d2d Mon Sep 17 00:00:00 2001
From: Eugene Boguslavsky 
Date: Wed, 17 Jul 2024 23:26:35 +0000
Subject: [PATCH 21/57] Sui v1.29.2 Version Bump

---
 Cargo.lock                            | 112 +++++++++++++-------------
 Cargo.toml                            |   2 +-
 crates/sui-open-rpc/spec/openrpc.json |   2 +-
 3 files changed, 58 insertions(+), 58 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index ce1369d00a845..37a27419ed33d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1806,7 +1806,7 @@ checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
 
 [[package]]
 name = "bin-version"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "const-str",
  "git-version",
@@ -11808,7 +11808,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
 
 [[package]]
 name = "sui"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anemo",
  "anyhow",
@@ -11879,7 +11879,7 @@ dependencies = [
  "sui-package-management",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-simulator",
  "sui-source-validation",
  "sui-swarm",
@@ -12023,7 +12023,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "arrow",
@@ -12077,7 +12077,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer-derive"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "proc-macro2 1.0.78",
  "quote 1.0.35",
@@ -12086,7 +12086,7 @@ dependencies = [
 
 [[package]]
 name = "sui-archival"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "byteorder",
@@ -12194,7 +12194,7 @@ dependencies = [
  "sui-macros",
  "sui-network",
  "sui-protocol-config",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-simulator",
  "sui-storage",
  "sui-surfer",
@@ -12212,7 +12212,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -12247,7 +12247,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12263,7 +12263,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge-cli"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "clap",
@@ -12280,7 +12280,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
  "telemetry-subscribers",
  "tokio",
@@ -12309,7 +12309,7 @@ dependencies = [
  "sui-config",
  "sui-data-ingestion-core",
  "sui-json-rpc-types",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12321,7 +12321,7 @@ dependencies = [
 
 [[package]]
 name = "sui-cluster-test"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12345,7 +12345,7 @@ dependencies = [
  "sui-json",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-swarm",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -12531,7 +12531,7 @@ dependencies = [
 
 [[package]]
 name = "sui-data-ingestion"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12593,7 +12593,7 @@ dependencies = [
 
 [[package]]
 name = "sui-e2e-tests"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -12637,7 +12637,7 @@ dependencies = [
  "sui-node",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-simulator",
  "sui-storage",
  "sui-swarm",
@@ -12710,7 +12710,7 @@ dependencies = [
 
 [[package]]
 name = "sui-faucet"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -12730,7 +12730,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -12768,7 +12768,7 @@ dependencies = [
 
 [[package]]
 name = "sui-framework-snapshot"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "bcs",
@@ -12830,7 +12830,7 @@ dependencies = [
 
 [[package]]
 name = "sui-graphql-config"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "quote 1.0.35",
  "syn 1.0.107",
@@ -12907,7 +12907,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-swarm-config",
  "sui-test-transaction-builder",
  "sui-types",
@@ -12947,7 +12947,7 @@ dependencies = [
 
 [[package]]
 name = "sui-indexer"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12990,7 +12990,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-test-transaction-builder",
  "sui-transaction-builder",
  "sui-types",
@@ -13123,7 +13123,7 @@ dependencies = [
  "sui-open-rpc",
  "sui-open-rpc-macros",
  "sui-protocol-config",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-simulator",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -13184,7 +13184,7 @@ dependencies = [
 
 [[package]]
 name = "sui-light-client"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13201,7 +13201,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-package-resolver",
  "sui-rest-api",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
  "tokio",
 ]
@@ -13218,7 +13218,7 @@ dependencies = [
 
 [[package]]
 name = "sui-metric-checker"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "backoff",
@@ -13239,7 +13239,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -13281,7 +13281,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-build"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "datatest-stable",
@@ -13305,7 +13305,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-lsp"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "bin-version",
  "clap",
@@ -13435,7 +13435,7 @@ dependencies = [
 
 [[package]]
 name = "sui-node"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anemo",
  "anemo-tower",
@@ -13484,7 +13484,7 @@ dependencies = [
 
 [[package]]
 name = "sui-open-rpc"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13520,7 +13520,7 @@ dependencies = [
 
 [[package]]
 name = "sui-oracle"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13540,7 +13540,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-keys",
  "sui-move-build",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -13550,14 +13550,14 @@ dependencies = [
 
 [[package]]
 name = "sui-package-management"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "move-core-types",
  "move-package",
  "move-symbol-pool",
  "sui-json-rpc-types",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
  "tracing",
 ]
@@ -13698,7 +13698,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-protocol-config",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-storage",
  "sui-transaction-checks",
  "sui-types",
@@ -13742,7 +13742,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rosetta"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13770,7 +13770,7 @@ dependencies = [
  "sui-keys",
  "sui-move-build",
  "sui-node",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-swarm-config",
  "sui-types",
  "telemetry-subscribers",
@@ -13784,7 +13784,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rpc-loadgen"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13802,7 +13802,7 @@ dependencies = [
  "sui-json-rpc",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
  "telemetry-subscribers",
  "test-cluster",
@@ -13832,7 +13832,7 @@ dependencies = [
 
 [[package]]
 name = "sui-sdk"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -13868,7 +13868,7 @@ dependencies = [
 
 [[package]]
 name = "sui-security-watchdog"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "arrow-array",
@@ -13915,7 +13915,7 @@ dependencies = [
 
 [[package]]
 name = "sui-single-node-benchmark"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "async-trait",
  "bcs",
@@ -13977,7 +13977,7 @@ dependencies = [
 
 [[package]]
 name = "sui-source-validation"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "colored",
@@ -13994,7 +13994,7 @@ dependencies = [
  "rand 0.8.5",
  "sui-json-rpc-types",
  "sui-move-build",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-test-transaction-builder",
  "sui-types",
  "tar",
@@ -14030,7 +14030,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-move",
  "sui-move-build",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-source-validation",
  "telemetry-subscribers",
  "tempfile",
@@ -14102,7 +14102,7 @@ dependencies = [
 
 [[package]]
 name = "sui-surfer"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "async-trait",
  "bcs",
@@ -14200,13 +14200,13 @@ dependencies = [
  "shared-crypto",
  "sui-genesis-builder",
  "sui-move-build",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-types",
 ]
 
 [[package]]
 name = "sui-test-validator"
-version = "1.29.1"
+version = "1.29.2"
 
 [[package]]
 name = "sui-tls"
@@ -14231,7 +14231,7 @@ dependencies = [
 
 [[package]]
 name = "sui-tool"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anemo",
  "anemo-cli",
@@ -14267,7 +14267,7 @@ dependencies = [
  "sui-network",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-snapshot",
  "sui-storage",
  "sui-types",
@@ -14521,7 +14521,7 @@ dependencies = [
 
 [[package]]
 name = "suins-indexer"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -14882,7 +14882,7 @@ dependencies = [
  "sui-macros",
  "sui-node",
  "sui-protocol-config",
- "sui-sdk 1.29.1",
+ "sui-sdk 1.29.2",
  "sui-simulator",
  "sui-swarm",
  "sui-swarm-config",
@@ -16616,7 +16616,7 @@ dependencies = [
 
 [[package]]
 name = "x"
-version = "1.29.1"
+version = "1.29.2"
 dependencies = [
  "anyhow",
  "camino",
diff --git a/Cargo.toml b/Cargo.toml
index a70f3295940b9..03370feae495d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -199,7 +199,7 @@ members = [
 
 [workspace.package]
 # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates.
-version = "1.29.1"
+version = "1.29.2"
 
 [profile.release]
 # debug = 1 means line charts only, which is minimum needed for good stack traces
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index 8bad82b39409c..c5e7fd1b79523 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -12,7 +12,7 @@
       "name": "Apache-2.0",
       "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE"
     },
-    "version": "1.29.1"
+    "version": "1.29.2"
   },
   "methods": [
     {

From 1a04d5e1351067aa19525fa8f7066f298d52eae4 Mon Sep 17 00:00:00 2001
From: Eugene Boguslavsky 
Date: Wed, 17 Jul 2024 23:43:56 +0000
Subject: [PATCH 22/57] Sui v1.28.4 Version Bump

---
 Cargo.lock                            | 108 +++++++++++++-------------
 Cargo.toml                            |   2 +-
 crates/sui-open-rpc/spec/openrpc.json |   2 +-
 3 files changed, 56 insertions(+), 56 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 76008b03cde97..027b7588993c4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1806,7 +1806,7 @@ checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
 
 [[package]]
 name = "bin-version"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "const-str",
  "git-version",
@@ -11687,7 +11687,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
 
 [[package]]
 name = "sui"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anemo",
  "anyhow",
@@ -11758,7 +11758,7 @@ dependencies = [
  "sui-package-management",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-simulator",
  "sui-source-validation",
  "sui-swarm",
@@ -11902,7 +11902,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "arrow",
@@ -11956,7 +11956,7 @@ dependencies = [
 
 [[package]]
 name = "sui-analytics-indexer-derive"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "proc-macro2 1.0.78",
  "quote 1.0.35",
@@ -11965,7 +11965,7 @@ dependencies = [
 
 [[package]]
 name = "sui-archival"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "byteorder",
@@ -12073,7 +12073,7 @@ dependencies = [
  "sui-macros",
  "sui-network",
  "sui-protocol-config",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-simulator",
  "sui-storage",
  "sui-surfer",
@@ -12091,7 +12091,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -12126,7 +12126,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-test-transaction-builder",
  "sui-types",
  "tap",
@@ -12142,7 +12142,7 @@ dependencies = [
 
 [[package]]
 name = "sui-bridge-cli"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "clap",
@@ -12159,7 +12159,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-types",
  "telemetry-subscribers",
  "tokio",
@@ -12196,7 +12196,7 @@ dependencies = [
 
 [[package]]
 name = "sui-cluster-test"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12220,7 +12220,7 @@ dependencies = [
  "sui-json",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-swarm",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -12407,7 +12407,7 @@ dependencies = [
 
 [[package]]
 name = "sui-data-ingestion"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12469,7 +12469,7 @@ dependencies = [
 
 [[package]]
 name = "sui-e2e-tests"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -12508,7 +12508,7 @@ dependencies = [
  "sui-node",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-simulator",
  "sui-storage",
  "sui-swarm",
@@ -12580,7 +12580,7 @@ dependencies = [
 
 [[package]]
 name = "sui-faucet"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -12600,7 +12600,7 @@ dependencies = [
  "sui-config",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -12637,7 +12637,7 @@ dependencies = [
 
 [[package]]
 name = "sui-framework-snapshot"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "bcs",
@@ -12767,7 +12767,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-swarm-config",
  "sui-test-transaction-builder",
  "sui-types",
@@ -12807,7 +12807,7 @@ dependencies = [
 
 [[package]]
 name = "sui-indexer"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -12850,7 +12850,7 @@ dependencies = [
  "sui-package-resolver",
  "sui-protocol-config",
  "sui-rest-api",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-test-transaction-builder",
  "sui-transaction-builder",
  "sui-types",
@@ -12983,7 +12983,7 @@ dependencies = [
  "sui-open-rpc",
  "sui-open-rpc-macros",
  "sui-protocol-config",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-simulator",
  "sui-swarm-config",
  "sui-test-transaction-builder",
@@ -13044,7 +13044,7 @@ dependencies = [
 
 [[package]]
 name = "sui-light-client"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13061,7 +13061,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-package-resolver",
  "sui-rest-api",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-types",
  "tokio",
 ]
@@ -13078,7 +13078,7 @@ dependencies = [
 
 [[package]]
 name = "sui-metric-checker"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "backoff",
@@ -13099,7 +13099,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -13141,7 +13141,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-build"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "datatest-stable",
@@ -13164,7 +13164,7 @@ dependencies = [
 
 [[package]]
 name = "sui-move-lsp"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "bin-version",
  "clap",
@@ -13294,7 +13294,7 @@ dependencies = [
 
 [[package]]
 name = "sui-node"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anemo",
  "anemo-tower",
@@ -13343,7 +13343,7 @@ dependencies = [
 
 [[package]]
 name = "sui-open-rpc"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13379,7 +13379,7 @@ dependencies = [
 
 [[package]]
 name = "sui-oracle"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "bcs",
@@ -13399,7 +13399,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-keys",
  "sui-move-build",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-types",
  "tap",
  "telemetry-subscribers",
@@ -13409,12 +13409,12 @@ dependencies = [
 
 [[package]]
 name = "sui-package-management"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "move-package",
  "sui-json-rpc-types",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "tracing",
 ]
 
@@ -13554,7 +13554,7 @@ dependencies = [
  "sui-json-rpc-api",
  "sui-json-rpc-types",
  "sui-protocol-config",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-storage",
  "sui-transaction-checks",
  "sui-types",
@@ -13594,7 +13594,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rosetta"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13622,7 +13622,7 @@ dependencies = [
  "sui-keys",
  "sui-move-build",
  "sui-node",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-swarm-config",
  "sui-types",
  "telemetry-subscribers",
@@ -13636,7 +13636,7 @@ dependencies = [
 
 [[package]]
 name = "sui-rpc-loadgen"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -13654,7 +13654,7 @@ dependencies = [
  "sui-json-rpc",
  "sui-json-rpc-types",
  "sui-keys",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-types",
  "telemetry-subscribers",
  "test-cluster",
@@ -13682,7 +13682,7 @@ dependencies = [
 
 [[package]]
 name = "sui-sdk"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -13718,7 +13718,7 @@ dependencies = [
 
 [[package]]
 name = "sui-security-watchdog"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "arrow-array",
@@ -13765,7 +13765,7 @@ dependencies = [
 
 [[package]]
 name = "sui-single-node-benchmark"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "async-trait",
  "bcs",
@@ -13827,7 +13827,7 @@ dependencies = [
 
 [[package]]
 name = "sui-source-validation"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "colored",
@@ -13844,7 +13844,7 @@ dependencies = [
  "rand 0.8.5",
  "sui-json-rpc-types",
  "sui-move-build",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-test-transaction-builder",
  "sui-types",
  "tar",
@@ -13880,7 +13880,7 @@ dependencies = [
  "sui-json-rpc-types",
  "sui-move",
  "sui-move-build",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-source-validation",
  "telemetry-subscribers",
  "tempfile",
@@ -13952,7 +13952,7 @@ dependencies = [
 
 [[package]]
 name = "sui-surfer"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "async-trait",
  "bcs",
@@ -14050,13 +14050,13 @@ dependencies = [
  "shared-crypto",
  "sui-genesis-builder",
  "sui-move-build",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-types",
 ]
 
 [[package]]
 name = "sui-test-validator"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "axum",
@@ -14094,7 +14094,7 @@ dependencies = [
 
 [[package]]
 name = "sui-tool"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anemo",
  "anemo-cli",
@@ -14130,7 +14130,7 @@ dependencies = [
  "sui-network",
  "sui-protocol-config",
  "sui-replay",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-snapshot",
  "sui-storage",
  "sui-types",
@@ -14376,7 +14376,7 @@ dependencies = [
 
 [[package]]
 name = "suins-indexer"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -14737,7 +14737,7 @@ dependencies = [
  "sui-macros",
  "sui-node",
  "sui-protocol-config",
- "sui-sdk 1.28.3",
+ "sui-sdk 1.28.4",
  "sui-simulator",
  "sui-swarm",
  "sui-swarm-config",
@@ -16449,7 +16449,7 @@ dependencies = [
 
 [[package]]
 name = "x"
-version = "1.28.3"
+version = "1.28.4"
 dependencies = [
  "anyhow",
  "camino",
diff --git a/Cargo.toml b/Cargo.toml
index ee87972a2144c..63dfdfc4e8792 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -197,7 +197,7 @@ members = [
 
 [workspace.package]
 # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates.
-version = "1.28.3"
+version = "1.28.4"
 
 [profile.release]
 # debug = 1 means line charts only, which is minimum needed for good stack traces
diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json
index 2da6c93613492..b0b3f54474f1f 100644
--- a/crates/sui-open-rpc/spec/openrpc.json
+++ b/crates/sui-open-rpc/spec/openrpc.json
@@ -12,7 +12,7 @@
       "name": "Apache-2.0",
       "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE"
     },
-    "version": "1.28.3"
+    "version": "1.28.4"
   },
   "methods": [
     {

From 09db80adf1af7f60464ffc04b09b8fafc02917c5 Mon Sep 17 00:00:00 2001
From: Ashok Menon 
Date: Thu, 18 Jul 2024 00:54:14 +0100
Subject: [PATCH 23/57] [pick #18710][Disassembler] Fix string contraction
 logic (#18712)

## Description

Always pick whole UTF8 characters.

## Test plan

Tested against a package containing a UTF8 constant.

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [x] Nodes (Validators and Full nodes): Bugfix for fetching package
information over JSONRPC from fullnodes, where a package containing UTF8
string constants could fail to disassemble.
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
---
 .../move/crates/move-disassembler/src/disassembler.rs         | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/external-crates/move/crates/move-disassembler/src/disassembler.rs b/external-crates/move/crates/move-disassembler/src/disassembler.rs
index e03a684a579f5..92687e05ea840 100644
--- a/external-crates/move/crates/move-disassembler/src/disassembler.rs
+++ b/external-crates/move/crates/move-disassembler/src/disassembler.rs
@@ -452,7 +452,9 @@ impl<'a> Disassembler<'a> {
         if s.len() <= PREVIEW_LEN + 2 {
             s.to_string()
         } else {
-            format!("{}..", &s[..PREVIEW_LEN])
+            let mut preview: String = s.chars().take(PREVIEW_LEN).collect();
+            preview.push_str("..");
+            preview
         }
     }
 

From fc062392741638b90b5519324226f07905b3d9d2 Mon Sep 17 00:00:00 2001
From: Ashok Menon 
Date: Wed, 17 Jul 2024 23:41:55 +0100
Subject: [PATCH 24/57] [pick #18710][Disassembler] Fix string contraction
 logic (#18713)

## Description

Always pick whole UTF8 characters.

## Test plan

Tested against a package containing a UTF8 constant.

---

## Release notes

Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.

For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.

- [ ] Protocol:
- [x] Nodes (Validators and Full nodes): Bugfix for fetching package
information over JSONRPC from fullnodes, where a package containing UTF8
string constants could fail to disassemble.
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
- [ ] REST API:
---
 .../move/crates/move-disassembler/src/disassembler.rs         | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/external-crates/move/crates/move-disassembler/src/disassembler.rs b/external-crates/move/crates/move-disassembler/src/disassembler.rs
index e03a684a579f5..92687e05ea840 100644
--- a/external-crates/move/crates/move-disassembler/src/disassembler.rs
+++ b/external-crates/move/crates/move-disassembler/src/disassembler.rs
@@ -452,7 +452,9 @@ impl<'a> Disassembler<'a> {
         if s.len() <= PREVIEW_LEN + 2 {
             s.to_string()
         } else {
-            format!("{}..", &s[..PREVIEW_LEN])
+            let mut preview: String = s.chars().take(PREVIEW_LEN).collect();
+            preview.push_str("..");
+            preview
         }
     }
 

From 66d5b3286baf057c3382e98c89d43846ad786730 Mon Sep 17 00:00:00 2001
From: Pei Deng 
Date: Thu, 25 Jul 2024 19:31:08 -0700
Subject: [PATCH 25/57] Sui version bump v1.30.0

---
 ...00000000000000000000000000000000000000000001 | Bin 0 -> 11210 bytes
 ...00000000000000000000000000000000000000000002 | Bin 0 -> 66623 bytes
 ...00000000000000000000000000000000000000000003 | Bin 0 -> 41861 bytes
 ...0000000000000000000000000000000000000000000b | Bin 0 -> 19848 bytes
 ...0000000000000000000000000000000000000000dee9 | Bin 0 -> 33346 bytes
 crates/sui-framework-snapshot/manifest.json     |  10 ++++++++++
 6 files changed, 10 insertions(+)
 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000001
 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000002
 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000003
 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/53/0x000000000000000000000000000000000000000000000000000000000000000b
 create mode 100644 crates/sui-framework-snapshot/bytecode_snapshot/53/0x000000000000000000000000000000000000000000000000000000000000dee9

diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000001 b/crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000001
new file mode 100644
index 0000000000000000000000000000000000000000..6aae601648984df646a52a28b178d6962f81f810
GIT binary patch
literal 11210
zcmc&)TZ|mpSw7dgoO7zWYr5xZuifqO*x6my_V|{G6~WqTJDcnVRw4w%MXmNsjomOa
zJ?ZZ8Wg~&YMN1S#V#z}wN{EO=5FoB1LMwzoc>wW{2cjhsmnV?O11}L065@gI{inKW
zdfMZ)*ZZ(F)2B|Id!6(D-}(Ok6l3pr@tL3g?W6x`0~8846H){^3d33w9c{S}E2MJ9
z@gKyD8zFD452I1PbL+tJovPn&Jc8fNW+xZA}$Hl_l
zu=9F8=)3K`tx<1x>j72JzJ#TWcVYPM62_r(bqG~z|hj*gko$mS0`Ae56a)Bb{%RJ(a6%r6HwDIAxD~wTuB8=h|=4rdTKIlJQ
z@&2un|6-uWbZa)ebT-;(xnJggBQZVbWi0EYsQ5>qXel(7Qjl~DB_u>#BBE+FRZ|iM-tykME^JCrrcoU|OvEsZ*<
ztd&^4#41`eFH;9gEKil7@yf=*HWDkXnnyF4RaPQ`mS~yf{A9Vshh(R%YE%;fs%L%V
zJSrWy=6qWuCu#+435;7lRES<>m7jvdSwzI*Dr>7HgF!5y0ums&I&KZhvhW5vhm
zg;&Kn$8~JQCBgn(mJ&KCV`rlEmis0CP4QS6OA?-lM93sbBqAzJlk~}DOzy2dfi7X$
z-#-z1nPKgxgz9C^4ih6Jzjwj;D2a;WxG|DW`6>y3e|pMAenqfd+1Vik^vT8-C4O~_iUCJ}kEmEC(HgnVCD^|8A5(3*d2T7jpv^)QKe
zY^A4_7xv#%OIqv=W4(R*@p_x4JQb;sX_`tzl$5D_vel)%LGE362zsaHM|3h^Yq
z$wodL4f+o{`S$MUf%ak4+u6wPclw(F3gm-P1f$z$1Y7ye?a`fRx4+xD1t&zjyEnY!
zW5FQb?%&PBL4G$M4D)!{+qu1!kNP`mc(1!_Dd-eMg1hq8_PwEtZc=wGgl3n#}j~Nv2db#CK0P(Yu>?F
zHGEl}FpMG}F;-NWB<#F;LQz;%Xo=RAWeHznDPQ9)<#cFR!f%-CMhg_M{AM*iG=Rd|
zva6;VKwCH@&a|rpcmW2c{D-O9%xex$u~JMD$J(k
zR-g&$mVK`R11KoW`9PZc>KA#ce~rJv!!L?|;n9D|R`BbpX}+#P`-e)nKUUwD$sa``
z{S&x~YHSX=jGkHQp(699xswEfi4T>gIQLQo`xbE%lKU)%uMF@Ilc6p=kjz9BZ$tzk
zp(P=QU?UFLLD&QaGOkjB8=FvACsApL8Ib|Sp!wKmkVWu7|3MLhZ2JiLCO=FBZ_j;o{osE36
z3*TJ@K&}L!o&HWWa8$&wHnW(O!XRYw#lpXcA|FBymX;~Y
z*64v&n;t&M*1#L+0jf+7Ex)T4PnNFDLXa5OXAUc0KTx>oOB2{;P~OYfmW_bYsYp9WEx`bQ?Yi)o
zOJh8PL27tL#)G`fZioUV(?jyALA?YdLKid5LkiLR+z=QB9AwvN=!BV#Sw9%KM`91fg86%G-P`*A!sOeD!qU#M1wi;#em^uVU5^~z>6l4W>QJ_|XBqpPvPIaHrC~}m7q=vc{T`=0NxXWgMI5TzN
z7oUwXgo`r>g_?yNh;)I%`aE*ymqd31NU
z-s>qk^U?m`M^UYef)21_tA8&atapcbm9hsK=2H#;+%(TJI5ZibBvn9`0l=zp_`#Ks
zmLLZQAH5BqI;LimIOk~^jj5n%6jOwS0SF)7HXiQXDq?PO%=AzV*Ng@aaNb14-vttq
zj21{(#IQJkK_1}_r0@>1C^q0rmF~
zAO);=45A5Lt~0b69PA1>;xrt?n%Ip37zI{RS7}QfwSn(yWr7OLIR!Qn6kT~BkFe*~
zKoIM^d7XJIj{x*Fc7x&di6TVU1Tu3K+D;GHvun)q%&sW`wPABDP%CyO3sx{S#9s-a
zL}ne>!J5YVCh7)ZKGg#CS_?G5j$3upzc~dSn-}53Hey8)xngJxZ|`Dyc^oET+n`oM
z0dF^67VsHjZo_5uJmxk?l)=Q<055%=O-<^e?+T|z#DpUNUmd(+9BnX<)Rfxb9){^f
zSASu}BW{4bVzqS&Xv|iBeg%Zu#z5NwVX0i5t!WRZOIWVVxEP}gQN|d|)TC=Dz>p&o
zm}ps@G69y#SbYs%Bt8BlVX&H#j%Qs!6GNA@dVr=vn=G5*ubg|8Nce{#AonI~moa*4CA1?6@Kc`1&gm-VyD;j7!xTf7zg6aRqujELN4#dl@$
zJ&m(w+WoL!p=wC`9&B@n83iC2zzv!n6vMuPO@g)-9OBZRf^%uyAe6A9xe5vU<7>Uq
zC%p+8-|CIP_wua`L$SgxbwJg^{2k__F{rk-`a8E_CU=m8->3HSo%NiK;RhoCW2ZZk
zJNZ3{Of$UG+Z=Va^39RngXugf7Wt9kgq2IYu^<=}D=zGeV=9R`Qj%k?XaZoDR^o6H
z94my%8f=lvFgsJkt4t?e#N-s0H)`3kI+pPGIy8Gi1q9X|Km!dR42~d6Bw1G>WMiBm
zc0*9~5-1gH#aWNXk12;Eu~`qN@sIoVcoT5Op8Na}*BPT1ol
zm}F_{Pr{xg>1P1YW%Wb)IiR6YnNpWvAj0mP&$zx)M#YrqFZ*g1$BX+-d_uoU#k1+M
zH_)3$Y?&Q87XU$iO&6!)(nHi$T}ZTnnra2#gpv9k6}W#@za^9Z#qQdK|7wO<
znCFWSD$f}g3*Es2&%?xI3(ydT?H44Gq^(98R9Db35y51UWVgf?0c>`NM1l-MtL9P!
zNewk@ofMK9m?aA}MVq{d&O{ai;zWa(qZG3sq_Wl|hRA36LSw!$riI{#`^*ru42n9Y
zgkF6?*Cv_am=zL#^SloPu3&Tf9I@bkB_Y(rB|X7}Lzd$5Ak!NYI$OBMI(wtdwJCB}
z@H*qaT=8sgnyfWI*752W@dbW$1ZY=N5e=&>cM3uMZwJ=2(Xj
zz(a`LB#Sfqwf6}feUMZPn)n-yOi}Q}6ploKF8VBHe9`=Rxs2oV0COu)BPQz70E7_L
zqlX5|nqL2<^W|Z!f@@*J)@BVp4Q%k_Ac+g6KrU8_f+-L#QGIOtg>70qTy1y`6qgi=
zHP@u4GchO>ND|8;Pd(<&6UG!?sH=??g-<82xu$>+eEk59Mm(pf7od9{G|yxqC=NSQ
z0TK#Z?8EE~+(jXxI)NpUMF@2kSx~ZBPiyASRUEN_280dq?GJQc5S_}3ZWge2Q`br_
z#o$v4@P{cxg4WA1$dy*7^m8DH7zi4MI%GA>AL(0+eh6dgFttSjrAqOu;RjO1h^5e6
zWl9j2DBhoVAT3p1ZmXC^xQDPez#^(ei!Jw|I{=pAPCNf{6cXyo^C
z8o76!S=z)knX#b&m_!s94iCJ835ruSR7ow;$d)9-kT!I9EctPd8D6(BtJVKR6h-Mm
zIl%AukA&F&1U~EVPy%KEqcFfHF-6tF5{y3aU^oBa?si^I)f74;V~T%4aJNRe#XC-6Oc@Z49k9^v1?lVc>1|M!mavrR?asG}A^HN@oWNk652F
z879;f!S4#53%)M+NbtVk1M;I67hY4{>i4(s;y7u-_gM7Bh`(Jp?{AkcQW5%8$=~ti
z0Wh?j0L&ZNa0$o>_7D0XixPsr0#k*UM((&d?rLEK&90?zQr99^*YikA!`L~SrmpSk
zwyy9wTBc7TJqeAQw@EtRcA3r8vyq$8t4Oz@b&J-fi)}Y!XVm4$HS`Z6-Gt69S(7fc
zUBfoiOOb2pSCAfui92HB^hnz^ZBxA#xmo=aNRPtQ9ko$j{*
zW5e{BwwtqaYRevng|?volAGgKqoBlrQ|f^^UOupEQ8VOicT9gecE{{7^(!b`@h8d@
z#Jb-g6A+~PP0B5ClX7Jnpzwt;_1s4cf3@-a;x01U7IBcEMvVd7gk39$}w_fgxI@D=s{ph1K8|0Eflusjxn2
zN|CmJPM%EQ%g3=p)VvPbSG_T@`B|VTU^n(=tULP-eN?@H$Blc_=naYuUZjn@2AMJ7
i4=2YVB+y1J{Zsvf2h
zy=)39Dx2WKGQ$%=#K&b3K`s|WQB+ji5fl+Y<+`BWr|+^k@Ar?)Jm*w(b@y=J)$e`p
zyQjM%BO)UsA|oUI@!!KRuK82bpEIB6{oBx`lxG^sQhBG?>m51nUl?$I$Q+5@ZAJ$9
z{27KKuq@lK+(7YPnSnC7+Hq3nn8j*sY3;)LMs0I*Vg1tL`PyZ_wp87$ES#Tc-K;IG
zPtMGqpIE3ZZBXpd+D4&~M`~sH@-=%)7c4(5VfoT0`B}b-Bho`m!u9X{p0TsexCZzba?BWXN0ogl8BAao`2T08uM
z1JNC6Kav@tJK@!;lQT0D^SR{u6g#4u`kJ!IenM+O7riP|4nPaeWTqM
ze8?V%K5IX2X20&_jDUH|2jtJ|IVpP8;{mX_ifbHD;u@y
z)AgKQxp?l*+U4-RjkUGq`_@)2ZfzFtyR^8vvZQm)UR=Mlwb@=-U4NvqaBgB@v9`r^
za$)iER&CQ?T-}_QoGMQ^ix($nrX8KxR;{hZWiHmvEvzraMcd9*E?m%0Hs^ZhHrBQt
znV3~8)ize8^eXuv^lE|S*|%%%0==wlT&%2itV^#K)^)cRmN(We#I5zQxOszx`1Xo^
zho;-P^+(S)B_m00t;LU);#IPc^enDo&u*FZUbOLe{CbteB|S(oIO!z4%Jn+10`L$5
zA?y+#Hc**B`SO`fF8~NiC^N{gCX5yhQY2~;6&Pr^p%LSLIQvxM{
zRXXm-@{pghbzPy+qLhma
zjLK+;Yy#v=X0kE}zB64p@hSz(d0uO`e`FxK+t;r`WAaV{v6XtVgTM0e{K#Z*4^D
zMXuND#^xh^vaQf4@&)Lq%nG|cD~i%vdjF0f9U;D|ZP{&hmvVZByqgaDE63fRG2iS)
zpYZ;RGHlb4FR0&^k0cwIVKHTRHNF+IlPPI2IlUlb@L$G(q$8hSxs~$w@Uir6#A<4qkYFe0%%YlEQZrRGQ&Tg`YIa=BPN>;QH9Mtdr`7C?nw?d%b85D%X6Myx
zMa?d%*(EhwRkJlUyR7EM)!c-dn^bdCYHnK1&8WFqH8-c`%4%+2%~jOgqMBP$b5%80
zQ*+CzJg&+UsywO6Q>r|z$}_4wtIBh#Tvp|IRj#P=qAD+`a#fXUs=Tb`$JP9Vnx9nj
zQ)+%%&CjU$Sv5bW=F4h+Ud>n3{Gys)Qu9?cUsLnTsxq!B6RI+)DpRU5ttvCBGOH?c
zs!~>!c~z;X%A%?)sY+EngwY03N
z`Z2u4)siHmPb;sy3}^
zGpaVLYICYqR<(ImtEk$dsx7HnRn=;$wyc)N)$)W|o>a?IYI#~M{DwLGVm%W8RE
zEmzd?qFP>3%T={pQ_IV&Q@wmuzhKh(=UF-9gc(_p9RVF9fw|VOy~oLA?VJhXqE4En
z>61pOY=rSnAWyYN%E^SbzyQNJx@%p54cfc3{ATwG$zJ7BFDLT
z;)LAq;r?yIJh&$lsZiPbCcvrMCr)%kwsYe|MT(43mfP%aQ_i#Yc`q`bF#WfvT4vUus0ZW(
ztt$#Z)_bQXFOV1Tn-ic~FxZ4$hrGaLv_cPjKZ4RRvjU^@8NQq4fFj!R=AmIaW?tid
zAcdyhYiP|f-Hc#}AO;E0ePC+?^vSDKt3v2FmCdD<6>D*6Gl98*#*=hzp%IO-pZK1}
z<1+f*CH7na(mDPXmL92WEIe9Sy;O5oYZuRLJz`y`Jmzld=JITCy3U0-?WYJ;hDe;{
z5tI6O-D~}1h_3Ym(hnr}^8-&_=hxU3;zbZ+2kcwyUm)kKf^v)ic@F!fRm>J;@8XV4
z(k@1Nat0HDal&ALIUseR{&*y0=WkNOHi1AepYjn8e^oV116B!IsIShrD6F
zJ67hw$4;$*+dsCIsY0AQT3c8Fd007D+uU+$>uXDowCHeQYvlr2l?&?&7dA`F%<@MT
z))t=&8nKW}`f#PXxd0ho*{W6DO;C{9MzF;Mjw|-SLQ@F@(9hW=
z<;uVbxE93OHa=EI(<0OGl^qQRjb{!3VrB`epC^
zD*M%po&P5Av0LMAL-I+Oubvb3)kbw8c`lj%9h;X{
z7V2-6u9uZ+LGm{*Z*J8t#E;h@chicAr2Wb!w8+KUMotoq{_1-q^{b=_T~OxnHGWK^
zYyM1U;F|Y=D%UOHUblpI-4g!wO4!!*N*I~OMs(e>LSIb$kp2?)2qPn>;{ZS6Avb&j4ju8VEkI4sX5Yx`5QLC;pFaV$)Z!8zzv>g5ve;PPC0t@f2E!9>Y1=SN+m}MKRJ-?Q$>y~XP
z4bgy13EU_p+_7zCa!DqzgGy_yNpcgEFRe76cpZ>%9llzFdu;i#RP+zNmv6QTSA=O}G66#~
zS#9-%rl441<(Q{t#!*3PbTsCiB~d~2yf8G68PHdJ$D_rpu;a=W=+xEj2;L=)%`vqz
zmI7S_;pZ>Xvzg$Hbv%F-iu5Re!}c@K4?B}dViu`Zux%!BJhMe8T>u~;LlwZ
z{e}D2D*K6yoBQpIpZ}wbZA4~|(ao+7T4^(vr8{sFky|hnI>V-Fx@j93+mTDJ?aC!b
zQP1eJdC+DGgBRK`5;No#?SQZpMubkN*Fq*MGe5`??#UMjTk;?ft$EM^v&-yYTkkIr
zs*okE+Ix7z&ZyN;11*t}DFkg{Thx|qvtdyd-GZBM3%jB&%k!;_5LCk3mQ|6V^E&2%
zQ1IUbTjnaa>9+(9#lSELJ=T-su!{I*EU=78LRjQ1PDz6AZ!SqyHBhqNZ>Nb{|Z
zUGf$#T-r)e7osls>+;IE1YOyIn51Y*vg$Op;?*7lgV|gtB-iJyY{7}Vyj~0RZMO5}
zwOk`A%@sf}wspC4XU0NOOHoh}UE2b9h;ZuxG22lY8_cP8CH`VxT)S9Hk(f0-V(v!m
z0<2k}hg`OGppfLPEHA{bVQ;QosO^9bjwVaf1$~w4brFunCf(p6Hsp7^!w##>w>mNg
zn5|I~_)+YZ72g&)ffE2mBAcsS%nc+wkkBr|PY=~Rz#)WV4nUD@Jqp;yAO&~;h!H9n
zX)!xL3InOG>5etag5{BR81d2&RA+J*CVbfj>eyzn1!jprr+f%1u%k>dr%7DDNX>N7
zu_;3hZW%(=$+O{IY`!f!XANqdc(<2m%PR{N?z|^Ox-KC9_*~1J7ie|3F7dq=K0g
zRAHYr`@^RFD`v0rdGkLj@0IqSTmDzPHD
z4n#ySXv2)xfp(GS-@rK6iHV~2u!C5=`7RP;xYI<
zwzM5*5`zvmg%bCfQ$TNW2u+~=KN
zsD0<9%4*oi*p%JEs;r*#fxeoM+Kr}7c8{hVAzFH*wsd}Bb8SNy9WlcLGPZhY9q}hU
z-o8hewU~<%)*f450j;AaoA&a`>T3R64c1A$dz%1qZ)I~qz_hipxoJ@_Q}4DbF_60W
z62FShTivqGuT-t`TbF~?wMsQ178_C7UW8+4UfgX1h`BV|P{owB7_$%Kaama1s^g1I
z1gdpucDno0dX;xx*o7PLRFTK4Y#eF!u0p292H^~(1+R7u1X?K7?R!%&W7L!t$h=ne
zuP4b49LaXNBBC?h20(pxp}EB7}kl
z+q7U54pCN#Yhg@ffhkmioq192|h
za-IfojDL|I_)=upzSG&y{^_4AmDpCiIN}C&;11h2CiN-y7J5ZSnEWw?{0s(wcj0{qhwOr;UR@bbMA(+**A+Z{*BhdbQdr)YFuog)F5!?p&Rrth
zB~0(ifHUkv_Hlg|kS59Wt_(dNV935t-$mLXN$%>Td;~rPNqA>Q8~8-A%d=u)-Wc_e
z+630|j^q^~dn2>h5kR{~Dy#B-sIdVs0iY{o_6+i-8DT+!!w=dShmQyF9t{kN%AK-E
zf6PKq3YjZCPCp->+b|_%^BcJ8(}m<|7~s1;%?@Y`?`?ch`V14jqyA|+hV3B-qz4vx
z2UTq6k9RPU!3T=A-R10&{=%ki;-52vgggcvXPbSi6imiPbLEZE9GnwoUl3&&IyZ6~
zgB4{PJ(8U|{xM74LMVcvT!t_ZjBVK7&wL9+ICL;xA1^YcRN&CxD3=L5u3-=bVbQSf
z528}!hfyIag&{$)HS6agW3r)tx&tn0V?H{e*Oc;{{vbk!B9wJ(pMz%Pk*IY2XK2;7
zAH7<6J|Z%-Y#2&SJKNLm_9||tZ*xU+4sR;2ZllGNjo4bh;I-s~s&tK@jLKob&8R>l5lPANl1>Q~=iGhV5rc2>=Wd
z#J~|S5V^TRIj|?4{n;N7D%A=~l5ZikU_<3Nq5!pGFOg-e%}+HpuGUdbuLK
zeO|U0di2$KIp2_+XvqFPlbmdkro*V-&-N&y2%s^?96q@Zb)I4S)fzVcm`Q~Z8T+(I
z^vz~AA7&YG=Lx>J8D^TQ$T*8(J`7|MM2si1!Q8PD8GEk~iZH|mX$L_>Oo>oP)`MWX
zChY&et25`o++zX9y8Ti!a$afP?|s4ipy~f4?70uIQ-0j?qu;Xr%FMnO-6b1&Xp7MX
z<-~rPh&HsG6>cavG6E;fz;Ip7tY`)MCDXHoXW`orFfcGg#V#)@D*=KK(}KG2P{hRg#7G-e;NGqX)g-{jGPP_Qv?PLlErOk*L-{Cr$R
z8D8A>D&QJZ1%$2$eCw6in(nP9nGJGRz}ml2wrCg;p4U){gnM#
zm3`8+b1(7i{L3IcEnz?NUNk8oD+-KD7L#TzBN9P33-+Pjb6kitC{K+Kg^*zAmIg9_
zEkG@3Smqp+Xqez-B`$QLVMe(;f^jG+VTB35SujieUq_&^BmvicwYg2#Co6!gMd%3v
z23#*E2wTldmXEIEOkQDEK>erPnUC2>erI61sTM_G%$X&&>LxUijKFLUjain8IgbE@
zTFg$k+or51xvTcU;}VSpjaKR$mX?%{msWF|KstGzog#T2-m!v_G;6fQ9hTMRlK~@~
zEeOdI%qhYDk{qd+qS6t~GWT^pi%u3i>|J>}o0F&O?>R^%8CitJF_w#9D?W%*G3(he
zN^Nn6>I8l8qn$V85#T-J#^VgL44w>e&iIFBjuSdTfmM2+X@9~TasJNyr1Cys|Gwq_
zpnu%`P5)Hz!x=YvZRUww_UAiT!K|sk+%HTlSnmuPRgUTv%%;FDDvh9v#Li}c|98s=
zYZq=*r*J2`V1Fa`;w?Jpk+DaTJr=ufuLXZ;Sa#MClv<2_D{mNsR>3fatRk!`$OBka
ztv~>)gz}Na##yr3ArvhLi59C9Fky88LoCDtMXSd!b&pi0cLH|QzCDE2-o9QymcveN
zd%YQB&z=Fd-|n;foj#}E?Q{FRKCj>J^ZPS>nf{LDB|W-Z!!;
zE0>(g$pvIUE&y7&+3DQ23d(VRq-I~=
zpvokRx{|D^$s{s6?Zt)4akJ3ziN@X{co6DN
zL#ULpvO&krxahbwX+8-n3cwDy9n?F@0N}sq2$y2Q7_Ga^ikS+_Kg`$Fc$qyYm_#Z4kWAt|5t33gX4Xla6u)Qw;
zoSbp*gz*4@8CX+e?WliR6TWEU6?p^#Qy}$FbG5)|{cEcBtYp+H9;jD**R?8^oou+d
zVqu=huc_ktc2=+ac)jxJYgH~=;z)Dl>5xSM)G3@qTCGNPCwFK
zSp72PG%g|EdV0Gqp0ood^q-RFdjo5%hbdsXFHCdlbr0I3&S55pCp{7Ln8_hZFr)p<
zIr?7=qbBAOsx*|wjiclYd$m51nQ^FBv%k4ohi3m(YIClv%}#1V
z+_qb7ta;u(vhpwmbtPvfl=~JQIX&6O+|z0=v8V9uB=Uz+NHK&
z_u5L-Hg=WT;PdSK3PDmEys6##)<$jPFu?@?!&wYqsanDq2CY{nl(PWecFIg{FJr^r
zOUlTkF%^0p#?J9W=6*S$?Gy;wMKb+nV?)q%M^7PK)_3ODB!qO^n7@0w(|q#
zTTSm>>c^G;3H!MFa_4aHK7hh6I&Sn)=c`usgBg|k5c;?u$tV~-U7`ZbMq-Mh7Y!pL
zCG(=D@OC2du503)&EZ*2qa}lHw1knLOMCb^!m1LgphH8q;-8{2n4!V2J7!>n#!-ABz9g*)LcL_xP
zA~rPi&l3xg>Oo(G0f+vGf2kS3B0Bj@GpVu5bTdfnFd;=F<%A(lO{qFE1x)7nH*8M?rajFLd*d*e6kfjPUxO$ZQJo0Exdz3BAEcT@n=0L`x1-~s=D3kezCIO
zpeCK)R==mb$DPmE{?{@C?oR}-jDmNxm!kjL{~RTlikB=n1bGRf3_(ePVnC3Upfw~Im2xc+
zL5Bhyc0t@2of5R=2=++OjY^KuEDH05!_-qVH(BDe1SAyXZ!GHuKZ3Ktf
zTi|T;vSXPU)N^>Xuu~HIh9x`@XB`~TcMkO(q~nG;+XM8UlV=Wg?C%)wIK1b;o`Zw?
z2ge5w4;>gfGI=(+glr6QiNofnVBaPMnxA5-Q(QI)xx``f
zQ^H7Y6iBL|P1!wU!?D>wWLwaCMO+O#iq7T(>T)`vv*PkF?Wi$*W8RZ;O20=}8rhOYq?qpRmei8&)IqWh<4K_roqVdhXOL{rym%U=C&eVU
zG1B?w9F&LB!YdaaO{4TMjnd0BicVA-rPE;L$*`+juk75DzkJM+K%$SdxB{niJaC+<0ROGnQ;pRxMT
z-`w)m=XZbQ>&N~v`0UWHekf3t=X|T}>}dA7NonIXpFi}R`@i$e&-w0m{{G`HAHBEs
zZRbDrsUIJBfA`OSrt+ab{ZIFuox1CvT3TQG?GJzHo!{+zyM5?;)E#em&p-Z1@Tz^j
zGkWCXg{S@M7oYzJUpsz-df(H+>hu5dcb^x&)7tlT=R;rlgBL#i6TdY0;SU7rWA;Z=
z#=v!ZloXKN>wo|L_XyNSAf81n_x<>l^xnUI|L?x`U;X)y`)@zxyyG`IzW@FHPxL9pJ>HS;`sby&-*dix>l^;)!)?F(
zhmYU=iI=_f>+k*4dp`TQx88l~J-=|v;SaU^;Y+^n?dvz^U;E;HU;LiGd87OFx7_>-
zAAeW&%`bdy^tSJO|C4|Cz2EhYe;)eVAAQ^Jz3`2dk9_`U&o_G>c~br32MP!O;$wgK
zhdUH-7rP?`i)`Zs@I6&x3#VFjj2C?U
zpZ~{aE{(lltMh*A8^7_4pZK+|U%vav5542lr}q3@Z~xD~{vB^MU*xsjyZ3F?58rtC
zHP1iufit&$X6eo!IsX@Tys+}6XaDvu-u8pT|MzEp)J+#gpXKUv-Qk#7z@@%?{udFE#xbb4R#*|)v-W%~~N)Yrb@xQl0g^Hu&ojvUGV
zT*!03R=ti{w?gRo)
zvpDAY7~F6}#IxNVHw|ZFEY(-`yg7
zAEa?;_rRh88>Uy0f`1Qzh4NiSb3>^TIxtgqG&hqTpd{pFq)%AZ@enx(F4G+0D#lOH
zCs!K=){~yL46G-8Z5vomX0&af?-pVC=sw}%NGh|X`EsCyw^c8UusKe`s>qZh&9I^)
zHXRA1YmsJ8k>fOSK+~lHo}g=4&3CFNb4plD^<-WNH>sX1s68aJZV?qn-L-DjC-)H)
z(zT-MZ!X-T21wGhOVgorrd18bIbI`YD1Ib1*(j;u=46{1X->AQz0JuEwU1Y%7e3R+_kvi_a&MF1(uv)_pV<`C%
z>$|i6#kO-FwNbc2fRaN_g#L*rgF)qJfr;3cS*Uq2A;m7zVdh5Yx;li|44}K}iAI^}
zi%N=_$un8a7PO`idq&uiSpgDI&xM|KT^Cz4m_jJ2XwH#Hr9_;HO&0P}9ha!&Aznq1
zONf2$$7W(WuEo(p0f>>9&VfKUscpm?wp;%FHEbKfx*Pf^iNckasEpKAN5l>Z-6^aV
zm$tMX{jS#GC{c+Sx3#wT+*ENY7OncYR$ExCESY`hs*!Ol<`m<@!R_
zp2%5pXj_G-C~wyT3DK}q8lqbKD6_$MiN#T`1RKrLcJk1G%*e
z7gn~!Io#^nIozR$_Rv<1FP(njU91_RX0H{y*)Uw|OLDJCU&tA_PFYHeN?{PI)`{|(
zIIZ9z3-#|J_DrcZd9fk0Z4vRWX3ykd|0iXHqpKCzM6}u_U+Nvr?m%Dx`Bv2B>@9io
z_xLX}j|abIy3uc$li4TPvP7SSr^Rp@{*V4B1i}GC6B7=I$YqmphXnx7O7tOE!io8e
z_0Yy@?7b$V-3csQ+E@*=Q-h0}mE~GnBicmRCN?8(Yzt!X$aRM5x@(BFfEASPKD^IF
zF%hFVY+p&}Z8;fW*_0i$_miMxPz5ZuG`-~5Z$iFLpF8|l+0GtETJs5
zXA{xg6mJfWSZZF^kD%ZO#t+ri3IW^*z$2?=10~vS=S}9bysw(?H~n{6$K9_0x?h6r
z>JK2Ue1-i{mHniva=*=2XhRvNolm88#{?bF(g_QXfas#&yFl1W1$qpE0+Z7+kWLVa
zYPkiY7d2M=e@ID`WC(qRfORPb>!w{`fK1fx3B?1UfgT#63Pll76(a7cVvfN@e_ItH
zh_k+f;U9@_M3HM2~
zZxBTA5KJbWO3k&NUR!#gw&kbFvpT{Ku(=J=J6a7kc8i3u>!v40Q!CZS!sLpyVar7a
zx3;mxd_@OG3f0wT#hyy`3tMuVb#M~P*Hlp?vxy`DHzaEpwO*~>7O-AgT0koB@2EDy
zB)1qD*t7EWt>g7ok!%H6A{xgv1d-)Lrj8e|=mhi|1F4=~3g%BE5TGJoj8_5i>>wKa
zvx~$Egdty2HUqu0*cwHZ7Uql-z%4!h*oGSH`$3ILhygb`c!HmruxYiyDwC@0i)}4d
z=UL;7DrZ=ku-f%oXi0@A{N;xm+;KSWWfH6QW5X}-<$e+oU{
zUqPq+w{bb~M_^K)w!UO$KkV4KUqZLNRdk)PNCl_%P?W3dw~HJP#q~tP-HtWfomj)Y
z$S%e`H`Z;>A;Be;4YZ~^3sF+6Qzc6_R&+758GS;_iuxd%mvXp37!q
z1^3icp0B6X*ArFudJ0%Z4;#sb(tDBzL|{|6n&vy7)^Z-KEUwnJZ@*dq7@Nm8**?~n
z>#iE^c6DQIeY=|b6;|+1UA^7el3q2TXME;s{hIb_mP&+|4}haAEzv747V5JxSzV&$
zF4z$>h))lSrPqKo5G&s5)h3UMxUEUeU1L-YHTM|7O4M@eRczD6tyhw$xyzyhBn!+J
zy>@9jeXl{i(uyedf~jfjuW<|EQ=-?N*K19xJ!T+&llhO!Q`X|cSL}VZ7lnSuKs1-`
zeHH-Ouxnsa4q9>-x6+ocas@U~{g>);_!vhlS-n4J+P}_T_m}45ruP!-^_Kq=?(yI=
zc#HWwPB6aU{)Ux*CnC(q>;+Zq0p}9{qV;YCd(;Mj^hiNuY3CQXp^%jo8GFR}1@2oI
z9Zy_fNTP*7!QX`x_rZr)Q0OB`ao^~a;yywq3i@WZ31MjV2ZZ3IvTl{rB60{1-DgOv
zwst~Ysjc!Vk6Kc}ZX+yq;wMAtrft=SZZ^IK(Rc8z)*{|!1`0)^)6HdDb9tO&lyXJ4
z!)?#DWZPUM{}I^iQ*e_35}bIK5o*d}QU|-EF;yGOzMe+5f)AD#+Rx9(e@1AXTkl{VNA?{%}WOe^9c9d~d?_K|koMc?p
zCk7B@r>n1qRsipbp+W4q8eLRzP1d?2jZ|c-p>eR&Ye(bh#PUYmYwTuA9pB!~nZ|Cu
zGp@4S((F1akY?<-GQrI*7P2P0GEjRFs21kGD#8FCHy3u!!>ffAppzu-E<*QcXoCmf
zC&Pmp6gsmNDg#lpNnxl+fFN!xG{`IMyn!;2Ml3o?jVA)@XdvXNLyZnTENF!)d}Mo?
z8J5EUMOQ3dHPA4jy)Nk_XoC3QKrU{TGXr*Bgo|jUcA)<$s!wrkxU@(dVRVbp0sX^L
zm1+jCBE(OIAOq6f2z=5icCr17VES7g15sGmbqqvfVAnB#urr?G7>KgaxB9|-%XjBf
z_zkZP@PF7Uf6}yHs`fkYRDY$sS37@W`Cr4l;TJP~!KX9B;ny*7cv0|KJNu_OKljC)
zpZ~iYPCLvY5SanvkZ~Af5O|1d9l)m{TK7;B0*E25v^OGv36L2!k`RTxz-Pqp5J!e_
zh&jTT+9(9T)*N-?D-?)MBkxkP*VBJAc>Ac2TAPP(@w(b
zI&jdidh_^mJy7J0>_bpazEdo<8NKEnv%S5gv)I|v-P+UElkLuT=DNFjI(kYyVRxZ3
z>W(@)i@{+97{xC}3^}2X1far4i~*}4Oki?yn>|yz9};*g*<>a(5P%#v7y5w=#59{$
z1~ddeND`OlK&~8_s3sm8r7rBkfXOry>RKBCS|PL&hmBmJm_Y6%)YVIkY!R|^kR#>5
zkl`xfCP`CQitUJ-f)VOMf()X%CdF`fDow{J+=e$AxuWU#jpJr9PvZsS4p14DQ-!q1
z`w-WDog7ndR^qlGwnWo?(H*0|?kVj-X{Wy?59)6Vx+_esrz=~PD^bvv3f`QSaWHui
zp5KD@M4E60yAt0`+iwamZ^Bm-?@czkV3n(FP_ciGtJ-7s@7xh~bY~kg@+tUdN}YV9
z#HsKpL;f%u(f*XgbyFITU$}X<$*--7fr&1uiQky5i90x)e?YFvi1sumcJ#Km?Vfnu
zOlaY@c>mf_+|iEXwmAq%tSS~iuaeji#lW2V~w2v11@Oz=D(Xtw_yF*+#l&!Ko
zkBg>x6@iC?->WbO-HWE0bALindr>~f&*HNQgSs%v;Jv^Pf)U&bXF~LVaff|6fD9kR
zw{2f~OB1XwzIp{Et~hVBY2
z=_`&Gg>sg@it!&?wh%F7cw&>D^e7W~yc8aVM(knsd$a*ja-R&`5aql5&QY-_2ONm`
z;de`?=(HzA#BEd*MKGYTgbzb%3wi4>&|L}b+mm+>P3I1t2iA+am`VvG{LPXa#s>-=
zG|Lf9D>|Is&VrygfjeiGb91URX!nM3+$!f$iyJ@^p&dSGFDNl8EFIEY`@Z4$-Kk1G
zM%m*v3!;}tMWHijw>a(K5n=~v&rzNBr=ioKJ!>KGk)2+(ru`Z~(OM5&LfB<>m+&1d
z`~H5+7>nH?DB{nfMPoHsrWE^-3W?63kXc$NSTs9TCkA|Z@tRo
zy~eb0$~bMDF&@O{6*L;{i3y@Gazz6Xb4nvXpu;A@4MaJ%(2AzVj_YM@*gi4i0_@2M
zbHY_L?h@kn0SWGw$$yV1`rRkE*u4@wO}^Ltf;&x0vM50Zeld-95BANh+_+WbjJJ!G
z#hntnLt?i{EoZX?y&_PY7e(iR0c2+8SU>D1)pJt9qcalTG7U;$PeUWBXIN
zd*pJ{(J?NW6Flz+$L|<7!k#mjjD{oT1mS^OsWv<^F-dsSZNvwPeZ~IbNbz9TP;a}{
zW(^kyM*2qjM@B}5Mu$gw4~!q4JX{_ho0^>J8t)t*oZENoz>WKljUL;3Q^)x1_>se7
zhiAs;#>c0QOwEt?95_04^lJTITS8VYLIdH!gFAy@QTRRh
z$y?)f3AB|NDyS$gEMutP705mM5lW??wZbUSDX>5Cgy{!s6E#lFho?nm}JV6yYV62
zSWX}ei(PQRRlsSL{r?XTr3KC}AsGID_XC@`
z=I?quIZ&c&{;sF{Dvsx_^{Yz)u2M*F#cTb*DX;kh^}FUzgnHNdiHz=AzgR=*>LoD!
zxaJQJ8`u2deB)X_!CSBO``nksaQ`W3dF=PY33g6p4k9PSd1LIV@=Cx_kxZ@BVVbiBG3deeoxPgC^_QSX%bSnr$Pj>`%79?#LY7c+X
zk%%LpT-}k-%{pNOgIU~b@_Lae}x36h9^ti&%tB-3rDVyDWFoc}jx94iZNi$gJ+But1?Bbgs
zi*|Z6L9VIi{cq9!Bp~bajD(N#L{%=pfk2nkaj=k;1G36R2xdN9l+Wd(uAuA0c(YX>
z=ZHm}K_TcIwoeCzs2FsG#gpSDnQwU&c;!}MUo<4J9RZH>NT=&{kV#EJzIDkA3w0@L
zdsM*WuZx)pM}x&=Mz}wU+8O3B$Q=#Zf_53^?{J>Mf+E4>%{b4&4-pHhEo^6?OJP3h
z&UTmEa^2
zfGvIy$tnxrrXV|Hm9_d|Yn!tY(qjmm?pw#xmw`@zzQ&tVh|*2GmYHjOX1pLWk6{Ug
zSbPQua>|{uYFnIg7wiYaxQU6ZpMjx;NvKus=Id|I=1fql+@n1MHka1fy-KL|6D4$l
z`O-Ll+%td@g-j&TqkxwI&jT$qgeo}lq25!|;<}BG&ZkDFgpX{N`^xt>gY6nYanGz
zp$-FM>e<%TCoK$cjynHf|CR0iLFSvG|GRC+-B-2m4?fs_PxvxCtiGn>vwrp;`U|;#
z>n|AXXq=uk?=im()tCX}cH`;BGmK{%3kY=J^%$aUZW7Sy;4ux9%+4~Pf8xr;oklM;`;_A+&?7wqdGh=EI9{9Bs{fO^1pqb
zgx@hL;j?u7**ZS4{{T7D`wtS%>_0>}spC`o4->yvAJNv;c7*;69+hW@bvPs~nl~Jp
zG0b~r4jJmMu`>+qb7l@2_H5x8<9p+=Lxz3x9Rr5bGsenu_S{6*og;W9HJteyc^T)H
zNy)i;LgM#}k3nZuj?-~26v%N;+`th#mD>pxj}I8`lEkVv6Vz@Yxh#3-q{t%@tehbE
z+>-?7DdP2w6O^aRFxhS`jT`>h7zd8{cbqDKM%*+#035jO&}rk?*bQUzWByoqEHh@0
zMPoOP&5qqOHa%7tyJPN-?z`qE#^%Om##+bjj>b;kaa$st5=UdPOe+$e2}~8aBmyjW
z8*!$H>9`lh_jF2*eu2HALyrwg78pQDGU18D7ry}eL!$bo@Is`J4ia5<_#omKIIhtz
zhHyOj^8V@K=BjTYFX(SkM}Dp90P9BhUU!sgn%w4p1jpS0);8|)qwN%WyLs9d+;zmh}qnrZJ?3p;ho
z87A&IHT!At(#A#2gDNfY4ht8Omq^aL$;a%cgl1p5+?Av^(%#nZ^j`H2?3?W#KYcuY
zu3V_BZtisbnJ5C14LfV8g8vVFC}e}Zm8~i9KIWfrxWwkt#!Box
zu-S!b7AxzODu*YE=JUnvr;$am*>ybOBT<*Gf5AA>s8Z`vGpeHN?@K~doC1k#UcRun
zw%R69eE`wg#>%;si-v!^q);apOUp5Wg{@j>bnz?52GmF{bMq
zD<~&&9*A}bJCJe}ubjOxm+=a=qm8eCt)c|_h@|v*vq6>5)&e(r*(cY5AhrBp&xetTgOPTg&BLIGF$c
zVLirff}fISVDRZ{{jQ^)&~V^`ra{@yx9UBOjhlF{I^$;^@V&!+W=?Opa7oDS@N@k>
zdf`(1A-xZxfJeLt3(4%|9B%Xr^46F!W`aPeF?Y-WKP+gCebgDi<+S#&SacQ7qJA$L
zTc99_-!=LyQ4XyV99lmkD$F9{)kWx65}ifzBvH&qig#+CynqAUT%hlAQI3@!05OlR;z43$T|;MP)(wB*EAsZ;Z~{7Z*=#Kw3B
zGy)s}vJH~jI9hi1BGcDq0c5Jt<8{Vivxh(2@lrA{yP+jH?V!#Rz>)G))`8K1AHuSC
zI@)oD#ZcT93?`9Y^V&x7&a%%di7hPXRsFS5TNHe}(1o!>fZD$pOQN$8xH1f794NuI
zxs$iDisK9o>Xlqk8PQg=vpq4l3#CZ7IIuS&ts~;`fIF{wU&T971?ltZ(IQ;tcF>
z`5>?h>K{ZDCt9=}?o7D7ZcWXe&_=nt-nv~|=hkmAt>_W@5p>{W>@yC}ZMw4%$lPKw
z6i;b`-5Jz3(a~u7!q#X~G_6Gy&uC-br&RQ`HuRmjvbkHe$?r@isT}N|ewfAEF#P4n
z0Y0jHr!u}x%O%Wz$wE;!G-s_gtbgk%co2h)l+&h$;)hl7-ZC#T>$YjbU%i;TlD7KQ
zaa2e4%HYew<{e>cGC_PM
zh*xgc69g5V&{vv>OkY2l8hnPEmC%*-acSH*u7t=u+lsmjYVXA<8$(lJ87lp`(r;iE
zZxM)r(F=ruIElt(v;ZA7W&wB{0FO6jJdtZ+C%|OjD9m@6_HUZ|oPRR^#q|EldWZ5~
z=^l4K<=z;)!fOkkz`Xmd-n-rGAK|+BPdNdm-)uJrAi4xh@r$pqMF3xmma!Ppx-~{8
zrpu%{gq<#Kv$b>X3{Lq-?Ln)6-r)dRQay0hxfDa40=h}6U}oilEL|?8kP~8MWpfBD
zwmqD-$0aDBFp5D@ORHSETBISrS`UqRx0QG5DMqOP~Cfg!5j);
zca}Ozj@{nb)|um|ao_GLb+vbO8g@s!X}3phQ7ei%iTRDtmWgVBsAVPzk;-e)ewv|`
z2>_KkS12lx@C)T+@=NnECPLs3XJ1>}aaVjc#g7mZ!G5C!ogw<4Vw$BjLU~lE!PrVK
zsa*(ZO`ZY0bup~u6JsH1$iP%VniI7J8|qOP5u-Kip|p9Q&VWLX?>J{JZf#s{vhceb
zy?_*7*AcPsgCb};7GsLXxtSc@Mf&&xM_ib76c3B@r}#4*A^SV(#{N_jdn8-
z)Op-X#NXmWFg6rSYQMr>P=wl7*bG|hYwJ5s%xvyWDpqc?Ae64s#~26ELeLA9^?yfu
z!iKVB0~=|axQkk{UU>xKe>(YM;0>)AqmMmaj*DS67}jxNE$UxthuCs8lSB3+^K^X3
zfj%=6e4xqf@L24(n)6;jO3Ky%{s4tzfS#A^Q)f!t7xd(cCr_2YN(5Jt13J?x#dG1w
z(p-$WWKidW8;uQ&#zE{7QY00#e=!%t+b;$Lg4X0&T~xrThslZoki4J3X}I9AxgtAe
zxpC6Zphj$ZV2KM>g^?wW>^a6jjfUo}^+93hK=*BbTn6{tK^>Q&74t+Xa*nqrnu%l_%9N=81cG~HT
zk63Um8!bdWRSz;d=HBG`)a)DPF;D
zdIfkbaxxeG$+Ze49|3+e`#(GT>GmCc#w7_mtwyc-N48aqN~u(24cmQn^Uu}wgZcD^W|M{c3SDd<@~HULe&X2SrqMPq6MoLvDcJTsh5GmB{^wtI9K
zPTd@JGke5Y@nBnwXHqobvrAFIoKDq?G6TgEF@6m-N_u6{vSRx3Jp>PD>0od6s`?hm
z3_*l4Vom;nX@40};eR(D^}eiL>G)seG}I6J-yXa!GamhF=0$e)*RmyJ1i{LrF=&h%
z6UG$mb%V3y#kYdi`~;qZ#ABwxCTU@&>c~;7*lyD{9xDlv4Kh|Z0FfgqBpj6!EcQz<
zEo!5)@Y#(S_6E+KB{>G{HV$A%XdIN_2pXlRO_P_AfFocHV+d}%F)TqJ<|Ialg@wU}
zX&4w-7^#j1K@9U(`mh;s-G*|eucc>b{_oT%ExT5vQ46OnSL
z#p#Vw7_3w$PA1?9iq;=`eKZ0cg=M>s&LdeajJwQzLe+0RQro!Vw9suVx!|F7beXE6
z)|N}6_sbdW>s#3*`QXaZ`Px<<=9K1DEUd4=Ew~)>?22+2Cae-phQAcolM{~Jf
z%!(#Guy)<&`k*DRxmncN)!KSGUYq#k)g5=^*UsyqYj9%<=}=Y|;)aTijP#W^;twV~
z$$T15?)i+v*2c=xR-yxz-O^tZWhoiOT#`x(r#IuC)R{Hc;LE^-(X$6_EBz9=dRk8s
zFoBItd=CqdyT*?Ncg^2ZW=J$p0MJ}zzEGJTeJWZm76+z|_;x?*N!dE?&RToXcd@g+
zJL0>072a#%Uc@Ou9a>x1fAIeTtqjI!jA~rKEcQcsbn@4gxbaZz5^Ub=qeqK_SR)D!
zE@*5kkf7M3nHQ~StjGpjgbRRC{-DMa_H;;vQW=s|GCAOzN=1rV8pLxrhgo1lAlR;;
z4r26Ch>-;yh4PSGHh(--X+%KBMeje&hjL%?)o}
zz#2;Z`*0i+TT#I-?XwgAKC$qb-5S9=#1jK>6rCDOUqnej)B1g2F0B^Mf)GB-JvEpf
z$Y5*1b+OOGCZydF2|iAZlX_^yYL?EUY|y6U>{EsB2|5s%d(({*Njr2-9@?1+0A&VH
zMiWZ3fPmwc@rAnGIHQK-{-|~HOHKP@X1nug^H)so4c4D4|Le|i_d{+e_#Jm&_%E&-
zecgS7m3=*jJ-!jlDrfd%9?^{j`2aiQ2q+<&fuTJbpr}rq<9bAl1S^aql5lP2I!eUK
zGN%ytGNXK>i+=g|RiL;rY)hCy5!;7>BVk_0_sBuiV*Wt57u?v#Hk76ed@vBA3(n3{
z$f1~Sb!K}FYpAW=uuGISoZeP!G2Fgli@_kBPb;*dnDEsN4-su)tHZh22>76cnGPb+iZ4Exd=ia|$ZX-ZY>w<|nlh9v(FWC+`8#OMJY?PYxgObykRPD2AqT`>^rtGF#riPGB-=HUPL`r$5
zS2(4uayge=6Uo`NcUh5lxoC7l7v`QGgTaUN0n$~AT_NI6c;B@RWDGi?UAM2V)>4^P
z-^VX~PdqJiBuis;fxRiqZ$vl6?4c&HcO#j+cu^x?nf?f_J5^Eu-uo&(!5X=9O+E5bFc0)ibrXelS7#s{Y9ZkC>=DI
zgg7IwWnCU@+i<;?9ESmDZqyJBRVaM5wAAGYW48h>BfC^0M6C_w
zpEi68De>Bqm6K9{cdZ&$0fXegHE}AAevlki&a9C@@?p9|AZP$4Kp#Cn(Y+wANjC!s
z?F01iq|Ys$=f18*Mef)JI=xsl)2eoRVl%Lmp5uPsESy`egznc{ol!{nRVcEJ&~eF
z0hvkH`u$Jhp~i3g#0^p{2Pl3qd{8QpqZI$<`|aUh`+@7Dp8-~{47l2puLhmh(|CZ>u`-SMn;7!?^
z!p~yE``6i@bh0mQE#zL^S}=}dK6nzxHSL_mAoTsDag%Y2al*Jww2t`4**t_C!$XLF
z0K!0r_yMFVv8#qGxQ$+zxcH<5er^oTw&3&{T;|Y6IN(N<*XEwc2N@vFbRg`~81wB~
zd9FvFM&7|X!V_r*t!OkdM^S2)E1H-BO^R84*`E^@JO}f{g-(IB7{=*>Fhb^YqDyzA
zBpB*cN&LAEOWf=|Ae{2U`{B>1eKtoCS+^eKu65QP00xYV9VVQ)0gz(fe2BPHn8T>o
zcG~8T$z^CBLuhC2<{1)hf0xZWckkiI=mVo|kn=}-_ZZ%pVw>Ub?V+kCCJKE8Iu;XyYXh$&JJzJVN(9tv7+24EPp4mekSRe8qfDW7hQ;Trn3pGGOLk`r6
zbRy=P19U*!&~XBD6s}lWN}h?et#mbV26od^+FwJWjOF4=A-$_>VUviFyi{FFc=}Rt
z!l}mq5WvYHX;_g9&qFuBzzBdurz=lM{zHW6`yz18`WOKKMREKp9*fx(wH!dq4Mlq@
zg@_uox|Gno6FC(~P(d1qfv65aGkHP~L4AqeT+q#WGg=KyH0FfK!!akoX0+Tb-5DP=
z8wQl_x{R&vY#rT1cp=~$2^B-C4Ig=Nc^&;3601kSQpwVGk^<*>$oHfeJ3wq889zg<
z+aP;GZL7fq^6rOGawq1EfSTNciARI`G?8B1o`ez9wj(DtU+mbPdpeeE)T;S3|9*~1
zBD3MyVjH7LaAEvk2=W{9hXR!5GWj}A=W-HhsM4gnOyU9~*=)q>apMBd>Xz#A7Oz@c
zu5f-*!ZRwRQWwFY({q!z316D`rR`qauE3~MqeELbPTN(DG!H7_e2CmeYZPtpEJrq<1=@16OrWJV-Rwp}?s7ASo|(0UkOa)8v@^EgOk8=l`J{=q+o
zpN{;0s7^|Q1=K7BvXA(|lr`)JvwHb}xgGGsl3vO4@q$u{oM~3CG7q4?sY95mIN0v8
zy38)sWp_E~D6=U8g*39Ax-sq^kli-n1=Ue(SQy1YK?jRNLOg)xvf?8g@I`ptU}I)m
z4y}2BZ4qlAR2`II8-oxbu#0SpX|es$;=aTo)xHVgY5*I-rkiOHdsL)7_Fi^%IWbUt
zW+0~7iwHw&e~9~lQ9N$g&Vl$24P)w~@oNWyg#)!@tLuZA<>lhK#Y_TS6a-i1F>GFV
zz&HkT+bZ^>_tB5uhh0X|g!ZzU`7}O7Ib3qVc#*O$wl(mrPIQRz3{9$XUQWTnN1)ay
z@$17gVjsz>GaX2ZD1_|4V2?NmnzVfe)V^Rp{HR7hE4n4%ERqk+V#-KxwwE3Wecmc8
z9x{sqx+xfP7U@|lGcWJhfJQhoqbWt4DO4~w8!K)KZ9UX^PCpe3a!>a>}5|$LWC*uZ&f>@tPYss|j
za=W}Pfdf+v-O@
z)cToh_OAz8a$g;A^G^;aW752tgW9@{eq+EG0>=|miEqPL!iRFp@Q0IpjpNZV2q+Q5
zi0lRS6S?e&gfN(J%pGYSrN;JR(hE-nhSvhNhae{4q$i78!RIC4MiS5+kG1
zN>%eEiJsKqcfjg0_IDsPJb>9mWE_>~VF`{%FpAcL@$FrdxnImFp4HQ97|)hRZt2;B
zl}1mWVVvpdH;h}m1`tyX4pBo#W|*)uGeUUZUTJA&->6}n-9Jk7b{*cazn}5wyPf%E
zj@`!LmFhWX@!PK!&2ezceUnp!cijTIYdw62#Gi8$ckNd6pgh|izN?d^diP9O68Fr^
za&h#n$Z5apUK~m~9W(dIMHh5N?&_3;E+4sroCRTdy+`>l2Zu&MDsC{28s0+hsF8Vy
zTYlylhY5olPn
z-+XlJhT|uLgZ&5k4~>nDP24;)SH5$8Zu0KQduHe6=0MBfjf)#@Xe9Az(Smy&)b2rp
zpt(WZT9TO907#D3ZP&NLg2s=Md@#EDEznUE;N#Np5UDt;D~09_ixflAUT#uMw2a+olv&cwOo7BKXBzi)&gG$2B0N|nx$?K4*ThwT!
zQ1HUYlt&VVCL=41Oz8@6NY~H;k5{O4NeS+X(U+KTIC!bf`njC0H#Pgvqb83cB&BPD
z*ovcUe0>nb6PwNxy_eXVi1xI>OVgqlBOoUfL|Yq(XhRc?XIhMp;K?##HZf_};le-g
zW8DjhNF}rtwo(`z)AHB*E#L
zxIm~?14-PaqgjdGcWGk@oT^rJ?p#^hJfGF!y@G&%u6j}sXJGbSc-Bui8DaVa_jkd0
zua2{7GX+r5LTsjhD>hv6!?fJofsi(NUQ46sKDR8bu5H$|kh6~ch~dHx1Xb`<`n(M#
z-HwJ{%OQsNvQ4qlE1V8nIEmYar3QkFR+g5Khx!s-VK`gTNX+^bWot0i2<~w0v8B~Z
zo2aB`NJt-R)wX)9ad-8yzR!5qswqAjNX?im;PJ!L(Uq!mUcOddhdi7Nr5~qPs;zNE
zBa+&ng1+0*XuAY)-`0~aFZXRZIw31Topqi;*Io4JmulC>q#fOe1LJ(DmeZmBNYYM{
zO!@1MuFd1@h2@p4&0KO_s9ca23)3VxFz0K;lM;z+9MSKf$9G$fe#`c4S@m8wp4C7OyuN43a!%UxM+MK)x4tPT!1V>Om;fW0;j}Zb8&&
z&vyx{?OP%age341lHdx`pq`PA>@Kvz|95BvTpfWp$t~TB6Pfn26Mps>awru?p)?KxXQfp35H_un
z;?(9zKTG5kdT#Y7oRl~h4Mp}__BiRj`0s$<2Q%OVgh
zo;oYt`+u4{)7ZMww9cRP?z`=4JFydQiIb|-b)3bysZLkLsidk>Yih4B?-QseS|^Ger9nS+FYD;48m
zEkt{Hyh@C28<#Umfrl<(^$-XhlbpplQro8pM?M8=SG2ma$dQ^C4XHhmLql_B(0&5<
zDWuj?IeZw&lOh7@s%Gv>M&@N%7mw5bz&W_bCiJWe8RJb
z@6~F9{IH4pDXA^Fpk7*X!K6OOfx!v(aJ!%(;LoX=+Ob&Y`_ynIp$+ofh6R(l*vFfs
zhg|t*T~asEP1UR#&zL?Ff`+>VlvHqOT;WvTj{17yrtX8Hz8=|p^~0|QCsV&Yo4!mL
zsI73J-@#)=>^`~|Z=_G)LM1v0EZqS0C^PIr2Sd>Jo;Z~~4+^lNM`;h~TWlu^p!+QL
z3^M@h7LtO6`g;ttF#+5bP62CYdyPP)1QfC*0}DCL
z1Z~C4u0CWH>&@@A5Dg5w)?$4i8nYIeK|uDFZfN%cH+Zd{6JA4mF61jd01h
z&F5)YA^F6KrFISi$Dg@=wDP*GX_J4gPwlBAAN!R4FAvncE9-d!DqwL
zX9_cgUn!iae1c>Mp8`z$9mP*Z_3y71uv?VLGd_urYM-~CtAX=j*5E2YWtSjV7x8V)W
z1gVfvz##U;isMg%HVx31P}+ma#H4a=l6@^%$fSQhBJP2oPxmfCY
zp>l|a2dj19s-;G~G1{&*D&TL%N4ujV;q|b(lR?FT*`NjD_6UFDEBo1<(K*I?csSCEyuar+!B2_qn(x3(EK%)PJ
zXV$Ki&!s9rEnCAUv7Ju0#YZvlDWv*Y_;yBpnCf4W$uF(lxF`jotQC{D-QOpmOGJFYA9SGU(e2_dBAF(K{>aWX
zw9Q6<5kA<9_mo}$+k;_m{7Ga3WHbg|S#z2H6Je9z_GFp(!wA3&6Qa1S<@ogh$S|tu
zghYDOfaH^=siToJSY&UX1Vdvc+P-ILCKFfMgx6U~T~@cvvj*>U)wf_@X1;W0V%>o5
ztsfegv*EYuwg84DsLs)6Tw>OCj)oo3*Mq4ATu~w%w
z-r7AnNi4$jXuDOeO^q^yD|rq>KSnv4L%QNDqRF-n%3YFqv3tA?6HzQ5w>-b)Pa=f*yNr^9I%?%ik5f
zaC3blvGm%&Mq^VnP-m=uK_51OoHD&uC
zOD-N!q~`JoM{uScx?di}**J0~Kr;`Y0-S{%6RY<0c!CMN!<#IvJ^zRpHF!j5@uFx-
zcBGYn_39{Bh{sSVBk1h(qzqtgZ-@be_W-BoY;>fm6Flu9L6Pdlvvi9q3T_Ew1Z)28$XbO|Zb_B!$$
zccw1yLWv|}9Ck4oxw2*^jRlw)Uf%W|bET>os+_i+)}P*VjHCVoD}n_v@oO
zA0siS78ma=AL&P0g!fjCZRxpNH{Y|Tb7$sb=8b_(9BiPQ4>qt;4mN7mcjUTmJB)y>
zl16Ayq#SsEond)t2Q%G&;=&KtfHmrX?}m*@SAoLHaD30kdBx4N@QYezu(uxAj1!TG4%Or~K@f%yv1grs80{%v@KJ87@C*
z$_c)&7w8
zF?(4{7slQ=G2L{eO`{PVq{p;Pi$BU&0rW+dv%r*qtdb->W?CmLO?M|N6P6H-=>oy4
zn)JD6ZD1cE6V8azr45g1S+>lM4Zhh`WWeCD|7X_KoHV^FT=+O$trmaI|5))mgWvK?
z|BJ5n8M@jJMy2YHlaK5tqyOXAzY8_ud+Bl=e*_S38)z>BViBjoHr)=W27O`sjyIZh
zJQZmwb!^RRD0OU&`P_QyIFl6pYTKSyvz}MCE;s7BTv=VNMVFJwqt<9P>Yaw`aEVL`
zXfqX8t?Ol5vPNtp%jSgPe^O7Zx}In<=|870{?j|&gZo)6>1QTj{%iEKdWjq{Nkk2e
zyWP$ja6+)~Z#WgLI@g0z(YCA$s&iSIT%zyPxfDV4>sbe*wV`Zd^?yFP*od!xQ}Ijw
zkNBl`$;SNouu}WA@Q(v2Ka3n`e!@5rI_PYS(o;3N5=p|c9%+dLz>>6cEDKJG5IHQG
ztn^0PPme_03JBxFJXnROvsxj{9mxfT9i$d~YRKLIQ7lS_RVEg|A-1=obpYNf5rUAh
ze!;r!P#v^)If
zY+ss4WII73s+mCw=?xQ7Rm|Xw%e_AKYDBmC?yT(-j@6Jm)dgL3#R_3zR}I37v7--1
zTv0Q%XqKT~J_GZT(wZ_iAy-9Sb8m7fIF0=wd7Jw68!Xiqn|rFw>6u;fps
zPHe(>
zdWOCPHXCV~M3a&Ri5CXE5OWWF3QeDMbYep#vWB=;0=Nz1&$p5#+Y8S;@k;pir8|;R
z%C|N)u3fx$o;#S(v^#E-#Bvo*!b{f20tkYur9jC9hyzLJJ)=4o9?eU
z!`k0`$CtnO#HVik>^o2Y)zJfQz4z^w}jUO&Y
zG%4f)c}S!Lu`KZ60tQHpdZ>IXi?kv1F0o?aEYY60tYulGJ$|hzqgX@BLcLsw>!lU|
zH4S#MGii`f2eDyDLz}H)KH`{4;Cw~055)4s7T~*dMV2p}3)Y)9p+lTRIo8NwYNMIX
z&v}qmfX`iW+Hi<4!U8O{kZ~(9JGl7rM21`5nbN
z+#~e$>kOn+7Tn+Xl!~(MP_6>xNcB=nDOr67;E}u5MM53!Z6xw?S9A_HZ*N%5gKDd0
z@o{J&XW;o4=U!5{7Ah+vy}kW_x7*}ZD-}BjY7_Kx<{K#R^|kf4tA?tdYo22O%X8d?
zG%~4uv_z@kiFDA|BQpUN4WC-ZFJR4AmWQm$z9|2Yw=q7@(lVKSd{BU43e>o|Pzy+k
zN*RljQ1V=4a0XMSjuOCYdaSGqWMg)eP3=XVtOZ8EUnQxAu=n^8lfT8&*=lYu)>{z!
z&%S!@Ua=#9_e@Vz<^vLmfR~38Ywa5CaDBZ(cT%bgLt2+&`oqcvQ5=gKA#LC*+mv}A9Nzy+rS}m1{T2>1(=wW3VcpX3mIEB_D7~A&?A*6A3`lSq+pPIpLql
z33kO~SIRa}PFM&w)@#|?`!F~R85C-zu*(MyCQ3re(0a&?8?>=UgRcwgA(j9-oQeBIS;75;MM0&E}VCMzV_w2tOB>{$u%c;Wx{dD?e13sr_E%ljZuK5n_A*3#*3zX>Sqwup>AO
z#2iLfQ?)S$z#<+!!j~}S>66T>*Wt<&B^aCg=?fmTqo`QOmm<=HHLQmJv0G-*DU$|f
zvP@pB@iH7>qvbY1C!i(0R+)4qM@Kn2GR9(8mm(A66d9YK$P`3B-qJ29Wrq(+5i9ms
z4`v@0UD#oA5Jh`{ZN(4!d%Qw#9t&TwKGh@-2+vS_gpl7-b!OI&N(=iAvfQ_Sk>!bf
zO>cJZ^xXX3xxJH}aq_y$l9=>s^e-1};JP-S!oc=!6abEi1(9?C{NNb`seuGcbTDBF
zqQB57NYx5Bm2k}x*@k7Kp=DjM5hyM?Pm&NuD8yw(48jrc>*4MJ_Qi6er!^y+U5B;pte
zs&bQEbf=77rmCw66k2@zs=0o}-Ot9ww{PCO));I_@E;tM#l4#y)D~*OMFK0YY(PqH
zPXtTa@(NUBgN>|6t{!?)?u4U9awi-mZ{huQt{lr1Svi&!feS6YQXdM@Y&|QmO&?}7
zj*YY>b7s21*%7(e;B2dgffZ@c5%HN{dH$SAQz)o^A&NYl`i=URo}KD5_v1q4G*V#S76WGBTn>o1}u(fO`gpiQHz!lN6^%fT|i!`P98j3E-h7q=exk3!ezgU`XC_(-?FA|8LO6O@B|nZ9&_0;
z7|7%1PL^42xzsKlqxn%#TT#38ocWAxD`=OVHLtO4`R&qC^A^i~x6IZvob|xJsrM`~
zYf0Od=LKoom%6n>;*l%#1k2h6^#iv){``AZg_?yN8MgUo^gTS+lgGOj^D6^}blK&J
zcFVY1eE@G&|9CYx&bw$Gb8zgzK7dBgIYjngU!~o8)`7AI`^xRsQNv{)c@$LH>b$9W
z>H7enPA}#&z-U!W@)p>(V#VWUYX#a9ZMWbW5nmL$({Wjwfc8P$#|sFLRik51%~wOU
zU%u&VQlHFu5>W63A;~dByjw~|L|J}rhwt&%O_
z@5squYul-NCHa;yZEfK_H#n8!JI|zwoRb)%Yl?PC;Z2EtSH447=e3QyH*Z9;a1EKc
z%*R!>rJMyhjW2DnJN#~Ii^a61w}WzwTai&fI$MTF5|4}sIn7|Ls07pGC;_B}SFPgo
z)c(L2>sUO?uz~k!__BJ-LBdp(`HrN?;c%65msqf526u>`vatf#iP_Zbj9dxmlV)!x
z?qDU`Y7k2zmCE2E^Y>`Bcum)jrif5IG#fI@q2(O0i|F>VyKsAgg`Apc<
zzv)M!=!fF<_>+YnEfjyL_6w!b-;JIw{M^{Tul!8+jq10P>hZhAKV7Z=>|D3;-{!jB
zCDJ@z^sf*Ju*ZAId&GO*TlX$|U+aAofT#3Zs4!W&WRFhc#a6=}1Obg5nnnY-rbALZ
zYII?Yp_4PyXu|PhOAiUTrB@==W5uOc2;siYJ8de_UrJ9=9IY<;p{n$|Xy_NuS#u7lzc7(g08_^O9I-!`x#)L77
zyjQxw9{7EAV$yzJ+O-=gD)RbM(|VmJr>1Rle2;2AXv^*%tKnt$^VD8le|kp8muKf#
zK0Xg4iuc<50?W6iv}bdlmK))IC=s-HTZ`jbbQbq>WMWarUtc`H^2No2EGHLr_E#@H
z#PZ4TVP4$svqxC&Kf!hU#S<_R_=nGHxq6nX`A^vLx$p$*AL_9Tu6|^{7p{b>xFi;y
zr~2pssUf}S17E$w^6Uq-=Od44ee<~1uZ66~M^BPYGXCJBTK}47pJTcC0ge_%UJ|6Y
zu=|xK^)vPAYx?QEGVK=&ORr38nh*y4ty`}Q{
z3d_ptk00==^XH}m8qA?^SwAc1p488YH(%4wsW;?Tsa|;VL;Td{pPq)i>ri+`6kab<
zdF`S~}5NdEt%KLob}U(0%!d3uiApb>ZCWPhNQC@T-T%
zdoLgU(CW$FBTL8Tj?OV7DE_~wgu@28HQTagFgkzZSKzT`=FWHJ3ae&*WRokb+
zuAG~L+@zJvM^=eSFwZsd04j+gc63pR$vq8Sg1fxxq(nps9fkv9Xg|etgLWB;aa4Do
zZGzBB*JG{giQE~?$UGvmxb0)|b39~&0?c_BMsjCR9&)bq1bTVy7$jWT#W8d!Wu)DQ
z9x$oI?NKGL*0@teSk@M=V=}cHpP3#Q6N{cz3&1DJh{*`a(%mae5EQW&1^bt)p$Zhi
z5ZoLQV}nKK6kHj3t*D7R32g_w751xpF^&eVuaD;TaP_93E&+P7ri%_`$Mx(y!R-K~t%NF5?YW1s3UbF~$UlS;BS!Phfl
zilR|XaF1e~aMhZuqSN&Zye-F}2Hyk{jTVGS8~p^ITqG0{W~>-r#@&btQDb&j_AUd6
zHSKXYlH6NzRVH|M;Yv_ny>u5Uh=k`XC9_CbED``v%Ct6|95a6P=0`VfRBh>K*BZHX
zEa{#6rXyT?9|<)@ss_QZeqPzQTUfLE3)d2UVJu>|Z(woK;k
zq}T`p3XbNWoSyjr){7`h&DpeC2efP>Tef8?8c+8b%|XIs2HU~p(EcndAV*A=TqBr@
ze48@hL95}?1SZae46rYteYSDu=JmnGH*DO#SyI54GL8;A9d@L7yARn2oA%;a-=3M<)KuQ
z13o#0pV<>ao5Cs=Q-GU75A4nGODnj$aS1AqG#;UU7fSb|6Z`2@ZR#3*mB)sQ9@%Z;zlkM^86
z2Kq$;??GcRu~TMA;6B`4?epz|7o=DaTUR#g8@vQMj+>rK!qZ2{;dycd5U0>y
zpkzfP)ha9LTh~(xBHb)E(Ks2lMZlMpkqUDPu!F9rdjeVj4<1rf`@GrVl5h(A<@-^s
z%(CUEGzNJNTW}Sik2t_GZ-hz3u>(n-VnYDs;!ei&@uXTM`0xh8zGskDyyrt0cygW`qg=isg+9M
z%xbONh^yuPM07I#Ak)0e!~jSFIN2iE`0&7XA0$RGXXwBZmHx6i(*~iQH=b=$P7tB#gkxu6mf*v2%iyYL%sy8
zgHF9KRL?~QaX!0
z2%B~*Ity`$vpn5Of4^A=4eqMVMKcU$n+J@UfrrV}kaz&B1|G2A=^r$2-!m
z(G?%U#6>hDA?;RI#obNWr8qM*Huq#79P*Hvh^G*yg*Wvu21Gl~4J%aXkiBCuK781W
z3p-u#P>rvFNi}Xn{YQ)gVhQUEU(xUP=&tI7A^lB^5cytAfq;)}y;wT%TX^YDL~hhs
z5jjgsW?D)`kXwi-!rm1(VVOADq(52+Q+G6&(P7z-I6s(8H$>+@r;V^!ZXXZk-D-(d
z>B|DJvAWN#R#}yHZMBfvWieeRRf{xj+g~0Hq;K1LWi*h!ZR^lTqIG)@0gAE?gMo$L
zB}T==pkhS%-(SXe;0K4W51m;Nv~UHB9rn(q!rYd;!(P5qN{KLDa8G(f!R
zLUv~O88gLIghK?uFY_%6(#R;B3b%g?^bO%(;+Hgn0}zMi9(O=x91^&s-M=P)mjWsZ
zhm-%BxTj->WpGPam4o{-WeM|A0phYra*Xx!XG?4M))99uZL}_3-GGGb8$NpNCP~6U
zk4$defs57U_DG~vq`CrO{r5I*H;}k4UQ$LZOBvN1Y#NFs@s&EhvLwMqPT**RSrMXe
zaOshB)sAqV?*q)TgJm?`opV#7tCbjaA$T+bZ7@YlJ{ZH?HK2
z<}@eef^p5sT0;r7zyQRfTUwAEo!)Ne&P^)^mP*?X0v-Ser2xBeWgzC={kX*QyJ$9J
zTicUecl`b~W&6_xvcoU0_K%p&YWzxbp@W4O+9|62RopS&H

literal 0
HcmV?d00001

diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000003 b/crates/sui-framework-snapshot/bytecode_snapshot/53/0x0000000000000000000000000000000000000000000000000000000000000003
new file mode 100644
index 0000000000000000000000000000000000000000..f5e57b11051a4720bd5f640d5007c4da8d763695
GIT binary patch
literal 41861
zcmeIbd2}6Fe&1JhYkBpm>Miv)>>xmZ1Xplpzb2b(?ptr{CY!xC8U!9mG(mua2e6y7
zbNO?c9j=A5qH~Rm;&V~QPzMcE~j$QZz$2Cf(Z|2Q{VTFcaE5kH0hN*1BGL>Nz
zc{C~tlC^BZ@C?T=-JETDX2uT;735trv_day*r6Mmu7|I~#Z*qlBa|Yb!Ik2Ovu!%2
zcDHac-K?RqhNI4(%3gl+E*e_g_F~_tLwTBPOmKASX`QWZ)0idP8w}$dUkfH(QK-@S!<#3Mw!26
z>=U>4V@KS@G|#D->DyD&3$s(pOVbO@YmFs$@#^c1ndQRmm8HDo}RGsRgDf9a#S+0yDy|WQ11UsvDslkZ9cuY-LHZj^t1&(MwIbXU>R>
zvhjtXj!&SXD*LT-zp3nhqc%EUvHqdT{B!3Ydfs>Puel#9{GsXpQSn6h`RF@A?soj<^`2k1+`tBQfJjUb>7IxN0A}B&@inG8Cgb1kG4(2bX3N0e4COeBSTd(
zxMs6_G+X7PIV2T6Y&(YWluP`_EbeN2D8|D+q#i&X5^^!bBgk=A7IG$EFpRy$$S_V6
zxjQaoEMGE=Q6Z0(N%UBma1#~CNENpOwI0LRCDC>Z>CN{V#_2xp_6ZrU5oDmByFnov
zvILH5S;H*u-b5YxC$rF@eY;G{+_<~M{U%MfWjAntbQe@@*}>Sb)!1m*o3|ABoFCme
z3Vm{1?w`(b?^K8Rj)ylzrsr%mhK)>aTUKT4OmY7Kxs>*oD>`&qTq<
z9+}u<>>u1**g3LeWS6;ZWY6ICk&T6k!gyg*;ea((7%l7@+&jpK;WJ#=8P5nD)AKC-
zthg|$xcF&T?s!yI{E&t<6n7GaizHxKmbh4Yq!P*i<(j-$Ptx=8QzU{j|0PAnDLQ13
zRhC>C*7&o`_*uJgn>Dhg>1E8oGHF)Nlk&)oO;ThLKQY$vNl5WEiEpI<y2j^u&hhZp3h!dp1#?by|gkH$lct+bqVTRp1wNY
z=pL`D(=*F+cVwJnw3C2Sw+UHHT*+jraeHy*hBZAqYh9%fSK~ssR~MI-7T@TdxzU)p
zIh8mvRNk3hnwwr&ZhA6CPR}hgduAK!=1^+6xAJgj8}p6jMq!p5n{&%kON}?Cmu8!e
zEP$}aiI}%
zy}cAyvQh1Pn3`UW8&85Z7jHG}*B9p&3PNOXenbQNQ1T+e}I6
zD@iINHJDwRej}IqNf{fJuBW8NL*0&P%*3}p^<7?Ema5WnX^4z;fvLIKNMAb}vDD#`
zy!6oyr>MU=?)LP2_4d-@3^V#vnzt_e@Vc(8(u}X`-PCh>THVbZH~H+SPX-!lChg@c%SX80dcs;cxIbE1cw>nLOFQ{>7ZEHQ9F`O-jhkbl)En<9&Y&s>XluwZjsIyX434)w*MP)j!Kiv$8xErimLymY
zA}o)|H*rf7v}77i-2B#E(7I#F*FVe4weIq*J7!V+v%F&Kj_EpaW44WdDj4=MA)~WZ
z5pu?QM34OYt=@S0n6&m-JFPy}#7dpE_E}2VMA+-O$E|}pq%5NbO1{C$$MlV8cipVF
z*G6@fR?rCAt}VCLO<+V@OYu5vY-irATdci|$tW7Jv#h)fnY1#&gwHM@`HkBZr$6y1
zO$1i7oA7lzP=Q%eq3z3>D`1^w6pSh>Fm}y=v=4;H%nC6u_z~>GM4s(j+8#=^AlnMkOw4K6Z(Q
zNuVP+{SH_Y7{+!InB>LQLMQJ~vY{~JXMA(BT?#UR*%R7MrBw*l-15p@nrll)O=tzT
zo>9KE5mlkGX0)Nsdz_4lw(sPn#S0VqEsfBTdgVFd4HUApo~HtdS4_NJhaIGu30daX
zvjp+0yafDh*7Z(B<Agc
zJ21((6sXDQp?at)xH`Ot$-Eg=?WBe|YDfoDx`RmyN;*=N0+#yXw58XM+7T5e5BZkZ
z4>^1`d`V_jwnnN(=p8%xUd(9Fro+Tt@Y$&S6Cjr1!as8l*>+
zBKm$&7c1V;#YG9sab5Ny2{J}`!gj|RwX-@XuDK3Zy$$4RqvBG%uyP6EQ76}@JHATTWp?8<8k8&<6j@?*pZH^(R0?^AK3P9Ia{3n+WC~7`4`#$
zx$OPH&};5@hX1bV|LKOWo8kXA@@E6N|K*WK3g0>68=o}IirHgcFy~ZN)zn7zq_3;@
zs3rAr)3|PY+BEVEVLAR}XyEfQvl%uyvQM?SbJ(l8davp+{AAgu2EH=FFhdmn*wg0N
z-{uQUs&(139+cs{U-qm;Ate{`Jo_c%g$#EuXPGQt3b=bs$cqwWO309GVK3z%dKD~w&lx)aaqWId3;RBMIm1>g54C7fL2ZVgl6nZpYWwR^fxRBFA
zPUdUujDdG@rA$hP;kkXa#%LOyQ_ot7d#E_Y7|*({__$Wwj&hH)c5U>Ms6
znbda<$;h%}Sm>b*#QDGoZ0KL%4^oVPf)ahstQPHd!C^`1Hb9Y1>zI(dr1
zS-Uko>ul!!>OrWzY1@S19Ne+fa6fDA;RDW$9CS>}+j?Ta^!(=@a?CIo-P>yfukMYE
z@ZpWyja)S87`Xuf*(nU5SXE^WLt@!am`54`9-fB1#t`zQ8q+&8gr1kN@#4lO&Ah`LssDK{|3d!BRsLnz=@(nxX|VK4&-MbghX
zM=jwu;*%!;)a72g>c^t&`QvA~5l^=9{DfU8Y)O|tn3ulNyLEYF0VYo#d*^t|@8w`x
z$gO4q=zX}bFXP>POeJj!As1h`2~g6|$rNm1J>Xe$(wgcV))G(B@+gYFXyVC=f`2+D
zZI$vD;yO?bY5^MqE^8?H!-}8?1vnj+m#1Nn0%>KmeqaMD>&9qg(*?K
z6z`j!i8pYk?=%*c-Al`C8LziF71d`KlI>MzFzeZ+`RtXHT^zOUo=CRq>+_nulpnD^
z>!W{q_VpDul6nWGH<{O`WrsgE({N+ff-~KmnVak6hFDi;nh8gwFtd2;)?BkGTn*t=
z_$@w1<6f+g)eMhn$^eOrkZjggk8cmx~J<&x1ZjquFEb-86#e+^b6Cs8o>gr8}{+S`!8_+#^Tb=^tqBg
z!@a-RxI1s?d0
zmRGA)YaNaq73)kUty5Cx4c#$x^*gKEnd0re2sh%U>P(UDdTV;=Zt6AMks{ob#cNai
zhsoBYh3Tjx-QLTKGq8U;b1ZfQ(4Dfc!$Hc2*d{4OXI6<%XG)!1u41>mV{SHKdj%bp
z`g1V0Qts7*8B>K-%~Wi$PZFNa`uwVQ#gGbUXAv{W=Tcs$%_Zrz4ZT_@wU(_ln6kBK
z?{th>o=U#lfz%WJ(CW@v?euH+&eXNVFVgQf7Y{l~GbC)XA)P9sG?D5xR;S<7?c2(s
zDDHO_mt)r08;vE+ZMz3sO*7FNNw#ZwYIwjt^^5dl!P0lj{Bs1>+$dkj4??$G~0S)<#yayt!7*OvEMU5{Mihy@$dLL
z)~3FyN3R#4tJ`f@ll-dB`Ck5U=}L)r$J|s*oLZAbkT}TDKAPUQ2g+6Lk(Rh)fJsBd
zSq`mDqN7FD$zWBJtQ(@MP1Y$wccY|@)=|c;p)PHejv>He7>Jk%<4>nGE3I*vVkOb$
z_@*%yTV1|Gbi7889CL&pAWjZDKgE1^y~Ne|e1J
z*;WY}t-EWjyFX5N(3CW(jpcol9lZXj+D+$*uMYU?i|iJj^%XqeVb9&>g_pf>pXWa2
zxfeb63+xI`vU2v-2~8i>^o*uQpq_h7)8m?+)^v>Rl=Am@Y=o`zUUsu}-7EB2r>sY;
z!xnx@IZt}oPnpg&XVfZ-d@+5Tv6|M?)+?5T-5Jo{5mS9?!`K$0(<*!yZ!yf*6`RnIzAjpM-K|bgUhJxW>
zLogDI1{;I1pb!*;C@2NxpcYhuYS0t(2K~W6FqrVLw|vsfXOC~qM4Rj&@9Uee=;X3w
zT(qnCAa;qIo-D

<#%ab}2cd*{~Fp?5%kxb}2jCvtc{4+KWW!2Ov5(|4 zu}jr?G#gffs(m)^#V$4Hd^W5FHT!YrVo)$M*$F?NDQ>c#bzYE1Z^F-IN@Mn`&Q*CV zz(-^w3eydqkrO=;JsY^1W};UDkH4&b@-+=K4TbuJ=n5P4o_tSqo+ilAP=)Am&1-i+ zJrsmBHKjS;t;biD&AW1PFstCixB2Eq!LDkS_O3&4vxR}*W_pdoBNvWsA_K4{qnF(D zV}m(NDpGpKx1t-usxKPRH0U8*qidQc=G!sHS@^koV2-)POhqb7I)PnMbt`Z+yS#Uo zuhULG2Y??LCzs?KPOMX`sx#0omM%q$KL_9X2K-Z)(yd|ywn!tKs>;v;b%Y$zP1ts3 z^m4x7V6!ht=#=34 z3A5eF!^RG!xzt&akU_@X`-;OK2v%4&@d-&4f=LvT)4FK;pYa zA4YlWA<(Sw#3$68?&Kk-8Pmx_UUR0Chl1*BCs5SP>BJ|}-09?@qz2o;%4(?nP*KC} zhpGbRl9sKeM%oWO3V2KE)2raer4M~-to_ih#@i1A3Sf<)8)s0#or_~2te8mejc8tN z>3rClM2NPiZK?ZEMQxW?;^1tA0wJkJKGPlYBGI*Wxp%EM{KfN?lnw`0i&Vz zq+UkdReO0j`4wSqO9%GNq#x&mD^Gvo(TiO@5k>&c8uY@PvswFuu}_FkF38#2y|C92 zQHu+kUZ<49r#I-e4|!pqb4vRZW1k{EeLP&}+UZlq zXCN4`uY2L3^B(O}j^l{WU@&Ok@xmeJZ4rFA#l%aJ8w!T(kHHojc0L>X#jz^&43pTf z{Uy9C=WDT7RTsR9mlas{H}JBZ@5Wxe+N-yYQ()V_ftTa_PVCjMz54NT0>}PO@N%8M z-|01g7cw*Zhj?Y2e;j)a=vd;F2{QIS#mjU4S*MpI=mnnrFYwAb|0?#13m?|AVK&Ix z{~KPu^KW9WxbQi={J^*WJzjzHVG*FX#klarx*rBXV85fhFmyg2d&Pw>;S~m<{j+%G zov(L#mGR04dHY*<6`Ws^EsE4D{yVL=`>!?qlkS`;y zi`z~nkx)+zM9UyD6k+u(M(4q*Iw<2nDR1gENGes#G6(1-143B@z3QO{2Fg~MlSwIB zFQr$=$`u*x!w(1&RMjB~Qd=(-7B6+yAf!}5idS@_^Xjk!Mi|{SL#1&GPFd!>v@SX( zZ!M1b$h*jeq_5?5 zWA?I)NN)SmASWfr>NNv$Y%Atal+r+Fx+4#y z?q}~4xts<%CxJdsxhA6_(A}(=7gF=Qy(5*eHNq}4$psE9GAizN# zpq2#4rvYj@zz6}(=>R=RfI=FeM+X?KM>gvs^6st2Wht_?i5&=ldtc%nrS5$?;usO{ z>Hz&ofKnQuUk4Z`z-Qvx3?w1SgwS8)K-Kx23_R+5GJDs{(FJt@)bnG~JhB8c)Z+|7 z=X&$V=_@R8t>`M#kz8+y(7L^LwgoHecOr*mxgK3X=#7v#1G3c|Qt z)XMFez*D<;r=U--ExN#J8%xWcNLp^)UcPJHntoGIq{a8FEH16wnp(br##LDizYC{a>8WmbZ@hz3JKc^w$vOt6K{4frC|2DcVK%jE_E@Qq*LDKM<==O z4{>;LA`W4B0fK+|S>C@&;=NnW5q-04)liLrVN$c$GZ8;KkO2mg;X|1`?nl|khXcaG zdXf*&48b(z*kQAyWYfuv&2oG)a)FD`y%DBI3fZ?Vi#Ra!9{0oc4n52qOA&|$yIJMi zWA;9W1qoarKPt#}_CUrs(Cd3(T7U)xVU|GIzy%m)fsL~w3rttG#yV4VZ0(hX#s%nL z1eqQ_Ha?@lb|DyuC`5ad(C8^OX7>_{YWb#Q4KfBPy3|5`wa|1j3{tFZq&tjL?Wdhf8EZl@E*Sxfq`Em`M~;&-Pv^>} zC`<8@19j5p{yozEN`e7@=ICwUJZ)V(y zARB}=_6lvpmozHfK~!(HI6EYiHPMO*lF*b_)C4imey_4T#c{zo9KZR{=St@b17A8I zN?=egkYYGN0Cm90uBQt6q%r=7DLWP753}lLTCz#j*--xn-f!NB;hR`f4A=1f#t+F$= zi;jmNJp_UQOo~6|1VKztWJdceYC-q`EtJ1RU&B*vOhS7KC|*f12+x7tM)53rrLiP} z)yAwlgKEHXBO70)?(E4RDp_7yyz6MSvcdVq>DdmgwOiA7uOeZ;eSK+qwvkUgR~l2d zR+c+7&!Qv*IssGjB;Q~ldnSg;$ z=yAl2Sy<#DN@M@~Gaa4ipgOp0{hImPuKmw4pERBS$@@_@^TW~)d%e$Wf6e{Z+kfBm zzqj+VX83m||M^(%YtIx5zxIq{{IY4@G`|OGP>rg?YEIozKVzz|nCh#h`bATH!&JX% zs^8LUqi>tWcTD5gP2&gjUOHHTIu`kh_$z^Cvb(j*TuWvZm-SGFh5%%kQAU<=S+vaj zKs3-omQA@@M$aYr9#$Q?yB53cQySrO@GCVfbxCO zEP(P`r~uZxF5#YyfapE%LZ0h^?Cinq1$o@j%iUSQ;5|A3iuBkJJ|=CWz~V|U*RefaP(=!>^&(5ttL(B;pXm$|(EBBNaJzOPfDFg)}a zBj7vcV@HkL_URfuDEF{+N-ig-Uy{qYt1rvt(yS$y7e8U@Fw>tfKgr;0t+J#i~(Qe6eH{d!Mw7;$S~y^H|X+ z?vlsde~tcIJSdLG#qq+}qEWoER5OY%k3n7^d)qXMOW!cR$>q&2NZ7Z{=d(ufW2VIZ zxcMp@q0gBT^9$w}dHk$7cGM_-UAz21XmstZ%|`T1^R4$A(f7^wz27KJo;z=p_MSgt zlxAM(H_9KdibnYpCcUIgS&GIphn_ri<;XL~pE)sg^63*#p15@4(xE4hzj)+m@ksG_ z@!XZC4?T70>EjoVzk2f8$?20cqg==oS?`D&yN_cB+6ZoI7=cp$+V{7kcOx+0xJxa=Ls&5EaOMZ zW78#@s*04w4Zuw5JA#PbH%@qowuU65eVsV8k6cslwknR46@Q&-O(2>T?V{B^UD#Zv zR}+WM!U6r1R!NIXPI*)$lfvr)qU4gKFO49jkPTpkMXAL$ng6y$c#1ZV)?qOiK9n9V^dwB5OJT0D1xS^H=tXkOpT;bNkqWDt-gzk4rLporePvH;EnjKOw3prwGBVL#n)kGp z=BGuCSr{}LVcd5Q_bYo#EuRZ0>gvGdmeb>n={pVWwm!BvY=ykkSYER&aH+%-)3@b< zcMFHyA1f4hYy+laL}#NJt@dhK_}vGhoSUA#BTC{iKy~vp5YMG$^psl~w*n;+jqgSq zz}qaLsJt}SyxA^6vlHE%Ae;SI9V8POf@XqqXltqVu1vc?C;_O`AA=Dj|AyC2&k z(&|8|8%qs&LoI}4x+M>)bQxZ#{_KZq#ZCNkFvXAA|rO5Eyv7AricDLjd6@)CW;G{^1{zGX`Wbl|E2Pe#KeYYwDdEhmh3 z+@4-qURi3ahRSDeuQYGyQm&DM^wae_2Hob$(j8Pskd`brTwT=0TAY0gF3)`1?nxU` zxO|sudtm8J{o`cY5jWn;qaF8t;Qf0Tvq*sXYveq36H8heXCF1=saW@$sd*;U*v>^P z3F?B|-xp0^O*@qCNw?r6GNm^Mnh1JCC+M08tkNKHpIZ&QzX#ZUsENd?Q_LjeOl$oU z8_USH=9PXH8}oN%HL(tlnEX}1~+uZD6 z+oxmUmNZ32YMsromW3Px&0!?ZFc{p{*S6g60r+!Y&ro;i_P2kk62g13r(+L=*a6uC zJZQU^iW1W(|FK#vNx|qoTu7KKh}N^eU|Rj`0O#2>dX-zg^+jPeusMB3U%Z}Ql4n>8 z8`v~D))BN}m4C?k>!$NT>$9e{*}83g$+X_%Md0R~pJ$J)g0}Au)(OCdSqA{Xj!7)L zbw34<6k}-nVBPORwh4bfwDZRCBcat6Ns08y8nZVz#k@$Jj)a&V^xfz!VAO9TSX(93 z43I7%o~$ci$Uq(HK)&iW0A4dXg$=n(E(2uvQ|wi>6yeNqqzGVmYa=#*CAsSxK|BWM zT=0J-ZMs5?LSzK!`?jee!^p?#?ufn70U4|9Lj>aahP}htn>d8nz9@i{rHD4=1D>E` zBgRzG$1xnC#S<3}2=wcfc9K}mC`tkv_(cMkxT|~7I|vK&7RmQ(V6gatmbRj|M1okL zY3f-R^BP4Ky@#xjF(YR-B_H&UY1^lck?Sjhf-dr|>Mra=L$Oy}Xmc_5aa%-hlq zBk`SXhmCPNY;v|r3>v|vAUhpk-ntZa^dXA7*?!15EH1v7_y8P<-3<{eSU_}&yopFG zH`o-Zzt$m(5jb%M`6vOO9>en$sZSA^Xf#LIB5=0VL7{=)0Qn9EVkrFXbDVN z0B)A-kZzwUYJ54U4plE??9GUI#O90O*<Vg;V*3Gg#e2oM+BSo z*szDZuv_)0f(R3_Uo=2J5TGj(>v}0|eGyAZwxGg6;CzC2BaKa=KcL~^M}6JaS}H|m z8>rX&H3od@rtg9CYt_FN=AuuVApjy;sKnc=7kmYY_Jx(O%p35nO0+iwy;U^w`RJig zOwq_4Y8Ux(z7p*T!!QD{soNM;i2}+J@N+`z84*kXE9?^ zFr+M#zGw;P0JIG$1B(iB(GHO(6B^9ANNM2>qYoY-?uB)}i@2^}ob(4|M1m1BjMrWl zPrg{}$F#oLaeD@YyoT!N!LbKlLiriK-khJ4Pbnm~51AAbtmI~U3*MQ0Sg+W;l!Dw< zO%nzaNQTY!b1lzfiKmzcg2Ba5rhhfxs|Hx*aGkRfAP8GN^`6$PAaH$aTxUQ@>b)Yx zMu2T+eJ9%HNWQT%;Di7GZQ_iOO?nfyTEsNeH36eaZQHVbEizYQc2!UfBw?OB5;a%J zumv8V?b=*_M4(#a?8_K;>_$=nj61d3jt?Oj?+OHy@eZ>Cypm;J#D~p#-ziidT9v}; z5U@NDU1q(%6Efn`y`oQI$EW>H7y=N>kJ*QuJ$z9EVOHQ_0t<0L0XW*yj-`S5v85f0 zGV?u}(KxS3BmFyEKB)2j9S%qo#qdst%Uc@v54(_W473cwKrvYaHW%!kO&2c$ZLP@X zMu@=5sAv;a0eH)|g}Z!QlLDZPR)EP@WHFp&u(-?3lzOFZc!q`+x?O z&M{1TicX5W&<)yL&oy4hs+yYbTC1wl zl~#S|-K8a#eeO*92)x3!Ewa#x@r=GR24E!=BTgrdiiM-j$)eBMAjK4+!$i(ybRIob zT!VSh0Z>QUK!11xEV|es<0UYwgz2nEY>U~3rUIRFM2%3OH+M?M<0TA=sVssPbB;_% zx-~5V;mtw=3tDd8#d{>@;?0+&=faJmH8G}bNr_%i$J-c{UP%X`5FZ1IB*wuu;&c?@ zip+*mf-G)htK2-?#wpetd_x`OPYj)PmjA>NwTZ|dc(_%5QGcRjqVT|c0|H1dbNX@_ z3LJkf4v|{*@$w$Q$3+QZ3v7OKl(@FNH|G&tMh6=+U_;WY(jGRcHC^6djz~Vod$g_0 z^JFBdFgmcT4geW+zKE#xBFILOjfnL>xQTZDs44JPDZP!}+9a#M&C~}3Iis13B23BA zn|dudMtPk)R^W!6jnXyB0+#=XskYL5A2wO&6r4z2u2UZ$vHJk+<8ZntOAWpgiwS}` zLDrA}#F!u$m-I})>VF#veAGPT+ud`zqnCMf16F=A;jui+uskD&3_YV_58@szFU^6{))JRcQnJ134xjabiY70e*3-TF5BfV0Ub&-(VjoviP$_ezZ=Ip<*}K8Q=k zeEwZuzM%Eh4$5(a8Ziv-l-5Hxuwd62vvZ8`(SmR06(2q1E%fJP>A*Wbbwp#`6vzs2 z!uu%l@glQUI*sd@51iTV7$2xk6e~=wXsjWfC5HZu+uK={x6y3aFC!U-1W_%*Q?Fmz z-nFwux<+^L^<+FrYS+-%m|S-Z)N{Gd2tZZdyH0evg4#t2Uo?kXC6j`X*xH3bzn(u# zCUUV|EsN%R;wFKm7}o@pzivVmX&1e|SX^&?v4_ZCGEcP&47;BP^HD zrv?~n9*~-0T5|uXVh*S$b3?n=F^R{DsDKl-BF|UMd08{}gf;RC`C}PQeigsMw|k%` zY};dGsb2OgWA=4Xr0~mej$t3x;>yx@d-86+Tt8^<*4KwB=t}hjg&tb$i0>Q-`g;8u z1uNoMly*dW8inW}I0a}cPM|mM=>(qDR}zTOgpPVp`FaI_Wwjq&sotPe6MZl6?D-%^ z#mcSEsfG%b=$Hm!kXHwICto#h#$Bs>sh*9E4Dy-t8UbdA=}t3K>Hvj`!YnJtSLNlM zJVLKAeOD?dFw|_l4)im7!1pJk+i@ofb6ybc#~qA4uY{qE!1a3lVKbkr7h3OY+`jCb zlW6P)=u$zBYB_grU~?#d2M=l*&KMkaF*(Xq~k6LflXf%dJfHGG)8!Q2NN^RxfES zt#6wsAoEQ+v`2f`WgK>7Orjy#>I|}cfLTL-r#0;ypYN%ot41W$FQ}lLBjKXNfhvaZ zdC(;}VSL#%ezyhM4e(cP-m2`dk9p3y^O-N2KQO)DSI7L1ScULQ*3I01uL0}U8N796FS_vIe=F2?X&_yPhZrQyNh0#^br zr0?4V7>q_Y5nX=+8qI+1O$pb!7g&rurdHI&N;Q^Pv9 z$ZiQK=9^o_oVB@VIOlCPxbVI2!RyY&JlDh!^kDq7s86GSPaG$))VL~u-k8Pu(=gf$ zNLpcKl(u0t0+ko)*rK46KynQ+Hp?tum&J%)LFpUmX~~VFmG8yR#Yrz5ZNR#K21!Xe zC5Bz$QDTgjX@Ljnh#23MUIY}|_@mCFP0*>RSsORmXKm-P3z;vATG2nSUUPqmulhf; zE8%}-|BjjagzFc+tUizNg}Vn}W%b}Q-GhLoxax`58N$`8!=+~O=S4iS;w zr+0VY(?x|S?!k0``~75ax!+GZ(EWaDU2c9FL%H(mJa!gYG=56C5G@39bjv>Q?8i1~ zWn596V}I8gz-0-cmwR^dd1UoIOjMxZa%2BmwiyhO*g=sUm+ItZC6+ss1hy)Dtu#k% zxOk|`2(>Frwnje#v$zE2{@B2_^N`Gs@i)b}6521xkq?*(Ny%+6?^WZwCp%E@yVdS_ z>+9yfb?l$PmiB*{`Q=RJ|IB}P*!$|v*W7=%^QQl&lmDq1eslL%OS#`WF zo;82RRD)_r4XbVHj5?1=+7VdIh;i;=5rlg+LAcj6!aZZNYs+AX7i4?ZHcBPiC`X}D2IXE6 zRQ-s2&ZF`<|8-N;I4%o2;fnCWE{USmvqGMimE)|C=X}VFkf#HzzCQzA-grSyQF*F} z+XsYPj36Hr@}i{jHM0c$s-{1$>9;lg1x-Jy>0i_I3l-d zZ)ulLY5H|dKc;Dag_2BE;b}c4WLd~AfzEH0yI(T}Pv2XGnf2>t4@{@uFspEw_V&OC z+Ajh23Ar!`o2I7$D0chW3)rTx zf7^Uc9{!ejS)P8+bh$V?uOEg!e3*N8(SsjzE%)TvC%EJ{oPQLc_-6Msw0?mU^M@Z7mnR>S`^G8U z3;oZ-ckX`)aEx~*M(Na(oM83*!;tAikgIa{)>DwTO`#vs^uwBd z#C!&qPwV^7X!==AKd0&EHT{C7U)1zVn*NNYKda+@S>OMhre6_S{$2C<38T_8Hf&V- z#`YPN{uf=NGVnBHBe?a-f&F!(a!|-a4?zwceblI&9NlPCPK)n_=^>-?^dq5BxwMxU zmv=*+-4D642lAY_y>O&pRBn#-8*mCXwwF5{Sqen{a`BZ=mzq!p zE>dK9vpY1Fn`UIG823)ywi=C`I_T>vLMZK`;mN+nF53tLanps7i@v9l0M+AL%o(RR zW)vf864>)on!Yd+rpRm@I3q#2ZHowg9=Vdh!=;-^Pt!Wzpx~(*b;`yKp7c@O=OuD# zj#|GL`4(v7*iN!+#3`*VoHP?i>dpnDeG*9VgV51ySCx8+nH=WS+OU)_t;}80=hWf7 z+&C|%)K%AUyRx?u2kQnv7h}hZ(@U6TTm~moTJ3OU@9OiS-aYL4U7(`{1>FWi-vn%JbGOj)oW2G84*c#KyUvxwt}{kiIb15) zV20YrbMlZHcOFbO2i<2JCc2;k(oHe2`T(sKiVB0l8w7HiZc{bjE7`gxTh`$<{$1PM zzhLldf@uvkrZs7UcL8f{VNFvYspbH9`phoyPJ{D}Ys-tYR(C^Sl>w|*8DwM|@yDwG z_*rHTw%To=+fC9Ih?d@w39sQNwMyN_cqhQ^tA(}uF3bf zu8%%Z?P~2QO+sDKQv=t3W%hefpMB76 z44vsSwfvu2Z*Oyf8V#L-TgBC6xJM%F|bvIES|^wDu#1*GeGJ@ZVz1S;wps)^|4VA@w4K5e2s@v#R=;%YuWlf_7QG* zrE{L~g!L<$^(9Ol?7qKbPHC>i%bLE5ardo~qO~TX`R*dxDwG_bu-2zXB59&d&q$)aWl78Rh@R^TFLbQ$q=1{tE0?K;>Lrg;2Ag5pL537SwZae(MToV55c80rTr*)Q>@oF`S(&mCx?vfESfIQ? zqZGlMz=J{7kmS|_lv)KvM23k2!gX-fHPF>qQv=*m1!?VLi9Ns`JBHALsD#9l{CD*G zg~{l2cj>5Mme5$k7whfVbAJx7he$t*SaSb>2Fc6$^*Dg}f@y?ANsfX9H2}qy3doYS zPJjhehLGaHNvHxW7n41%fNG8C_HlsQ_}G=rw%Ei?ldvnTlU(5jT7o~6%s!}5@CN{u z%VWmWS_a~mx3bY4s->bAG@!i|M0Eu5k{~Z>XuAuXN>U-t+bD@hnE*B70(6(GUPK6n z69`>#LKMt1D15OfRKOT6xHlWPdfW;aO8_4AK5c}&BU#|bc}W9P<=`+CDhLU}pDNjL zt8ii`1tfie^c9sDRdPYb>DqPpL<++`#<6W^n=Al42B=|f)W}b8{VsOd1rlcgW|M*< znL}*^%?I=X>Mp=JdlGzNW&|r{z_{w1aSsYb$&tUuCX<+24yd(7{3KGEQ5+ZJdBeyN ziHGU~*b|ErPwmONZ*SL`AXRsE;;*m+m9&`Xbx12duMyN;4cpMD=q{%jjfU=WnpHJP ztn-cB(s<~LVn9`1(z3JzSzN35JC1={_p@M33IS5n#NXIN>LL&6Yaa z0oeND5lxw3f=A4|awu$t(;HgjC?WhR`VX9hi@V$D9%#5OxY!UCkYX4;8}9IT1P5#3 zemZDA+>SC%J{%I9)~Tdqo9$%=woUpeSE+5r9`~L2(2Ng|Pd<7EE8K4(*T(R6xHZ3( z=-VjSRw>#31K|OG=m3`2cN_?Ydjs%qyV2&_y}w=vcLlqH3_|UoKb*|%@+ZYj;JJlv z(KtqqMdn?=RQB(h&fnIUT-wb?JBge|^1GnGSUJklCKXW;(rA(*z$|IlD87^`m@5=B z@`luWT*uv@{2vY0dT8_8@8SD6cT z1{(#y8(j)TZ>UfSWxy%}1LRVvUiM=4#?}8&#rD+y2_vH% z4BX*acK$@bmGSW>|E+TVdnE?AH>=IknPnU(a8^NjU#@8UwRW#nlvq~-Ph%;uu%;c| z_?!Zn&NTGmm0fhr3wdtA;VET50j$^o# zBRcEM9jpWD{m!_I^qIQ6Xv<-M=Ru(9tQL?)3i=2!9S4+PMi^JxzygmXi$-mGIU^?F z0GlXd(pWP7@rDkd#)ulZV%_p=kr?BTGFbrh~A_}{3 zP$Z+AHo{5992T6x!l0NN%;tb(L@^A5vkXww%%D%n;lThfKvWtzKppv_Z4?T?C;9|{ zu>;w@F)4tq?Lu}6*-a+KK_R(y;N&JkEXXNpmkSBzk6f!Pok5ZA@yh_h9 zMv53O94#{FZV>WZv1(WYTRD`&t_&d2v+bUJ56NZozWrRhO`9<3>OI5(s9tve*tn4^ zl_MipE?0rA?BS@~z8+4=9Wwij-1u&Wr3sGh$Zgro(aT#WAlpZH+`&O4xt(%1$tfhc zT^k|0MWM>52U}ZD1|Ss#`D* zIkEMYkx@)A#^KcX%7m7gCy8)4{~K|g;h3I^Jy!j4IpI`J8)7j zOu%tgGWDcMvSx~E{YeGP`ECL7yO%Mq5ht&f9b3`=F) zZavZ5YDwI^q;5Z!e63}8gf@$%kQfYGi0$08q+R0IVgvnUnL%llMr2DZInq63ZzHKh zvBhhOnQX1Ptt*^MWMe-)DOcD;+Jpp9!@RpexLq=`;Z9$r1^MTQ)j?)|lb@*hKMi9{dz+qr!*v zFs3euX%ijKh~;-@v~G4LEX>2OWkusA4jLUncY{ZEO%ii5I;5~q-tqj1ayp)2$~=l* zW;*~5CuO4nk}}PEGCGRE|8AEP3QZs}<*Ip(oUXyLX)@Z48i`L+w&TJeg4ZZP*&(J? zf!T;&YaARy{w%2^8MdK0wr(tx#0TBOu7oC|V{r2bn^cT)K7>7lE{D_DL%<vqhsQWD5r@`0p2`QrjdnXctu}T$oK<7e z@M$9+)W<1et=xzjCVEAjvABiXy)cM4;G?CQH)_Lx$A*VE)}82iw0Tq60Pd#n-C|F)oJ8R{ z37J6)gARWRR)h&#YAbA9c+;qZ#Jc859rniR7lX$CTT1uyY;F5h{~_!0P5bYedFPMJ z@2kvzus)gfKAwBc{g<4h`0sPCg#S(czq4}RFZCK5%pK-ARYHwvyE>vy7zd31vzi%z!|2s8_@AwDu&3XHssA9y zJ{67@isbt_YBLLQvMbWtCG98{u5~V2^D7H<*Yl)wi5pq77Y5`j6+pcb&3Wz;5HMhB9Ax{Z zsbG+aDHgs35+5hQ_AkqkGJ3a{HBq`3?5|5=sH6#Y8wB`?>3Olot2bt~vyFvDbFO*v z#`N4m8+qHCIA2K@B2P4yr#Ur#+I{M_U_sXag4b-e3YQmeHWrT0&o9ns1X-VcKGmUF zc4-E~xR}gqYpBVFtZgT`WsJD2(Y9UdqGkaht)wj0e#xg9B+rzM`&-&%?kzG)w^+S1 zQbE~DtU|8p4cBV(zYoIK1|93J7KU~Wpf)yVyB0;;wUb+GmUfkmR5oGR76{`WR!!GH zMAyT8-Vftx3znmhVldcPaa>okls<#Wm}eV`SyI7*c5exT4m3t#72+c3z&Dh+U%Uop z7rTF0fNsipFXGl(x+OWRL3*-poSC~lCwhrVxdzi+RC{xXwde#yydG|EmG)qlW?@gf z14|VeHHcU`&em>sIreN0yN+F&j&VO*m3o(M;=RFv8V`tJXxRz2cd@eL3iwN_`d|d# zdRweEgybg#jdWu}-UV7CIcP24z0Qu>yO`uH|ApWy)?4nPi;Hx&*H@#y+U2XG&ahRr z_V{YIueSQ?g0HstY9~TiU!7<0SK(f?GzU4}{$Y#`K9t*py~5MhS&qC%EwYYTItF%S zae|ulh>X-snFgl-`_5z(wB;k5PL3r(y{@nU7Pw&z=~WH$gmQR&&oQxlrhnmJ-a5`1 zVy&30P6D4(uAavVL~tUg067=}mrw+eFbpE04DF6aYbPzZ*B803(u zg&+{}00g37h=ej2L@0&>`N8}^R36di%~K|GA~zTeoB~xVb^1n7P3S zOIUKc8Vge)N{A)I7Q)%z3dtlv^T?xmdB}*1CnPJ*p`5=O3t2NDrAf@LE))2v#ysFZ`q1SE$x;g~@(GlclVj!##MO6)zbz7|CofZ=oj>@m8L z&pl!hCTH^u=LE$+L@usAjBXT5Ym=OMw#qP?nHXBbIEyH3#=oerj*S*N0&4)&Y*@62 ZfizyVoN2~tCSB5{(N|xkg7^EW{~yrTbHD%q literal 0 HcmV?d00001 diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/53/0x000000000000000000000000000000000000000000000000000000000000000b b/crates/sui-framework-snapshot/bytecode_snapshot/53/0x000000000000000000000000000000000000000000000000000000000000000b new file mode 100644 index 0000000000000000000000000000000000000000..7a2443d5f54132e627ef68943f13b9a7ad506532 GIT binary patch literal 19848 zcmdsfX^wbFNA>hE_e{?W(711aMGz!`0YDNYK!P}U?A2`a6oFpMOb@$z zNMdct>y<5Qy|$&bWvwMy@@l=7y_WvS4u^lOf5;9;C=~MgmmS(z|8O`I;q?^`9})H{ z9P;tbqI~;DHGP5#Yo|VUY-+MWX?fLWdzX*SA_TT$9r~=Lw#o`@n@cUf; zo;aocNchb_G6&hy_ zlXrAkl6U3!3BkFWo6O~M)m&+6c4lg>Jhi;Eyt24&YJYvHzA`sc$<=ZzD?!mOE-g)+ zU0DhOKj5}zTyRS|n&Hi5x?uZ0e5MeiZ6t9=7rADFC_JQC2;eF5;hV6yM&(TEoYF#T zZkwVwh45&bdx9&33tZ>m;W2dxZEJy|T$i~V`Ajan=jokmC55H6E}&*maFAF6RGM3k z9}1!|`KUrFS#q7{X#&?Sa-kgVAe&I?cO7Kx!c(c$jJyMU+VVa z&izf3>sEZf(;xI&gHCr-T)UEcJ^skVU;QxN9Jp`X`(oT4pd$N?Euye*4|<)=`_;#? z8gl;?nljy?SXyIjDftj-P@FH z^wVym8H3nai`$)z)_N)RLAyTaY^`_Vo{gyPS{$s!=z8~2v)|o_WxUZDsCZ**@JPkf zdGGyRccXdl(IDJxg=*GZo{Yr&v9K<$*i{zzj^ZT8=fd)^?K z6rC89>HKg8y+=(9mpAyh*-mDOYX)Nz)5O|7cSdZtXSU63X}0=(jO(y(rmKbRWX?3x zt~ejYZ5qhnqgH2tA#3)!-HkoZ4Q%6|kdD1~&mXpjjKtC+CABmT2=lWv_U+^+JTI~`Hr^dEyezOKkJI32v(T#ib9o$fbWWOIUD_(}vEg8g6^%#)PTmRgp%+ev zVW9FNTnJ=dhBLmZ%Q>~2Qu2o9_`9c}F8jqCk_(*q4Dzb${ z#q*~J*wO6zY`PW8r)hL^+>@6D1~W6G@GXM3hI31up0?msDUH=ZmN) z=mQ=@vx+u`E2J@qO43y*2Yf)o6JwnysVc=<4PQnRfkHtlucC5bdBV2}qT+L3l&q+N z(}J;cMT{}`Sy7?fY9R6=s!3nvP$=r1#5cosFBodaCl+jy{j$jT8t@sI7V~P+a+Wvs z*ZHFTTf7wfV}1_Qk|u`b(~8`$XvaooJO-fcfz z$Mzq@8*%S`yxD%#>~7^Yu+w6HFxyjKnargfi_xsXi8LzNeVgkY6iU_Z@$=D3%vXW= z&Mm>gJDB$3fTL(+6b>bs0G31&ummwfNWzjx0!pxN+S%avoJk?2rB~&vLR~-PeE5B? z|GBtm|C}}J{ifvvf8Y9tBKPmWTL~V5fx|+ektvXqBgZtsp^zCjU*HpXF+cS=U z_JdYuv)Ng5vp`?dR*1;HPv=sHcKYt77Y`mZ+uQv?cf+UP1_(BB8d10(Z*|u@Etd|S z9@UV?QIV8xUPI&Jpcp-dFK66wZ%U;P->WpJI zgiEz8I>=VS<1o082#l-X3MX+XMmpTM04fc1S#QzG2m2rqkL${dllRF&i6}<6z>0W`&l} zGQ}>@F1DW*&OWRuR>u-!m%+EQX%}>pkeyh~hck};WoP*{Oef|$bIts(RdId9jHdUq0`JCg_< zoSJ6r#uW12nwnwk^{H7LO>;S=N6`!iWWkqo?Vz_>ihx{o?F<@)GG%u zBTt7HN~gjL(--uGnG3ULLbIu8!8K$WNEC{s7Y$w?(xh+%&J}_GmW9&*(uwdq|vWY@fr97M$(Z?DCV{Hxh<^~Top%~r1;CneoUS=qtk9}bhkGLc57=Z-dszBktc8J*1dK=KRjN| zNjf)rHM?mGduS#S#2_|847T(Snw#4jqeJ0I$Ms?&;850i_)$h?&i-cFw6utNO7=KMkQKDFlOoM-7=(;u2g6a?(VDH+c0UexM3HDv z-Vw9CX~?D^UiMmTBbV(QiDAlU2)2?hKbz&*QQ+>x9X(GIr?Z@ocYS78(s-ZCMwWx{ zgp+#>LX{ElG)`(GYq|&|GM$BiS7wx)bf|;WH}hvFTUN-DK8$;PunBv}g-&Spg6Ojqh&7@p|)Kx4Z6}5Tvi>z1T^@QDA%$uMnRQn3t$9Oi15*aXapONWzz4 zXezz^g^B`DLq;ALn+ry zVmoX7G~IB+{c>8;j_ON0B26Q_GzwF?I0|A4pi@uavR59TYuN`h@QA5=c@Ltbj?UVX z*!6mvZ+x~6OE)v|@Lm+VzWBktXm@)eQv^5x`Dq;A zA{3uNP6+rH#3gYU$GEsIPFaqSC-@Cd+`{?#x(9qg4GTO2W(<`q?k5hn9G(lToE4rA zB-|*lO<0+*1NUG6(K$TiTj5#43nB(tegX2nFCjCNq%KM{9Dt)s5P8|9&@j)`IdI9! zC-D}N`$eIZ`&#jFJ~CsDUDuH{)L*^(@(k|P_A7dZ63B2PI6qBp}9*kHHk zfRFQKc_=3++m+C_hgDYtTg~Orwkz7VPVyR<@v<+6J$P0C?AT9jkbqRtL;3Rc=tP9R)2MppVk?r$W~*x;7cK8Wr1S0}PGpF^&{i84{lk-9uRN|Nez#2v58^P@OR zT}RxBy1X=s6Y5pp2@luhOX?Lzjg<{pfuIC}4+t^{Y~L0QG>X&2DN z?Sxyv6XGcmh6x-%ivwusoXoKZ2(UPamt(WT)pGJ8b_0l7wA)T9*B2*s4ZA-JqcZ?G z0J3`GcokbIW)ofo#B;(Lah4DqM-nB0i4vMJ1ySE-He`Ch7X*@iqmV%fnCeAQ+;5%x zHkaS$i|R-Gx482g)~_o4JNiBQJMNPAyKW=+FYXUy?w{p@!uRunEi#Xt;w$_d5S^+x z%Oqd{Qgi~4g$fd&9NJ+KPNRfoj+5$0r|F2R6AI@`LjBGFX<&IGgT9RB1+-%mVv=FX z!>N!nH8;=r0SNh=Bz=CE;*OAW6pkp=aLS2ga;;(oOTbzvqhQ&XMOYm}$#z(U!0hCF zg~QD$0d9d;^8@lG!xDM(MLPJL)BXg`%qedYD$SYPbZ*w0;3ZzHhSi!k<4t?jnKC}B z06<8RH%ZqmF1LdF5FOoXYhL%8sF`;zQH#!ib z0bg-nL2C+4WD;vMk=YAngWi!yj3yBtKDcqIK;Qr=A^?e97%?5kIYAENP~|QiqPk3y zd8z{}WTLc@lH*=Jd%p#xT5m1Y^4%gl(oh&JU#i-xwbs4}EVDUexWPjrPe0Y+jl|x1 z`$61(*lcaCH4_p@#)(jnWmRoz(-1SAY;X5^(AqU00NZT#JDcse33#;q;0fx#r|JDZ z1=gCV21y^7sr^RiYhj4PCTO^8n(`oSttBB~yX&>iCNxygl4adUNc*V@Fw^xphWn0t zLk*vKe@w$?^m)ZCh)$-eL{jM&Fk<7PSgN@D1T=W3)b(jV;Xwy7%b>Nf)!ZOih;)BR z3kthBR~){lpZhUIU?%w_@U-b{rqlZ|!Oh7Y|5O*iSC(e!KT3ay``7>7F#8_ynL?aM zmg!03VO0t_W6fIoJnJ}NZimEvu|(S%(0}3&p=Bcd95yi_LoiS{_Gw2eyieymcm%O1 zvBehvzzsL?VZa&1LF;7^8F3W>_Vo}ai048-2KJ%I5UT<&??pDwvx7d?J$4D`l)T6} z>p@?3b~1qNLFAtGC4$;>!Cj;Yp04`-ihM1}TmX~glfnxPK_%Xz450->u5@58((xZG0?~|u zcVv(iwMtE=y4{ti5J1lqYSOLR7hk(>I^&4R$VaRj7DCVAX*f3wL#H|xPUCUp(*WVH zz#)Wl%w_*$s3HWGY+E+kT5%4&qrbv0g5#0FKjmNLh3^5hr%VdRJMxk6h^8R~H7a-l zQl^@J_@G?4L**chC?0JMx*=IgY-|xM(}b-6ASxZV*ZQsI!;`Z~0I^L(1Ac3c3G?zn ztN*}#7`NN4ho{aaUpW1aPw+lTS%d~+RnbB^VOTpO0wp5}E^B+^okfJ064wHYUTsjX?3Y6cT9Ak;9 zqI$u)^}AgD3XIOaCw|6q{-yf1qyI4YGPnOQ_Z!^%^}>zdzZQPrA36oJxF&_8HmEFktsg#HEgKQtc94IJe0Tx?yd zwCzmN_Hv5UrOy%5RHvR-N%8Um30+uJjL)74zzm&${-Su|Bon9e1t!kHLd}{!x*tr@ z!6T3qWWI#yC2Mtr)tQNa*>n4eXIT&h=A0GNOxJ1^G(gYu8S<8Dq`ub62M&_Aa_TgB z`<9l;Ypl?0)d%KHhG*uD$=QV(tjD-pD_6+!3^J?bHl|R6ms?n5i$MXl2bF5AS`Vt# z>g;T_I9-{Yo}HO3?VFpOoSi?EFXRd{)zY!K>QuFKw)Bi;!v@O%ibCv-3(F{2kAaa6 zXkH`2@JoPLpd&GcS)^1!4j5Sxfd(6;X&oR9v81X1k3=aJ%*0500f!rlF{3kqW`>m1 zsd~f0^1*+B4WI1Ri1)&tg+dYG?cm}ZLx6Mz(>0SKlvdEjI2yiIn8T(;#LH3Rxd$#B zsuH7187m8{9r(Va1Vamb4zx5dH$f!Tj3O-`ETuJU0zy;{Sw?WA7_JZ=xI*J<2(r`* zbQ7F7#)Gy5(=BuuLxnIb(2^QWQN&$>25c?a&p}UxF~Xp!k^ZK(nrU+0B3(DBIt&+B zST$OX%b5kjPCZXy7=I()xEJ?kcD;|As?F_6yW3m8YwU$gJ>_BQSY*n+=Amu6{ir{P zH*ODLB{s5COIcL%ZpVXZs1?Z2Y6Mk|V9G@Q^T*Qf_(MHJyp}S%6DjPPY^w<}J)5w- z+nb#aw&P9ObWH~I9JaF&1Y%7?HL@K@jo;Gkdk3fcDR=I1J2+yX6P7oOKaSgA z=|@H*!~_?K?!jQN1%4g^z;PgJr{M6KqMp9=MZco-yO!VXS7EY~) zCz~;JS#4Oo_3T7P@wgU3_MwuP2Os<}CZ)ol)9!2;%Z(=Z@;1f>rZhg;Ql#_8aMpb@ z0jFr(Qf1jDG)SXPKfyo_Hg9A-2}`)On7Wnm$Hs>iGv$**w6*g-Od4U}*&1wPu!C_0 zOnS;a&HJQ-7{|z-KRO%t`dQ;_c2?Nl=5tSi+i?`8wZKMq7$P$(`gvlabo=hL=IX6$ zS6;r_ym9sR?Mp9TwV;kqerhodJk_JU5X=T(wv!YT*3ooxJpvz_^&t|Ov$zObtvC#H zh1ButSvBE_%hrAmnStt?SG>^i?7ux^M}fQsfg4ybRYLHhafe8h6Ugv=*F3J^kfIuUd<&h|0N0vNhjNkwmr!g{+9?Znci}JGX z`4W6@HSp9`U-F!W-JaS7JOgXO`Q$tMm@~3U z>iy%2z-^#&5|laMd*klVBTs zcdS>gnuQV6b#*KK=(4d3k%v%7vjK>?Ut&?sSZMOZLW}s^bEif%Kz)?8^N2!|(M}8P zlpK>-LwF0zb-9m@=AGMz$z8A z@*-`AE!tyWAYkQNR37_D*iSO{r)+W$Q8nkl%){^ttU8RoD5433oPEKA-1ab+XKbAe z#-7on3wfQCAa9cP<0h#+u9LpwGgTl5pYwnKfBsaH@%yKaF!B6>gG^kUo@e658<2y4 z;uxI2#*f1N7C#R6Z}UqS$20F8fxFF@ne{jM1AN{~cb;Q%^%}@~!i4GWquTn@q;*N0@wY9(g}F58^&KU*YF#O#U>d@YneH zZ6^OBzl@lli7hWrY7SzYLn6H|}5M>l;k|b>0Exuka4y{|3L0@HhE= zgnx}()j)&P1#+&E^A~6nR=;fAUnSSxzXg=wC1e2hE2TKqw7f% zuktzaK0CNdUb|0=Yhvv%rIjzP?BlY$@y@$&H$VG1xPOPgQ)A89ckAt`&+Wf==vw2| z#+}CP#!HPiE_|kb_rE4aMFx#4aZ}yGto7yME8*#y^ka;TQ3oOZvuv99-@@4 z+x{GUq63XTOEOtPsEc4BDBjjHBrh#-lL~Dm%$q5MqmTahIQTop0sIi^1x?N0F%IY`*F|EJNZU|Dc{C*OrpX((W&|0! zQcKh6wpVBd1pT7xUTLe74gvR}azjX+LYFawz8PJv%c!IbDK+ULYA`aYDFX63B;jF# z#x9+WEyhD>YN^mAUC>os0W+pcxX^_b(IKd-Tvu?j3pJru-~t5m8l{YhAi#i3D_0VW zM|yGa;VJQNfIW1po{uL0Q9tZ$;1q8i0Dp{!&*F z3rY~#x*1b!`_8(1 z?aHSxc76O7p8Hl}Ss3rSi}$!$Y<4>@HIJ}Vgm`v~*d1np_C}wXOh{;_VGj&!C_}~!<(?*~BQ^61m1<`1aBVdStfcE* zL(pe&4U-fnPiWTu?Kbi3{vk@a$>wGP(J9^4$zChU>9 zJ=PWq&5wcv3nnQ5ShwRO#RLstm|FPysZR=~KZY^1q?@v&I+wIy(u=UWZok^bfPAfx zqJr5L;cjjBAK@F~|}Jpu%i?~r1HyUds~!(}Me3Cx8(0u1~6LH|Lkm)*3L zbn!SCH)9?{2mhZpWv=d;gsF0WFAL}4t>B>rz|%3%vCF}G-387}2gbIN|1XWEcjLcV zzsF1_lvzL-Fg#(9;0`SCN87^V=rE|wLF=Y|yq1DJPxJndL&QK*AnqlXM1S0N+Is`X zxcrp%+5&!<{4D$lk1UiL8Uknm`e1&RE(}8eBhonBCrd-PRF;NPBSZGd;4^UN_w?dD z2ol0QVfDo+@lzzy3F|rSe*@CoUm;13B)X2yeTh_&U*XnIbMdDkRehCMA8S|sI+ zFAFFXn4lHTs0D-Ep)<(OVfYc|vP1yI)5gl1!{#xI4rh(!Hpf>&6s~YmF%jW!__HZM zM^F=V`oOvuadjKl(+w7#Yaq%3kQY{E6_8~TTOown$IVW;1S~y?tAR3H4RNO%IXJ*# z7gjb-qyhR4E&gF;`K)>|%`ll3tvrdb3vU6M6aZW`&}|2RH9*P8CHxv!?2r0RzVx1N{w*dBeq@#lWRQmUJXXh&p;9$=C*;VGd~Uv2e8xbI(~ysx}Y- z%Vg@xeu@Yw;vgBqhR@)BKMzkLuLT7499?j|;5*5yx#Rkxx=dMI%5oHc0ANJ?5x$i4 zRFsS~ttf-n(#*F}6 zwWn*ouL4U?rbKcvALGjQoe|1h1cW22Ccv5VpN z6sCrSv=aoGliC6U=cnHVN{2ZRT!N`EC=Nh#fvXl_K|Ms|Mc4%+vVlL~K$G7Ir%d#f zx_lGShXV~-9TrXG<+}VFA`d}HB7HXu)k9c(y;zs`5xE~q2&ntR5+YHxYQW%$vD?(> z03VZwt7rwTDti`&TSnocEYY8Nu&_vqFhGtb$zlfIO)kJL)Dgm0=A-QcE(~;mcD}c! z_AVjD&}D>3NuVvub5TQEb4tjpB1b z-~~lxW&*TH;VM3xlSe1cDbk3HazHs1n6bL5-q?{~Q-Z=`E9Q&gx$sRWVFDWA&N!9t zm2@-{&HBCo)iVJUUuYOD$iDiCaY8IZ>}dJ0668RD9SG!6U4E4-Z2sfz(G8@WCbPZ* z^^tbMoTsC?Mfsa!gkH&w=1sLQ-h=uEQ(z$|;4dB(>m z7RJPoK|F%lUIG*qtaKq zxE5nytzmtjQu@;(nCB|IYVrv>!atZr+kM=mTE>{5Ww7cQYQmzGVVPJ&1)|zVy(I(5 zF|Cx3zYJmtx_|Z-cDKD&Y_xy0%2aqNf;N^6^a=O1p|_zk5I{ZDzm~D(M~P4UVO!ku J_lb)8{|#>VMj`+J literal 0 HcmV?d00001 diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/53/0x000000000000000000000000000000000000000000000000000000000000dee9 b/crates/sui-framework-snapshot/bytecode_snapshot/53/0x000000000000000000000000000000000000000000000000000000000000dee9 new file mode 100644 index 0000000000000000000000000000000000000000..d6568ff2626faa32de6303366338f09330d01be9 GIT binary patch literal 33346 zcmeIbd30UZecyZbIs4o*-udF*i;(~b5(GhjgCz1$BSBKsL`l#<%d#awAaN-{1OW;F zHQAOGPjT$nP8{2D;!I9kr$cJHO_MlrlXhjTrtdXP+pMNt?{!F<_u8bXJJ?-q`qt~} z%lrKHx#tcfNGq|M_x>m(?!C{R_x}C%Z%@DPzLs^fzu)--@Atefj(j7^5zAMW?b!R= z{Wb6IH~qh^#&iEn?TtTR|Ds#`B`;^WR%j{9iY(i*a^mvD<%=s2mlnfzupCD@wsMqK zwuPx}+twG>HqLuuEWL81dST=0`u5UVYk6gL{e`7BTALeN-i6K8?enYK!OH3@OPhqR z=*!F7FFKd6t_A!{y~3;OTgw+)OT;O4o&8}%&cZtBZq@~s^*evy_}1U~(K{rTE@iGP zjYGGz{~XIwUSvh8tYTY5Hf^LUh9c{>*oo9_vG!v-bVA+q)ZmdUQD#r*N)X$T9XXLi z7`m0@plig1Wz7u%5>$$y7fkz?y_<=nJ#u2gR1n#y_BZOu^c zRJ&@sb`m4fR4>;p*^O^fvPU`IrO?`;#opn!V&$$Lwy1YE{EymyBRiyMMAqRG2V*O; z51**_rIL=3ggd3$L#pvK)%f+PB;8J_ZXs1EO;y?{m9=B41ycEGDu2gR-`uIJM@gmA zRC>o$e{-i)&yvbcQ`w}7x_y}PiS^b_sa~M-lti~<6)^pJ&Zo5hP47hbRex{vk9{5g6aP2u{Le&w;VV(D`16r%)m2f|)TEkH zdl)B*OjV2{##Xj`+m5&$*Rvd7TRIop9wNZ?sKK~MiO?|fgrv1*Tw$+aPX<>b2r)+@ zaW`Xej|JkMj>QaY>Pv;itQ3lrFgk==?H(nj+Sd^Gejm3zI7pt(gjKSfy~87x&X4)F zr*)}T7puH$T&#iGfLIe&6RS}js1_^Ds#_^n;!3_!sN^bMMOR9dTD4wPp6@GP*}2G8 zf#tg**Njtp#&UALi4tjooz%~FBZsf-lNh8CpLRGNy`R1-qB2V=!iA{H&pA2cqCi9| zd5Smn@a(_}B!*JCfPW?{)%HfR5Ja8HPh4qW&d({To_aadBFiICcxE5U3zWBT!N}#X zZJ%1c;+h@6Axs>JDj%+3%eSvoP7pU^`>iSl2A#2dCmDYvL*78FQQ%^ZNRa^oRFX zGQPOEaXG88y}Gh%b^Yd<^@sOoreC6lvG`><7WyNUF0V3mW{tbBe8pLBy_(xN|5EG1 zw!3v@ZFSq-maY%CUt5xfLYw&N>dMmg#?tEgdTXT}!eh+C3G;AhA5)3V1Z*F(v9-*vOq*nx3&}FF66d%q zN$`-l+a?up64%U_zArOtk~_-4PCRAHoaqPRS8~eLw!d%Z#5?TqMz%_Hnfgqwl7;yB zwvSgBhSZ)26$TNemy0odW0q7N zPAFn(t7>8%EQq^Nq%4&m9I|Y;nMbPIIV0okU}Q|bie=+j5-Vrdt6Drqs)$`}PgrHK zrbkAxMoXiWk;-tz4jYv)tc8t|A9`WEQVHv&YM2Y%aIB)jW~o^jD;2__(okivGFV~? z(CM^*JeG+9iO*E%w5JUbx#H^}z&oN|#4{q7j%2FHW)o(DGy~GI=!9#Gw6|d)iH@*O zzcYtPPRkv~$xCr0VYYJ8=y+0annLCbS&N7G5iWC*)TSG(2xkI-?WABa+Y=5kqf_a+ z{K?H$D}DfZvbnyz_Q=LcOP_5mU%YM_SYBCai{)Bd7PHE~xODz?q|Zw0waPV~ms+p) zi0@{P`0h*gws#NtmDbkw=Emzwt;<)oU)L*}8&^sfDS3&V#}+|L6c`u}$$#{P)^;bv z6lf|bwIyD}6w%r=+mwq1gsy4%(mGAw@>jRg67o3KS{KRX#nrVHhg3Q8d8M@#c6|%R zd3l4zJw~?lHSYGF6kc^9>_9 zorq2iIciz;heI=C#f}OcFE`0fku9WT?RlZoh+Qc`=C@viOY^}6F`_3~>;cwN1ORh(*M)(Bp1w=TLgg@!Oq(-6vJ6@lcog^_L) z&+myRGkD{hN@jL1cU;9WxzTgX#8_rx6h^EwG3N%tyvM>@zWHnH)=ih4xbiF*fN47) z#Yq%e^D=*@M4Hg2!hEOOC-gy=-Kp}FP&MBmkw=zTY9Nxi-Wlk`gjvv&d ze$;(JQrpvqPegc(-c}wse4+t!bgC4&hgIWXTnG!o*m^j0H*(ika1C zXs7&7cQ+->hm&O8=CDX3iEQOMEhZt0vvxxGPX-Q4RyM#tDZMATiWeOy)eY5zhUD{M zE-5n1p`g&6Ajbs3Li15BDa9;1G(nC~N3tm24iV!>dM&AR%AU{a83m?sh{@}Q>+)!{(+Z$L$nofk37 z4%sYuYexf{m96nGOKA64U~^1hIl>Dp%wt>UTo&&lBUz2xN!>1y!7j4Aoh7S6KE$lH zRMH@L7$bXvnM|fKn-#vTWId~FJI9Vr zCLjf?Q4YtPEQkZfY9wPSvSRC7_h&l|&Sb{z@sB9yOX@RP|FZiN%KhJRUk$vEmVUk9 z|Gly2b6?)|(<=N2x)_T;~D-@d{R-9Kc_S+`oZS|=#(o3m2$EhMV4YACXtknnulpZ%tMa}>>f!KSLV zD@Rq@_h^ti;8{7=$09I&%QuHuAycKtK~*Y&*41La5psZLS?__iSntjk#Clh1JzX?kYbDCCth1G>SeMws zV69f`mUUOdV%k-tIb*IoB<^)%zH-;B z(stvWRSw^p@0`Ru`q&}NW2eM?=rG$*``lw*MMcj`WJUNXvkOdXStPb$Ti_m(C zXm#6!Z`7bYLQ@668$(HNVj5HBI$_3B43ZQj->wJe z!QC8+CJqt0o>ZnlI$KQ3IJ-rfAm)fHgS7CTa_nw7-B_}bPV4FfouqQkO5M@`dcf?` zea;=UYs_@R+-)iq4Cpg2Dzle&9KWJ`4i4HCA(u`^aUtV#b<+(|p|2@`A~H{M(3xBI z-$fChI7|sd?1YgM9f;VWP>SQ9IL-duoB#-s(oYT!6m>G4MpYsL{EGRaFX=$>X!nBd zB}Uq#rkkmsU!;!G?`iKtmk~|^OtsRSQ{qTYnqv-A)mRQ3(y~nP3^(abPmZ#4ewBX} zGL=(mx=So4J?Y3Al8a&q%eBALQ;bd%%r67-D*?oEKad6IaDXPCbXN2m-AitpH55ri?L31Pa&7J+dQYYL?j@qLtLt1KnA?fmqgS?9H`d)pH&AUbL$h`~)SMA%AsQq~b zlE%gjw=B`LjxIu{ao^bm(Ms#e#@6aKH#%D_PAJolm#=PY%U92NWwq~%vpN_`w=S=4 zSH(!1+97qh$1kO@OZ@fiQtP!VtDCK*?bXZVy?ps*2cUgdS1$Kh>)UlX6E!6tSvtS5 zacPM>wy$pO+SwbHB*yAW>qg;lfC(>2`pe6km$0sEu3l&v4@0hY32)=(tg^Z;*IY|$ ztDWxXJ*15}E#1hj&2pT~Qh4X2*5iA9W4+bBU^7x;$=sBc)>b*1-MG?P&zPzAg3Mpr z*ro+>+;*7WaW`J&O0aCCKyR;B zQlB=xObSm%$Kp$&AlOMIT9ps(gW?%wxQ>Rjmwu;x3(Dh zh17%bZ>Sq=BhwA#DV>(H?0nl;!);4iHs@y&(n@)oD^*I&5ys4!*D zoivt;SGP8Md2+{l+I;8QR+`nl#5K+RZd~HB$GzzvE7UCf+nw8IhbNA|(+NJ;VCK)^ zFfVgO9hcmF%AeyGQU@+M5|O{I>K5u$99GyIRj@9}>h%_@(93>h)X#7F`8S=XocBBL z;3h!)UUVK+FZq>mXTv$cjXZ*`=G zT-@$Z9W`gqIdjqt`#5i`a;PEaSkevb?>WGjrcY9bTt=u`fgAIT5Y{BeVsga9^`ysX zlANY-(M) zdDG~$#Y7L#BeJYp5APJ+E@wtm9vk(|Wu7a4oKLFEPUTuFr)>lS4d*BW`a#Dd|C}zo)2J(-xm{ zJQj}!@u&$M*Zafq(B2cf?tvh7BUk@Ck;1X067LFkm2^@~YPER4I0we{7i@8b14&&@ z`b#dC6+t|RD_0AhJ^DHKQJ+sJkC#_7F_K1D4+}}t{XgWayue9h`EXng%hX%f%D2Wt zdLtU@-VVe=VL2MA$E9#2EKTV*qf#73We)xGap3+1D(V zCf5!@>U|5TxD-i?8PUxsDGd8 z=iG154;`+UfSGdolXf@|*V7FWY+vTI!bcNL|*@BR@kGCk@?QgAXJ){+So?kei2 zmP{)5M`X7xpAcquT;xKhSab)%QJq9W!U6piA$&BROsRN0^rEq3Pno06`EWeh8;>a> zj`#8iqyOv=boiJ!8W zhhVDVa5!VCs&T?p-%{eD&Am(o&$OB98TVm7mRqBKrlNOYs$WoHBg{|f3-CwIZ9zBs z6QYJG3mk5;qY5JhQ(j1j`98I|CIy8b#`;JJUJp9|2O(+rSmTxs{kn2ZtOg5ToAM#f;({fD^v zxS%3jFbo$|gbV(?oSw)hJ=wzrjV`b0qmlIffc~%$EE*AhfMU^*;Rk;{9DyH(=+T}e zW5OA2D$4}=@Mn8C171j`4Oax2v_aptEp6Zmq|H9V6(Wen^iKkq&yTplj2BVpyohWvxW;xsRGnxNb`sB+oF)801%tnD{jn#$7rXG4Zc=WRTzPFvvgdFo+a^ znCNGaZ*mFQWspJ?M+L-$bWgV&eQTRVzR!q^k>r4|h}UKjL`KRY*Cdjw=yZx1;Ofh= z9y!OAj>zP}o}2@>EYWf@nKJ$LOpTMe?ixPJ!Xle`r1PN5JgAum=b*lqcOs8V%zQF0 zlWbCel^%~26RFyxZ+B02vzO%u7cG+5Vfk?onMJbLL6^dpgvlYJ)t85%7q`(^upz0V z$GC=4%uaG~NG+o(J=k%d&rW%6O6<8pf|(@>N~j`|}-evVGMR zhq|Jv6dkGva zoE#h1t5gFgjZ2c_?j`AFnJ;3v0L8cD_9(s7d(z)9d;LzgLCOXL(YSx?_}wL>Nj0L@~8l3utX??4DvXt6iUfm4MeAmvnm9X`)nppM6c)mR66`T zNOiZ6w4Fl$dx%y6+NDX%*e(>4yE-{Uog7da2wkrz`ULIjvZjioa`zV3CcHGE|5i6# zNHw8(2`tK>1QJhi)a`b%MzC3KRMd zl>4oo1d;T8JcWdp@dKm84dHZIm-eO2O1P#@MFxaI`N*s6woBr!MsyR}>ljrrSkx&* zF6yj)4K>jdc3EPvMBXWu5J@824HI7~a@vUxpeS945zfU{?2Dh-Ltc z946y3b<6NLiLT2S+ZuWW^_A4`lngUfE~4O&({e)|aJ_v9+d-Ge;aY!h?CYcMo!w+P zeUglscieli9hrZk2w{LWLAlD>I;Wp0cvKd{OeSawz&N5QFymgpjTVRr=Tbiv*#(cg zec3cVb1RuRG8Lo2U?-)92WW>)z!mTh`QdM%>Y3N8xCD(kg~UW>zcJ~=b4m&CqL zRt_F6h7^51ESp+Jzb^2eFG` z8VyTy67pKVrw~aeMLir8mJA1dAQe3&6M-t_^dt%&O?q!>kTX^oLkBkD1#;BA2fm7%i7nGe(Jq z)@UnLcI*8xj||s2VIm{!wN#tR*KLx6JI!%+#CemeQO?QbaskSSg&c~CV4&n0(E`{w zm!5M4bKzVx7tiJA3UkG|(p-7Y`g%T7IYI>tJ+1>z^0SIbdd&TR{eLO%|91YV_Wu#! zhR>p?^pgmNUkBXqcY+^t^1sI#_=mA=HIx9`_NaYo=BB_lkII0p^w58C(T1{i ziw;m-j@X7p3z)eIv|3Kis-^@>Yt6x-VA)_m!LJUFMBMWZZhK^mJe{GMV>we+&2sh+xB%TI1k9jIgTrE#CwGfA zFgPUElqJxH;pSko(imy_jasAFC^gEBfGw8Ss5Y9-p(YC#&j8&7&*q`G2$aC(4q0#u zH$c6ynCd~jrJy(NsU?Nr3uM%pi|w{Y?`IF>jhzJ}6m06xJHWTLTdvuˈp`w;Dcw~u(su6h5*!rk&2tjk=>$W8Ef3H+7; zuluhn0TCS>9ikgH=Xzt*clUDXAT}b~ZV!@%)ez7^6;0Q2J!XkjZZLH-XA7tf zx#DmpSF*|+mX%a(g7teb;m{A|)DRo?z=3q`k;Ifz>(JAoBzk;-tttz!NE8&o`hthZeJ8F}{Mq1D7X|I+JG? zmnW*(92&|lvLBZxYS^8CUR<7N8A~QTxV%EYm*Dbb3nnVxMu{7|BFiS$*C=~mgUdsL zLkA)&yWuo+17zM;wt6P7efGYeP|mNbk9+#J{NGpZ*TUZ}dEY<$F9!T?9C|+Y8;3t) zhre~p|6)f!a=qOBmajlpDcWB^FZ-mZ8~Vop0rL`o9g}QD@y&cLV@=-(2$R! zH2XgLrL{L{bglUxO*$Lbz(CeTD$#?_N(Z~TE(_4y0OX{GG<$U79DFQJoIbJ z%$gEfjhQSuI<=nBsf}d#IigeRYu^ftwk->Iqf;9Po)r&jD~}#+VIZAPOAY4J zUnIKds(y`mPV8S$23KhPN;=(I_j%mvJrrOZhve4Xu~D(TD{rjZ3&uJT7bWRE`I1<7 z7L0XA!Fb+ZHc=j^80)XAswnbWzpAP-nOk2}19h=~S`A2LtUsfg=KIg8rup7rKE-=I zwJr~vukTYJ2l4&50&9rwDBBo%HZNQ;|nz zjCFXwv3^9&9&o%l#d`UUJH^`N+$Glj)cQ-xG1|eGQtL0YKR?m7-@N-C%X&*Cla}=tjrk#Ce%hGJ z33dN4hY1|UNsQ076CF(suvU3vljYHzF%Pb9;C}oKQ5b&WjjNbTAEx12oxdb_#H~x` zFt?5QYWPmv?|DOfKB}9B(aA-CS7Kad`z9g8hz%3WuN|#x*zww+hRWZ zEGsVig%7cevFxj`hy7~!E}VZ=ZHv#>)iN7%=aqAlmh*E;%)e&LpI7IuT6*^7O;J3) zxQKb-WrU@EufK-*6KWC5eTV-f>c{8bLx8vP3f1s_Qr$ z@ZI1AVt>Bl`yNMp2T@+a5_?4GgmqoK%r^T9o{WYtoW~} zdrw$}v5%Tqh1pY5Okw_2DW;H|k{k=KhEHP^e?UFztGM`MihB8_FQ`XOSRYU)-%=;< zS-5!Sr8C=S!-Wqi@58DTEL?ibTX^BI3yT-dY&`W~@IiI*sl}(xytw${nRsD+@zUax ziyP0apSg7A$uk>E8_z$zxN-jJGlL7m3rnr~!V8NpE#4O_w;l*i1y|2LH~Grhm(RX) z@rlLOnbzXu!oh{t&OSf+J?i8e=iWHGdG?{;;o#n2B_p2doiQ4n|kp*$kZx+ zs48;elzMyqkcw*D*>mWRaAT8$hhNBvR%3*YaFcJ8Dv4s8sek*!Zs);Px$RCaR@qO82BDjY&(w zPPS5$v_Ujf+C}~tqJDi{CTUy~2aHrZXX9x)s<&cxPi4B!EJv;_(rWFHSh~5VSv~dW zq>>7QyC$)86E_c8BT?lry5H3_2wnAqV*JJ`}Le3h<>|^EhTnJ zA#;?)^RR?y>q-zi8Z;Mr+LXCPW4udP`X6m@*=}`O&yh+X%GQpkw~O|+sE@ZvM%rqo zJ}#vZs}n}Hut1PQy*{lTHwA{`Fmvh%sJe2EGA@3So&@}pD*FMOKH-lx+f$=K^PQ?_ z6R`mc&>~?6c6egh#*_{xFwMkdgi~@N%@7Wkm}Web{f6t;0g*NQGKESG$``e6B7#id zuqH2F?Q%g6%2&>?3Nd7Kh>x2l*&{q)TP}&Qc1ShDYc{+A&7ZTpwscDA@aTeWX!b3v;J!<*_%d*0ZluUPL=Aj z6eLbF&xKN=HYM(r{r#V`;eGAixz(bTZ#vk6z4v{mg^31#+Q~bYW{T=7vbS-*sc&i+ zM(Szz&Q7Vh$&+5qSWos5;szx#1Ry}h9aK+wL|9gM+pr5!BvyxF!rCbw0MCp@fht|o z{YE;chKP%-p*uT~Os0Na13{BZN0yI#NST*yk|B0peB_T~8xe<`pvuS&Qt6Sl1t38{ zSSt9y5zx3=J0#7FOCFOdXb1mm@#_882V6)~w1p<3Su)Sk_uv-F3u|kSiXQydsZ2fpI-gS; zm#?6eyuO`1we)R44)N(!fqX$;>ft4(Uc^J~VbMWut(a0DZf!5~PQ&usghBKIAFhKs z!~%PGRFs8J@#4_i$35hqYCkMwYWwydh`RnH?0;e+UX>TFZumsXx4}d-F7O!0`qEX= zl@@qFTYG$~cwuc7?(681XD5Xzd?ErwvEE7p`_B%qfl}17qeOX8>oVH%D@&p;KDe_t zr;3v|2r+8%o2~7uo9oxZGg>CorA9lg(Maz}kez2<>%X)kxZ}Hi$T`qHJ11SjPnqlZh$Yj{sp-|Ip9PKq~?!{I*AO10|-TH^Yx-}Z*@^k8@xlb z$`ex^gvE_8Dg)P{R%rD0uIqh`gvk192V_hAda#S+G`@p(Usf3+CNKkDAVND~V~SU< zo?lzNAh?(Ht&6SAKPgsb>_#A(CG&#cpBPHh+-j{|1ewLULEhq(x1*R3fWzdrTD;h` z8E?JFt5Qqp1B2#0D803Dx%GAsIMX-8=A>w-j3zfm>h$K&kKyUhAw~4$QvgpkFx&W^ z{`u|Op?*Sx`Z4&o8vua(jFN8$`jbAq*sjqvmq!`=hsTUF=i5O74P1i^VnPSMHhitG zfSuaqrr4p}D?sNqHoGVxgU#xP5Ou!{z*E@WybAfJ2`G{~68Y=ifc@z}i$u9p{(3=1 zqEjb-ppsJuu1tBw@#WsdC-yILz7>f7Tgth`Symrb?uQhwnSDw*ivXDX>wH0vQ;-qh zU*O`3*L>R-dqSq3Ph~DZee=SZx&55vd2j9(Lv>7*-|SqQf(YU%FEx)k6^c7N{fXML z+$$Q~l;mBFRrx)(JX`k=SBTXxMP_lzCxwxF`5oMaSymAp>lEe0Q%){#6?v%dfgGAI ze?%o{F35wTlEPeudPCl@=xE7fqT-oCnk2nWMDr2#QL=penSxGYZ)C!}dW42WaT--> z(Y{7!I<(8rbo8U9^ng1k+TG=86nWxFJ?2izXF+rz!BS1Tv+{{Xo?Ct|+UHUEeWJ%H zA08iXf?YySwL-q4-i=}%sZjlLDppeDu`V|$$v-Xvo7kO(;;vBHDwVD!1IJO+Q3P%em4=}1RqogSaJs(ZS<4;kl@gDF@# zkAj_K7pmZJl_B-GUH)UH*U1Fw(XcYdZkS?WDb@}&A9d-eWhVq(?RH@vPuG`MVXqN% ziqTGlQ9U3p0R7O7+h@Q88r6Eyb6vgtyI7j2;rar3FvW=`t`sL4of;^dG*CqROJ6_} z*U&oV^{#j>5g1@DM&a|Q8xNegoharn-W?9iCo|fBEO_yZL%@18lk5j}HlNJK2jjy* zJb&VHCwkLFAJ>P&!=c_2`|d3PB=hwL9bgX!lLPUg@KDK1=92kZyw^Anj_cpI#TD*N z4#i{P7&@i#Xb|tm71Tm^kA9kK&p7WskJ|QQc!sqJRN3?TbKHCFH{(Y9Ogc~(VC5hy?Qqn@ zDZeY82q)+*pkU9&v-)RLG~1(oI~z_!vvtsMbK&@uW|A0>hoTAKYNPR>`@7U}KAiJJ zEi?!0@ZD*SXg>2Yo4^jeS`&2GVCwyhfZVcz4rrbvJJ3_mfp9oFPzU8GQBbCSCZ3E& z!@)*88qI}6jTmKiWQggD!Q@ChlAi$~<;44pR1oj{zHl-eu7heB#m|oRCAX-29Wd9e zqAx1~N7U}6kEsyFG{Q;XBcA@Uo!^~BFu~DaG!zXtqRHgw>D#0I`sZvI&izF?tRq<_ zVDv!$6Fb}+?`aeFSUeR@CCRw{U+rkh(BJ(HT$GK9ywoo_9_~qQSK*(4sT?&M?~xAIW^BA)*tpSV<1E77XgH0~&(}lY3@L@F-?H;ErVZDpOg$9M0CW|Oo(2Tt z!w(?YdN~>psQy_yoI)n1v^W+|GDP6$FW8I)B-)hw>J;LRN?Fxg!<-co3d!j+Z z<$_Gz3#WVf8+J4Smq+fuw*`0z@({yr!sTy%s52Mr0ozzl1`LM>ee=MC5$xLF^|E=u za5(e8srbN-lfYa!&m0NT?I6<;Rrq%d*YE%wj`nny!^H`Q|E4XThQmk0QQ^Ol08SVc z4%d71Irnjy1fDS*J_-+{lfdWUaESyCVH9SC<8~P?kr>gg)~K>CIN-qI~tffLK#Q50fhR&YeoZ@^Jss2H0;x#GxGgM?Xc&O zP$S=eB^?bZ-8!S;XFH?e%bn36)j+8sHB3xEzN7PC~H2`;rHc&H=yh!1W)m7q5j5tJB6F zecFAbFUQ<8DI8Kfh(It+@CHq;F^D2Rc_=P`hm435rMdF1ZAtP?&PD~^29U*e(H^0F zA5^c0e)%z;n|49I%9i6@f~;hv&ocvwz@Zpk?7^_Q>`ZtY`5GGJs}u2}WAX^G7@!h) zC*-Ru$g6ZKXC8UYqtcS&$E#?#Am;9gi{O|*W!d}}B#&0YWRaTk>T)777Ahx?k+Tu< zyhaQ*Eia%Gwt3!hFA)?Em}>cHk9BG%Z(#??6UmeA6(N$WO7gHQK+NP^6x*Z17uS)V z76c*i1yYs>LqTqqQfqNQkr3G*NGlVpQD1a^B%}hh_epI8}$P-@pr0sqV zfSaKwtdNHly%joqZ4B^|06JB9Tu@_u7+`)}juwW< zm7oU$OtO9qumBVV0}PyyK{919z|R`^F9wT{XJgl_0O%z*Ih}$&`Smiv2PeSgj67m@ z{=7X!@BM&EQNSz{4GMUfMUa!6&rrY=E-2sw0;Xf$bO5vq3YgVR9}3tJ6tFBCQxq`! zpbQ1PhyMCO^%)tbW+TI|5YTfeOrS!~wQ<1ho~zJv13jCSSeAVk#`X6qajeK9w}cA} zEuB~fzdFv?%Dap(DSF+!-z!S=haMaVF{OF3729CmtqN*VhNXG3729SF74-0o|VeOQfyWRWgp0o z9LBOj{vkp3$Ff4U_tHO~Ry?ZG?jN3BH}Xw5tKR9K&H(Q&P2y(9GadwKJQo<|yDF$0qxc8^7<^MZka;Kq;st%d{iZz-&XgOmE% zsLCp{#B`U!7$3zp{L0$yp18sS`Q7atLQbH0$f?BBHYslXBDUdK7Mo38l&C`msG;91 z)PxGPlnR22g$i|EemL!ZSUwQUCPs1?3o^J^kRgW!89Xe=;A26C01GmNSdf9`6@r2z z+4jJ7<2=CS{OQY4vAZH*tumQbnK=QX{HkJ}C>WwlLzEv!A?ogC^$Gy)a2PygUScc26A1L7WqRw9@K;;^+H{CJGI^Vb@zSJv=VcU{v?ZAAyd7VOg#A_WcsWjQ`9suAX7ah zQ#~b9Jtb2;B~v{mljH@NB)7LsCeD&oN~6EaB}kh_`=HTh)I}psyb~Zr(m$pYUWiIs zhb;}PD zm`I#|r08=_Cp3-4D2h=K!+_EA;^I6|)0NBh8FnV$vRKGhq?K;ZWq2)seQAL>EAU+y5^FU#~VK=x(H3#U_FEzePP-5E6e;D&*< zPqH7-rza&IcM}{&^uyYpOAB|GnYoqATQOAhz_)E0{c~;8q^D>a&r9vr=HNeTwQ13w zHmKjFw`q4@)8xk@(x%A|N%S?1^~~F9nq={|nl=ZiKChU=N$^668?sJ+!S?dhki4w` zcW01ySPq6Yyx4`j`~8r2;vDOPyz|oo){n3%ka8VpPGV?(xt*L~VS|AdWGx ztYeHb>lh=>I#v>+ECvrjSjTw&!8%rxpOG4<@td!t;j-+QYahv+fqjcOS%|Vhv2V@X ze$BoubLVRIQE>~0yU98+gJiwVk1D3Q0T&d!mt;YW?c-25WO9hsY~@66mF z{O-!!Va>ifa|bp1p0=CcY<${20j!cMGARH9`C^HDu|&RDB3~@J2?P0JiF~n)eBnVI zhCYv=n~NldR-gkf;Ac@$Pj&+*u+5^MUZ-c-BL_ae?Ex6d=ao(#I?wt1P^!g+uv`qg z3%P~TLV2OGP+h1k3@p?anhS#qLm-z%7DgAw7IrO+FMx@%ey;P{05_J5hkeeGuPWYw z8+Sio^Aoz?az5qwZ+Xw>{v~gg{9CUY|99`d>imC>eO?NPtb&^0;Ex|lL?PW$tkwiU z33`&>BM}58*YtFW=D7{|-4UyvLLmoIt06x$!o3}@1BkE~)7%}8iZSW)a_Te&GjiSr zT*`5sSg~KU*hk<$&hH{BiKZkPKW*3qO*c5e&wAKH#vEygdykk-vCM6yQ?0UGaB9Zf zRp9>7*;~TY>F+7({0Kh^#xnz>Rk4Og#0sOqpvj)R5ex*CTDexL4G&jqwc5z=(D3MR zJ;?ExfYAWwLK&&v{RfW9B2X(hx5r!D3Lzv25)dHb;1Wzc8 zyH9hZI~437F$1fbs)CEAzsWqc<);_;%|mh}69HJHSQT-}`vyQ$P>nY)9SD|!coJfg zNHW4Y?+Ij1;;G)}>3j9F`&6+5qouvL{6fp9TL({OZ^*Y*ox5+R@9?XMnVxR1hHmGF zZL{~w27to!+V%Khcwt z7mm~4Cydv69@O@)`$0o31$3XO&YSX5Ex^^4qWO~i+Ap4qPT|d-u zD0&R)v3zuIkxe*z)v#Pl6lQ^WhU+O&266YY<4xr0t+oeJ&8+Y%sp5*sxvebl-OCvf zVpaYc8z%EZX8brAHyCveo;Ytr1%rnUdBw=$_qlLUpHQ);jpF7B!NQwAj-tBzv`G|6 zb`=`Z+U_=FH-}9#ft(TPud=fjEP`3JY zPKS9TSWYH9Zs)iitCyqGMRtgF#j{(k`K3J51W4)rC0fl#By^P>n`wir>yY(uOo55K zWEpj$f=s= Date: Sun, 28 Jul 2024 20:08:32 -0700 Subject: [PATCH 26/57] Cherry pick #18827 (#18832) ## Description - Cherry pick 18827 into 1.30 - Changes protocol version 53, which has already hit devnet, but not testnet ## Test plan - CI --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: --- bridge/move/tokens/btc/Move.toml | 2 +- bridge/move/tokens/eth/Move.toml | 2 +- bridge/move/tokens/mock/ka/Move.toml | 2 +- bridge/move/tokens/usdc/Move.toml | 2 +- bridge/move/tokens/usdt/Move.toml | 2 +- .../tests/size_limits/event_limits_tests.exp | 4 +- .../size_limits/move_object_size_limit.exp | 4 +- .../move_package_management_tests.rs | 6 +- crates/sui-move/src/unit_test.rs | 5 +- crates/sui-open-rpc/spec/openrpc.json | 31 +- crates/sui-protocol-config/src/lib.rs | 96 + ...ocol_config__test__Mainnet_version_53.snap | 29 + ...ocol_config__test__Testnet_version_53.snap | 29 + ...sui_protocol_config__test__version_53.snap | 30 + .../reference_safety/imm_borrow_loc.mvir | 1 - .../imm_borrow_loc_valid.mvir | 1 - .../reference_safety/imm_borrow_on_mut.mvir | 1 - .../tests/type_safety/cant_deref_resource.exp | 8 +- .../type_safety/cant_deref_resource.mvir | 18 +- .../mut_call_from_get_resource.mvir | 18 +- .../crates/language-benchmarks/src/move_vm.rs | 1 + .../move-analyzer/tests/completion/Move.toml | 1 - .../move-analyzer/tests/dot_completion.exp | 92 + .../move-analyzer/tests/enums/Move.toml | 1 - .../move-analyzer/tests/implicit_uses.exp | 6 +- .../move-analyzer/tests/inlay-hints/Move.toml | 1 - .../crates/move-analyzer/tests/macros.exp | 74 +- .../crates/move-analyzer/tests/macros.ide | 6 +- .../tests/mod-ident-uniform/Move.toml | 2 +- .../move-analyzer/tests/move-2024/Move.toml | 1 - .../tests/parse-error-dep/Move.toml | 2 +- .../move-analyzer/tests/parse-error/Move.toml | 2 +- .../move-analyzer/tests/partial-dot/Move.toml | 2 +- .../tests/partial-function/Move.toml | 2 +- .../tests/pkg-naming-error/Move.toml | 2 +- .../tests/pre-type-error-dep/Move.toml | 2 +- .../tests/pre-type-error/Move.toml | 2 +- .../move-analyzer/tests/symbols/Move.toml | 2 +- .../move/crates/move-cli/src/main.rs | 11 +- .../build_with_bytecode/B/Move.toml | 1 + .../build_with_bytecode/C/Move.toml | 1 + .../build_tests/build_with_bytecode/Move.toml | 1 + .../build_with_dep_warnings/Move.toml | 1 + .../build_with_dep_warnings/dep/Move.toml | 1 + .../build_tests/build_with_warnings/Move.toml | 1 + .../build_tests/canonicalize_module/Move.toml | 1 + .../canonicalize_module/sources/m.move | 8 +- .../circular_dependencies/Move.toml | 1 + .../circular_dependencies/bar/Move.toml | 1 + .../build_tests/dependency_chain/Move.toml | 1 + .../dependency_chain/bar/Move.toml | 1 + .../dependency_chain/foo/Move.toml | 1 + .../tests/build_tests/dev_address/Move.toml | 1 + .../build_tests/disassemble_module/Move.toml | 1 + .../disassemble_module/sources/m.move | 7 +- .../empty_module_no_deps/Move.toml | 1 + .../include_exclude_stdlib/Move.toml | 1 + .../include_exclude_stdlib/args.exp | 22 +- .../sources/UseSigner.move | 8 +- .../tests/build_tests/json_errors/Move.toml | 1 + .../tests/build_tests/migration/Move.toml | 1 + .../rebuild_after_adding_new_source/Move.toml | 1 + .../Move.toml | 1 + .../rebuild_after_touching_manifest/Move.toml | 1 + .../rebuild_after_touching_source/Move.toml | 1 + .../rebuild_no_modification/Move.toml | 1 + .../build_tests/unbound_address/Move.toml | 1 + .../build_tests/unbound_dependency/Move.toml | 1 + .../tests/metatests/cov/plain/Move.toml | 1 + .../cov/two-runs-diff-module/Move.toml | 1 + .../cov/two-runs-diff-module/sources/M1.move | 4 +- .../cov/two-runs-diff-module/sources/M2.move | 4 +- .../cov/two-runs-same-module/Move.toml | 1 + .../cov/two-runs-same-module/sources/M.move | 4 +- .../assign_dev_addr_for_dep/Move.toml | 1 + .../assign_dev_addr_for_dep/dep/Move.toml | 1 + .../Move.toml | 1 + .../Move.toml | 1 + .../build_modules_and_scripts/Move.toml | 1 + .../build_modules_and_scripts/sources/M.move | 4 +- .../doctor_with_stdlib/Move.toml | 3 +- .../doctor_with_stdlib/sources/M.move | 4 +- .../explain_arithmetic_failure/Move.toml | 1 + .../explain_stdlib_abort/Move.toml | 1 + .../sources/bad_borrow.move | 1 - .../explain_user_module_abort/Move.toml | 1 + .../sources/Fail.move | 4 +- .../sandbox_tests/gas_metering/Move.toml | 1 + .../generate_struct_layout/Move.toml | 1 + .../generate_struct_layout/sources/M1.move | 8 +- .../generate_struct_layout/sources/M2.move | 2 +- .../sources/phantoms.move | 10 +- .../module_disassemble/Move.toml | 1 + .../module_disassemble/deps1/Move.toml | 1 + .../module_disassemble/deps2/Move.toml | 1 + .../module_disassemble/sources/M1.move | 3 +- .../module_publish_view/Move.toml | 1 + .../module_publish_view/sources/Module.move | 6 +- .../multi_module_publish/Move.toml | 1 + .../sources/GoodFriends.move | 3 +- .../Move.toml | 1 + .../dep/Move.toml | 1 + .../dep/sources/m.move | 4 +- .../sandbox_tests/package_basics/Move.toml | 1 + .../sandbox_tests/package_basics/args.exp | 13 +- .../sandbox_tests/package_basics/args.txt | 2 +- .../sandbox_tests/print_stack_trace/Move.toml | 3 +- .../print_stack_trace/sources/M.move | 4 +- .../print_stack_trace/sources/N.move | 6 +- .../sources/print_stack_trace.move | 3 +- .../sandbox_tests/print_values/Move.toml | 3 +- .../tests/sandbox_tests/print_values/args.exp | 7 - .../sandbox_tests/print_values/sources/M.move | 40 +- .../sandbox_tests/publish_then_run/Move.toml | 1 + .../publish_then_run/sources/M.move | 4 +- .../random_test_flag_correctness/Move.toml | 1 + .../sandbox_tests/use_named_address/Move.toml | 1 + .../Move.toml | 1 + .../Move.toml | 1 + .../no_git_remote_package/Move.toml | 1 + .../upload_tests/valid_package1/Move.toml | 1 + .../upload_tests/valid_package2/Move.toml | 1 + .../upload_tests/valid_package3/Move.toml | 1 + .../crates/move-compiler/src/editions/mod.rs | 2 +- .../move_2024/typing/dot_call_non_struct.exp | 2 +- .../typing/duplicate_defines_primitive.exp | 4 +- .../typing/duplicate_defines_primitive.move | 4 +- .../tests/move_check_testsuite.rs | 2 +- .../tests/sources/different_visbilities.move | 4 +- ...t_template_AnotherTypeOfScript.notest_move | 4 +- .../root_template_OneTypeOfScript.notest_move | 4 +- .../src/resolution/resolution_graph.rs | 3 +- .../tests/borrow/basic_test.move | 22 +- .../tests/borrow/function_call.exp | 4192 +++++++++++-- .../tests/borrow/function_call.move | 10 +- .../tests/borrow/hyper_edge.exp | 4194 +++++++++++-- .../tests/borrow/hyper_edge.move | 13 +- .../tests/borrow_strong/basic_test.move | 28 +- .../tests/eliminate_imm_refs/basic_test.move | 4 +- .../escape_analysis/return_internal_refs.move | 4 +- .../escape_analysis/return_refs_into_vec.exp | 5250 +++++++++++++++-- .../escape_analysis/return_refs_into_vec.move | 6 +- .../tests/escape_analysis/struct_eq.exp | 7 - .../tests/escape_analysis/struct_eq.move | 4 +- .../tests/from_move/smoke_test.exp | 16 +- .../tests/from_move/smoke_test.move | 8 +- .../tests/livevar/basic_test.move | 6 +- .../tests/memory_instr/basic_test.move | 22 +- .../mut_ref_instrumentation/basic_test.move | 22 +- .../crates/move-stdlib-natives/src/lib.rs | 89 +- .../move/crates/move-stdlib/Move.toml | 1 + .../move/crates/move-stdlib/docs/address.md | 44 + .../move/crates/move-stdlib/docs/ascii.md | 372 +- .../move/crates/move-stdlib/docs/bcs.md | 4 +- .../crates/move-stdlib/docs/bit_vector.md | 81 +- .../move-stdlib/{nursery => }/docs/debug.md | 5 +- .../move/crates/move-stdlib/docs/error.md | 475 -- .../crates/move-stdlib/docs/fixed_point32.md | 235 +- .../move/crates/move-stdlib/docs/hash.md | 8 +- .../move/crates/move-stdlib/docs/macros.md | 14 + .../move/crates/move-stdlib/docs/option.md | 62 +- .../move/crates/move-stdlib/docs/overview.md | 11 +- .../move/crates/move-stdlib/docs/signer.md | 63 - .../move/crates/move-stdlib/docs/string.md | 268 +- .../move/crates/move-stdlib/docs/type_name.md | 222 +- .../move/crates/move-stdlib/docs/u128.md | 195 + .../move/crates/move-stdlib/docs/u16.md | 195 + .../move/crates/move-stdlib/docs/u256.md | 145 + .../move/crates/move-stdlib/docs/u32.md | 195 + .../move/crates/move-stdlib/docs/u64.md | 195 + .../move/crates/move-stdlib/docs/u8.md | 195 + .../move/crates/move-stdlib/docs/vector.md | 100 +- .../move-stdlib/error_description.errmap | Bin 1310 -> 0 bytes .../move/crates/move-stdlib/nursery/Move.toml | 8 - .../move-stdlib/nursery/docs/compare.md | 167 - .../move-stdlib/nursery/sources/compare.move | 70 - .../move-stdlib/nursery/sources/debug.move | 18 - .../nursery/tests/compare_tests.move | 86 - .../crates/move-stdlib/sources/address.move | 12 + .../crates/move-stdlib/sources/ascii.move | 167 +- .../move/crates/move-stdlib/sources/bcs.move | 3 + .../move-stdlib/sources/bit_vector.move | 45 +- .../crates/move-stdlib/sources/debug.move | 9 + .../crates/move-stdlib/sources/error.move | 82 - .../move-stdlib/sources/fixed_point32.move | 70 +- .../move/crates/move-stdlib/sources/hash.move | 3 + .../crates/move-stdlib/sources/macros.move | 102 + .../crates/move-stdlib/sources/option.move | 162 +- .../crates/move-stdlib/sources/signer.move | 15 - .../crates/move-stdlib/sources/string.move | 118 +- .../crates/move-stdlib/sources/type_name.move | 97 +- .../move/crates/move-stdlib/sources/u128.move | 79 + .../move/crates/move-stdlib/sources/u16.move | 79 + .../move/crates/move-stdlib/sources/u256.move | 50 + .../move/crates/move-stdlib/sources/u32.move | 79 + .../move/crates/move-stdlib/sources/u64.move | 79 + .../move/crates/move-stdlib/sources/u8.move | 79 + .../crates/move-stdlib/sources/unit_test.move | 22 + .../crates/move-stdlib/sources/vector.move | 300 +- .../move/crates/move-stdlib/src/lib.rs | 24 - .../move/crates/move-stdlib/src/main.rs | 5 - .../crates/move-stdlib/tests/ascii_tests.move | 188 +- .../crates/move-stdlib/tests/bcs_tests.move | 44 +- .../move-stdlib/tests/bit_vector_tests.move | 133 +- .../move-stdlib/tests/fixedpoint32_tests.move | 100 +- .../crates/move-stdlib/tests/hash_tests.move | 9 +- .../move-stdlib/tests/integer_tests.move | 220 + .../move-stdlib/tests/move_unit_test.rs | 50 - .../tests/move_verification_test.rs | 13 - .../move-stdlib/tests/option_tests.move | 156 +- .../move-stdlib/tests/string_tests.move | 80 +- .../move-stdlib/tests/type_name_tests.move | 103 +- .../crates/move-stdlib/tests/u128_tests.move | 78 + .../crates/move-stdlib/tests/u16_tests.move | 78 + .../crates/move-stdlib/tests/u256_tests.move | 72 + .../crates/move-stdlib/tests/u32_tests.move | 78 + .../crates/move-stdlib/tests/u64_tests.move | 79 + .../crates/move-stdlib/tests/u8_tests.move | 77 + .../move-stdlib/tests/vector_tests.move | 840 ++- .../src/vm_test_harness.rs | 1 + .../crates/move-unit-test/src/test_runner.rs | 1 + .../tests/test_sources/address_args.move | 4 +- .../tests/test_sources/arithmetic_errors.move | 4 +- .../tests/test_sources/construct_data.move | 8 +- .../test_sources/cross_module_aborts.exp | 8 +- .../test_sources/cross_module_aborts.move | 6 +- .../tests/test_sources/do_nothing.move | 4 +- .../test_sources/expected_abort_no_abort.move | 4 +- .../tests/test_sources/native_abort.exp | 12 +- .../tests/test_sources/native_abort.move | 1 - .../test_sources/non_exsistent_native.move | 4 +- .../tests/test_sources/proposal_test.move | 8 +- .../tests/test_sources/signer_args.exp | 6 +- .../tests/test_sources/signer_args.move | 10 +- .../tests/test_sources/timeout.exp | 4 +- .../tests/test_sources/timeout.move | 6 +- .../tests/test_sources/unexpected_abort.exp | 38 +- .../tests/test_sources/unexpected_abort.move | 4 +- .../move-vm-integration-tests/Cargo.toml | 2 +- .../src/tests/binary_format_version.rs | 2 + .../src/tests/depth_tests_modules.move | 66 +- .../src/tests/function_arg_tests.rs | 4 +- .../src/tests/loader_tests_modules.move | 268 +- .../src/tests/nested_loop_tests.rs | 6 +- .../src/tests/relinking_tests_b_v1.move | 2 +- .../src/tests/relinking_tests_c_v0.move | 2 +- .../src/tests/relinking_tests_c_v1.move | 4 +- .../src/tests/relinking_tests_c_v2.move | 6 +- .../tests/builtins/get_txn_sender.exp | 4 + .../tests/builtins/get_txn_sender.mvir | 10 +- .../tests/entry_points/call_native.exp | 4 +- .../tests/entry_points/call_native.move | 2 +- .../move/crates/test-generation/src/lib.rs | 1 + .../sui-adapter/src/execution_engine.rs | 2 +- .../latest/sui-move-natives/src/lib.rs | 116 +- sui-execution/src/latest.rs | 2 +- 256 files changed, 18603 insertions(+), 4224 deletions(-) create mode 100644 external-crates/move/crates/move-stdlib/docs/address.md rename external-crates/move/crates/move-stdlib/{nursery => }/docs/debug.md (86%) delete mode 100644 external-crates/move/crates/move-stdlib/docs/error.md create mode 100644 external-crates/move/crates/move-stdlib/docs/macros.md delete mode 100644 external-crates/move/crates/move-stdlib/docs/signer.md create mode 100644 external-crates/move/crates/move-stdlib/docs/u128.md create mode 100644 external-crates/move/crates/move-stdlib/docs/u16.md create mode 100644 external-crates/move/crates/move-stdlib/docs/u256.md create mode 100644 external-crates/move/crates/move-stdlib/docs/u32.md create mode 100644 external-crates/move/crates/move-stdlib/docs/u64.md create mode 100644 external-crates/move/crates/move-stdlib/docs/u8.md delete mode 100644 external-crates/move/crates/move-stdlib/error_description.errmap delete mode 100644 external-crates/move/crates/move-stdlib/nursery/Move.toml delete mode 100644 external-crates/move/crates/move-stdlib/nursery/docs/compare.md delete mode 100644 external-crates/move/crates/move-stdlib/nursery/sources/compare.move delete mode 100644 external-crates/move/crates/move-stdlib/nursery/sources/debug.move delete mode 100644 external-crates/move/crates/move-stdlib/nursery/tests/compare_tests.move create mode 100644 external-crates/move/crates/move-stdlib/sources/address.move create mode 100644 external-crates/move/crates/move-stdlib/sources/debug.move delete mode 100644 external-crates/move/crates/move-stdlib/sources/error.move create mode 100644 external-crates/move/crates/move-stdlib/sources/macros.move delete mode 100644 external-crates/move/crates/move-stdlib/sources/signer.move create mode 100644 external-crates/move/crates/move-stdlib/sources/u128.move create mode 100644 external-crates/move/crates/move-stdlib/sources/u16.move create mode 100644 external-crates/move/crates/move-stdlib/sources/u256.move create mode 100644 external-crates/move/crates/move-stdlib/sources/u32.move create mode 100644 external-crates/move/crates/move-stdlib/sources/u64.move create mode 100644 external-crates/move/crates/move-stdlib/sources/u8.move create mode 100644 external-crates/move/crates/move-stdlib/tests/integer_tests.move delete mode 100644 external-crates/move/crates/move-stdlib/tests/move_unit_test.rs delete mode 100644 external-crates/move/crates/move-stdlib/tests/move_verification_test.rs create mode 100644 external-crates/move/crates/move-stdlib/tests/u128_tests.move create mode 100644 external-crates/move/crates/move-stdlib/tests/u16_tests.move create mode 100644 external-crates/move/crates/move-stdlib/tests/u256_tests.move create mode 100644 external-crates/move/crates/move-stdlib/tests/u32_tests.move create mode 100644 external-crates/move/crates/move-stdlib/tests/u64_tests.move create mode 100644 external-crates/move/crates/move-stdlib/tests/u8_tests.move diff --git a/bridge/move/tokens/btc/Move.toml b/bridge/move/tokens/btc/Move.toml index cbd69d8556431..47824231423d3 100644 --- a/bridge/move/tokens/btc/Move.toml +++ b/bridge/move/tokens/btc/Move.toml @@ -1,6 +1,7 @@ [package] name = "BridgedBTC" version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../../crates/sui-framework/packages/move-stdlib" } @@ -8,4 +9,3 @@ Sui = { local = "../../../../crates/sui-framework/packages/sui-framework" } [addresses] bridged_btc = "0x0" - diff --git a/bridge/move/tokens/eth/Move.toml b/bridge/move/tokens/eth/Move.toml index 215aa37ce8687..1a21898cc0355 100644 --- a/bridge/move/tokens/eth/Move.toml +++ b/bridge/move/tokens/eth/Move.toml @@ -1,6 +1,7 @@ [package] name = "BridgedETH" version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../../crates/sui-framework/packages/move-stdlib" } @@ -8,4 +9,3 @@ Sui = { local = "../../../../crates/sui-framework/packages/sui-framework" } [addresses] bridged_eth = "0x0" - diff --git a/bridge/move/tokens/mock/ka/Move.toml b/bridge/move/tokens/mock/ka/Move.toml index ad08496bd39e1..1fbdf04ca2975 100644 --- a/bridge/move/tokens/mock/ka/Move.toml +++ b/bridge/move/tokens/mock/ka/Move.toml @@ -1,6 +1,7 @@ [package] name = "BridgedKa" version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../../../crates/sui-framework/packages/move-stdlib" } @@ -8,4 +9,3 @@ Sui = { local = "../../../../../crates/sui-framework/packages/sui-framework" } [addresses] bridged_ka = "0x0" - diff --git a/bridge/move/tokens/usdc/Move.toml b/bridge/move/tokens/usdc/Move.toml index e98ae4d71c621..a956409c0839f 100644 --- a/bridge/move/tokens/usdc/Move.toml +++ b/bridge/move/tokens/usdc/Move.toml @@ -1,6 +1,7 @@ [package] name = "BridgedUSDC" version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../../crates/sui-framework/packages/move-stdlib" } @@ -8,4 +9,3 @@ Sui = { local = "../../../../crates/sui-framework/packages/sui-framework" } [addresses] bridged_usdc = "0x0" - diff --git a/bridge/move/tokens/usdt/Move.toml b/bridge/move/tokens/usdt/Move.toml index 699123ddb0325..1d86a908fdd8e 100644 --- a/bridge/move/tokens/usdt/Move.toml +++ b/bridge/move/tokens/usdt/Move.toml @@ -1,6 +1,7 @@ [package] name = "BridgedUSDT" version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../../crates/sui-framework/packages/move-stdlib" } @@ -8,4 +9,3 @@ Sui = { local = "../../../../crates/sui-framework/packages/sui-framework" } [addresses] bridged_usdt = "0x0" - diff --git a/crates/sui-adapter-transactional-tests/tests/size_limits/event_limits_tests.exp b/crates/sui-adapter-transactional-tests/tests/size_limits/event_limits_tests.exp index 4b2c0d8cf17e2..bddf4a6d99846 100644 --- a/crates/sui-adapter-transactional-tests/tests/size_limits/event_limits_tests.exp +++ b/crates/sui-adapter-transactional-tests/tests/size_limits/event_limits_tests.exp @@ -32,13 +32,13 @@ task 6, lines 68-70: //# run Test::M1::emit_event_with_size --args 200000 --gas-budget 100000000000000 --summarize events: 1 mutated: 1 -gas summary: computation_cost: 1393000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 +gas summary: computation_cost: 1394000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 task 7, lines 71-73: //# run Test::M1::emit_event_with_size --args 256000 --gas-budget 100000000000000 --summarize events: 1 mutated: 1 -gas summary: computation_cost: 1814000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 +gas summary: computation_cost: 1815000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 task 8, lines 74-76: //# run Test::M1::emit_event_with_size --args 256001 --gas-budget 100000000000000 --summarize diff --git a/crates/sui-adapter-transactional-tests/tests/size_limits/move_object_size_limit.exp b/crates/sui-adapter-transactional-tests/tests/size_limits/move_object_size_limit.exp index dfa9be123b60f..7767e2f318584 100644 --- a/crates/sui-adapter-transactional-tests/tests/size_limits/move_object_size_limit.exp +++ b/crates/sui-adapter-transactional-tests/tests/size_limits/move_object_size_limit.exp @@ -18,10 +18,10 @@ task 3, lines 82-84: //# run Test::M1::transfer_object_with_size --args 255999 --sender A --gas-budget 100000000000000 created: object(3,0) mutated: object(0,0) -gas summary: computation_cost: 1863000000, storage_cost: 1947553200, storage_rebate: 978120, non_refundable_storage_fee: 9880 +gas summary: computation_cost: 1864000000, storage_cost: 1947553200, storage_rebate: 978120, non_refundable_storage_fee: 9880 task 4, line 85: //# run Test::M1::transfer_object_with_size --args 256000 --sender A --gas-budget 100000000000000 created: object(4,0) mutated: object(0,0) -gas summary: computation_cost: 1863000000, storage_cost: 1947560800, storage_rebate: 978120, non_refundable_storage_fee: 9880 +gas summary: computation_cost: 1864000000, storage_cost: 1947560800, storage_rebate: 978120, non_refundable_storage_fee: 9880 diff --git a/crates/sui-core/src/unit_tests/move_package_management_tests.rs b/crates/sui-core/src/unit_tests/move_package_management_tests.rs index e3c4dd8df6344..feb538ca0fb32 100644 --- a/crates/sui-core/src/unit_tests/move_package_management_tests.rs +++ b/crates/sui-core/src/unit_tests/move_package_management_tests.rs @@ -46,7 +46,7 @@ async fn test_manage_package_update() { .read_to_string(&mut lock_file_contents) .expect("Error reading Move.lock file"); - let expected = expect![[r#" + let expected = expect![[r##" # @generated by Move, please check-in and do not edit manually. [move] @@ -56,7 +56,7 @@ async fn test_manage_package_update() { [move.toolchain-version] compiler-version = "0.0.1" - edition = "legacy" + edition = "2024.beta" flavor = "sui" [env] @@ -66,6 +66,6 @@ async fn test_manage_package_update() { original-published-id = "0x000000000000000000000000000000000000000000000000000000000000000a" latest-published-id = "0x000000000000000000000000000000000000000000000000000000000000000b" published-version = "5" - "#]]; + "##]]; expected.assert_eq(lock_file_contents.as_str()); } diff --git a/crates/sui-move/src/unit_test.rs b/crates/sui-move/src/unit_test.rs index a5d0bf3b192ef..3bb4da1f2da0f 100644 --- a/crates/sui-move/src/unit_test.rs +++ b/crates/sui-move/src/unit_test.rs @@ -114,7 +114,10 @@ pub fn run_move_unit_tests( report_stacktrace_on_abort: true, ..config }, - sui_move_natives::all_natives(/* silent */ false), + sui_move_natives::all_natives( + /* silent */ false, + &ProtocolConfig::get_for_max_version_UNSAFE(), + ), Some(initial_cost_schedule_for_unit_tests()), compute_coverage, &mut std::io::stdout(), diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index 244d7016f3af5..2935b547a40cd 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -1368,6 +1368,9 @@ "base_tx_cost_per_byte": { "u64": "0" }, + "bcs_failure_cost": null, + "bcs_legacy_min_output_size_cost": null, + "bcs_per_byte_serialized_cost": null, "binary_address_identifiers": null, "binary_constant_pool": null, "binary_enum_def_instantiations": null, @@ -1419,6 +1422,8 @@ "crypto_invalid_arguments_cost": { "u64": "100" }, + "debug_print_base_cost": null, + "debug_print_stack_trace_base_cost": null, "dynamic_field_add_child_object_cost_base": { "u64": "100" }, @@ -1652,6 +1657,12 @@ "hash_keccak256_data_cost_per_byte": { "u64": "2" }, + "hash_sha2_256_base_cost": null, + "hash_sha2_256_legacy_min_input_len_cost": null, + "hash_sha2_256_per_byte_cost": null, + "hash_sha3_256_base_cost": null, + "hash_sha3_256_legacy_min_input_len_cost": null, + "hash_sha3_256_per_byte_cost": null, "hmac_hmac_sha3_256_cost_base": { "u64": "52" }, @@ -1875,6 +1886,14 @@ "storage_rebate_rate": { "u64": "9900" }, + "string_check_utf8_base_cost": null, + "string_check_utf8_per_byte_cost": null, + "string_index_of_base_cost": null, + "string_index_of_per_byte_pattern_cost": null, + "string_index_of_per_byte_searched_cost": null, + "string_is_char_boundary_base_cost": null, + "string_sub_string_base_cost": null, + "string_sub_string_per_byte_cost": null, "transfer_freeze_object_cost_base": { "u64": "52" }, @@ -1888,6 +1907,8 @@ "tx_context_derive_id_cost_base": { "u64": "52" }, + "type_name_get_base_cost": null, + "type_name_get_per_byte_cost": null, "types_is_one_time_witness_cost_base": { "u64": "52" }, @@ -1904,7 +1925,15 @@ "u64": "2" }, "vdf_hash_to_input_cost": null, - "vdf_verify_vdf_cost": null + "vdf_verify_vdf_cost": null, + "vector_borrow_base_cost": null, + "vector_destroy_empty_base_cost": null, + "vector_empty_base_cost": null, + "vector_length_base_cost": null, + "vector_pop_back_base_cost": null, + "vector_push_back_base_cost": null, + "vector_push_back_legacy_per_abstract_memory_unit_cost": null, + "vector_swap_base_cost": null } } } diff --git a/crates/sui-protocol-config/src/lib.rs b/crates/sui-protocol-config/src/lib.rs index 0a630e7a87b44..0a1ddec049c8b 100644 --- a/crates/sui-protocol-config/src/lib.rs +++ b/crates/sui-protocol-config/src/lib.rs @@ -164,6 +164,7 @@ const MAX_PROTOCOL_VERSION: u64 = 53; // Version 53: Add feature flag to decide whether to attempt to finalize bridge committee // Enable consensus commit prologue V3 on testnet. // Turn on shared object congestion control in testnet. +// Update stdlib natives costs #[derive(Copy, Clone, Debug, Hash, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct ProtocolVersion(u64); @@ -1101,6 +1102,40 @@ pub struct ProtocolConfig { vdf_verify_vdf_cost: Option, vdf_hash_to_input_cost: Option, + // Stdlib costs + bcs_per_byte_serialized_cost: Option, + bcs_legacy_min_output_size_cost: Option, + bcs_failure_cost: Option, + + hash_sha2_256_base_cost: Option, + hash_sha2_256_per_byte_cost: Option, + hash_sha2_256_legacy_min_input_len_cost: Option, + hash_sha3_256_base_cost: Option, + hash_sha3_256_per_byte_cost: Option, + hash_sha3_256_legacy_min_input_len_cost: Option, + type_name_get_base_cost: Option, + type_name_get_per_byte_cost: Option, + + string_check_utf8_base_cost: Option, + string_check_utf8_per_byte_cost: Option, + string_is_char_boundary_base_cost: Option, + string_sub_string_base_cost: Option, + string_sub_string_per_byte_cost: Option, + string_index_of_base_cost: Option, + string_index_of_per_byte_pattern_cost: Option, + string_index_of_per_byte_searched_cost: Option, + + vector_empty_base_cost: Option, + vector_length_base_cost: Option, + vector_push_back_base_cost: Option, + vector_push_back_legacy_per_abstract_memory_unit_cost: Option, + vector_borrow_base_cost: Option, + vector_pop_back_base_cost: Option, + vector_destroy_empty_base_cost: Option, + vector_swap_base_cost: Option, + debug_print_base_cost: Option, + debug_print_stack_trace_base_cost: Option, + // ==== Ephemeral (consensus only) params deleted ==== // // Const params for consensus scoring decision @@ -1909,6 +1944,36 @@ impl ProtocolConfig { vdf_verify_vdf_cost: None, vdf_hash_to_input_cost: None, + bcs_per_byte_serialized_cost: None, + bcs_legacy_min_output_size_cost: None, + bcs_failure_cost: None, + hash_sha2_256_base_cost: None, + hash_sha2_256_per_byte_cost: None, + hash_sha2_256_legacy_min_input_len_cost: None, + hash_sha3_256_base_cost: None, + hash_sha3_256_per_byte_cost: None, + hash_sha3_256_legacy_min_input_len_cost: None, + type_name_get_base_cost: None, + type_name_get_per_byte_cost: None, + string_check_utf8_base_cost: None, + string_check_utf8_per_byte_cost: None, + string_is_char_boundary_base_cost: None, + string_sub_string_base_cost: None, + string_sub_string_per_byte_cost: None, + string_index_of_base_cost: None, + string_index_of_per_byte_pattern_cost: None, + string_index_of_per_byte_searched_cost: None, + vector_empty_base_cost: None, + vector_length_base_cost: None, + vector_push_back_base_cost: None, + vector_push_back_legacy_per_abstract_memory_unit_cost: None, + vector_borrow_base_cost: None, + vector_pop_back_base_cost: None, + vector_destroy_empty_base_cost: None, + vector_swap_base_cost: None, + debug_print_base_cost: None, + debug_print_stack_trace_base_cost: None, + max_size_written_objects: None, max_size_written_objects_system_tx: None, @@ -2536,6 +2601,37 @@ impl ProtocolConfig { cfg.feature_flags.per_object_congestion_control_mode = PerObjectCongestionControlMode::TotalTxCount; } + + // Adjust stdlib gas costs + cfg.bcs_per_byte_serialized_cost = Some(2); + cfg.bcs_legacy_min_output_size_cost = Some(1); + cfg.bcs_failure_cost = Some(52); + cfg.debug_print_base_cost = Some(52); + cfg.debug_print_stack_trace_base_cost = Some(52); + cfg.hash_sha2_256_base_cost = Some(52); + cfg.hash_sha2_256_per_byte_cost = Some(2); + cfg.hash_sha2_256_legacy_min_input_len_cost = Some(1); + cfg.hash_sha3_256_base_cost = Some(52); + cfg.hash_sha3_256_per_byte_cost = Some(2); + cfg.hash_sha3_256_legacy_min_input_len_cost = Some(1); + cfg.type_name_get_base_cost = Some(52); + cfg.type_name_get_per_byte_cost = Some(2); + cfg.string_check_utf8_base_cost = Some(52); + cfg.string_check_utf8_per_byte_cost = Some(2); + cfg.string_is_char_boundary_base_cost = Some(52); + cfg.string_sub_string_base_cost = Some(52); + cfg.string_sub_string_per_byte_cost = Some(2); + cfg.string_index_of_base_cost = Some(52); + cfg.string_index_of_per_byte_pattern_cost = Some(2); + cfg.string_index_of_per_byte_searched_cost = Some(2); + cfg.vector_empty_base_cost = Some(52); + cfg.vector_length_base_cost = Some(52); + cfg.vector_push_back_base_cost = Some(52); + cfg.vector_push_back_legacy_per_abstract_memory_unit_cost = Some(2); + cfg.vector_borrow_base_cost = Some(52); + cfg.vector_pop_back_base_cost = Some(52); + cfg.vector_destroy_empty_base_cost = Some(52); + cfg.vector_swap_base_cost = Some(52); } // Use this template when making changes: // diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_53.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_53.snap index 2761b97f0f926..5317182e71a72 100644 --- a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_53.snap +++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_53.snap @@ -268,6 +268,35 @@ hmac_hmac_sha3_256_input_cost_per_byte: 2 hmac_hmac_sha3_256_input_cost_per_block: 2 check_zklogin_id_cost_base: 200 check_zklogin_issuer_cost_base: 200 +bcs_per_byte_serialized_cost: 2 +bcs_legacy_min_output_size_cost: 1 +bcs_failure_cost: 52 +hash_sha2_256_base_cost: 52 +hash_sha2_256_per_byte_cost: 2 +hash_sha2_256_legacy_min_input_len_cost: 1 +hash_sha3_256_base_cost: 52 +hash_sha3_256_per_byte_cost: 2 +hash_sha3_256_legacy_min_input_len_cost: 1 +type_name_get_base_cost: 52 +type_name_get_per_byte_cost: 2 +string_check_utf8_base_cost: 52 +string_check_utf8_per_byte_cost: 2 +string_is_char_boundary_base_cost: 52 +string_sub_string_base_cost: 52 +string_sub_string_per_byte_cost: 2 +string_index_of_base_cost: 52 +string_index_of_per_byte_pattern_cost: 2 +string_index_of_per_byte_searched_cost: 2 +vector_empty_base_cost: 52 +vector_length_base_cost: 52 +vector_push_back_base_cost: 52 +vector_push_back_legacy_per_abstract_memory_unit_cost: 2 +vector_borrow_base_cost: 52 +vector_pop_back_base_cost: 52 +vector_destroy_empty_base_cost: 52 +vector_swap_base_cost: 52 +debug_print_base_cost: 52 +debug_print_stack_trace_base_cost: 52 execution_version: 3 consensus_bad_nodes_stake_threshold: 20 max_jwk_votes_per_validator_per_epoch: 240 diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_53.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_53.snap index 0419b3548b467..671eb71756050 100644 --- a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_53.snap +++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_53.snap @@ -272,6 +272,35 @@ hmac_hmac_sha3_256_input_cost_per_byte: 2 hmac_hmac_sha3_256_input_cost_per_block: 2 check_zklogin_id_cost_base: 200 check_zklogin_issuer_cost_base: 200 +bcs_per_byte_serialized_cost: 2 +bcs_legacy_min_output_size_cost: 1 +bcs_failure_cost: 52 +hash_sha2_256_base_cost: 52 +hash_sha2_256_per_byte_cost: 2 +hash_sha2_256_legacy_min_input_len_cost: 1 +hash_sha3_256_base_cost: 52 +hash_sha3_256_per_byte_cost: 2 +hash_sha3_256_legacy_min_input_len_cost: 1 +type_name_get_base_cost: 52 +type_name_get_per_byte_cost: 2 +string_check_utf8_base_cost: 52 +string_check_utf8_per_byte_cost: 2 +string_is_char_boundary_base_cost: 52 +string_sub_string_base_cost: 52 +string_sub_string_per_byte_cost: 2 +string_index_of_base_cost: 52 +string_index_of_per_byte_pattern_cost: 2 +string_index_of_per_byte_searched_cost: 2 +vector_empty_base_cost: 52 +vector_length_base_cost: 52 +vector_push_back_base_cost: 52 +vector_push_back_legacy_per_abstract_memory_unit_cost: 2 +vector_borrow_base_cost: 52 +vector_pop_back_base_cost: 52 +vector_destroy_empty_base_cost: 52 +vector_swap_base_cost: 52 +debug_print_base_cost: 52 +debug_print_stack_trace_base_cost: 52 execution_version: 3 consensus_bad_nodes_stake_threshold: 20 max_jwk_votes_per_validator_per_epoch: 240 diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_53.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_53.snap index 095c918715c91..b686158e23286 100644 --- a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_53.snap +++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_53.snap @@ -281,6 +281,35 @@ check_zklogin_id_cost_base: 200 check_zklogin_issuer_cost_base: 200 vdf_verify_vdf_cost: 1500 vdf_hash_to_input_cost: 100 +bcs_per_byte_serialized_cost: 2 +bcs_legacy_min_output_size_cost: 1 +bcs_failure_cost: 52 +hash_sha2_256_base_cost: 52 +hash_sha2_256_per_byte_cost: 2 +hash_sha2_256_legacy_min_input_len_cost: 1 +hash_sha3_256_base_cost: 52 +hash_sha3_256_per_byte_cost: 2 +hash_sha3_256_legacy_min_input_len_cost: 1 +type_name_get_base_cost: 52 +type_name_get_per_byte_cost: 2 +string_check_utf8_base_cost: 52 +string_check_utf8_per_byte_cost: 2 +string_is_char_boundary_base_cost: 52 +string_sub_string_base_cost: 52 +string_sub_string_per_byte_cost: 2 +string_index_of_base_cost: 52 +string_index_of_per_byte_pattern_cost: 2 +string_index_of_per_byte_searched_cost: 2 +vector_empty_base_cost: 52 +vector_length_base_cost: 52 +vector_push_back_base_cost: 52 +vector_push_back_legacy_per_abstract_memory_unit_cost: 2 +vector_borrow_base_cost: 52 +vector_pop_back_base_cost: 52 +vector_destroy_empty_base_cost: 52 +vector_swap_base_cost: 52 +debug_print_base_cost: 52 +debug_print_stack_trace_base_cost: 52 execution_version: 3 consensus_bad_nodes_stake_threshold: 20 max_jwk_votes_per_validator_per_epoch: 240 @@ -299,3 +328,4 @@ checkpoint_summary_version_specific_data: 1 max_soft_bundle_size: 5 bridge_should_try_to_finalize_committee: true max_accumulated_txn_cost_per_object_in_mysticeti_commit: 10 + diff --git a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc.mvir b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc.mvir index ba1630fa4c4be..1e66a269fd30c 100644 --- a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc.mvir +++ b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc.mvir @@ -1,6 +1,5 @@ //# publish module 0x1.Tester { - import 0x1.signer; struct Data has key { v1: u64, v2: u64 } struct Box has key { f: u64 } diff --git a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc_valid.mvir b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc_valid.mvir index c7bef57b0cf67..1721acce33997 100644 --- a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc_valid.mvir +++ b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_loc_valid.mvir @@ -1,6 +1,5 @@ //# publish module 0x1.Tester { - import 0x1.signer; struct Data has key { v1: u64, v2: u64 } struct Box has key { f: u64 } diff --git a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_on_mut.mvir b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_on_mut.mvir index a3e85b9b6bb64..17f91c9d54e84 100644 --- a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_on_mut.mvir +++ b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/reference_safety/imm_borrow_on_mut.mvir @@ -1,6 +1,5 @@ //# publish module 0x1.Tester { - import 0x1.signer; struct Initializer has key { x: u64, y: u64 } struct Point { x: u64, y: u64 } diff --git a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.exp b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.exp index b435375c82a0f..e121d67ab237c 100644 --- a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.exp +++ b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.exp @@ -1,21 +1,21 @@ processed 2 tasks -task 0, lines 1-42: +task 0, lines 1-39: //# publish Error: Unable to publish module '0000000000000000000000000000000000000000000000000000000000000001::Token'. Got VMError: { major_status: READREF_WITHOUT_COPY_ABILITY, sub_status: None, location: 0x1::Token, indices: [(FunctionDefinition, 4)], - offsets: [(FunctionDefinitionIndex(4), 13)], + offsets: [(FunctionDefinitionIndex(4), 10)], } -task 1, lines 44-85: +task 1, lines 41-79: //# publish Error: Unable to publish module '0000000000000000000000000000000000000000000000000000000000000002::Token'. Got VMError: { major_status: READREF_WITHOUT_COPY_ABILITY, sub_status: None, location: 0x2::Token, indices: [(FunctionDefinition, 4)], - offsets: [(FunctionDefinitionIndex(4), 13)], + offsets: [(FunctionDefinitionIndex(4), 10)], } diff --git a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.mvir b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.mvir index 92835730f53c6..dcd42a7d76848 100644 --- a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.mvir +++ b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/cant_deref_resource.mvir @@ -1,6 +1,5 @@ //# publish module 0x1.Token { - import 0x1.signer; struct T has key {v: u64} @@ -19,23 +18,21 @@ module 0x1.Token { return move(res); } - public publish(account: &signer, t: Self.T) { + public publish(account: address, t: Self.T) { label b0: abort(0); } fake(addr: address): &mut Self.T { label b0: abort(0); } - public test(account: &signer) { - let addr: address; + public test(account: address) { let t: Self.T; let tref: &mut Self.T; let y: Self.T; label b0: - addr = signer.address_of(copy(account)); t = Self.new(0); Self.publish(copy(account), move(t)); - tref = Self.fake(move(addr)); + tref = Self.fake(move(account)); y = *move(tref); return; } @@ -43,7 +40,6 @@ module 0x1.Token { //# publish module 0x2.Token { - import 0x1.signer; enum T has key { V{v: u64}} @@ -62,23 +58,21 @@ module 0x2.Token { return move(res); } - public publish(account: &signer, t: Self.T) { + public publish(account: address, t: Self.T) { label b0: abort(0); } fake(addr: address): &mut Self.T { label b0: abort(0); } - public test(account: &signer) { - let addr: address; + public test(account: address) { let t: Self.T; let tref: &mut Self.T; let y: Self.T; label b0: - addr = signer.address_of(copy(account)); t = Self.new(0); Self.publish(copy(account), move(t)); - tref = Self.fake(move(addr)); + tref = Self.fake(move(account)); y = *move(tref); return; } diff --git a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/mut_call_from_get_resource.mvir b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/mut_call_from_get_resource.mvir index b953092719047..75bacb56d4435 100644 --- a/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/mut_call_from_get_resource.mvir +++ b/external-crates/move/crates/bytecode-verifier-transactional-tests/tests/type_safety/mut_call_from_get_resource.mvir @@ -1,6 +1,5 @@ //# publish module 0x42.Token { - import 0x1.signer; struct T has key {balance: u64} @@ -28,16 +27,15 @@ module 0x42.Token { return; } - public publish(account: &signer, t: Self.T) { + public publish(account: address, t: Self.T) { label b0: abort(0); } fake(addr: address): &mut Self.T { label b0: abort(0); } - public test(account: &signer) { + public test(account: address) { let z: Self.T; - let addr1: address; let struct1: &mut Self.T; let imm_struct1: &Self.T; let struct1_original_balance: u64; @@ -46,9 +44,8 @@ module 0x42.Token { z = Self.new(0); Self.publish(copy(account), move(z)); - addr1 = signer.address_of(move(account)); // returns mut reference, test its usage - struct1 = Self.fake(copy(addr1)); + struct1 = Self.fake(copy(account)); imm_struct1 = freeze(copy(struct1)); struct1_original_balance = Self.value(move(imm_struct1)); @@ -66,7 +63,6 @@ module 0x42.Token { //# publish module 0x43.Token { - import 0x1.signer; enum T has key {V { balance: u64} } @@ -94,16 +90,15 @@ module 0x43.Token { return; } - public publish(account: &signer, t: Self.T) { + public publish(account: address, t: Self.T) { label b0: abort(0); } fake(addr: address): &mut Self.T { label b0: abort(0); } - public test(account: &signer) { + public test(account: address) { let z: Self.T; - let addr1: address; let struct1: &mut Self.T; let imm_struct1: &Self.T; let struct1_original_balance: u64; @@ -112,9 +107,8 @@ module 0x43.Token { z = Self.new(0); Self.publish(copy(account), move(z)); - addr1 = signer.address_of(move(account)); // returns mut reference, test its usage - struct1 = Self.fake(copy(addr1)); + struct1 = Self.fake(copy(account)); imm_struct1 = freeze(copy(struct1)); struct1_original_balance = Self.value(move(imm_struct1)); diff --git a/external-crates/move/crates/language-benchmarks/src/move_vm.rs b/external-crates/move/crates/language-benchmarks/src/move_vm.rs index 2927af76b9acc..68cdeca91dc0f 100644 --- a/external-crates/move/crates/language-benchmarks/src/move_vm.rs +++ b/external-crates/move/crates/language-benchmarks/src/move_vm.rs @@ -28,6 +28,7 @@ pub fn bench(c: &mut Criterion, fun: &str) { let move_vm = MoveVM::new(move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent debug */ true, )) .unwrap(); execute(c, &move_vm, modules, fun); diff --git a/external-crates/move/crates/move-analyzer/tests/completion/Move.toml b/external-crates/move/crates/move-analyzer/tests/completion/Move.toml index c2c82541db7ae..cddaad6938c8e 100644 --- a/external-crates/move/crates/move-analyzer/tests/completion/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/completion/Move.toml @@ -1,6 +1,5 @@ [package] name = "Completion" -version = "0.0.1" edition = "2024.beta" [dependencies] diff --git a/external-crates/move/crates/move-analyzer/tests/dot_completion.exp b/external-crates/move/crates/move-analyzer/tests/dot_completion.exp index e0e9e954c6635..ad426b6f92568 100644 --- a/external-crates/move/crates/move-analyzer/tests/dot_completion.exp +++ b/external-crates/move/crates/move-analyzer/tests/dot_completion.exp @@ -52,6 +52,14 @@ Method 'test()' == other_mod_dot.move ======================================================== -- test 0 ------------------- use line: 4, use_col: 10 +Method 'all!()' + INSERT TEXT: 'all!(|${1}| ${2})' + TARGET : '(std::vector::all)' + TYPE : 'fun <$T>(&vector<$T>, |&$T| -> bool): bool' +Method 'any!()' + INSERT TEXT: 'any!(|${1}| ${2})' + TARGET : '(std::vector::any)' + TYPE : 'fun <$T>(&vector<$T>, |&$T| -> bool): bool' Method 'append()' INSERT TEXT: 'append(${1:other})' TARGET : '(std::vector::append)' @@ -68,10 +76,42 @@ Method 'contains()' INSERT TEXT: 'contains(${1:e})' TARGET : '(std::vector::contains)' TYPE : 'fun (&vector, &Element): bool' +Method 'count!()' + INSERT TEXT: 'count!(|${1}| ${2})' + TARGET : '(std::vector::count)' + TYPE : 'fun <$T>(&vector<$T>, |&$T| -> bool): u64' +Method 'destroy!()' + INSERT TEXT: 'destroy!(|${1}| ${2})' + TARGET : '(std::vector::destroy)' + TYPE : 'fun <$T>(vector<$T>, |$T| -> ())' Method 'destroy_empty()' INSERT TEXT: 'destroy_empty()' TARGET : '(std::vector::destroy_empty)' TYPE : 'fun (vector)' +Method 'do!()' + INSERT TEXT: 'do!(|${1}| ${2})' + TARGET : '(std::vector::do)' + TYPE : 'fun <$T>(vector<$T>, |$T| -> ())' +Method 'do_mut!()' + INSERT TEXT: 'do_mut!(|${1}| ${2})' + TARGET : '(std::vector::do_mut)' + TYPE : 'fun <$T>(&mut vector<$T>, |&mut $T| -> ())' +Method 'do_ref!()' + INSERT TEXT: 'do_ref!(|${1}| ${2})' + TARGET : '(std::vector::do_ref)' + TYPE : 'fun <$T>(&vector<$T>, |&$T| -> ())' +Method 'filter!()' + INSERT TEXT: 'filter!(|${1}| ${2})' + TARGET : '(std::vector::filter)' + TYPE : 'fun <$T>(vector<$T>, |&$T| -> bool): vector<$T>' +Method 'find_index!()' + INSERT TEXT: 'find_index!(|${1}| ${2})' + TARGET : '(std::vector::find_index)' + TYPE : 'fun <$T>(vector<$T>, |&$T| -> bool): Option' +Method 'fold!()' + INSERT TEXT: 'fold!(${1:init}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::fold)' + TYPE : 'fun <$T, $Acc>(vector<$T>, $Acc, |$Acc, $T| -> $Acc): $Acc' Method 'index_of()' INSERT TEXT: 'index_of(${1:e})' TARGET : '(std::vector::index_of)' @@ -88,6 +128,18 @@ Method 'length()' INSERT TEXT: 'length()' TARGET : '(std::vector::length)' TYPE : 'fun (&vector): u64' +Method 'map!()' + INSERT TEXT: 'map!(|${1}| ${2})' + TARGET : '(std::vector::map)' + TYPE : 'fun <$T, $U>(vector<$T>, |$T| -> $U): vector<$U>' +Method 'map_ref!()' + INSERT TEXT: 'map_ref!(|${1}| ${2})' + TARGET : '(std::vector::map_ref)' + TYPE : 'fun <$T, $U>(&vector<$T>, |&$T| -> $U): vector<$U>' +Method 'partition!()' + INSERT TEXT: 'partition!(|${1}| ${2})' + TARGET : '(std::vector::partition)' + TYPE : 'fun <$T>(vector<$T>, |&$T| -> bool): (vector<$T>, vector<$T>)' Method 'pop_back()' INSERT TEXT: 'pop_back()' TARGET : '(std::vector::pop_back)' @@ -112,4 +164,44 @@ Method 'swap_remove()' INSERT TEXT: 'swap_remove(${1:i})' TARGET : '(std::vector::swap_remove)' TYPE : 'fun (&mut vector, u64): Element' +Method 'to_ascii_string()' + INSERT TEXT: 'to_ascii_string()' + TARGET : '(std::ascii::string)' + TYPE : 'fun (vector): String' +Method 'to_string()' + INSERT TEXT: 'to_string()' + TARGET : '(std::string::utf8)' + TYPE : 'fun (vector): String' +Method 'try_to_ascii_string()' + INSERT TEXT: 'try_to_ascii_string()' + TARGET : '(std::ascii::try_string)' + TYPE : 'fun (vector): Option' +Method 'try_to_string()' + INSERT TEXT: 'try_to_string()' + TARGET : '(std::string::try_utf8)' + TYPE : 'fun (vector): Option' +Method 'zip_do!()' + INSERT TEXT: 'zip_do!(${1:v2}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::zip_do)' + TYPE : 'fun <$T1, $T2>(vector<$T1>, vector<$T2>, |$T1, $T2| -> ())' +Method 'zip_do_mut!()' + INSERT TEXT: 'zip_do_mut!(${1:v2}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::zip_do_mut)' + TYPE : 'fun <$T1, $T2>(&mut vector<$T1>, &mut vector<$T2>, |&mut $T1, &mut $T2| -> ())' +Method 'zip_do_ref!()' + INSERT TEXT: 'zip_do_ref!(${1:v2}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::zip_do_ref)' + TYPE : 'fun <$T1, $T2>(&vector<$T1>, &vector<$T2>, |&$T1, &$T2| -> ())' +Method 'zip_do_reverse!()' + INSERT TEXT: 'zip_do_reverse!(${1:v2}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::zip_do_reverse)' + TYPE : 'fun <$T1, $T2>(vector<$T1>, vector<$T2>, |$T1, $T2| -> ())' +Method 'zip_map!()' + INSERT TEXT: 'zip_map!(${1:v2}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::zip_map)' + TYPE : 'fun <$T1, $T2, $U>(vector<$T1>, vector<$T2>, |$T1, $T2| -> $U): vector<$U>' +Method 'zip_map_ref!()' + INSERT TEXT: 'zip_map_ref!(${1:v2}, |${2}, ${3}| ${4})' + TARGET : '(std::vector::zip_map_ref)' + TYPE : 'fun <$T1, $T2, $U>(&vector<$T1>, &vector<$T2>, |&$T1, &$T2| -> $U): vector<$U>' diff --git a/external-crates/move/crates/move-analyzer/tests/enums/Move.toml b/external-crates/move/crates/move-analyzer/tests/enums/Move.toml index f1a3c05aaa2cf..0fa60b5d2ecf3 100644 --- a/external-crates/move/crates/move-analyzer/tests/enums/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/enums/Move.toml @@ -1,6 +1,5 @@ [package] name = "Enums" -version = "0.0.1" edition = "2024.alpha" [dependencies] diff --git a/external-crates/move/crates/move-analyzer/tests/implicit_uses.exp b/external-crates/move/crates/move-analyzer/tests/implicit_uses.exp index 71a24a5239fe0..1ae18e4ecb1c0 100644 --- a/external-crates/move/crates/move-analyzer/tests/implicit_uses.exp +++ b/external-crates/move/crates/move-analyzer/tests/implicit_uses.exp @@ -2,8 +2,8 @@ -- test 0 ------------------- use line: 4, use_ndx: 1 Use: 'Option', start: 13, end: 19 -Def: 'Option', line: 6, def char: 11 -TypeDef: 'Option', line: 6, char: 11 +Def: 'Option', line: 7, def char: 18 +TypeDef: 'Option', line: 7, char: 18 On Hover: public struct std::option::Option has copy, drop, store { vec: vector @@ -16,7 +16,7 @@ zero or one because Move bytecode does not have ADTs. -- test 1 ------------------- use line: 8, use_ndx: 2 Use: 'option', start: 26, end: 32 -Def: 'option', line: 1, def char: 12 +Def: 'option', line: 4, def char: 12 TypeDef: no info On Hover: module std::option diff --git a/external-crates/move/crates/move-analyzer/tests/inlay-hints/Move.toml b/external-crates/move/crates/move-analyzer/tests/inlay-hints/Move.toml index f5aa6ee913e03..7920464fd5d5a 100644 --- a/external-crates/move/crates/move-analyzer/tests/inlay-hints/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/inlay-hints/Move.toml @@ -1,6 +1,5 @@ [package] name = "InlayHints" -version = "0.0.1" edition = "2024.beta" [dependencies] diff --git a/external-crates/move/crates/move-analyzer/tests/macros.exp b/external-crates/move/crates/move-analyzer/tests/macros.exp index 10f0e3341fc97..d0e0324404abf 100644 --- a/external-crates/move/crates/move-analyzer/tests/macros.exp +++ b/external-crates/move/crates/move-analyzer/tests/macros.exp @@ -34,29 +34,41 @@ macro fun Macros::fun_type::macro_fun() == macros.move ======================================================== -- test 0 ------------------- use line: 7, use_ndx: 0 +Use: 'n foo(', start: 12, end: 18 +Def: 'vector', line: 6, def char: 12 +TypeDef: no info +On Hover: +module std::vector + +A variable-sized container that can hold any type. Indexing is 0-based, and +vectors are growable. This module has many native functions. + + +-- test 1 ------------------- +use line: 7, use_ndx: 1 Use: 'foo', start: 14, end: 17 Def: 'foo', line: 6, def char: 14 TypeDef: no info On Hover: macro fun Macros::macros::foo($i: u64, $body: |u64| -> u64): u64 --- test 1 ------------------- -use line: 7, use_ndx: 1 +-- test 2 ------------------- +use line: 7, use_ndx: 2 Use: '$i', start: 18, end: 20 Def: '$i', line: 6, def char: 18 TypeDef: no info On Hover: $i: u64 --- test 2 ------------------- -use line: 7, use_ndx: 2 +-- test 3 ------------------- +use line: 7, use_ndx: 3 Use: '$body', start: 27, end: 32 Def: '$body', line: 6, def char: 27 TypeDef: no info On Hover: $body: |u64| -> u64 --- test 3 ------------------- +-- test 4 ------------------- use line: 15, use_ndx: 0 Use: 'bar', start: 14, end: 17 Def: 'bar', line: 14, def char: 14 @@ -64,7 +76,7 @@ TypeDef: no info On Hover: macro fun Macros::macros::bar($i: Macros::macros::SomeStruct, $body: |Macros::macros::SomeStruct| -> Macros::macros::SomeStruct): Macros::macros::SomeStruct --- test 4 ------------------- +-- test 5 ------------------- use line: 15, use_ndx: 1 Use: '$i', start: 18, end: 20 Def: '$i', line: 14, def char: 18 @@ -72,7 +84,7 @@ TypeDef: 'SomeStruct', line: 2, char: 18 On Hover: $i: Macros::macros::SomeStruct --- test 5 ------------------- +-- test 6 ------------------- use line: 15, use_ndx: 2 Use: 'SomeStruct', start: 22, end: 32 Def: 'SomeStruct', line: 2, def char: 18 @@ -82,7 +94,7 @@ public struct Macros::macros::SomeStruct has drop { some_field: u64 } --- test 6 ------------------- +-- test 7 ------------------- use line: 15, use_ndx: 3 Use: '$body', start: 34, end: 39 Def: '$body', line: 14, def char: 34 @@ -90,7 +102,7 @@ TypeDef: no info On Hover: $body: |Macros::macros::SomeStruct| -> Macros::macros::SomeStruct --- test 7 ------------------- +-- test 8 ------------------- use line: 15, use_ndx: 4 Use: 'SomeStruct', start: 42, end: 52 Def: 'SomeStruct', line: 2, def char: 18 @@ -100,7 +112,7 @@ public struct Macros::macros::SomeStruct has drop { some_field: u64 } --- test 8 ------------------- +-- test 9 ------------------- use line: 15, use_ndx: 5 Use: 'SomeStruct', start: 57, end: 67 Def: 'SomeStruct', line: 2, def char: 18 @@ -110,7 +122,7 @@ public struct Macros::macros::SomeStruct has drop { some_field: u64 } --- test 9 ------------------- +-- test 10 ------------------- use line: 15, use_ndx: 6 Use: 'SomeStruct', start: 70, end: 80 Def: 'SomeStruct', line: 2, def char: 18 @@ -120,7 +132,7 @@ public struct Macros::macros::SomeStruct has drop { some_field: u64 } --- test 10 ------------------- +-- test 11 ------------------- use line: 19, use_ndx: 0 Use: 'for_each', start: 14, end: 22 Def: 'for_each', line: 18, def char: 14 @@ -128,7 +140,7 @@ TypeDef: no info On Hover: macro fun Macros::macros::for_each<$T>($v: &vector<$T>, $body: |&$T| -> ()) --- test 11 ------------------- +-- test 12 ------------------- use line: 19, use_ndx: 1 Use: '$T', start: 23, end: 25 Def: '$T', line: 18, def char: 23 @@ -136,7 +148,7 @@ TypeDef: no info On Hover: $T --- test 12 ------------------- +-- test 13 ------------------- use line: 19, use_ndx: 2 Use: '$v', start: 27, end: 29 Def: '$v', line: 18, def char: 27 @@ -144,7 +156,7 @@ TypeDef: no info On Hover: let $v: &vector --- test 13 ------------------- +-- test 14 ------------------- use line: 19, use_ndx: 3 Use: '$T', start: 39, end: 41 Def: '$T', line: 18, def char: 23 @@ -152,7 +164,7 @@ TypeDef: no info On Hover: $T --- test 14 ------------------- +-- test 15 ------------------- use line: 19, use_ndx: 4 Use: '$body', start: 44, end: 49 Def: '$body', line: 18, def char: 44 @@ -160,7 +172,7 @@ TypeDef: no info On Hover: $body: |&$T| -> () --- test 15 ------------------- +-- test 16 ------------------- use line: 19, use_ndx: 5 Use: '$T', start: 53, end: 55 Def: '$T', line: 18, def char: 23 @@ -168,7 +180,7 @@ TypeDef: no info On Hover: $T --- test 16 ------------------- +-- test 17 ------------------- use line: 33, use_ndx: 0 Use: 'macros', start: 16, end: 22 Def: 'macros', line: 0, def char: 15 @@ -176,7 +188,7 @@ TypeDef: no info On Hover: module Macros::macros --- test 17 ------------------- +-- test 18 ------------------- use line: 33, use_ndx: 1 Use: 'foo', start: 24, end: 27 Def: 'foo', line: 6, def char: 14 @@ -184,7 +196,7 @@ TypeDef: no info On Hover: macro fun Macros::macros::foo($i: u64, $body: |u64| -> u64): u64 --- test 18 ------------------- +-- test 19 ------------------- use line: 33, use_ndx: 2 Use: 'p', start: 29, end: 30 Def: 'p', line: 31, def char: 12 @@ -192,7 +204,7 @@ TypeDef: no info On Hover: let p: u64 --- test 19 ------------------- +-- test 20 ------------------- use line: 33, use_ndx: 3 Use: 'x', start: 33, end: 34 Def: 'x', line: 32, def char: 33 @@ -200,7 +212,7 @@ TypeDef: no info On Hover: let x: u64 --- test 20 ------------------- +-- test 21 ------------------- use line: 33, use_ndx: 4 Use: 'x', start: 36, end: 37 Def: 'x', line: 32, def char: 33 @@ -208,7 +220,7 @@ TypeDef: no info On Hover: let x: u64 --- test 21 ------------------- +-- test 22 ------------------- use line: 38, use_ndx: 5 Use: 'y', start: 49, end: 50 Def: 'y', line: 37, def char: 49 @@ -216,7 +228,7 @@ TypeDef: no info On Hover: let y: u64 --- test 22 ------------------- +-- test 23 ------------------- use line: 38, use_ndx: 7 Use: 'foo', start: 68, end: 71 Def: 'foo', line: 6, def char: 14 @@ -224,7 +236,7 @@ TypeDef: no info On Hover: macro fun Macros::macros::foo($i: u64, $body: |u64| -> u64): u64 --- test 23 ------------------- +-- test 24 ------------------- use line: 38, use_ndx: 8 Use: 'y', start: 73, end: 74 Def: 'y', line: 37, def char: 49 @@ -232,7 +244,7 @@ TypeDef: no info On Hover: let y: u64 --- test 24 ------------------- +-- test 25 ------------------- use line: 38, use_ndx: 9 Use: 'z', start: 77, end: 78 Def: 'z', line: 37, def char: 77 @@ -240,7 +252,7 @@ TypeDef: no info On Hover: let z: u64 --- test 25 ------------------- +-- test 26 ------------------- use line: 38, use_ndx: 10 Use: 'z', start: 80, end: 81 Def: 'z', line: 37, def char: 77 @@ -248,7 +260,7 @@ TypeDef: no info On Hover: let z: u64 --- test 26 ------------------- +-- test 27 ------------------- use line: 44, use_ndx: 4 Use: 'sum', start: 48, end: 51 Def: 'sum', line: 42, def char: 16 @@ -256,7 +268,7 @@ TypeDef: no info On Hover: let mut sum: u64 --- test 27 ------------------- +-- test 28 ------------------- use line: 45, use_ndx: 0 Use: 'es', start: 8, end: 10 Def: 'es', line: 41, def char: 12 @@ -264,7 +276,7 @@ TypeDef: no info On Hover: let es: vector --- test 28 ------------------- +-- test 29 ------------------- use line: 45, use_ndx: 1 Use: 'feach', start: 11, end: 16 Def: 'for_each', line: 18, def char: 14 @@ -272,7 +284,7 @@ TypeDef: no info On Hover: macro fun Macros::macros::for_each<$T>($v: &vector<$T>, $body: |&$T| -> ()) --- test 29 ------------------- +-- test 30 ------------------- use line: 52, use_ndx: 2 Use: 'SomeStruct', start: 34, end: 44 Def: 'SomeStruct', line: 2, def char: 18 diff --git a/external-crates/move/crates/move-analyzer/tests/macros.ide b/external-crates/move/crates/move-analyzer/tests/macros.ide index 76471b5f246f1..2a2dc12a448e5 100644 --- a/external-crates/move/crates/move-analyzer/tests/macros.ide +++ b/external-crates/move/crates/move-analyzer/tests/macros.ide @@ -35,6 +35,10 @@ "use_line": 7, "use_ndx": 2 }, + { + "use_line": 7, + "use_ndx": 3 + }, { "use_line": 15, "use_ndx": 0 @@ -146,4 +150,4 @@ ] } } -} \ No newline at end of file +} diff --git a/external-crates/move/crates/move-analyzer/tests/mod-ident-uniform/Move.toml b/external-crates/move/crates/move-analyzer/tests/mod-ident-uniform/Move.toml index 4d4ae972dec2a..4c87e222272d8 100644 --- a/external-crates/move/crates/move-analyzer/tests/mod-ident-uniform/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/mod-ident-uniform/Move.toml @@ -1,6 +1,6 @@ [package] name = "ModIdentUniform" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/move-2024/Move.toml b/external-crates/move/crates/move-analyzer/tests/move-2024/Move.toml index 6e8e5c1001331..0d679d0771239 100644 --- a/external-crates/move/crates/move-analyzer/tests/move-2024/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/move-2024/Move.toml @@ -1,6 +1,5 @@ [package] name = "Move2024" -version = "0.0.1" edition = "2024.beta" [dependencies] diff --git a/external-crates/move/crates/move-analyzer/tests/parse-error-dep/Move.toml b/external-crates/move/crates/move-analyzer/tests/parse-error-dep/Move.toml index bd210e0806f65..1149112ed88b1 100644 --- a/external-crates/move/crates/move-analyzer/tests/parse-error-dep/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/parse-error-dep/Move.toml @@ -1,6 +1,6 @@ [package] name = "ParseErrorDep" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/parse-error/Move.toml b/external-crates/move/crates/move-analyzer/tests/parse-error/Move.toml index d0dd5b9d61241..a27b40aaebcb9 100644 --- a/external-crates/move/crates/move-analyzer/tests/parse-error/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/parse-error/Move.toml @@ -1,6 +1,6 @@ [package] name = "ParseError" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/partial-dot/Move.toml b/external-crates/move/crates/move-analyzer/tests/partial-dot/Move.toml index 66aeb5dcdcfa7..da0955faa0d8e 100644 --- a/external-crates/move/crates/move-analyzer/tests/partial-dot/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/partial-dot/Move.toml @@ -1,6 +1,6 @@ [package] name = "PartialDot" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/partial-function/Move.toml b/external-crates/move/crates/move-analyzer/tests/partial-function/Move.toml index 917b1f61cf461..b9876d64b3a67 100644 --- a/external-crates/move/crates/move-analyzer/tests/partial-function/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/partial-function/Move.toml @@ -1,6 +1,6 @@ [package] name = "PartialFunction" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/pkg-naming-error/Move.toml b/external-crates/move/crates/move-analyzer/tests/pkg-naming-error/Move.toml index f8feb6145014d..9463d76e478b3 100644 --- a/external-crates/move/crates/move-analyzer/tests/pkg-naming-error/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/pkg-naming-error/Move.toml @@ -1,6 +1,6 @@ [package] name = "PkgNamingError" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/pre-type-error-dep/Move.toml b/external-crates/move/crates/move-analyzer/tests/pre-type-error-dep/Move.toml index 7b2f8dce30660..b9ebf9b55b5bf 100644 --- a/external-crates/move/crates/move-analyzer/tests/pre-type-error-dep/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/pre-type-error-dep/Move.toml @@ -1,6 +1,6 @@ [package] name = "PreTypeErrorDep" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-analyzer/tests/pre-type-error/Move.toml b/external-crates/move/crates/move-analyzer/tests/pre-type-error/Move.toml index 8ff3b2be186ee..05bd4a4a6a41d 100644 --- a/external-crates/move/crates/move-analyzer/tests/pre-type-error/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/pre-type-error/Move.toml @@ -1,6 +1,6 @@ [package] name = "PreTypeError" -version = "0.0.1" +edition = "legacy" [addresses] PreTypeError = "0xCAFE" diff --git a/external-crates/move/crates/move-analyzer/tests/symbols/Move.toml b/external-crates/move/crates/move-analyzer/tests/symbols/Move.toml index ddd0a6d3582c2..858e952648a42 100644 --- a/external-crates/move/crates/move-analyzer/tests/symbols/Move.toml +++ b/external-crates/move/crates/move-analyzer/tests/symbols/Move.toml @@ -1,6 +1,6 @@ [package] name = "Symbols" -version = "0.0.1" +edition = "legacy" [dependencies] MoveStdlib = { local = "../../../move-stdlib/", addr_subst = { "std" = "0x1" } } diff --git a/external-crates/move/crates/move-cli/src/main.rs b/external-crates/move/crates/move-cli/src/main.rs index acbbbe6d23a8d..11eb3d0699814 100644 --- a/external-crates/move/crates/move-cli/src/main.rs +++ b/external-crates/move/crates/move-cli/src/main.rs @@ -4,19 +4,12 @@ use anyhow::Result; use move_core_types::account_address::AccountAddress; -use move_stdlib_natives::{all_natives, nursery_natives, GasParameters, NurseryGasParameters}; +use move_stdlib_natives::{all_natives, GasParameters}; fn main() -> Result<()> { let cost_table = &move_vm_test_utils::gas_schedule::INITIAL_COST_SCHEDULE; let addr = AccountAddress::from_hex_literal("0x1").unwrap(); - let natives = all_natives(addr, GasParameters::zeros()) - .into_iter() - .chain(nursery_natives( - /* silent */ false, - addr, - NurseryGasParameters::zeros(), - )) - .collect(); + let natives = all_natives(addr, GasParameters::zeros(), /* silent */ false); move_cli::move_cli(natives, cost_table) } diff --git a/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/B/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/B/Move.toml index a6ad126c76313..cd03254de0669 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/B/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/B/Move.toml @@ -1,5 +1,6 @@ [package] name = "Bar" +edition = "2024.beta" [addresses] B = "0x2" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/C/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/C/Move.toml index db95e4a84a73b..6f2a8b5a3aa38 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/C/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/C/Move.toml @@ -1,5 +1,6 @@ [package] name = "Foo" +edition = "2024.beta" [addresses] C = "0x3" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/Move.toml index 3b41905ce8d07..959dd1966ec1f 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/build_with_bytecode/Move.toml @@ -1,5 +1,6 @@ [package] name = "A" +edition = "2024.beta" [addresses] A = "0x2" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/Move.toml index 18ae248f3b8c4..92679a7fff084 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/Move.toml @@ -1,5 +1,6 @@ [package] name = "Test" +edition = "2024.beta" [dependencies] SomeDep = { local = "dep" } diff --git a/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/dep/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/dep/Move.toml index a03576b363c0b..2d3274e227456 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/dep/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/build_with_dep_warnings/dep/Move.toml @@ -1,2 +1,3 @@ [package] name = "SomeDep" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/build_with_warnings/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/build_with_warnings/Move.toml index cb7453ae43828..c8f2665caf8cb 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/build_with_warnings/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/build_with_warnings/Move.toml @@ -1,2 +1,3 @@ [package] name = "Test" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/Move.toml index 799d21da627c2..eb51a49a36279 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/Move.toml @@ -1,5 +1,6 @@ [package] name = "Test" +edition = "2024.beta" [addresses] foo = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/sources/m.move b/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/sources/m.move index 0947c77107c1c..f055c1d054ec4 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/sources/m.move +++ b/external-crates/move/crates/move-cli/tests/build_tests/canonicalize_module/sources/m.move @@ -12,9 +12,9 @@ module bar::b { module bar::c { #[allow(unused_field)] - struct B { x: u64 } + public struct B { x: u64 } #[allow(unused_field)] - struct A { b: vector } + public struct A { b: vector } public fun g(): u64 { foo::a::f() + @@ -35,8 +35,8 @@ module baz::d { } module qux::e { - struct B has drop { x: u64 } - struct A has drop { x: u64 } + public struct B has drop { x: u64 } + public struct A has drop { x: u64 } public fun a(): A { A { x: 46 } diff --git a/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/Move.toml index 6aaff66ce5b5a..d0203b9635df7 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/Move.toml @@ -1,5 +1,6 @@ [package] name = "Foo" +edition = "2024.beta" [dependencies] Bar = { local = "bar" } diff --git a/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/bar/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/bar/Move.toml index 4dba0ffcdc0b3..765a6cfe26577 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/bar/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/circular_dependencies/bar/Move.toml @@ -1,5 +1,6 @@ [package] name = "Bar" +edition = "2024.beta" [dependencies] Foo = { local = ".." } diff --git a/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/Move.toml index 9555addf395da..074036f200787 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/Move.toml @@ -1,5 +1,6 @@ [package] name = "A" +edition = "2024.beta" [addresses] A = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/bar/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/bar/Move.toml index b1a9789ad67de..55f3cce59b4b1 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/bar/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/bar/Move.toml @@ -1,5 +1,6 @@ [package] name = "Bar" +edition = "2024.beta" [addresses] A = "_" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/foo/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/foo/Move.toml index 54db278827612..1d171931f5650 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/foo/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/dependency_chain/foo/Move.toml @@ -1,5 +1,6 @@ [package] name = "Foo" +edition = "2024.beta" [addresses] A = "_" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/dev_address/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/dev_address/Move.toml index bf79537d599bd..1fe668353dcbf 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/dev_address/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/dev_address/Move.toml @@ -1,5 +1,6 @@ [package] name = "A" +edition = "2024.beta" [addresses] A = "_" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/Move.toml index cb7453ae43828..c8f2665caf8cb 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/Move.toml @@ -1,2 +1,3 @@ [package] name = "Test" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/sources/m.move b/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/sources/m.move index 35af0da97addc..b8b8c95c001ae 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/sources/m.move +++ b/external-crates/move/crates/move-cli/tests/build_tests/disassemble_module/sources/m.move @@ -1,7 +1,7 @@ -module 0x42::m { +module 0x42::m; -struct Zs {} -struct As {} +public struct Zs {} +public struct As {} const Zc: u64 = 1; const Ac: u32 = 0; @@ -12,4 +12,3 @@ public fun zf(): u64 { Zc } public fun af(): u32 { Ac } public fun sf(): vector { AString } public fun nf(): vector { NotAString } -} diff --git a/external-crates/move/crates/move-cli/tests/build_tests/empty_module_no_deps/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/empty_module_no_deps/Move.toml index 1cf5dd8272d40..c3f61cd7e71ad 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/empty_module_no_deps/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/empty_module_no_deps/Move.toml @@ -1,2 +1,3 @@ [package] name = "A" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/Move.toml index 4fe19dd013e56..6e3fa396834c9 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/Move.toml @@ -1,5 +1,6 @@ [package] name = "build_include_exclude_stdlib" +edition = "2024.beta" [addresses] std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/args.exp b/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/args.exp index 5620f9e5d8cf6..2089ac58027a6 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/args.exp +++ b/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/args.exp @@ -1,24 +1,16 @@ Command `build -v`: BUILDING build_include_exclude_stdlib error[E03002]: unbound module - ┌─ ./sources/UseSigner.move:2:7 + ┌─ ./sources/UseSigner.move:2:9 │ -2 │ use std::signer; - │ ^^^^^^^^^^^ Invalid 'use'. Unbound module: 'std::signer' +2 │ use std::address; + │ ^^^^^^^^^^^^ Invalid 'use'. Unbound module: 'std::address' -warning[W09002]: unused variable - ┌─ ./sources/UseSigner.move:4:16 +error[E03006]: unexpected name in this position + ┌─ ./sources/UseSigner.move:5:9 │ -4 │ public fun f(account: &signer): address { - │ ^^^^^^^ Unused parameter 'account'. Consider removing or prefixing with an underscore: '_account' - │ - = This warning can be suppressed with '#[allow(unused_variable)]' applied to the 'module' or module member ('const', 'fun', or 'struct') - -error[E03002]: unbound module - ┌─ ./sources/UseSigner.move:5:5 - │ -5 │ signer::address_of(account) - │ ^^^^^^ Unbound module alias 'signer' +5 │ address::length() + │ ^^^^^^^ Could not resolve the name 'address' Command `-d -v build`: INCLUDING DEPENDENCY MoveStdlib diff --git a/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/sources/UseSigner.move b/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/sources/UseSigner.move index fdec0d78b1d5b..471e9ac62e941 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/sources/UseSigner.move +++ b/external-crates/move/crates/move-cli/tests/build_tests/include_exclude_stdlib/sources/UseSigner.move @@ -1,7 +1,7 @@ module 0x1::Example { - use std::signer; + use std::address; - public fun f(account: &signer): address { - signer::address_of(account) - } + public fun f(): u64 { + address::length() + } } diff --git a/external-crates/move/crates/move-cli/tests/build_tests/json_errors/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/json_errors/Move.toml index cb7453ae43828..c8f2665caf8cb 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/json_errors/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/json_errors/Move.toml @@ -1,2 +1,3 @@ [package] name = "Test" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/migration/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/migration/Move.toml index a1c46ce0fd4e6..dba667925d24a 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/migration/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/migration/Move.toml @@ -3,6 +3,7 @@ [package] name = "A" +edition = "2024.beta" # this is a comment [addresses] diff --git a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_adding_new_source/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_adding_new_source/Move.toml index 38c8578e70c5d..fb502b9d63a8b 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_adding_new_source/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_adding_new_source/Move.toml @@ -1,2 +1,3 @@ [package] name = "Foo" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_deleting_output_artifact/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_deleting_output_artifact/Move.toml index 38c8578e70c5d..fb502b9d63a8b 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_deleting_output_artifact/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_deleting_output_artifact/Move.toml @@ -1,2 +1,3 @@ [package] name = "Foo" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_manifest/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_manifest/Move.toml index 38c8578e70c5d..fb502b9d63a8b 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_manifest/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_manifest/Move.toml @@ -1,2 +1,3 @@ [package] name = "Foo" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_source/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_source/Move.toml index 38c8578e70c5d..fb502b9d63a8b 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_source/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_after_touching_source/Move.toml @@ -1,2 +1,3 @@ [package] name = "Foo" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_no_modification/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_no_modification/Move.toml index 38c8578e70c5d..fb502b9d63a8b 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/rebuild_no_modification/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/rebuild_no_modification/Move.toml @@ -1,2 +1,3 @@ [package] name = "Foo" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/unbound_address/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/unbound_address/Move.toml index eb004df99fa61..d3b1acf0e1ca2 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/unbound_address/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/unbound_address/Move.toml @@ -1,5 +1,6 @@ [package] name = "A" +edition = "2024.beta" [addresses] A = "_" diff --git a/external-crates/move/crates/move-cli/tests/build_tests/unbound_dependency/Move.toml b/external-crates/move/crates/move-cli/tests/build_tests/unbound_dependency/Move.toml index 34150a5abc8c8..72e580593a81d 100644 --- a/external-crates/move/crates/move-cli/tests/build_tests/unbound_dependency/Move.toml +++ b/external-crates/move/crates/move-cli/tests/build_tests/unbound_dependency/Move.toml @@ -1,5 +1,6 @@ [package] name = "A" +edition = "2024.beta" [dependencies] Foo = { local = "foo" } diff --git a/external-crates/move/crates/move-cli/tests/metatests/cov/plain/Move.toml b/external-crates/move/crates/move-cli/tests/metatests/cov/plain/Move.toml index 22033b4afee83..1a5af0edcf304 100644 --- a/external-crates/move/crates/move-cli/tests/metatests/cov/plain/Move.toml +++ b/external-crates/move/crates/move-cli/tests/metatests/cov/plain/Move.toml @@ -1,2 +1,3 @@ [package] name = "plain" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/Move.toml b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/Move.toml index 4e912138c202f..c338346e40e39 100644 --- a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/Move.toml +++ b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/Move.toml @@ -1,2 +1,3 @@ [package] name = "two-runs-diff-module" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M1.move b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M1.move index 1bd0d579ed22c..9fd7c6bce4215 100644 --- a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M1.move +++ b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M1.move @@ -1,5 +1,3 @@ -address 0x42 { -module M1 { +module 0x42::M1 { public entry fun test() {} } -} diff --git a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M2.move b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M2.move index efe2e57019bd7..9b7708349de42 100644 --- a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M2.move +++ b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-diff-module/sources/M2.move @@ -1,5 +1,3 @@ -address 0x42 { -module M2 { +module 0x42::M2 { public entry fun test() {} } -} diff --git a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/Move.toml b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/Move.toml index 5b3ff32dba14f..e2281d4558338 100644 --- a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/Move.toml +++ b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/Move.toml @@ -1,2 +1,3 @@ [package] name = "two-runs-same-module" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/sources/M.move b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/sources/M.move index 2bf7c4f6e69ff..63bfb22fe0cfc 100644 --- a/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/sources/M.move +++ b/external-crates/move/crates/move-cli/tests/metatests/cov/two-runs-same-module/sources/M.move @@ -1,5 +1,4 @@ -address 0x42 { -module M { +module 0x42::M { public entry fun test(x: u8) { if (x == 0) { return () @@ -8,4 +7,3 @@ module M { } } } -} diff --git a/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/Move.toml b/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/Move.toml index 9807273047ad1..de9900102115b 100644 --- a/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/Move.toml +++ b/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/Move.toml @@ -1,5 +1,6 @@ [package] name = "Foo" +edition = "2024.beta" [addresses] A = "_" diff --git a/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/dep/Move.toml b/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/dep/Move.toml index 504a96e8b969e..b2e5ff722fc15 100644 --- a/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/dep/Move.toml +++ b/external-crates/move/crates/move-cli/tests/move_unit_tests/assign_dev_addr_for_dep/dep/Move.toml @@ -1,5 +1,6 @@ [package] name = "Bar" +edition = "2024.beta" [addresses] B = "_" diff --git a/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_dev_addr_assignment/Move.toml b/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_dev_addr_assignment/Move.toml index 9eda613c2785f..ec94f223d05ea 100644 --- a/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_dev_addr_assignment/Move.toml +++ b/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_dev_addr_assignment/Move.toml @@ -1,5 +1,6 @@ [package] name = "StandaloneModule" +edition = "2024.beta" [addresses] A = "_" diff --git a/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_regular_addr_assignment/Move.toml b/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_regular_addr_assignment/Move.toml index b9d25c351bf5d..125b57dc7e2c4 100644 --- a/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_regular_addr_assignment/Move.toml +++ b/external-crates/move/crates/move-cli/tests/move_unit_tests/standalone_module_with_regular_addr_assignment/Move.toml @@ -1,5 +1,6 @@ [package] name = "StandaloneModule" +edition = "2024.beta" [addresses] A = "0x2" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/Move.toml index 227421ece9413..213deb0302a27 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/Move.toml @@ -1,2 +1,3 @@ [package] name = "build_modules_and_scripts" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/sources/M.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/sources/M.move index 323f521c5fa9b..9b26c6106d495 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/sources/M.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/build_modules_and_scripts/sources/M.move @@ -1,4 +1,2 @@ -address 0x42 { -module M { -} +module 0x42::M { } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/Move.toml index 54d0c7b5cf984..2e8f58e6a36bd 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/Move.toml @@ -1,8 +1,9 @@ [package] name = "doctor_with_stdlib" +edition = "2024.beta" [addresses] std = "0x1" [dependencies] -MoveNursery = { local = "../../../../move-stdlib/nursery" } +MoveStdlib = { local = "../../../../move-stdlib" } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/sources/M.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/sources/M.move index 2a3b4679e1879..8d8f2c2eec2a6 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/sources/M.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/doctor_with_stdlib/sources/M.move @@ -1,5 +1,4 @@ -address 0x2 { -module M { +module 0x42::M { use std::debug; #[allow(unused_function)] @@ -7,4 +6,3 @@ module M { debug::print(&7); } } -} diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_arithmetic_failure/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_arithmetic_failure/Move.toml index 82f9ed8591dc3..19fb61793939a 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_arithmetic_failure/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_arithmetic_failure/Move.toml @@ -1,2 +1,3 @@ [package] name = "explain_arithmetic_failure" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/Move.toml index 30d499f2e0e75..0997e9909a1ed 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/Move.toml @@ -1,5 +1,6 @@ [package] name = "explain_stdlib_abort" +edition = "2024.beta" [addresses] std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/sources/bad_borrow.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/sources/bad_borrow.move index a88ee72f325ca..4305fd427223b 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/sources/bad_borrow.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_stdlib_abort/sources/bad_borrow.move @@ -1,5 +1,4 @@ module 0x42::m { - use std::vector; entry fun bad_borrow() { let v = vector::empty(); let _ref = vector::borrow(&v, 0); diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/Move.toml index 59b849a5b413c..af4f2f265a5db 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/Move.toml @@ -1,2 +1,3 @@ [package] name = "explain_user_module_abort" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/sources/Fail.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/sources/Fail.move index ca5da8df3229e..a60f498cb193a 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/sources/Fail.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/explain_user_module_abort/sources/Fail.move @@ -1,7 +1,5 @@ -address 0x2 { -module Fail { +module 0x2::Fail { public entry fun f() { abort 77 } } -} diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/gas_metering/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/gas_metering/Move.toml index f712729a5a34a..2a77d599f217f 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/gas_metering/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/gas_metering/Move.toml @@ -1,2 +1,3 @@ [package] name = "gas_metering" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/Move.toml index a504af284913b..4113037316681 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/Move.toml @@ -1,2 +1,3 @@ [package] name = "generate_struct_layout" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M1.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M1.move index 7c6f5a31f98c8..c171a80fb3ccf 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M1.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M1.move @@ -2,11 +2,11 @@ module 0x1::M1 { use 0x1::M2::C; - struct A { f: u64, v: vector, b: B } + public struct A { f: u64, v: vector, b: B } - struct B { a: address, c: C, t: T } + public struct B { a: address, c: C, t: T } - struct S { t: T } + public struct S { t: T } - struct G { x: u64, s: S } + public struct G { x: u64, s: S } } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M2.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M2.move index 8e8baa58fe0e4..f3cc297417d58 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M2.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/M2.move @@ -1,5 +1,5 @@ module 0x1::M2 { #[allow(unused_field)] - struct C { t: T, b: bool } + public struct C { t: T, b: bool } } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/phantoms.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/phantoms.move index 36c04fd66ca1b..6c177ab6c6454 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/phantoms.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/generate_struct_layout/sources/phantoms.move @@ -1,19 +1,19 @@ #[allow(unused_field)] module 0x1::phantoms { - struct A {} + public struct A {} - struct B {} + public struct B {} - struct C { + public struct C { a: A, b: B } - struct D { + public struct D { v: vector } - struct E { + public struct E { v1: vector, v2: vector } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/Move.toml index c2cd982ee3515..2d1699293e385 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/Move.toml @@ -1,5 +1,6 @@ [package] name = "module_publish_view" +edition = "2024.beta" [addresses] std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps1/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps1/Move.toml index c0a24ac0f10be..295dd96c2e4cf 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps1/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps1/Move.toml @@ -1,2 +1,3 @@ [package] name = "Deps1" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps2/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps2/Move.toml index 75c9ff86ecfa0..a34d60f2624e0 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps2/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/deps2/Move.toml @@ -1,2 +1,3 @@ [package] name = "Deps2" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/sources/M1.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/sources/M1.move index f5aed00e50400..7c289c5e51e5d 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/sources/M1.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_disassemble/sources/M1.move @@ -1,8 +1,7 @@ module 0xa::M1 { - use std::vector; #[allow(unused_field)] - struct S { i: u64 } + public struct S { i: u64 } public fun foo(x: u64): vector { let y = bar(); diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/Move.toml index a9da3b168aaf4..fb820c1d04de9 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/Move.toml @@ -1,2 +1,3 @@ [package] name = "module_publish_view" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/sources/Module.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/sources/Module.move index 3bde7f18c916b..0dc254cd9b2ae 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/sources/Module.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/module_publish_view/sources/Module.move @@ -1,9 +1,7 @@ -address 0x42 { -module Module { - struct S { i: u64 } +module 0x42::Module { + public struct S { i: u64 } public fun foo(i: u64): S { S { i } } } -} diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/Move.toml index ce353a9bdb159..584de0746e044 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/Move.toml @@ -1,2 +1,3 @@ [package] name = "multi_module_publish" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/sources/GoodFriends.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/sources/GoodFriends.move index c96b84ac900bc..74c3ff22d4e9b 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/sources/GoodFriends.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/multi_module_publish/sources/GoodFriends.move @@ -1,6 +1,5 @@ module 0x2::A { - friend 0x2::B; - public(friend) fun foo() {} + public(package) fun foo() {} } module 0x2::B { diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/Move.toml index 387bb7c90102f..5cd377a29dca2 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/Move.toml @@ -1,5 +1,6 @@ [package] name = "use_named_address" +edition = "2024.beta" [addresses] a = "0x42" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/Move.toml index 0c63f88d75992..c13bafbb000c8 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/Move.toml @@ -1,5 +1,6 @@ [package] name = "Dep" +edition = "2024.beta" [addresses] a = "0x41" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/sources/m.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/sources/m.move index 51a295bafbfbf..276a1997bf484 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/sources/m.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/named_address_conflicts_in_error/dep/sources/m.move @@ -1,6 +1,6 @@ module a::m { - struct X {} - struct Y {} + public struct X {} + public struct Y {} public fun x(): X { X {} } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/Move.toml index cba2b427b2f55..e1714b99487c0 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/Move.toml @@ -1,5 +1,6 @@ [package] name = "PackageBasics" +edition = "2024.beta" [addresses] std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.exp b/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.exp index a46298ad88699..f036924fe828f 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.exp +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.exp @@ -77,20 +77,17 @@ Constants [ 0 => u64: 0 ] } -Command `disassemble --package MoveStdlib --name signer`: +Command `disassemble --package MoveStdlib --name address`: // Move bytecode v6 -module 1.signer { +module 1.address { -native public borrow_address(s#0#0: &signer): &address -public address_of(s#0#0: &signer): address { +public length(): u64 { B0: - 0: MoveLoc[0](s#0#0: &signer) - 1: Call borrow_address(&signer): &address - 2: ReadRef - 3: Ret + 0: LdU64(32) + 1: Ret } } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.txt b/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.txt index a80887c977c7f..803155024e873 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.txt +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/package_basics/args.txt @@ -3,7 +3,7 @@ test --coverage --threads 1 coverage summary --summarize-functions coverage source --module AModule coverage bytecode --module AModule -disassemble --package MoveStdlib --name signer +disassemble --package MoveStdlib --name address info test double_two test one_one diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/Move.toml index 446c3c961dab2..fcc74b457f32b 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/Move.toml @@ -1,8 +1,9 @@ [package] name = "print_stack_trace" +edition = "2024.beta" [addresses] std = "0x1" [dependencies] -MoveNursery = { local = "../../../../move-stdlib/nursery" } +MoveStdlib = { local = "../../../../move-stdlib" } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/M.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/M.move index 3cc1425e225a1..978efd65b36a7 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/M.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/M.move @@ -1,5 +1,4 @@ -address 0x2 { -module M { +module 0x2::M { use std::debug; public fun sum(n: u64): u64 { @@ -11,4 +10,3 @@ module M { } } } -} diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/N.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/N.move index 24f61a218d635..08e2467602b16 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/N.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/N.move @@ -1,14 +1,12 @@ -address 0x2 { #[allow(unused_type_parameter, unused_mut_ref)] -module N { +module 0x2::N { use 0x2::M; public fun foo(): u64 { - let x = 3; + let mut x = 3; let y = &mut x; let z = M::sum(4); _ = y; z } } -} diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/print_stack_trace.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/print_stack_trace.move index 6cc01bb23aa7c..cda19d634c1e7 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/print_stack_trace.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_stack_trace/sources/print_stack_trace.move @@ -1,11 +1,10 @@ module 0x42::print_stack_trace { use std::debug; - use std::vector; use 0x2::N; #[allow(unused_mut_ref)] entry fun print_stack_trace() { - let v = vector::empty(); + let mut v = vector::empty(); vector::push_back(&mut v, true); vector::push_back(&mut v, false); let r = vector::borrow(&mut v, 1); diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/Move.toml index 1f13306640b9f..32e1a378ac3a8 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/Move.toml @@ -1,8 +1,9 @@ [package] name = "print_values" +edition = "2024.beta" [addresses] std = "0x1" [dependencies] -MoveNursery = { local = "../../../../move-stdlib/nursery" } +MoveStdlib = { local = "../../../../move-stdlib" } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/args.exp b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/args.exp index c6d94de4f98f7..327546f02d9de 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/args.exp +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/args.exp @@ -1,6 +1,5 @@ Command `sandbox publish`: Command `test`: -INCLUDING DEPENDENCY MoveNursery INCLUDING DEPENDENCY MoveStdlib BUILDING print_values Running Move unit tests @@ -38,7 +37,6 @@ Running Move unit tests [debug] false [debug] true [debug] @0x1234c0ffee -[debug] signer(0x0) [debug] "test_print_struct" [debug] 0x2::M::TestInner { val: 100, @@ -62,7 +60,6 @@ Running Move unit tests [debug] [ 256, 257, 258, 259 ] [debug] [ true, false ] [debug] [ @0x1234, @0x5678, @0xabcdef ] -[debug] [ signer(0x0), signer(0x100000000000000000000000000000000000000000000000000000000000000), signer(0x200000000000000000000000000000000000000000000000000000000000000), signer(0x300000000000000000000000000000000000000000000000000000000000000) ] [debug] [ 0x2::M::TestInner { val: 4, @@ -113,10 +110,6 @@ Running Move unit tests [ @0x1234, @0x5678 ], [ @0xabcdef, @0x9999 ] ] -[debug] [ - [ signer(0x0), signer(0x100000000000000000000000000000000000000000000000000000000000000) ], - [ signer(0x0), signer(0x100000000000000000000000000000000000000000000000000000000000000) ] -] [debug] [ [ 0x2::M::TestInner { diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/sources/M.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/sources/M.move index e4c8ba1f3b1c2..cb661dfb65ad2 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/sources/M.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/print_values/sources/M.move @@ -1,33 +1,26 @@ -address 0x2 { #[allow(unused_field)] -module M { +module 0x2::M { #[test_only] use std::ascii; #[test_only] use std::debug::print; - #[test_only] - use std::debug::print_string; use std::string; - #[test_only] - use std::unit_test::create_signers_for_testing; - #[test_only] - use std::vector; - struct Foo has drop {} - struct Bar has drop { x: u128, y: Foo, z: bool } - struct Box has drop { x: T } + public struct Foo has drop {} + public struct Bar has drop { x: u128, y: Foo, z: bool } + public struct Box has drop { x: T } - struct GenericStruct has drop { + public struct GenericStruct has drop { val: u64, } - struct TestInner has drop { + public struct TestInner has drop { val: u128, vec: vector, msgs: vector> } - struct TestStruct has drop { + public struct TestStruct has drop { addr: address, number: u8, bytes: vector, @@ -40,7 +33,7 @@ module M { let x = 42; print(&x); - let v = vector::empty(); + let mut v = vector::empty(); vector::push_back(&mut v, 100); vector::push_back(&mut v, 200); vector::push_back(&mut v, 300); @@ -124,11 +117,6 @@ module M { let a = @0x1234c0ffee; print(&a); - - // print a signer - let senders = create_signers_for_testing(1); - let sender = vector::pop_back(&mut senders); - print(&sender); } #[allow(unused_const)] @@ -185,9 +173,6 @@ module M { let v_addr = vector[@0x1234, @0x5678, @0xabcdef]; print(&v_addr); - let v_signer = create_signers_for_testing(4); - print(&v_signer); - let v = vector[ TestInner { val: 4u128, @@ -231,9 +216,6 @@ module M { let v_addr = vector[vector[@0x1234, @0x5678], vector[@0xabcdef, @0x9999]]; print(&v_addr); - let v_signer = vector[create_signers_for_testing(2), create_signers_for_testing(2)]; - print(&v_signer); - let v = vector[ vector[ TestInner { val: 4u128, vec: vector[127u128, 128u128], msgs: vector[] }, @@ -275,5 +257,9 @@ module M { print(&obj); } -} + + #[test_only] + public fun print_string(utf8_bytes: vector) { + print(&string::utf8(utf8_bytes)); + } } diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/Move.toml index e6ea5df3aeac9..2c09426b415c0 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/Move.toml @@ -1,2 +1,3 @@ [package] name = "publish_then_run" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/sources/M.move b/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/sources/M.move index f25c55efc332b..7dd1a97c43805 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/sources/M.move +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/publish_then_run/sources/M.move @@ -1,5 +1,3 @@ -address 0x2 { -module M { +module 0x2::M { public entry fun f() {} } -} diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/random_test_flag_correctness/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/random_test_flag_correctness/Move.toml index c88176fe599b1..ec5322a2c6e18 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/random_test_flag_correctness/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/random_test_flag_correctness/Move.toml @@ -1,5 +1,6 @@ [package] name = "random_test_flag_correctness" +edition = "2024.beta" [addresses] std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/use_named_address/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/use_named_address/Move.toml index cbec350b0c2ea..076d820a22706 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/use_named_address/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/use_named_address/Move.toml @@ -1,5 +1,6 @@ [package] name = "use_named_address" +edition = "2024.beta" [addresses] A = "0x42" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_multi_module_publish/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_multi_module_publish/Move.toml index e162affa0e604..939bd5cabd656 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_multi_module_publish/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_multi_module_publish/Move.toml @@ -1,2 +1,3 @@ [package] name = "verify_native_functions_in_publish" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_publish/Move.toml b/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_publish/Move.toml index e162affa0e604..939bd5cabd656 100644 --- a/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_publish/Move.toml +++ b/external-crates/move/crates/move-cli/tests/sandbox_tests/verify_native_functions_in_publish/Move.toml @@ -1,2 +1,3 @@ [package] name = "verify_native_functions_in_publish" +edition = "2024.beta" diff --git a/external-crates/move/crates/move-cli/tests/upload_tests/no_git_remote_package/Move.toml b/external-crates/move/crates/move-cli/tests/upload_tests/no_git_remote_package/Move.toml index 56dceb553f5b5..8d8563b904bcf 100644 --- a/external-crates/move/crates/move-cli/tests/upload_tests/no_git_remote_package/Move.toml +++ b/external-crates/move/crates/move-cli/tests/upload_tests/no_git_remote_package/Move.toml @@ -1,5 +1,6 @@ [package] name = "Package1" +edition = "2024.beta" [addresses] Std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/upload_tests/valid_package1/Move.toml b/external-crates/move/crates/move-cli/tests/upload_tests/valid_package1/Move.toml index 56dceb553f5b5..8d8563b904bcf 100644 --- a/external-crates/move/crates/move-cli/tests/upload_tests/valid_package1/Move.toml +++ b/external-crates/move/crates/move-cli/tests/upload_tests/valid_package1/Move.toml @@ -1,5 +1,6 @@ [package] name = "Package1" +edition = "2024.beta" [addresses] Std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/upload_tests/valid_package2/Move.toml b/external-crates/move/crates/move-cli/tests/upload_tests/valid_package2/Move.toml index 56dceb553f5b5..8d8563b904bcf 100644 --- a/external-crates/move/crates/move-cli/tests/upload_tests/valid_package2/Move.toml +++ b/external-crates/move/crates/move-cli/tests/upload_tests/valid_package2/Move.toml @@ -1,5 +1,6 @@ [package] name = "Package1" +edition = "2024.beta" [addresses] Std = "0x1" diff --git a/external-crates/move/crates/move-cli/tests/upload_tests/valid_package3/Move.toml b/external-crates/move/crates/move-cli/tests/upload_tests/valid_package3/Move.toml index 56dceb553f5b5..8d8563b904bcf 100644 --- a/external-crates/move/crates/move-cli/tests/upload_tests/valid_package3/Move.toml +++ b/external-crates/move/crates/move-cli/tests/upload_tests/valid_package3/Move.toml @@ -1,5 +1,6 @@ [package] name = "Package1" +edition = "2024.beta" [addresses] Std = "0x1" diff --git a/external-crates/move/crates/move-compiler/src/editions/mod.rs b/external-crates/move/crates/move-compiler/src/editions/mod.rs index 7793a573480e9..5cfea4d99d59d 100644 --- a/external-crates/move/crates/move-compiler/src/editions/mod.rs +++ b/external-crates/move/crates/move-compiler/src/editions/mod.rs @@ -397,6 +397,6 @@ impl Serialize for Flavor { impl Default for Edition { fn default() -> Self { - Edition::LEGACY + Edition::E2024_BETA } } diff --git a/external-crates/move/crates/move-compiler/tests/move_2024/typing/dot_call_non_struct.exp b/external-crates/move/crates/move-compiler/tests/move_2024/typing/dot_call_non_struct.exp index 494f2b8aa3740..72686085d4c6e 100644 --- a/external-crates/move/crates/move-compiler/tests/move_2024/typing/dot_call_non_struct.exp +++ b/external-crates/move/crates/move-compiler/tests/move_2024/typing/dot_call_non_struct.exp @@ -25,7 +25,7 @@ error[E04023]: invalid method call 10 │ 0u64.f(); │ ^^^^^^^^ │ │ │ - │ │ No local 'use fun' alias was found for 'u64.f' + │ │ No local 'use fun' alias was found for 'u64.f', and no function 'f' was found in the defining module 'std::u64' │ Invalid method call. No known method 'f' on type 'u64' error[E04023]: invalid method call diff --git a/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.exp b/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.exp index 2a0680e60c94a..8d45aad08e11a 100644 --- a/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.exp +++ b/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.exp @@ -4,6 +4,6 @@ error[E10004]: invalid usage of known attribute 2 │ module a::m {} │ - Previously declared here 3 │ -4 │ #[defines_primitive(u64)] - │ ^^^^^^^^^^^^^^^^^^^^^^ Duplicate definer annotated for primitive type 'u64' +4 │ #[defines_primitive(signer)] + │ ^^^^^^^^^^^^^^^^^^^^^^^^^ Duplicate definer annotated for primitive type 'signer' diff --git a/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.move b/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.move index f2f7f25da2bd9..565d0fdeae2e4 100644 --- a/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.move +++ b/external-crates/move/crates/move-compiler/tests/move_2024/typing/duplicate_defines_primitive.move @@ -1,5 +1,5 @@ -#[defines_primitive(u64)] +#[defines_primitive(signer)] module a::m {} -#[defines_primitive(u64)] +#[defines_primitive(signer)] module a::n {} diff --git a/external-crates/move/crates/move-compiler/tests/move_check_testsuite.rs b/external-crates/move/crates/move-compiler/tests/move_check_testsuite.rs index 1296da8588f72..104ea80dd79f8 100644 --- a/external-crates/move/crates/move-compiler/tests/move_check_testsuite.rs +++ b/external-crates/move/crates/move-compiler/tests/move_check_testsuite.rs @@ -64,7 +64,7 @@ fn move_check_testsuite(path: &Path) -> datatest_stable::Result<()> { } else if path_contains(DEV_DIR) { Edition::DEVELOPMENT } else { - Edition::default() + Edition::LEGACY }; let config = PackageConfig { flavor, diff --git a/external-crates/move/crates/move-docgen/tests/sources/different_visbilities.move b/external-crates/move/crates/move-docgen/tests/sources/different_visbilities.move index 3d1aaad29ed34..0bb17bf6ad845 100644 --- a/external-crates/move/crates/move-docgen/tests/sources/different_visbilities.move +++ b/external-crates/move/crates/move-docgen/tests/sources/different_visbilities.move @@ -1,5 +1,4 @@ -address 0x2 { -module TestViz { +module 0x2::TestViz { /// This is a public function public fun this_is_a_public_fun() { } @@ -13,4 +12,3 @@ module TestViz { /// This is a private function fun this_is_a_private_fun() {} } -} diff --git a/external-crates/move/crates/move-docgen/tests/sources/root_template_AnotherTypeOfScript.notest_move b/external-crates/move/crates/move-docgen/tests/sources/root_template_AnotherTypeOfScript.notest_move index eb7dbd3b1d754..aeeb87e9a1268 100644 --- a/external-crates/move/crates/move-docgen/tests/sources/root_template_AnotherTypeOfScript.notest_move +++ b/external-crates/move/crates/move-docgen/tests/sources/root_template_AnotherTypeOfScript.notest_move @@ -1,5 +1,4 @@ -address 0x1 { -module AnotherTypeOfScript { +module 0x1::AnotherTypeOfScript { /// This is a script entry fun script3() {} @@ -7,4 +6,3 @@ module AnotherTypeOfScript { /// This is another script entry fun script4() {} } -} diff --git a/external-crates/move/crates/move-docgen/tests/sources/root_template_OneTypeOfScript.notest_move b/external-crates/move/crates/move-docgen/tests/sources/root_template_OneTypeOfScript.notest_move index e793028b23b20..2de14cdce79fd 100644 --- a/external-crates/move/crates/move-docgen/tests/sources/root_template_OneTypeOfScript.notest_move +++ b/external-crates/move/crates/move-docgen/tests/sources/root_template_OneTypeOfScript.notest_move @@ -1,5 +1,4 @@ -address 0x1 { -module OneTypeOfScript { +module 0x1::OneTypeOfScript { /// This is a script entry fun script1() {} @@ -7,4 +6,3 @@ module OneTypeOfScript { /// This is another script entry fun script2() {} } -} diff --git a/external-crates/move/crates/move-package/src/resolution/resolution_graph.rs b/external-crates/move/crates/move-package/src/resolution/resolution_graph.rs index 8b8e45ca8a0ec..603d4c07f7493 100644 --- a/external-crates/move/crates/move-package/src/resolution/resolution_graph.rs +++ b/external-crates/move/crates/move-package/src/resolution/resolution_graph.rs @@ -7,6 +7,7 @@ use move_command_line_common::files::{ extension_equals, find_filenames, find_move_filenames, FileHash, MOVE_COMPILED_EXTENSION, }; use move_compiler::command_line::DEFAULT_OUTPUT_DIR; +use move_compiler::editions::Edition; use move_compiler::{diagnostics::WarningFilters, shared::PackageConfig}; use move_core_types::account_address::AccountAddress; use move_symbol_pool::Symbol; @@ -574,7 +575,7 @@ impl Package { .package .edition .or(config.default_edition) - .unwrap_or_default(), + .unwrap_or(Edition::LEGACY), // TODO require edition warning_filter: WarningFilters::new_for_source(), } } diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/basic_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/basic_test.move index 49592ecd81250..f4c8062d09456 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/basic_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/basic_test.move @@ -1,10 +1,10 @@ module 0x42::TestBorrow { - struct R has copy, drop { + public struct R has copy, drop { x: u64 } fun test1() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = &mut r_ref.x; *x_ref = 0; @@ -21,7 +21,7 @@ module 0x42::TestBorrow { } fun test4() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; test3(r_ref, 0); r @@ -32,7 +32,7 @@ module 0x42::TestBorrow { } fun test6() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = test5(r_ref); test2(x_ref, 0); @@ -40,19 +40,19 @@ module 0x42::TestBorrow { } fun test7(b: bool) { - let r1 = R {x: 3}; - let r2 = R {x: 4}; - let r_ref = &mut r1; + let mut r1 = R {x: 3}; + let mut r2 = R {x: 4}; + let mut r_ref = &mut r1; if (b) { r_ref = &mut r2; }; test3(r_ref, 0) } - fun test8(b: bool, n: u64, r_ref: &mut R) { - let r1 = R {x: 3}; - let r2 = R {x: 4}; - let t_ref = &mut r2; + fun test8(b: bool, mut n: u64, r_ref: &mut R) { + let mut r1 = R {x: 3}; + let mut r2 = R {x: 4}; + let mut t_ref = &mut r2; while (0 < n) { if (n/2 == 0) { t_ref = &mut r1 diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.exp b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.exp index 30226bd8972fb..0559d22411800 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.exp +++ b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.exp @@ -1,5 +1,339 @@ ============ initial translation from Move ================ +[variant baseline] +public fun u64::diff($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 14 + 8: label L1 + 9: $t10 := move($t3) + 10: $t11 := move($t4) + 11: $t12 := -($t10, $t11) + 12: $t2 := $t12 + 13: goto 20 + 14: label L0 + 15: $t13 := move($t4) + 16: $t14 := move($t3) + 17: $t15 := -($t13, $t14) + 18: $t2 := $t15 + 19: goto 20 + 20: label L2 + 21: $t16 := move($t2) + 22: return $t16 +} + + +[variant baseline] +public fun u64::divide_and_round_up($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: bool + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := %($t7, $t8) + 7: $t10 := 0 + 8: $t11 := ==($t9, $t10) + 9: if ($t11) goto 10 else goto 16 + 10: label L1 + 11: $t12 := move($t3) + 12: $t13 := move($t4) + 13: $t14 := /($t12, $t13) + 14: $t2 := $t14 + 15: goto 24 + 16: label L0 + 17: $t15 := move($t3) + 18: $t16 := move($t4) + 19: $t17 := /($t15, $t16) + 20: $t18 := 1 + 21: $t19 := +($t17, $t18) + 22: $t2 := $t19 + 23: goto 24 + 24: label L2 + 25: $t20 := move($t2) + 26: return $t20 +} + + +[variant baseline] +public fun u64::max($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::min($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := <($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::pow($t0|base: u64, $t1|exponent: u8): u64 { + var $t2|base#1#1: u64 + var $t3|exponent#1#1: u8 + var $t4|res#1#1: u64 + var $t5: u64 + var $t6: u8 + var $t7: u64 + var $t8: u8 + var $t9: u8 + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: bool + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u8 + var $t20: u8 + var $t21: u8 + var $t22: u64 + var $t23: u64 + var $t24: u64 + var $t25: u8 + var $t26: u8 + var $t27: u8 + var $t28: u64 + 0: $t5 := move($t0) + 1: $t2 := $t5 + 2: $t6 := move($t1) + 3: $t3 := $t6 + 4: $t7 := 1 + 5: $t4 := $t7 + 6: goto 7 + 7: label L5 + 8: $t8 := copy($t3) + 9: $t9 := 1 + 10: $t10 := >=($t8, $t9) + 11: if ($t10) goto 12 else goto 41 + 12: label L1 + 13: goto 14 + 14: label L2 + 15: $t11 := copy($t3) + 16: $t12 := 2 + 17: $t13 := %($t11, $t12) + 18: $t14 := 0 + 19: $t15 := ==($t13, $t14) + 20: if ($t15) goto 21 else goto 31 + 21: label L4 + 22: $t16 := copy($t2) + 23: $t17 := move($t2) + 24: $t18 := *($t16, $t17) + 25: $t2 := $t18 + 26: $t19 := move($t3) + 27: $t20 := 2 + 28: $t21 := /($t19, $t20) + 29: $t3 := $t21 + 30: goto 7 + 31: label L3 + 32: $t22 := move($t4) + 33: $t23 := copy($t2) + 34: $t24 := *($t22, $t23) + 35: $t4 := $t24 + 36: $t25 := move($t3) + 37: $t26 := 1 + 38: $t27 := -($t25, $t26) + 39: $t3 := $t27 + 40: goto 7 + 41: label L0 + 42: $t28 := move($t4) + 43: return $t28 +} + + +[variant baseline] +public fun u64::sqrt($t0|x: u64): u64 { + var $t1|bit#1#1: u128 + var $t2|res#1#1: u128 + var $t3|x#1#1: u64 + var $t4|x#2#1: u128 + var $t5: u64 + var $t6: u128 + var $t7: u128 + var $t8: u64 + var $t9: u128 + var $t10: u128 + var $t11: u128 + var $t12: bool + var $t13: u128 + var $t14: u128 + var $t15: u128 + var $t16: u128 + var $t17: bool + var $t18: u128 + var $t19: u128 + var $t20: u128 + var $t21: u128 + var $t22: u128 + var $t23: u128 + var $t24: u8 + var $t25: u128 + var $t26: u128 + var $t27: u128 + var $t28: u128 + var $t29: u8 + var $t30: u128 + var $t31: u128 + var $t32: u8 + var $t33: u128 + var $t34: u128 + var $t35: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := 18446744073709551616 + 3: $t1 := $t6 + 4: $t7 := 0 + 5: $t2 := $t7 + 6: $t8 := move($t3) + 7: $t9 := (u128)($t8) + 8: $t4 := $t9 + 9: goto 10 + 10: label L6 + 11: $t10 := copy($t1) + 12: $t11 := 0 + 13: $t12 := !=($t10, $t11) + 14: if ($t12) goto 15 else goto 50 + 15: label L1 + 16: goto 17 + 17: label L2 + 18: $t13 := copy($t4) + 19: $t14 := copy($t2) + 20: $t15 := copy($t1) + 21: $t16 := +($t14, $t15) + 22: $t17 := >=($t13, $t16) + 23: if ($t17) goto 24 else goto 38 + 24: label L4 + 25: $t18 := move($t4) + 26: $t19 := copy($t2) + 27: $t20 := copy($t1) + 28: $t21 := +($t19, $t20) + 29: $t22 := -($t18, $t21) + 30: $t4 := $t22 + 31: $t23 := move($t2) + 32: $t24 := 1 + 33: $t25 := >>($t23, $t24) + 34: $t26 := copy($t1) + 35: $t27 := +($t25, $t26) + 36: $t2 := $t27 + 37: goto 44 + 38: label L3 + 39: $t28 := move($t2) + 40: $t29 := 1 + 41: $t30 := >>($t28, $t29) + 42: $t2 := $t30 + 43: goto 44 + 44: label L5 + 45: $t31 := move($t1) + 46: $t32 := 2 + 47: $t33 := >>($t31, $t32) + 48: $t1 := $t33 + 49: goto 10 + 50: label L0 + 51: $t34 := move($t2) + 52: $t35 := (u64)($t34) + 53: return $t35 +} + + [variant baseline] public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { var $t2: &mut vector<#0> @@ -231,27 +565,25 @@ public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { 15: $t13 := move($t1) 16: vector::push_back<#0>($t12, $t13) 17: goto 18 - 18: label L5 + 18: label L4 19: $t14 := copy($t2) 20: $t15 := copy($t3) 21: $t16 := <($t14, $t15) - 22: if ($t16) goto 23 else goto 35 + 22: if ($t16) goto 23 else goto 33 23: label L3 - 24: goto 25 - 25: label L4 - 26: $t17 := copy($t0) - 27: $t18 := copy($t2) - 28: $t19 := copy($t3) - 29: vector::swap<#0>($t17, $t18, $t19) - 30: $t20 := move($t2) - 31: $t21 := 1 - 32: $t22 := +($t20, $t21) - 33: $t2 := $t22 - 34: goto 18 - 35: label L2 - 36: $t23 := move($t0) - 37: destroy($t23) - 38: return () + 24: $t17 := copy($t0) + 25: $t18 := copy($t2) + 26: $t19 := copy($t3) + 27: vector::swap<#0>($t17, $t18, $t19) + 28: $t20 := move($t2) + 29: $t21 := 1 + 30: $t22 := +($t20, $t21) + 31: $t2 := $t22 + 32: goto 18 + 33: label L2 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: return () } @@ -329,31 +661,29 @@ public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { 16: $t15 := -($t13, $t14) 17: $t4 := $t15 18: goto 19 - 19: label L5 + 19: label L4 20: $t16 := copy($t1) 21: $t17 := copy($t4) 22: $t18 := <($t16, $t17) - 23: if ($t18) goto 24 else goto 40 + 23: if ($t18) goto 24 else goto 38 24: label L3 - 25: goto 26 - 26: label L4 - 27: $t19 := copy($t0) - 28: $t3 := $t19 - 29: $t20 := copy($t1) - 30: $t2 := $t20 - 31: $t21 := move($t1) - 32: $t22 := 1 - 33: $t23 := +($t21, $t22) - 34: $t1 := $t23 - 35: $t24 := move($t3) - 36: $t25 := move($t2) - 37: $t26 := copy($t1) - 38: vector::swap<#0>($t24, $t25, $t26) - 39: goto 19 - 40: label L2 - 41: $t27 := move($t0) - 42: $t28 := vector::pop_back<#0>($t27) - 43: return $t28 + 25: $t19 := copy($t0) + 26: $t3 := $t19 + 27: $t20 := copy($t1) + 28: $t2 := $t20 + 29: $t21 := move($t1) + 30: $t22 := 1 + 31: $t23 := +($t21, $t22) + 32: $t1 := $t23 + 33: $t24 := move($t3) + 34: $t25 := move($t2) + 35: $t26 := copy($t1) + 36: vector::swap<#0>($t24, $t25, $t26) + 37: goto 19 + 38: label L2 + 39: $t27 := move($t0) + 40: $t28 := vector::pop_back<#0>($t27) + 41: return $t28 } @@ -406,31 +736,29 @@ public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { 17: $t14 := -($t12, $t13) 18: $t1 := $t14 19: goto 20 - 20: label L5 + 20: label L4 21: $t15 := copy($t2) 22: $t16 := copy($t1) 23: $t17 := <($t15, $t16) - 24: if ($t17) goto 25 else goto 41 + 24: if ($t17) goto 25 else goto 39 25: label L3 - 26: goto 27 - 27: label L4 - 28: $t18 := copy($t0) - 29: $t19 := copy($t2) - 30: $t20 := copy($t1) - 31: vector::swap<#0>($t18, $t19, $t20) - 32: $t21 := move($t2) - 33: $t22 := 1 - 34: $t23 := +($t21, $t22) - 35: $t2 := $t23 - 36: $t24 := move($t1) - 37: $t25 := 1 - 38: $t26 := -($t24, $t25) - 39: $t1 := $t26 - 40: goto 20 - 41: label L2 - 42: $t27 := move($t0) - 43: destroy($t27) - 44: return () + 26: $t18 := copy($t0) + 27: $t19 := copy($t2) + 28: $t20 := copy($t1) + 29: vector::swap<#0>($t18, $t19, $t20) + 30: $t21 := move($t2) + 31: $t22 := 1 + 32: $t23 := +($t21, $t22) + 33: $t2 := $t23 + 34: $t24 := move($t1) + 35: $t25 := 1 + 36: $t26 := -($t24, $t25) + 37: $t1 := $t26 + 38: goto 20 + 39: label L2 + 40: $t27 := move($t0) + 41: destroy($t27) + 42: return () } @@ -504,364 +832,3550 @@ public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { [variant baseline] -fun MultiLayerCalling::inner($t0|has_vector: &mut MultiLayerCalling::HasVector): &mut MultiLayerCalling::HasAnotherVector { - var $t1: &mut MultiLayerCalling::HasVector - var $t2: &mut vector - var $t3: u64 - var $t4: &mut MultiLayerCalling::HasAnotherVector - 0: $t1 := move($t0) - 1: $t2 := borrow_field.v($t1) - 2: $t3 := 7 - 3: $t4 := vector::borrow_mut($t2, $t3) - 4: return $t4 +public fun option::borrow<#0>($t0|t: &option::Option<#0>): � { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: &option::Option<#0> + var $t4: u64 + var $t5: &option::Option<#0> + var $t6: &vector<#0> + var $t7: u64 + var $t8: � + 0: $t1 := copy($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 10 + 5: label L0 + 6: $t3 := move($t0) + 7: destroy($t3) + 8: $t4 := 262145 + 9: abort($t4) + 10: label L2 + 11: $t5 := move($t0) + 12: $t6 := borrow_field>.vec($t5) + 13: $t7 := 0 + 14: $t8 := vector::borrow<#0>($t6, $t7) + 15: return $t8 } [variant baseline] -fun MultiLayerCalling::mid($t0|has_vector: &mut MultiLayerCalling::HasVector): &mut MultiLayerCalling::HasAnotherVector { - var $t1: &mut MultiLayerCalling::HasVector - var $t2: &mut MultiLayerCalling::HasAnotherVector - 0: $t1 := move($t0) - 1: $t2 := MultiLayerCalling::inner($t1) - 2: return $t2 +public fun option::borrow_mut<#0>($t0|t: &mut option::Option<#0>): &mut #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: u64 + var $t9: &mut #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := 0 + 15: $t9 := vector::borrow_mut<#0>($t7, $t8) + 16: return $t9 } [variant baseline] -fun MultiLayerCalling::outer($t0|has_vector: &mut MultiLayerCalling::HasVector) { - var $t1: &mut MultiLayerCalling::HasVector - var $t2: &mut MultiLayerCalling::HasAnotherVector - var $t3: &mut vector - var $t4: u8 - 0: $t1 := move($t0) - 1: $t2 := MultiLayerCalling::mid($t1) - 2: $t3 := borrow_field.v($t2) - 3: $t4 := 42 - 4: vector::push_back($t3, $t4) - 5: return () +public fun option::contains<#0>($t0|t: &option::Option<#0>, $t1|e_ref: �): bool { + var $t2: &option::Option<#0> + var $t3: &vector<#0> + var $t4: � + var $t5: bool + 0: $t2 := move($t0) + 1: $t3 := borrow_field>.vec($t2) + 2: $t4 := move($t1) + 3: $t5 := vector::contains<#0>($t3, $t4) + 4: return $t5 } -============ after pipeline `borrow` ================ [variant baseline] -public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { - var $t2: &mut vector<#0> - var $t3: vector<#0> - var $t4: bool - var $t5: bool - var $t6: &mut vector<#0> - var $t7: #0 - var $t8: vector<#0> - 0: $t2 := borrow_local($t1) - 1: vector::reverse<#0>($t2) - 2: label L3 - 3: $t3 := copy($t1) - 4: $t4 := vector::is_empty<#0>($t3) - 5: $t5 := !($t4) - 6: if ($t5) goto 7 else goto 13 - 7: label L1 - 8: label L2 - 9: $t6 := borrow_local($t1) - 10: $t7 := vector::pop_back<#0>($t6) - 11: vector::push_back<#0>($t0, $t7) - 12: goto 2 - 13: label L0 - 14: destroy($t0) - 15: $t8 := move($t1) - 16: vector::destroy_empty<#0>($t8) - 17: trace_local[lhs]($t0) - 18: return () +public fun option::swap<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): #0 { + var $t2|old_value#1#0: #0 + var $t3|vec_ref#1#0: &mut vector<#0> + var $t4: &mut option::Option<#0> + var $t5: &option::Option<#0> + var $t6: bool + var $t7: &mut option::Option<#0> + var $t8: u64 + var $t9: &mut option::Option<#0> + var $t10: &mut vector<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: &mut vector<#0> + var $t14: #0 + var $t15: #0 + 0: $t4 := copy($t0) + 1: $t5 := freeze_ref($t4) + 2: $t6 := option::is_some<#0>($t5) + 3: if ($t6) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t7 := move($t0) + 8: destroy($t7) + 9: $t8 := 262145 + 10: abort($t8) + 11: label L2 + 12: $t9 := move($t0) + 13: $t10 := borrow_field>.vec($t9) + 14: $t3 := $t10 + 15: $t11 := copy($t3) + 16: $t12 := vector::pop_back<#0>($t11) + 17: $t2 := $t12 + 18: $t13 := move($t3) + 19: $t14 := move($t1) + 20: vector::push_back<#0>($t13, $t14) + 21: $t15 := move($t2) + 22: return $t15 } [variant baseline] -public native fun vector::borrow<#0>($t0|v: vector<#0>, $t1|i: u64): #0; +public fun option::borrow_with_default<#0>($t0|t: &option::Option<#0>, $t1|default_ref: �): � { + var $t2|tmp#$2: � + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: � + var $t10: � + var $t11: &vector<#0> + var $t12: u64 + var $t13: � + var $t14: � + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 20 + 12: label L0 + 13: $t10 := move($t1) + 14: destroy($t10) + 15: $t11 := move($t3) + 16: $t12 := 0 + 17: $t13 := vector::borrow<#0>($t11, $t12) + 18: $t2 := $t13 + 19: goto 20 + 20: label L2 + 21: $t14 := move($t2) + 22: return $t14 +} [variant baseline] -public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0; +public fun option::destroy_none<#0>($t0|t: option::Option<#0>) { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: option::Option<#0> + var $t5: vector<#0> + 0: $t1 := borrow_local($t0) + 1: $t2 := option::is_none<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 262144 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := unpack option::Option<#0>($t4) + 11: vector::destroy_empty<#0>($t5) + 12: return () +} [variant baseline] -public fun vector::contains<#0>($t0|v: vector<#0>, $t1|e: #0): bool { - var $t2|i#1#0: u64 - var $t3|len#1#0: u64 - var $t4: u64 +public fun option::destroy_some<#0>($t0|t: option::Option<#0>): #0 { + var $t1|elem#1#0: #0 + var $t2|vec#1#0: vector<#0> + var $t3: &option::Option<#0> + var $t4: bool var $t5: u64 - var $t6: bool - var $t7: #0 - var $t8: bool - var $t9: bool - var $t10: u64 - var $t11: bool - 0: $t4 := 0 - 1: $t2 := $t4 - 2: $t5 := vector::length<#0>($t0) - 3: label L5 - 4: $t6 := <($t2, $t5) - 5: if ($t6) goto 6 else goto 18 - 6: label L1 - 7: label L2 - 8: $t7 := vector::borrow<#0>($t0, $t2) - 9: $t8 := ==($t7, $t1) - 10: if ($t8) goto 11 else goto 14 - 11: label L4 - 12: $t9 := true - 13: return $t9 - 14: label L3 - 15: $t10 := 1 - 16: $t2 := +($t2, $t10) - 17: goto 3 - 18: label L0 - 19: $t11 := false - 20: return $t11 + var $t6: option::Option<#0> + var $t7: vector<#0> + var $t8: &mut vector<#0> + var $t9: #0 + var $t10: vector<#0> + var $t11: #0 + 0: $t3 := borrow_local($t0) + 1: $t4 := option::is_some<#0>($t3) + 2: if ($t4) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t5 := 262145 + 7: abort($t5) + 8: label L2 + 9: $t6 := move($t0) + 10: $t7 := unpack option::Option<#0>($t6) + 11: $t2 := $t7 + 12: $t8 := borrow_local($t2) + 13: $t9 := vector::pop_back<#0>($t8) + 14: $t1 := $t9 + 15: $t10 := move($t2) + 16: vector::destroy_empty<#0>($t10) + 17: $t11 := move($t1) + 18: return $t11 } [variant baseline] -public native fun vector::destroy_empty<#0>($t0|v: vector<#0>); +public fun option::destroy_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec#1#0: vector<#0> + var $t4: option::Option<#0> + var $t5: vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: #0 + var $t9: &mut vector<#0> + var $t10: #0 + var $t11: #0 + 0: $t4 := move($t0) + 1: $t5 := unpack option::Option<#0>($t4) + 2: $t3 := $t5 + 3: $t6 := borrow_local($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 10 + 6: label L1 + 7: $t8 := move($t1) + 8: $t2 := $t8 + 9: goto 15 + 10: label L0 + 11: $t9 := borrow_local($t3) + 12: $t10 := vector::pop_back<#0>($t9) + 13: $t2 := $t10 + 14: goto 15 + 15: label L2 + 16: $t11 := move($t2) + 17: return $t11 +} [variant baseline] -public native fun vector::empty<#0>(): vector<#0>; - +public fun option::extract<#0>($t0|t: &mut option::Option<#0>): #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := vector::pop_back<#0>($t7) + 15: return $t8 +} + + +[variant baseline] +public fun option::fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0) { + var $t2|vec_ref#1#0: &mut vector<#0> + var $t3: &mut option::Option<#0> + var $t4: &mut vector<#0> + var $t5: &mut vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &mut vector<#0> + var $t9: u64 + var $t10: &mut vector<#0> + var $t11: #0 + 0: $t3 := move($t0) + 1: $t4 := borrow_field>.vec($t3) + 2: $t2 := $t4 + 3: $t5 := copy($t2) + 4: $t6 := freeze_ref($t5) + 5: $t7 := vector::is_empty<#0>($t6) + 6: if ($t7) goto 7 else goto 9 + 7: label L1 + 8: goto 14 + 9: label L0 + 10: $t8 := move($t2) + 11: destroy($t8) + 12: $t9 := 262144 + 13: abort($t9) + 14: label L2 + 15: $t10 := move($t2) + 16: $t11 := move($t1) + 17: vector::push_back<#0>($t10, $t11) + 18: return () +} + + +[variant baseline] +public fun option::get_with_default<#0>($t0|t: &option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: #0 + var $t10: &vector<#0> + var $t11: u64 + var $t12: � + var $t13: #0 + var $t14: #0 + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 19 + 12: label L0 + 13: $t10 := move($t3) + 14: $t11 := 0 + 15: $t12 := vector::borrow<#0>($t10, $t11) + 16: $t13 := read_ref($t12) + 17: $t2 := $t13 + 18: goto 19 + 19: label L2 + 20: $t14 := move($t2) + 21: return $t14 +} + + +[variant baseline] +public fun option::is_none<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::is_some<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + var $t4: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: $t4 := !($t3) + 4: return $t4 +} + + +[variant baseline] +public fun option::none<#0>(): option::Option<#0> { + var $t0: vector<#0> + var $t1: option::Option<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := pack option::Option<#0>($t0) + 2: return $t1 +} + + +[variant baseline] +public fun option::some<#0>($t0|e: #0): option::Option<#0> { + var $t1: #0 + var $t2: vector<#0> + var $t3: option::Option<#0> + 0: $t1 := move($t0) + 1: $t2 := vector::singleton<#0>($t1) + 2: $t3 := pack option::Option<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::swap_or_fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): option::Option<#0> { + var $t2|tmp#$2: option::Option<#0> + var $t3|old_value#1#0: option::Option<#0> + var $t4|vec_ref#1#0: &mut vector<#0> + var $t5: &mut option::Option<#0> + var $t6: &mut vector<#0> + var $t7: &mut vector<#0> + var $t8: &vector<#0> + var $t9: bool + var $t10: option::Option<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: option::Option<#0> + var $t14: option::Option<#0> + var $t15: &mut vector<#0> + var $t16: #0 + var $t17: option::Option<#0> + 0: $t5 := move($t0) + 1: $t6 := borrow_field>.vec($t5) + 2: $t4 := $t6 + 3: $t7 := copy($t4) + 4: $t8 := freeze_ref($t7) + 5: $t9 := vector::is_empty<#0>($t8) + 6: if ($t9) goto 7 else goto 11 + 7: label L1 + 8: $t10 := option::none<#0>() + 9: $t2 := $t10 + 10: goto 17 + 11: label L0 + 12: $t11 := copy($t4) + 13: $t12 := vector::pop_back<#0>($t11) + 14: $t13 := option::some<#0>($t12) + 15: $t2 := $t13 + 16: goto 17 + 17: label L2 + 18: $t14 := move($t2) + 19: $t3 := $t14 + 20: $t15 := move($t4) + 21: $t16 := move($t1) + 22: vector::push_back<#0>($t15, $t16) + 23: $t17 := move($t3) + 24: return $t17 +} + + +[variant baseline] +public fun option::to_vec<#0>($t0|t: option::Option<#0>): vector<#0> { + var $t1: option::Option<#0> + var $t2: vector<#0> + 0: $t1 := move($t0) + 1: $t2 := unpack option::Option<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::append($t0|string: &mut ascii::String, $t1|other: ascii::String) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: ascii::String + var $t5: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := ascii::into_bytes($t4) + 4: vector::append($t3, $t5) + 5: return () +} + + +[variant baseline] +public fun ascii::index_of($t0|string: &ascii::String, $t1|substr: &ascii::String): u64 { + var $t2|tmp#$2: bool + var $t3|i#1#0: u64 + var $t4|j#1#0: u64 + var $t5|m#1#0: u64 + var $t6|n#1#0: u64 + var $t7: u64 + var $t8: &ascii::String + var $t9: u64 + var $t10: &ascii::String + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: bool + var $t15: &ascii::String + var $t16: &ascii::String + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: u64 + var $t22: bool + var $t23: u64 + var $t24: u64 + var $t25: u64 + var $t26: bool + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: u64 + var $t31: u64 + var $t32: &u8 + var $t33: u8 + var $t34: &ascii::String + var $t35: &vector + var $t36: u64 + var $t37: &u8 + var $t38: u8 + var $t39: bool + var $t40: bool + var $t41: bool + var $t42: u64 + var $t43: u64 + var $t44: u64 + var $t45: u64 + var $t46: u64 + var $t47: bool + var $t48: &ascii::String + var $t49: &ascii::String + var $t50: u64 + var $t51: u64 + var $t52: u64 + var $t53: u64 + var $t54: &ascii::String + var $t55: &ascii::String + var $t56: u64 + 0: $t7 := 0 + 1: $t3 := $t7 + 2: $t8 := copy($t0) + 3: $t9 := ascii::length($t8) + 4: $t10 := copy($t1) + 5: $t11 := ascii::length($t10) + 6: $t5 := $t11 + 7: $t6 := $t9 + 8: $t12 := copy($t6) + 9: $t13 := copy($t5) + 10: $t14 := <($t12, $t13) + 11: if ($t14) goto 12 else goto 19 + 12: label L1 + 13: $t15 := move($t1) + 14: destroy($t15) + 15: $t16 := move($t0) + 16: destroy($t16) + 17: $t17 := move($t6) + 18: return $t17 + 19: label L0 + 20: $t18 := copy($t3) + 21: $t19 := copy($t6) + 22: $t20 := copy($t5) + 23: $t21 := -($t19, $t20) + 24: $t22 := <=($t18, $t21) + 25: if ($t22) goto 26 else goto 84 + 26: label L3 + 27: $t23 := 0 + 28: $t4 := $t23 + 29: goto 30 + 30: label L10 + 31: $t24 := copy($t4) + 32: $t25 := copy($t5) + 33: $t26 := <($t24, $t25) + 34: if ($t26) goto 35 else goto 53 + 35: label L5 + 36: goto 37 + 37: label L6 + 38: $t27 := copy($t0) + 39: $t28 := borrow_field.bytes($t27) + 40: $t29 := copy($t3) + 41: $t30 := copy($t4) + 42: $t31 := +($t29, $t30) + 43: $t32 := vector::borrow($t28, $t31) + 44: $t33 := read_ref($t32) + 45: $t34 := copy($t1) + 46: $t35 := borrow_field.bytes($t34) + 47: $t36 := copy($t4) + 48: $t37 := vector::borrow($t35, $t36) + 49: $t38 := read_ref($t37) + 50: $t39 := ==($t33, $t38) + 51: $t2 := $t39 + 52: goto 57 + 53: label L4 + 54: $t40 := false + 55: $t2 := $t40 + 56: goto 57 + 57: label L7 + 58: $t41 := move($t2) + 59: if ($t41) goto 60 else goto 66 + 60: label L9 + 61: $t42 := move($t4) + 62: $t43 := 1 + 63: $t44 := +($t42, $t43) + 64: $t4 := $t44 + 65: goto 30 + 66: label L8 + 67: $t45 := move($t4) + 68: $t46 := copy($t5) + 69: $t47 := ==($t45, $t46) + 70: if ($t47) goto 71 else goto 78 + 71: label L12 + 72: $t48 := move($t1) + 73: destroy($t48) + 74: $t49 := move($t0) + 75: destroy($t49) + 76: $t50 := move($t3) + 77: return $t50 + 78: label L11 + 79: $t51 := move($t3) + 80: $t52 := 1 + 81: $t53 := +($t51, $t52) + 82: $t3 := $t53 + 83: goto 19 + 84: label L2 + 85: $t54 := move($t1) + 86: destroy($t54) + 87: $t55 := move($t0) + 88: destroy($t55) + 89: $t56 := move($t6) + 90: return $t56 +} + + +[variant baseline] +public fun ascii::insert($t0|s: &mut ascii::String, $t1|at: u64, $t2|o: ascii::String) { + var $t3|e#1#2: u8 + var $t4|v#1#1: vector + var $t5: u64 + var $t6: &mut ascii::String + var $t7: &ascii::String + var $t8: u64 + var $t9: bool + var $t10: &mut ascii::String + var $t11: u64 + var $t12: ascii::String + var $t13: vector + var $t14: &vector + var $t15: bool + var $t16: bool + var $t17: &mut vector + var $t18: u8 + var $t19: &mut ascii::String + var $t20: &mut vector + var $t21: u8 + var $t22: u64 + var $t23: &mut ascii::String + var $t24: vector + 0: $t5 := copy($t1) + 1: $t6 := copy($t0) + 2: $t7 := freeze_ref($t6) + 3: $t8 := ascii::length($t7) + 4: $t9 := <=($t5, $t8) + 5: if ($t9) goto 6 else goto 8 + 6: label L1 + 7: goto 13 + 8: label L0 + 9: $t10 := move($t0) + 10: destroy($t10) + 11: $t11 := 65537 + 12: abort($t11) + 13: label L2 + 14: $t12 := move($t2) + 15: $t13 := ascii::into_bytes($t12) + 16: $t4 := $t13 + 17: goto 18 + 18: label L5 + 19: $t14 := borrow_local($t4) + 20: $t15 := vector::is_empty($t14) + 21: $t16 := !($t15) + 22: if ($t16) goto 23 else goto 33 + 23: label L4 + 24: $t17 := borrow_local($t4) + 25: $t18 := vector::pop_back($t17) + 26: $t3 := $t18 + 27: $t19 := copy($t0) + 28: $t20 := borrow_field.bytes($t19) + 29: $t21 := move($t3) + 30: $t22 := copy($t1) + 31: vector::insert($t20, $t21, $t22) + 32: goto 18 + 33: label L3 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: $t24 := move($t4) + 37: vector::destroy_empty($t24) + 38: return () +} + + +[variant baseline] +public fun ascii::is_empty($t0|string: &ascii::String): bool { + var $t1: &ascii::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::length($t0|string: &ascii::String): u64 { + var $t1: &ascii::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := ascii::as_bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::all_characters_printable($t0|string: &ascii::String): bool { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|i#1#12: u64 + var $t4|i#1#9: u64 + var $t5|stop#1#9: u64 + var $t6|v#1#3: &vector + var $t7: &ascii::String + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + 0: $t7 := move($t0) + 1: $t8 := borrow_field.bytes($t7) + 2: $t6 := $t8 + 3: $t9 := copy($t6) + 4: $t10 := vector::length($t9) + 5: $t1 := $t10 + 6: $t11 := 0 + 7: $t4 := $t11 + 8: $t12 := move($t1) + 9: $t5 := $t12 + 10: goto 11 + 11: label L5 + 12: $t13 := copy($t4) + 13: $t14 := copy($t5) + 14: $t15 := <($t13, $t14) + 15: if ($t15) goto 16 else goto 38 + 16: label L1 + 17: $t16 := copy($t4) + 18: $t3 := $t16 + 19: $t17 := copy($t6) + 20: $t18 := move($t3) + 21: $t19 := vector::borrow($t17, $t18) + 22: $t20 := read_ref($t19) + 23: $t21 := ascii::is_printable_char($t20) + 24: $t22 := !($t21) + 25: if ($t22) goto 26 else goto 32 + 26: label L3 + 27: $t23 := move($t6) + 28: destroy($t23) + 29: $t24 := false + 30: $t2 := $t24 + 31: goto 44 + 32: label L2 + 33: $t25 := move($t4) + 34: $t26 := 1 + 35: $t27 := +($t25, $t26) + 36: $t4 := $t27 + 37: goto 11 + 38: label L0 + 39: $t28 := move($t6) + 40: destroy($t28) + 41: $t29 := true + 42: $t2 := $t29 + 43: goto 44 + 44: label L4 + 45: $t30 := move($t2) + 46: return $t30 +} + + +[variant baseline] +public fun ascii::string($t0|bytes: vector): ascii::String { + var $t1|x#1#0: option::Option + var $t2: vector + var $t3: option::Option + var $t4: &option::Option + var $t5: bool + var $t6: u64 + var $t7: option::Option + var $t8: ascii::String + 0: $t2 := move($t0) + 1: $t3 := ascii::try_string($t2) + 2: $t1 := $t3 + 3: $t4 := borrow_local($t1) + 4: $t5 := option::is_some($t4) + 5: if ($t5) goto 6 else goto 8 + 6: label L1 + 7: goto 11 + 8: label L0 + 9: $t6 := 65536 + 10: abort($t6) + 11: label L2 + 12: $t7 := move($t1) + 13: $t8 := option::destroy_some($t7) + 14: return $t8 +} + + +[variant baseline] +public fun ascii::as_bytes($t0|string: &ascii::String): &vector { + var $t1: &ascii::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::byte($t0|char: ascii::Char): u8 { + var $t1: ascii::Char + var $t2: u8 + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::Char($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::char($t0|byte: u8): ascii::Char { + var $t1: u8 + var $t2: bool + var $t3: u64 + var $t4: u8 + var $t5: ascii::Char + 0: $t1 := copy($t0) + 1: $t2 := ascii::is_valid_char($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 65536 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack ascii::Char($t4) + 11: return $t5 +} + + +[variant baseline] +fun ascii::char_to_lowercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 65 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 90 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := +($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +fun ascii::char_to_uppercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 97 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 122 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := -($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +public fun ascii::into_bytes($t0|string: ascii::String): vector { + var $t1: ascii::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::is_printable_char($t0|byte: u8): bool { + var $t1|tmp#$1: bool + var $t2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: u8 + var $t7: bool + var $t8: bool + var $t9: bool + 0: $t2 := copy($t0) + 1: $t3 := 32 + 2: $t4 := >=($t2, $t3) + 3: if ($t4) goto 4 else goto 10 + 4: label L1 + 5: $t5 := move($t0) + 6: $t6 := 126 + 7: $t7 := <=($t5, $t6) + 8: $t1 := $t7 + 9: goto 14 + 10: label L0 + 11: $t8 := false + 12: $t1 := $t8 + 13: goto 14 + 14: label L2 + 15: $t9 := move($t1) + 16: return $t9 +} + + +[variant baseline] +public fun ascii::is_valid_char($t0|b: u8): bool { + var $t1: u8 + var $t2: u8 + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := 127 + 2: $t3 := <=($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::pop_char($t0|string: &mut ascii::String): ascii::Char { + var $t1: &mut ascii::String + var $t2: &mut vector + var $t3: u8 + var $t4: ascii::Char + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::pop_back($t2) + 3: $t4 := pack ascii::Char($t3) + 4: return $t4 +} + + +[variant baseline] +public fun ascii::push_char($t0|string: &mut ascii::String, $t1|char: ascii::Char) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: &ascii::Char + var $t5: &u8 + var $t6: u8 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.byte($t4) + 4: $t6 := read_ref($t5) + 5: vector::push_back($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun ascii::substring($t0|string: &ascii::String, $t1|i: u64, $t2|j: u64): ascii::String { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|i#1#3: u64 + var $t6|i#1#6: u64 + var $t7|stop#1#3: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: &ascii::String + var $t13: u64 + var $t14: bool + var $t15: bool + var $t16: bool + var $t17: &ascii::String + var $t18: u64 + var $t19: vector + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: u64 + var $t24: bool + var $t25: u64 + var $t26: &mut vector + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: &u8 + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &ascii::String + var $t36: vector + var $t37: ascii::String + 0: $t8 := copy($t1) + 1: $t9 := copy($t2) + 2: $t10 := <=($t8, $t9) + 3: if ($t10) goto 4 else goto 11 + 4: label L1 + 5: $t11 := copy($t2) + 6: $t12 := copy($t0) + 7: $t13 := ascii::length($t12) + 8: $t14 := <=($t11, $t13) + 9: $t3 := $t14 + 10: goto 15 + 11: label L0 + 12: $t15 := false + 13: $t3 := $t15 + 14: goto 15 + 15: label L2 + 16: $t16 := move($t3) + 17: if ($t16) goto 18 else goto 20 + 18: label L4 + 19: goto 25 + 20: label L3 + 21: $t17 := move($t0) + 22: destroy($t17) + 23: $t18 := 65537 + 24: abort($t18) + 25: label L5 + 26: $t19 := [] + 27: $t4 := $t19 + 28: $t20 := move($t1) + 29: $t5 := $t20 + 30: $t21 := move($t2) + 31: $t7 := $t21 + 32: goto 33 + 33: label L8 + 34: $t22 := copy($t5) + 35: $t23 := copy($t7) + 36: $t24 := <($t22, $t23) + 37: if ($t24) goto 38 else goto 53 + 38: label L7 + 39: $t25 := copy($t5) + 40: $t6 := $t25 + 41: $t26 := borrow_local($t4) + 42: $t27 := copy($t0) + 43: $t28 := borrow_field.bytes($t27) + 44: $t29 := move($t6) + 45: $t30 := vector::borrow($t28, $t29) + 46: $t31 := read_ref($t30) + 47: vector::push_back($t26, $t31) + 48: $t32 := move($t5) + 49: $t33 := 1 + 50: $t34 := +($t32, $t33) + 51: $t5 := $t34 + 52: goto 33 + 53: label L6 + 54: $t35 := move($t0) + 55: destroy($t35) + 56: $t36 := move($t4) + 57: $t37 := pack ascii::String($t36) + 58: return $t37 +} + + +[variant baseline] +public fun ascii::to_lowercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_lowercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} + + +[variant baseline] +public fun ascii::to_uppercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_uppercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} + + +[variant baseline] +public fun ascii::try_string($t0|bytes: vector): option::Option { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|tmp#$3: option::Option + var $t4|i#1#12: u64 + var $t5|i#1#9: u64 + var $t6|stop#1#9: u64 + var $t7|v#1#3: &vector + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + var $t31: vector + var $t32: ascii::String + var $t33: option::Option + var $t34: option::Option + var $t35: option::Option + 0: $t8 := borrow_local($t0) + 1: $t7 := $t8 + 2: $t9 := copy($t7) + 3: $t10 := vector::length($t9) + 4: $t1 := $t10 + 5: $t11 := 0 + 6: $t5 := $t11 + 7: $t12 := move($t1) + 8: $t6 := $t12 + 9: goto 10 + 10: label L5 + 11: $t13 := copy($t5) + 12: $t14 := copy($t6) + 13: $t15 := <($t13, $t14) + 14: if ($t15) goto 15 else goto 37 + 15: label L1 + 16: $t16 := copy($t5) + 17: $t4 := $t16 + 18: $t17 := copy($t7) + 19: $t18 := move($t4) + 20: $t19 := vector::borrow($t17, $t18) + 21: $t20 := read_ref($t19) + 22: $t21 := ascii::is_valid_char($t20) + 23: $t22 := !($t21) + 24: if ($t22) goto 25 else goto 31 + 25: label L3 + 26: $t23 := move($t7) + 27: destroy($t23) + 28: $t24 := false + 29: $t2 := $t24 + 30: goto 43 + 31: label L2 + 32: $t25 := move($t5) + 33: $t26 := 1 + 34: $t27 := +($t25, $t26) + 35: $t5 := $t27 + 36: goto 10 + 37: label L0 + 38: $t28 := move($t7) + 39: destroy($t28) + 40: $t29 := true + 41: $t2 := $t29 + 42: goto 43 + 43: label L4 + 44: $t30 := move($t2) + 45: if ($t30) goto 46 else goto 52 + 46: label L7 + 47: $t31 := move($t0) + 48: $t32 := pack ascii::String($t31) + 49: $t33 := option::some($t32) + 50: $t3 := $t33 + 51: goto 56 + 52: label L6 + 53: $t34 := option::none() + 54: $t3 := $t34 + 55: goto 56 + 56: label L8 + 57: $t35 := move($t3) + 58: return $t35 +} + + +[variant baseline] +public fun string::append($t0|s: &mut string::String, $t1|r: string::String) { + var $t2: &mut string::String + var $t3: &mut vector + var $t4: &string::String + var $t5: &vector + var $t6: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := read_ref($t5) + 5: vector::append($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun string::index_of($t0|s: &string::String, $t1|r: &string::String): u64 { + var $t2: &string::String + var $t3: &vector + var $t4: &string::String + var $t5: &vector + var $t6: u64 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := string::internal_index_of($t3, $t5) + 5: return $t6 +} + + +[variant baseline] +public fun string::insert($t0|s: &mut string::String, $t1|at: u64, $t2|o: string::String) { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: &vector + var $t5|end#1#0: string::String + var $t6|front#1#0: string::String + var $t7|l#1#0: u64 + var $t8: &mut string::String + var $t9: &vector + var $t10: u64 + var $t11: &vector + var $t12: u64 + var $t13: bool + var $t14: &vector + var $t15: u64 + var $t16: bool + var $t17: &vector + var $t18: bool + var $t19: bool + var $t20: &mut string::String + var $t21: u64 + var $t22: &mut string::String + var $t23: &string::String + var $t24: u64 + var $t25: &mut string::String + var $t26: &string::String + var $t27: u64 + var $t28: u64 + var $t29: string::String + var $t30: &mut string::String + var $t31: &string::String + var $t32: u64 + var $t33: u64 + var $t34: string::String + var $t35: &mut string::String + var $t36: string::String + var $t37: &mut string::String + var $t38: string::String + var $t39: string::String + var $t40: &mut string::String + 0: $t8 := copy($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t4 := $t9 + 3: $t10 := copy($t1) + 4: $t11 := copy($t4) + 5: $t12 := vector::length($t11) + 6: $t13 := <=($t10, $t12) + 7: if ($t13) goto 8 else goto 14 + 8: label L1 + 9: $t14 := move($t4) + 10: $t15 := copy($t1) + 11: $t16 := string::internal_is_char_boundary($t14, $t15) + 12: $t3 := $t16 + 13: goto 20 + 14: label L0 + 15: $t17 := move($t4) + 16: destroy($t17) + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 25 + 23: label L4 + 24: goto 30 + 25: label L3 + 26: $t20 := move($t0) + 27: destroy($t20) + 28: $t21 := 2 + 29: abort($t21) + 30: label L5 + 31: $t22 := copy($t0) + 32: $t23 := freeze_ref($t22) + 33: $t24 := string::length($t23) + 34: $t7 := $t24 + 35: $t25 := copy($t0) + 36: $t26 := freeze_ref($t25) + 37: $t27 := 0 + 38: $t28 := copy($t1) + 39: $t29 := string::substring($t26, $t27, $t28) + 40: $t6 := $t29 + 41: $t30 := copy($t0) + 42: $t31 := freeze_ref($t30) + 43: $t32 := move($t1) + 44: $t33 := move($t7) + 45: $t34 := string::substring($t31, $t32, $t33) + 46: $t5 := $t34 + 47: $t35 := borrow_local($t6) + 48: $t36 := move($t2) + 49: string::append($t35, $t36) + 50: $t37 := borrow_local($t6) + 51: $t38 := move($t5) + 52: string::append($t37, $t38) + 53: $t39 := move($t6) + 54: $t40 := move($t0) + 55: write_ref($t40, $t39) + 56: return () +} + + +[variant baseline] +public fun string::is_empty($t0|s: &string::String): bool { + var $t1: &string::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::length($t0|s: &string::String): u64 { + var $t1: &string::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::as_bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::into_bytes($t0|s: string::String): vector { + var $t1: string::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := string::as_bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::substring($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3|tmp#$3: bool + var $t4|tmp#$4: bool + var $t5|tmp#$5: bool + var $t6|bytes#1#0: &vector + var $t7|l#1#0: u64 + var $t8: &string::String + var $t9: &vector + var $t10: &vector + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: bool + var $t15: u64 + var $t16: u64 + var $t17: bool + var $t18: bool + var $t19: bool + var $t20: &vector + var $t21: u64 + var $t22: bool + var $t23: bool + var $t24: bool + var $t25: &vector + var $t26: u64 + var $t27: bool + var $t28: bool + var $t29: bool + var $t30: &vector + var $t31: u64 + var $t32: &vector + var $t33: u64 + var $t34: u64 + var $t35: vector + var $t36: string::String + 0: $t8 := move($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t6 := $t9 + 3: $t10 := copy($t6) + 4: $t11 := vector::length($t10) + 5: $t7 := $t11 + 6: $t12 := copy($t2) + 7: $t13 := move($t7) + 8: $t14 := <=($t12, $t13) + 9: if ($t14) goto 10 else goto 16 + 10: label L1 + 11: $t15 := copy($t1) + 12: $t16 := copy($t2) + 13: $t17 := <=($t15, $t16) + 14: $t3 := $t17 + 15: goto 20 + 16: label L0 + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 29 + 23: label L4 + 24: $t20 := copy($t6) + 25: $t21 := copy($t1) + 26: $t22 := string::internal_is_char_boundary($t20, $t21) + 27: $t4 := $t22 + 28: goto 33 + 29: label L3 + 30: $t23 := false + 31: $t4 := $t23 + 32: goto 33 + 33: label L5 + 34: $t24 := move($t4) + 35: if ($t24) goto 36 else goto 42 + 36: label L7 + 37: $t25 := copy($t6) + 38: $t26 := copy($t2) + 39: $t27 := string::internal_is_char_boundary($t25, $t26) + 40: $t5 := $t27 + 41: goto 46 + 42: label L6 + 43: $t28 := false + 44: $t5 := $t28 + 45: goto 46 + 46: label L8 + 47: $t29 := move($t5) + 48: if ($t29) goto 49 else goto 51 + 49: label L10 + 50: goto 56 + 51: label L9 + 52: $t30 := move($t6) + 53: destroy($t30) + 54: $t31 := 2 + 55: abort($t31) + 56: label L11 + 57: $t32 := move($t6) + 58: $t33 := move($t1) + 59: $t34 := move($t2) + 60: $t35 := string::internal_sub_string($t32, $t33, $t34) + 61: $t36 := pack string::String($t35) + 62: return $t36 +} + + +[variant baseline] +public fun string::append_utf8($t0|s: &mut string::String, $t1|bytes: vector) { + var $t2: &mut string::String + var $t3: vector + var $t4: string::String + 0: $t2 := move($t0) + 1: $t3 := move($t1) + 2: $t4 := string::utf8($t3) + 3: string::append($t2, $t4) + 4: return () +} + + +[variant baseline] +public fun string::from_ascii($t0|s: ascii::String): string::String { + var $t1: ascii::String + var $t2: vector + var $t3: string::String + 0: $t1 := move($t0) + 1: $t2 := ascii::into_bytes($t1) + 2: $t3 := pack string::String($t2) + 3: return $t3 +} + + +[variant baseline] +native fun string::internal_check_utf8($t0|v: &vector): bool; + + +[variant baseline] +native fun string::internal_index_of($t0|v: &vector, $t1|r: &vector): u64; + + +[variant baseline] +native fun string::internal_is_char_boundary($t0|v: &vector, $t1|i: u64): bool; + + +[variant baseline] +native fun string::internal_sub_string($t0|v: &vector, $t1|i: u64, $t2|j: u64): vector; + + +[variant baseline] +public fun string::sub_string($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3: &string::String + var $t4: u64 + var $t5: u64 + var $t6: string::String + 0: $t3 := move($t0) + 1: $t4 := move($t1) + 2: $t5 := move($t2) + 3: $t6 := string::substring($t3, $t4, $t5) + 4: return $t6 +} + + +[variant baseline] +public fun string::to_ascii($t0|s: string::String): ascii::String { + var $t1: string::String + var $t2: vector + var $t3: ascii::String + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: $t3 := ascii::string($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::try_utf8($t0|bytes: vector): option::Option { + var $t1|tmp#$1: option::Option + var $t2: &vector + var $t3: bool + var $t4: vector + var $t5: string::String + var $t6: option::Option + var $t7: option::Option + var $t8: option::Option + 0: $t2 := borrow_local($t0) + 1: $t3 := string::internal_check_utf8($t2) + 2: if ($t3) goto 3 else goto 9 + 3: label L1 + 4: $t4 := move($t0) + 5: $t5 := pack string::String($t4) + 6: $t6 := option::some($t5) + 7: $t1 := $t6 + 8: goto 13 + 9: label L0 + 10: $t7 := option::none() + 11: $t1 := $t7 + 12: goto 13 + 13: label L2 + 14: $t8 := move($t1) + 15: return $t8 +} + + +[variant baseline] +public fun string::utf8($t0|bytes: vector): string::String { + var $t1: &vector + var $t2: bool + var $t3: u64 + var $t4: vector + var $t5: string::String + 0: $t1 := borrow_local($t0) + 1: $t2 := string::internal_check_utf8($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 1 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack string::String($t4) + 11: return $t5 +} + + +[variant baseline] +fun MultiLayerCalling::inner($t0|has_vector: &mut MultiLayerCalling::HasVector): &mut MultiLayerCalling::HasAnotherVector { + var $t1: &mut MultiLayerCalling::HasVector + var $t2: &mut vector + var $t3: u64 + var $t4: &mut MultiLayerCalling::HasAnotherVector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.v($t1) + 2: $t3 := 7 + 3: $t4 := vector::borrow_mut($t2, $t3) + 4: return $t4 +} + + +[variant baseline] +fun MultiLayerCalling::mid($t0|has_vector: &mut MultiLayerCalling::HasVector): &mut MultiLayerCalling::HasAnotherVector { + var $t1: &mut MultiLayerCalling::HasVector + var $t2: &mut MultiLayerCalling::HasAnotherVector + 0: $t1 := move($t0) + 1: $t2 := MultiLayerCalling::inner($t1) + 2: return $t2 +} + + +[variant baseline] +fun MultiLayerCalling::outer($t0|has_vector: &mut MultiLayerCalling::HasVector) { + var $t1: &mut MultiLayerCalling::HasVector + var $t2: &mut MultiLayerCalling::HasAnotherVector + var $t3: &mut vector + var $t4: u8 + 0: $t1 := move($t0) + 1: $t2 := MultiLayerCalling::mid($t1) + 2: $t3 := borrow_field.v($t2) + 3: $t4 := 42 + 4: vector::push_back($t3, $t4) + 5: return () +} + +============ after pipeline `borrow` ================ + +[variant baseline] +public fun u64::diff($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: bool + 0: $t5 := >($t0, $t1) + 1: if ($t5) goto 2 else goto 5 + 2: label L1 + 3: $t2 := -($t0, $t1) + 4: goto 7 + 5: label L0 + 6: $t2 := -($t1, $t0) + 7: label L2 + 8: return $t2 +} + + +[variant baseline] +public fun u64::divide_and_round_up($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: u64 + 0: $t5 := %($t0, $t1) + 1: $t6 := 0 + 2: $t7 := ==($t5, $t6) + 3: if ($t7) goto 4 else goto 7 + 4: label L1 + 5: $t2 := /($t0, $t1) + 6: goto 11 + 7: label L0 + 8: $t8 := /($t0, $t1) + 9: $t9 := 1 + 10: $t2 := +($t8, $t9) + 11: label L2 + 12: return $t2 +} + + +[variant baseline] +public fun u64::max($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: bool + 0: $t5 := >($t0, $t1) + 1: if ($t5) goto 2 else goto 5 + 2: label L1 + 3: $t2 := $t0 + 4: goto 7 + 5: label L0 + 6: $t2 := $t1 + 7: label L2 + 8: return $t2 +} + + +[variant baseline] +public fun u64::min($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: bool + 0: $t5 := <($t0, $t1) + 1: if ($t5) goto 2 else goto 5 + 2: label L1 + 3: $t2 := $t0 + 4: goto 7 + 5: label L0 + 6: $t2 := $t1 + 7: label L2 + 8: return $t2 +} + + +[variant baseline] +public fun u64::pow($t0|base: u64, $t1|exponent: u8): u64 { + var $t2|base#1#1: u64 + var $t3|exponent#1#1: u8 + var $t4|res#1#1: u64 + var $t5: u64 + var $t6: u8 + var $t7: bool + var $t8: u8 + var $t9: u8 + var $t10: u8 + var $t11: bool + var $t12: u8 + var $t13: u8 + 0: $t2 := $t0 + 1: $t3 := $t1 + 2: $t5 := 1 + 3: $t4 := $t5 + 4: label L5 + 5: $t6 := 1 + 6: $t7 := >=($t3, $t6) + 7: if ($t7) goto 8 else goto 25 + 8: label L1 + 9: label L2 + 10: $t8 := 2 + 11: $t9 := %($t3, $t8) + 12: $t10 := 0 + 13: $t11 := ==($t9, $t10) + 14: if ($t11) goto 15 else goto 20 + 15: label L4 + 16: $t2 := *($t2, $t2) + 17: $t12 := 2 + 18: $t3 := /($t3, $t12) + 19: goto 4 + 20: label L3 + 21: $t4 := *($t4, $t2) + 22: $t13 := 1 + 23: $t3 := -($t3, $t13) + 24: goto 4 + 25: label L0 + 26: return $t4 +} + + +[variant baseline] +public fun u64::sqrt($t0|x: u64): u64 { + var $t1|bit#1#1: u128 + var $t2|res#1#1: u128 + var $t3|x#1#1: u64 + var $t4|x#2#1: u128 + var $t5: u128 + var $t6: u128 + var $t7: u128 + var $t8: bool + var $t9: u128 + var $t10: bool + var $t11: u128 + var $t12: u8 + var $t13: u128 + var $t14: u8 + var $t15: u8 + var $t16: u64 + 0: $t5 := 18446744073709551616 + 1: $t1 := $t5 + 2: $t6 := 0 + 3: $t2 := $t6 + 4: $t4 := (u128)($t0) + 5: label L6 + 6: $t7 := 0 + 7: $t8 := !=($t1, $t7) + 8: if ($t8) goto 9 else goto 28 + 9: label L1 + 10: label L2 + 11: $t9 := +($t2, $t1) + 12: $t10 := >=($t4, $t9) + 13: if ($t10) goto 14 else goto 21 + 14: label L4 + 15: $t11 := +($t2, $t1) + 16: $t4 := -($t4, $t11) + 17: $t12 := 1 + 18: $t13 := >>($t2, $t12) + 19: $t2 := +($t13, $t1) + 20: goto 24 + 21: label L3 + 22: $t14 := 1 + 23: $t2 := >>($t2, $t14) + 24: label L5 + 25: $t15 := 2 + 26: $t1 := >>($t1, $t15) + 27: goto 5 + 28: label L0 + 29: $t16 := (u64)($t2) + 30: return $t16 +} + + +[variant baseline] +public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { + var $t2: &mut vector<#0> + var $t3: vector<#0> + var $t4: bool + var $t5: bool + var $t6: &mut vector<#0> + var $t7: #0 + var $t8: vector<#0> + 0: $t2 := borrow_local($t1) + 1: vector::reverse<#0>($t2) + 2: label L3 + 3: $t3 := copy($t1) + 4: $t4 := vector::is_empty<#0>($t3) + 5: $t5 := !($t4) + 6: if ($t5) goto 7 else goto 13 + 7: label L1 + 8: label L2 + 9: $t6 := borrow_local($t1) + 10: $t7 := vector::pop_back<#0>($t6) + 11: vector::push_back<#0>($t0, $t7) + 12: goto 2 + 13: label L0 + 14: destroy($t0) + 15: $t8 := move($t1) + 16: vector::destroy_empty<#0>($t8) + 17: trace_local[lhs]($t0) + 18: return () +} + + +[variant baseline] +public native fun vector::borrow<#0>($t0|v: vector<#0>, $t1|i: u64): #0; + + +[variant baseline] +public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0; + + +[variant baseline] +public fun vector::contains<#0>($t0|v: vector<#0>, $t1|e: #0): bool { + var $t2|i#1#0: u64 + var $t3|len#1#0: u64 + var $t4: u64 + var $t5: u64 + var $t6: bool + var $t7: #0 + var $t8: bool + var $t9: bool + var $t10: u64 + var $t11: bool + 0: $t4 := 0 + 1: $t2 := $t4 + 2: $t5 := vector::length<#0>($t0) + 3: label L5 + 4: $t6 := <($t2, $t5) + 5: if ($t6) goto 6 else goto 18 + 6: label L1 + 7: label L2 + 8: $t7 := vector::borrow<#0>($t0, $t2) + 9: $t8 := ==($t7, $t1) + 10: if ($t8) goto 11 else goto 14 + 11: label L4 + 12: $t9 := true + 13: return $t9 + 14: label L3 + 15: $t10 := 1 + 16: $t2 := +($t2, $t10) + 17: goto 3 + 18: label L0 + 19: $t11 := false + 20: return $t11 +} + + +[variant baseline] +public native fun vector::destroy_empty<#0>($t0|v: vector<#0>); + + +[variant baseline] +public native fun vector::empty<#0>(): vector<#0>; + + +[variant baseline] +public fun vector::index_of<#0>($t0|v: vector<#0>, $t1|e: #0): (bool, u64) { + var $t2|i#1#0: u64 + var $t3|len#1#0: u64 + var $t4: u64 + var $t5: u64 + var $t6: bool + var $t7: #0 + var $t8: bool + var $t9: bool + var $t10: u64 + var $t11: bool + var $t12: u64 + 0: $t4 := 0 + 1: $t2 := $t4 + 2: $t5 := vector::length<#0>($t0) + 3: label L5 + 4: $t6 := <($t2, $t5) + 5: if ($t6) goto 6 else goto 18 + 6: label L1 + 7: label L2 + 8: $t7 := vector::borrow<#0>($t0, $t2) + 9: $t8 := ==($t7, $t1) + 10: if ($t8) goto 11 else goto 14 + 11: label L4 + 12: $t9 := true + 13: return ($t9, $t2) + 14: label L3 + 15: $t10 := 1 + 16: $t2 := +($t2, $t10) + 17: goto 3 + 18: label L0 + 19: $t11 := false + 20: $t12 := 0 + 21: return ($t11, $t12) +} + + +[variant baseline] +public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { + var $t3|len#1#0: u64 + var $t4: vector<#0> + var $t5: u64 + var $t6: bool + var $t7: u64 + var $t8: bool + var $t9: u64 + 0: $t4 := read_ref($t0) + 1: $t5 := vector::length<#0>($t4) + 2: $t6 := >($t2, $t5) + 3: if ($t6) goto 4 else goto 8 + 4: label L1 + 5: destroy($t0) + 6: $t7 := 131072 + 7: abort($t7) + 8: label L0 + 9: vector::push_back<#0>($t0, $t1) + 10: label L4 + 11: $t8 := <($t2, $t5) + 12: if ($t8) goto 13 else goto 18 + 13: label L3 + 14: vector::swap<#0>($t0, $t2, $t5) + 15: $t9 := 1 + 16: $t2 := +($t2, $t9) + 17: goto 10 + 18: label L2 + 19: destroy($t0) + 20: trace_local[v]($t0) + 21: return () +} + + +[variant baseline] +public fun vector::is_empty<#0>($t0|v: vector<#0>): bool { + var $t1: u64 + var $t2: u64 + var $t3: bool + 0: $t1 := vector::length<#0>($t0) + 1: $t2 := 0 + 2: $t3 := ==($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public native fun vector::length<#0>($t0|v: vector<#0>): u64; + + +[variant baseline] +public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0; + + +[variant baseline] +public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0); + + +[variant baseline] +public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { + var $t2|tmp#$2: u64 + var $t3|tmp#$3: &mut vector<#0> + var $t4|len#1#0: u64 + var $t5: vector<#0> + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: bool + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: #0 + 0: $t5 := read_ref($t0) + 1: $t6 := vector::length<#0>($t5) + 2: $t7 := >=($t1, $t6) + 3: if ($t7) goto 4 else goto 8 + 4: label L1 + 5: destroy($t0) + 6: $t8 := 131072 + 7: abort($t8) + 8: label L0 + 9: $t9 := 1 + 10: $t10 := -($t6, $t9) + 11: label L4 + 12: $t11 := <($t1, $t10) + 13: if ($t11) goto 14 else goto 21 + 14: label L3 + 15: $t12 := copy($t1) + 16: $t13 := 1 + 17: $t14 := +($t1, $t13) + 18: $t1 := $t14 + 19: vector::swap<#0>($t0, $t12, $t14) + 20: goto 11 + 21: label L2 + 22: $t15 := vector::pop_back<#0>($t0) + 23: trace_local[v]($t0) + 24: return $t15 +} + + +[variant baseline] +public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { + var $t1|back_index#1#0: u64 + var $t2|front_index#1#0: u64 + var $t3|len#1#0: u64 + var $t4: vector<#0> + var $t5: u64 + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: u64 + 0: $t4 := read_ref($t0) + 1: $t5 := vector::length<#0>($t4) + 2: $t6 := 0 + 3: $t7 := ==($t5, $t6) + 4: if ($t7) goto 5 else goto 9 + 5: label L1 + 6: destroy($t0) + 7: trace_local[v]($t0) + 8: return () + 9: label L0 + 10: $t8 := 0 + 11: $t2 := $t8 + 12: $t9 := 1 + 13: $t1 := -($t5, $t9) + 14: label L4 + 15: $t10 := <($t2, $t1) + 16: if ($t10) goto 17 else goto 24 + 17: label L3 + 18: vector::swap<#0>($t0, $t2, $t1) + 19: $t11 := 1 + 20: $t2 := +($t2, $t11) + 21: $t12 := 1 + 22: $t1 := -($t1, $t12) + 23: goto 14 + 24: label L2 + 25: destroy($t0) + 26: trace_local[v]($t0) + 27: return () +} + + +[variant baseline] +public fun vector::singleton<#0>($t0|e: #0): vector<#0> { + var $t1|v#1#0: vector<#0> + var $t2: &mut vector<#0> + var $t3: vector<#0> + 0: $t1 := vector::empty<#0>() + 1: $t2 := borrow_local($t1) + 2: vector::push_back<#0>($t2, $t0) + 3: $t3 := move($t1) + 4: return $t3 +} + + +[variant baseline] +public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64); + + +[variant baseline] +public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { + var $t2|last_idx#1#0: u64 + var $t3: vector<#0> + var $t4: bool + var $t5: bool + var $t6: u64 + var $t7: vector<#0> + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: #0 + 0: $t3 := read_ref($t0) + 1: $t4 := vector::is_empty<#0>($t3) + 2: $t5 := !($t4) + 3: if ($t5) goto 4 else goto 6 + 4: label L1 + 5: goto 10 + 6: label L0 + 7: destroy($t0) + 8: $t6 := 131072 + 9: abort($t6) + 10: label L2 + 11: $t7 := read_ref($t0) + 12: $t8 := vector::length<#0>($t7) + 13: $t9 := 1 + 14: $t10 := -($t8, $t9) + 15: vector::swap<#0>($t0, $t1, $t10) + 16: $t11 := vector::pop_back<#0>($t0) + 17: trace_local[v]($t0) + 18: return $t11 +} + + +[variant baseline] +public fun option::borrow<#0>($t0|t: option::Option<#0>): #0 { + var $t1: bool + var $t2: u64 + var $t3: vector<#0> + var $t4: u64 + var $t5: #0 + 0: $t1 := option::is_some<#0>($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 262145 + 6: abort($t2) + 7: label L2 + 8: $t3 := get_field>.vec($t0) + 9: $t4 := 0 + 10: $t5 := vector::borrow<#0>($t3, $t4) + 11: return $t5 +} + + +[variant baseline] +public fun option::borrow_mut<#0>($t0|t: &mut option::Option<#0>): &mut #0 { + var $t1: option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: &mut vector<#0> + var $t5: u64 + var $t6: &mut #0 + 0: $t1 := read_ref($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 9 + 5: label L0 + 6: destroy($t0) + 7: $t3 := 262145 + 8: abort($t3) + 9: label L2 + 10: $t4 := borrow_field>.vec($t0) + 11: $t5 := 0 + 12: $t6 := vector::borrow_mut<#0>($t4, $t5) + 13: trace_local[t]($t0) + 14: return $t6 +} + + +[variant baseline] +public fun option::contains<#0>($t0|t: option::Option<#0>, $t1|e_ref: #0): bool { + var $t2: vector<#0> + var $t3: bool + 0: $t2 := get_field>.vec($t0) + 1: $t3 := vector::contains<#0>($t2, $t1) + 2: return $t3 +} + + +[variant baseline] +public fun option::swap<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): #0 { + var $t2|old_value#1#0: #0 + var $t3|vec_ref#1#0: &mut vector<#0> + var $t4: option::Option<#0> + var $t5: bool + var $t6: u64 + var $t7: &mut vector<#0> + var $t8: #0 + 0: $t4 := read_ref($t0) + 1: $t5 := option::is_some<#0>($t4) + 2: if ($t5) goto 3 else goto 5 + 3: label L1 + 4: goto 9 + 5: label L0 + 6: destroy($t0) + 7: $t6 := 262145 + 8: abort($t6) + 9: label L2 + 10: $t7 := borrow_field>.vec($t0) + 11: $t8 := vector::pop_back<#0>($t7) + 12: vector::push_back<#0>($t7, $t1) + 13: trace_local[t]($t0) + 14: return $t8 +} + + +[variant baseline] +public fun option::borrow_with_default<#0>($t0|t: option::Option<#0>, $t1|default_ref: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: u64 + 0: $t4 := get_field>.vec($t0) + 1: $t5 := vector::is_empty<#0>($t4) + 2: if ($t5) goto 3 else goto 6 + 3: label L1 + 4: $t2 := $t1 + 5: goto 9 + 6: label L0 + 7: $t6 := 0 + 8: $t2 := vector::borrow<#0>($t4, $t6) + 9: label L2 + 10: return $t2 +} + + +[variant baseline] +public fun option::destroy_none<#0>($t0|t: option::Option<#0>) { + var $t1: bool + var $t2: u64 + var $t3: vector<#0> + 0: $t1 := option::is_none<#0>($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 262144 + 6: abort($t2) + 7: label L2 + 8: $t3 := unpack option::Option<#0>($t0) + 9: vector::destroy_empty<#0>($t3) + 10: return () +} + + +[variant baseline] +public fun option::destroy_some<#0>($t0|t: option::Option<#0>): #0 { + var $t1|elem#1#0: #0 + var $t2|vec#1#0: vector<#0> + var $t3: bool + var $t4: u64 + var $t5: &mut vector<#0> + var $t6: #0 + var $t7: vector<#0> + 0: $t3 := option::is_some<#0>($t0) + 1: if ($t3) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t4 := 262145 + 6: abort($t4) + 7: label L2 + 8: $t2 := unpack option::Option<#0>($t0) + 9: $t5 := borrow_local($t2) + 10: $t6 := vector::pop_back<#0>($t5) + 11: $t7 := move($t2) + 12: vector::destroy_empty<#0>($t7) + 13: return $t6 +} + + +[variant baseline] +public fun option::destroy_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec#1#0: vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: &mut vector<#0> + 0: $t3 := unpack option::Option<#0>($t0) + 1: $t4 := copy($t3) + 2: $t5 := vector::is_empty<#0>($t4) + 3: if ($t5) goto 4 else goto 7 + 4: label L1 + 5: $t2 := $t1 + 6: goto 10 + 7: label L0 + 8: $t6 := borrow_local($t3) + 9: $t2 := vector::pop_back<#0>($t6) + 10: label L2 + 11: return $t2 +} + + +[variant baseline] +public fun option::extract<#0>($t0|t: &mut option::Option<#0>): #0 { + var $t1: option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: &mut vector<#0> + var $t5: #0 + 0: $t1 := read_ref($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 9 + 5: label L0 + 6: destroy($t0) + 7: $t3 := 262145 + 8: abort($t3) + 9: label L2 + 10: $t4 := borrow_field>.vec($t0) + 11: $t5 := vector::pop_back<#0>($t4) + 12: trace_local[t]($t0) + 13: return $t5 +} + + +[variant baseline] +public fun option::fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0) { + var $t2|vec_ref#1#0: &mut vector<#0> + var $t3: &mut vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: u64 + 0: $t3 := borrow_field>.vec($t0) + 1: $t4 := read_ref($t3) + 2: $t5 := vector::is_empty<#0>($t4) + 3: if ($t5) goto 4 else goto 14 + 4: label L1 + 5: goto 10 + 6: label L0 + 7: destroy($t3) + 8: $t6 := 262144 + 9: abort($t6) + 10: label L2 + 11: vector::push_back<#0>($t3, $t1) + 12: trace_local[t]($t0) + 13: return () + 14: label L3 + 15: destroy($t0) + 16: goto 6 +} + + +[variant baseline] +public fun option::get_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: u64 + var $t7: #0 + 0: $t4 := get_field>.vec($t0) + 1: $t5 := vector::is_empty<#0>($t4) + 2: if ($t5) goto 3 else goto 6 + 3: label L1 + 4: $t2 := $t1 + 5: goto 10 + 6: label L0 + 7: $t6 := 0 + 8: $t7 := vector::borrow<#0>($t4, $t6) + 9: $t2 := $t7 + 10: label L2 + 11: return $t2 +} + + +[variant baseline] +public fun option::is_none<#0>($t0|t: option::Option<#0>): bool { + var $t1: vector<#0> + var $t2: bool + 0: $t1 := get_field>.vec($t0) + 1: $t2 := vector::is_empty<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun option::is_some<#0>($t0|t: option::Option<#0>): bool { + var $t1: vector<#0> + var $t2: bool + var $t3: bool + 0: $t1 := get_field>.vec($t0) + 1: $t2 := vector::is_empty<#0>($t1) + 2: $t3 := !($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::none<#0>(): option::Option<#0> { + var $t0: vector<#0> + var $t1: option::Option<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := pack option::Option<#0>($t0) + 2: return $t1 +} + + +[variant baseline] +public fun option::some<#0>($t0|e: #0): option::Option<#0> { + var $t1: vector<#0> + var $t2: option::Option<#0> + 0: $t1 := vector::singleton<#0>($t0) + 1: $t2 := pack option::Option<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun option::swap_or_fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): option::Option<#0> { + var $t2|tmp#$2: option::Option<#0> + var $t3|old_value#1#0: option::Option<#0> + var $t4|vec_ref#1#0: &mut vector<#0> + var $t5: &mut vector<#0> + var $t6: vector<#0> + var $t7: bool + var $t8: #0 + 0: $t5 := borrow_field>.vec($t0) + 1: $t6 := read_ref($t5) + 2: $t7 := vector::is_empty<#0>($t6) + 3: if ($t7) goto 4 else goto 7 + 4: label L1 + 5: $t2 := option::none<#0>() + 6: goto 10 + 7: label L0 + 8: $t8 := vector::pop_back<#0>($t5) + 9: $t2 := option::some<#0>($t8) + 10: label L2 + 11: vector::push_back<#0>($t5, $t1) + 12: trace_local[t]($t0) + 13: return $t2 +} + + +[variant baseline] +public fun option::to_vec<#0>($t0|t: option::Option<#0>): vector<#0> { + var $t1: vector<#0> + 0: $t1 := unpack option::Option<#0>($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::append($t0|string: &mut ascii::String, $t1|other: ascii::String) { + var $t2: &mut vector + var $t3: vector + 0: $t2 := borrow_field.bytes($t0) + 1: $t3 := ascii::into_bytes($t1) + 2: vector::append($t2, $t3) + 3: trace_local[string]($t0) + 4: return () +} + + +[variant baseline] +public fun ascii::index_of($t0|string: ascii::String, $t1|substr: ascii::String): u64 { + var $t2|tmp#$2: bool + var $t3|i#1#0: u64 + var $t4|j#1#0: u64 + var $t5|m#1#0: u64 + var $t6|n#1#0: u64 + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: bool + var $t13: u64 + var $t14: bool + var $t15: vector + var $t16: u64 + var $t17: u8 + var $t18: vector + var $t19: u8 + var $t20: bool + var $t21: u64 + var $t22: bool + var $t23: u64 + 0: $t7 := 0 + 1: $t3 := $t7 + 2: $t8 := ascii::length($t0) + 3: $t9 := ascii::length($t1) + 4: $t10 := <($t8, $t9) + 5: if ($t10) goto 6 else goto 8 + 6: label L1 + 7: return $t8 + 8: label L0 + 9: $t11 := -($t8, $t9) + 10: $t12 := <=($t3, $t11) + 11: if ($t12) goto 12 else goto 45 + 12: label L3 + 13: $t13 := 0 + 14: $t4 := $t13 + 15: label L10 + 16: $t14 := <($t4, $t9) + 17: if ($t14) goto 18 else goto 27 + 18: label L5 + 19: label L6 + 20: $t15 := get_field.bytes($t0) + 21: $t16 := +($t3, $t4) + 22: $t17 := vector::borrow($t15, $t16) + 23: $t18 := get_field.bytes($t1) + 24: $t19 := vector::borrow($t18, $t4) + 25: $t2 := ==($t17, $t19) + 26: goto 30 + 27: label L4 + 28: $t20 := false + 29: $t2 := $t20 + 30: label L7 + 31: if ($t2) goto 32 else goto 36 + 32: label L9 + 33: $t21 := 1 + 34: $t4 := +($t4, $t21) + 35: goto 15 + 36: label L8 + 37: $t22 := ==($t4, $t9) + 38: if ($t22) goto 39 else goto 41 + 39: label L12 + 40: return $t3 + 41: label L11 + 42: $t23 := 1 + 43: $t3 := +($t3, $t23) + 44: goto 8 + 45: label L2 + 46: return $t8 +} + + +[variant baseline] +public fun ascii::insert($t0|s: &mut ascii::String, $t1|at: u64, $t2|o: ascii::String) { + var $t3|e#1#2: u8 + var $t4|v#1#1: vector + var $t5: ascii::String + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: vector + var $t10: bool + var $t11: bool + var $t12: &mut vector + var $t13: u8 + var $t14: &mut vector + var $t15: vector + 0: $t5 := read_ref($t0) + 1: $t6 := ascii::length($t5) + 2: $t7 := <=($t1, $t6) + 3: if ($t7) goto 4 else goto 6 + 4: label L1 + 5: goto 10 + 6: label L0 + 7: destroy($t0) + 8: $t8 := 65537 + 9: abort($t8) + 10: label L2 + 11: $t4 := ascii::into_bytes($t2) + 12: label L5 + 13: $t9 := copy($t4) + 14: $t10 := vector::is_empty($t9) + 15: $t11 := !($t10) + 16: if ($t11) goto 17 else goto 23 + 17: label L4 + 18: $t12 := borrow_local($t4) + 19: $t13 := vector::pop_back($t12) + 20: $t14 := borrow_field.bytes($t0) + 21: vector::insert($t14, $t13, $t1) + 22: goto 12 + 23: label L3 + 24: destroy($t0) + 25: $t15 := move($t4) + 26: vector::destroy_empty($t15) + 27: trace_local[s]($t0) + 28: return () +} + + +[variant baseline] +public fun ascii::is_empty($t0|string: ascii::String): bool { + var $t1: vector + var $t2: bool + 0: $t1 := get_field.bytes($t0) + 1: $t2 := vector::is_empty($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::length($t0|string: ascii::String): u64 { + var $t1: vector + var $t2: u64 + 0: $t1 := ascii::as_bytes($t0) + 1: $t2 := vector::length($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::all_characters_printable($t0|string: ascii::String): bool { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|i#1#12: u64 + var $t4|i#1#9: u64 + var $t5|stop#1#9: u64 + var $t6|v#1#3: vector + var $t7: vector + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u8 + var $t12: bool + var $t13: bool + var $t14: bool + var $t15: u64 + var $t16: bool + 0: $t7 := get_field.bytes($t0) + 1: $t8 := vector::length($t7) + 2: $t9 := 0 + 3: $t4 := $t9 + 4: label L5 + 5: $t10 := <($t4, $t8) + 6: if ($t10) goto 7 else goto 20 + 7: label L1 + 8: $t11 := vector::borrow($t7, $t4) + 9: $t12 := ascii::is_printable_char($t11) + 10: $t13 := !($t12) + 11: if ($t13) goto 12 else goto 16 + 12: label L3 + 13: $t14 := false + 14: $t2 := $t14 + 15: goto 23 + 16: label L2 + 17: $t15 := 1 + 18: $t4 := +($t4, $t15) + 19: goto 4 + 20: label L0 + 21: $t16 := true + 22: $t2 := $t16 + 23: label L4 + 24: return $t2 +} + + +[variant baseline] +public fun ascii::string($t0|bytes: vector): ascii::String { + var $t1|x#1#0: option::Option + var $t2: option::Option + var $t3: bool + var $t4: u64 + var $t5: ascii::String + 0: $t2 := ascii::try_string($t0) + 1: $t3 := option::is_some($t2) + 2: if ($t3) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t4 := 65536 + 7: abort($t4) + 8: label L2 + 9: $t5 := option::destroy_some($t2) + 10: return $t5 +} + + +[variant baseline] +public fun ascii::as_bytes($t0|string: ascii::String): vector { + var $t1: vector + 0: $t1 := get_field.bytes($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::byte($t0|char: ascii::Char): u8 { + var $t1: u8 + 0: $t1 := unpack ascii::Char($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::char($t0|byte: u8): ascii::Char { + var $t1: bool + var $t2: u64 + var $t3: ascii::Char + 0: $t1 := ascii::is_valid_char($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 65536 + 6: abort($t2) + 7: label L2 + 8: $t3 := pack ascii::Char($t0) + 9: return $t3 +} + + +[variant baseline] +fun ascii::char_to_lowercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: bool + var $t7: u8 + 0: $t3 := 65 + 1: $t4 := >=($t0, $t3) + 2: if ($t4) goto 3 else goto 7 + 3: label L1 + 4: $t5 := 90 + 5: $t1 := <=($t0, $t5) + 6: goto 10 + 7: label L0 + 8: $t6 := false + 9: $t1 := $t6 + 10: label L2 + 11: if ($t1) goto 12 else goto 16 + 12: label L4 + 13: $t7 := 32 + 14: $t2 := +($t0, $t7) + 15: goto 18 + 16: label L3 + 17: $t2 := $t0 + 18: label L5 + 19: return $t2 +} + + +[variant baseline] +fun ascii::char_to_uppercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: bool + var $t7: u8 + 0: $t3 := 97 + 1: $t4 := >=($t0, $t3) + 2: if ($t4) goto 3 else goto 7 + 3: label L1 + 4: $t5 := 122 + 5: $t1 := <=($t0, $t5) + 6: goto 10 + 7: label L0 + 8: $t6 := false + 9: $t1 := $t6 + 10: label L2 + 11: if ($t1) goto 12 else goto 16 + 12: label L4 + 13: $t7 := 32 + 14: $t2 := -($t0, $t7) + 15: goto 18 + 16: label L3 + 17: $t2 := $t0 + 18: label L5 + 19: return $t2 +} + + +[variant baseline] +public fun ascii::into_bytes($t0|string: ascii::String): vector { + var $t1: vector + 0: $t1 := unpack ascii::String($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::is_printable_char($t0|byte: u8): bool { + var $t1|tmp#$1: bool + var $t2: u8 + var $t3: bool + var $t4: u8 + var $t5: bool + 0: $t2 := 32 + 1: $t3 := >=($t0, $t2) + 2: if ($t3) goto 3 else goto 7 + 3: label L1 + 4: $t4 := 126 + 5: $t1 := <=($t0, $t4) + 6: goto 10 + 7: label L0 + 8: $t5 := false + 9: $t1 := $t5 + 10: label L2 + 11: return $t1 +} + + +[variant baseline] +public fun ascii::is_valid_char($t0|b: u8): bool { + var $t1: u8 + var $t2: bool + 0: $t1 := 127 + 1: $t2 := <=($t0, $t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::pop_char($t0|string: &mut ascii::String): ascii::Char { + var $t1: &mut vector + var $t2: u8 + var $t3: ascii::Char + 0: $t1 := borrow_field.bytes($t0) + 1: $t2 := vector::pop_back($t1) + 2: $t3 := pack ascii::Char($t2) + 3: trace_local[string]($t0) + 4: return $t3 +} + [variant baseline] -public fun vector::index_of<#0>($t0|v: vector<#0>, $t1|e: #0): (bool, u64) { - var $t2|i#1#0: u64 - var $t3|len#1#0: u64 - var $t4: u64 - var $t5: u64 - var $t6: bool - var $t7: #0 - var $t8: bool - var $t9: bool - var $t10: u64 - var $t11: bool - var $t12: u64 - 0: $t4 := 0 - 1: $t2 := $t4 - 2: $t5 := vector::length<#0>($t0) - 3: label L5 - 4: $t6 := <($t2, $t5) - 5: if ($t6) goto 6 else goto 18 - 6: label L1 - 7: label L2 - 8: $t7 := vector::borrow<#0>($t0, $t2) - 9: $t8 := ==($t7, $t1) - 10: if ($t8) goto 11 else goto 14 - 11: label L4 - 12: $t9 := true - 13: return ($t9, $t2) - 14: label L3 - 15: $t10 := 1 - 16: $t2 := +($t2, $t10) - 17: goto 3 - 18: label L0 - 19: $t11 := false - 20: $t12 := 0 - 21: return ($t11, $t12) +public fun ascii::push_char($t0|string: &mut ascii::String, $t1|char: ascii::Char) { + var $t2: &mut vector + var $t3: u8 + 0: $t2 := borrow_field.bytes($t0) + 1: $t3 := get_field.byte($t1) + 2: vector::push_back($t2, $t3) + 3: trace_local[string]($t0) + 4: return () } [variant baseline] -public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { - var $t3|len#1#0: u64 - var $t4: vector<#0> - var $t5: u64 - var $t6: bool - var $t7: u64 +public fun ascii::substring($t0|string: ascii::String, $t1|i: u64, $t2|j: u64): ascii::String { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|i#1#3: u64 + var $t6|i#1#6: u64 + var $t7|stop#1#3: u64 var $t8: bool var $t9: u64 - 0: $t4 := read_ref($t0) - 1: $t5 := vector::length<#0>($t4) - 2: $t6 := >($t2, $t5) - 3: if ($t6) goto 4 else goto 8 - 4: label L1 - 5: destroy($t0) - 6: $t7 := 131072 - 7: abort($t7) - 8: label L0 - 9: vector::push_back<#0>($t0, $t1) - 10: label L5 - 11: $t8 := <($t2, $t5) - 12: if ($t8) goto 13 else goto 19 + var $t10: bool + var $t11: u64 + var $t12: vector + var $t13: bool + var $t14: &mut vector + var $t15: vector + var $t16: u8 + var $t17: u64 + var $t18: vector + var $t19: ascii::String + 0: $t8 := <=($t1, $t2) + 1: if ($t8) goto 2 else goto 6 + 2: label L1 + 3: $t9 := ascii::length($t0) + 4: $t3 := <=($t2, $t9) + 5: goto 9 + 6: label L0 + 7: $t10 := false + 8: $t3 := $t10 + 9: label L2 + 10: if ($t3) goto 11 else goto 13 + 11: label L4 + 12: goto 16 13: label L3 - 14: label L4 - 15: vector::swap<#0>($t0, $t2, $t5) - 16: $t9 := 1 - 17: $t2 := +($t2, $t9) - 18: goto 10 - 19: label L2 - 20: destroy($t0) - 21: trace_local[v]($t0) - 22: return () + 14: $t11 := 65537 + 15: abort($t11) + 16: label L5 + 17: $t12 := [] + 18: $t4 := $t12 + 19: $t5 := $t1 + 20: label L8 + 21: $t13 := <($t5, $t2) + 22: if ($t13) goto 23 else goto 31 + 23: label L7 + 24: $t14 := borrow_local($t4) + 25: $t15 := get_field.bytes($t0) + 26: $t16 := vector::borrow($t15, $t5) + 27: vector::push_back($t14, $t16) + 28: $t17 := 1 + 29: $t5 := +($t5, $t17) + 30: goto 20 + 31: label L6 + 32: $t18 := move($t4) + 33: $t19 := pack ascii::String($t18) + 34: return $t19 } [variant baseline] -public fun vector::is_empty<#0>($t0|v: vector<#0>): bool { - var $t1: u64 - var $t2: u64 - var $t3: bool - 0: $t1 := vector::length<#0>($t0) - 1: $t2 := 0 - 2: $t3 := ==($t1, $t2) - 3: return $t3 +public fun ascii::to_lowercase($t0|string: ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: vector + var $t10|v#1#3: vector + var $t11: vector + var $t12: vector + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u8 + var $t17: &mut vector + var $t18: u8 + var $t19: u64 + var $t20: vector + var $t21: ascii::String + 0: $t11 := ascii::as_bytes($t0) + 1: $t12 := [] + 2: $t7 := $t12 + 3: $t13 := vector::length($t11) + 4: $t14 := 0 + 5: $t6 := $t14 + 6: label L2 + 7: $t15 := <($t6, $t13) + 8: if ($t15) goto 9 else goto 17 + 9: label L1 + 10: $t16 := vector::borrow($t11, $t6) + 11: $t17 := borrow_local($t7) + 12: $t18 := ascii::char_to_lowercase($t16) + 13: vector::push_back($t17, $t18) + 14: $t19 := 1 + 15: $t6 := +($t6, $t19) + 16: goto 6 + 17: label L0 + 18: $t20 := move($t7) + 19: $t21 := pack ascii::String($t20) + 20: return $t21 } [variant baseline] -public native fun vector::length<#0>($t0|v: vector<#0>): u64; +public fun ascii::to_uppercase($t0|string: ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: vector + var $t10|v#1#3: vector + var $t11: vector + var $t12: vector + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u8 + var $t17: &mut vector + var $t18: u8 + var $t19: u64 + var $t20: vector + var $t21: ascii::String + 0: $t11 := ascii::as_bytes($t0) + 1: $t12 := [] + 2: $t7 := $t12 + 3: $t13 := vector::length($t11) + 4: $t14 := 0 + 5: $t6 := $t14 + 6: label L2 + 7: $t15 := <($t6, $t13) + 8: if ($t15) goto 9 else goto 17 + 9: label L1 + 10: $t16 := vector::borrow($t11, $t6) + 11: $t17 := borrow_local($t7) + 12: $t18 := ascii::char_to_uppercase($t16) + 13: vector::push_back($t17, $t18) + 14: $t19 := 1 + 15: $t6 := +($t6, $t19) + 16: goto 6 + 17: label L0 + 18: $t20 := move($t7) + 19: $t21 := pack ascii::String($t20) + 20: return $t21 +} [variant baseline] -public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0; +public fun ascii::try_string($t0|bytes: vector): option::Option { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|tmp#$3: option::Option + var $t4|i#1#12: u64 + var $t5|i#1#9: u64 + var $t6|stop#1#9: u64 + var $t7|v#1#3: vector + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u8 + var $t12: bool + var $t13: bool + var $t14: bool + var $t15: u64 + var $t16: bool + var $t17: ascii::String + 0: $t8 := vector::length($t0) + 1: $t9 := 0 + 2: $t5 := $t9 + 3: label L5 + 4: $t10 := <($t5, $t8) + 5: if ($t10) goto 6 else goto 19 + 6: label L1 + 7: $t11 := vector::borrow($t0, $t5) + 8: $t12 := ascii::is_valid_char($t11) + 9: $t13 := !($t12) + 10: if ($t13) goto 11 else goto 15 + 11: label L3 + 12: $t14 := false + 13: $t2 := $t14 + 14: goto 22 + 15: label L2 + 16: $t15 := 1 + 17: $t5 := +($t5, $t15) + 18: goto 3 + 19: label L0 + 20: $t16 := true + 21: $t2 := $t16 + 22: label L4 + 23: if ($t2) goto 24 else goto 28 + 24: label L7 + 25: $t17 := pack ascii::String($t0) + 26: $t3 := option::some($t17) + 27: goto 30 + 28: label L6 + 29: $t3 := option::none() + 30: label L8 + 31: return $t3 +} [variant baseline] -public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0); +public fun string::append($t0|s: &mut string::String, $t1|r: string::String) { + var $t2: &mut vector + var $t3: vector + 0: $t2 := borrow_field.bytes($t0) + 1: $t3 := get_field.bytes($t1) + 2: vector::append($t2, $t3) + 3: trace_local[s]($t0) + 4: return () +} [variant baseline] -public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { - var $t2|tmp#$2: u64 - var $t3|tmp#$3: &mut vector<#0> - var $t4|len#1#0: u64 - var $t5: vector<#0> - var $t6: u64 - var $t7: bool - var $t8: u64 +public fun string::index_of($t0|s: string::String, $t1|r: string::String): u64 { + var $t2: vector + var $t3: vector + var $t4: u64 + 0: $t2 := get_field.bytes($t0) + 1: $t3 := get_field.bytes($t1) + 2: $t4 := string::internal_index_of($t2, $t3) + 3: return $t4 +} + + +[variant baseline] +public fun string::insert($t0|s: &mut string::String, $t1|at: u64, $t2|o: string::String) { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|end#1#0: string::String + var $t6|front#1#0: string::String + var $t7|l#1#0: u64 + var $t8: vector var $t9: u64 - var $t10: u64 + var $t10: bool var $t11: bool var $t12: u64 - var $t13: u64 + var $t13: string::String var $t14: u64 - var $t15: #0 - 0: $t5 := read_ref($t0) - 1: $t6 := vector::length<#0>($t5) - 2: $t7 := >=($t1, $t6) - 3: if ($t7) goto 4 else goto 8 + var $t15: string::String + var $t16: u64 + var $t17: string::String + var $t18: string::String + var $t19: &mut string::String + var $t20: &mut string::String + var $t21: string::String + 0: $t8 := get_field.bytes($t0) + 1: $t9 := vector::length($t8) + 2: $t10 := <=($t1, $t9) + 3: if ($t10) goto 4 else goto 7 4: label L1 - 5: destroy($t0) - 6: $t8 := 131072 - 7: abort($t8) - 8: label L0 - 9: $t9 := 1 - 10: $t10 := -($t6, $t9) - 11: label L5 - 12: $t11 := <($t1, $t10) - 13: if ($t11) goto 14 else goto 22 + 5: $t3 := string::internal_is_char_boundary($t8, $t1) + 6: goto 10 + 7: label L0 + 8: $t11 := false + 9: $t3 := $t11 + 10: label L2 + 11: if ($t3) goto 12 else goto 14 + 12: label L4 + 13: goto 18 14: label L3 - 15: label L4 - 16: $t12 := copy($t1) - 17: $t13 := 1 - 18: $t14 := +($t1, $t13) - 19: $t1 := $t14 - 20: vector::swap<#0>($t0, $t12, $t14) - 21: goto 11 - 22: label L2 - 23: $t15 := vector::pop_back<#0>($t0) - 24: trace_local[v]($t0) - 25: return $t15 + 15: destroy($t0) + 16: $t12 := 2 + 17: abort($t12) + 18: label L5 + 19: $t13 := read_ref($t0) + 20: $t14 := string::length($t13) + 21: $t15 := read_ref($t0) + 22: $t16 := 0 + 23: $t6 := string::substring($t15, $t16, $t1) + 24: $t17 := read_ref($t0) + 25: $t18 := string::substring($t17, $t1, $t14) + 26: $t19 := borrow_local($t6) + 27: string::append($t19, $t2) + 28: $t20 := borrow_local($t6) + 29: string::append($t20, $t18) + 30: $t21 := move($t6) + 31: write_ref($t0, $t21) + 32: trace_local[s]($t0) + 33: return () } [variant baseline] -public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { - var $t1|back_index#1#0: u64 - var $t2|front_index#1#0: u64 - var $t3|len#1#0: u64 - var $t4: vector<#0> - var $t5: u64 - var $t6: u64 - var $t7: bool - var $t8: u64 - var $t9: u64 - var $t10: bool - var $t11: u64 - var $t12: u64 - 0: $t4 := read_ref($t0) - 1: $t5 := vector::length<#0>($t4) - 2: $t6 := 0 - 3: $t7 := ==($t5, $t6) - 4: if ($t7) goto 5 else goto 9 - 5: label L1 - 6: destroy($t0) - 7: trace_local[v]($t0) - 8: return () - 9: label L0 - 10: $t8 := 0 - 11: $t2 := $t8 - 12: $t9 := 1 - 13: $t1 := -($t5, $t9) - 14: label L5 - 15: $t10 := <($t2, $t1) - 16: if ($t10) goto 17 else goto 25 - 17: label L3 - 18: label L4 - 19: vector::swap<#0>($t0, $t2, $t1) - 20: $t11 := 1 - 21: $t2 := +($t2, $t11) - 22: $t12 := 1 - 23: $t1 := -($t1, $t12) - 24: goto 14 - 25: label L2 - 26: destroy($t0) - 27: trace_local[v]($t0) - 28: return () +public fun string::is_empty($t0|s: string::String): bool { + var $t1: vector + var $t2: bool + 0: $t1 := get_field.bytes($t0) + 1: $t2 := vector::is_empty($t1) + 2: return $t2 } [variant baseline] -public fun vector::singleton<#0>($t0|e: #0): vector<#0> { - var $t1|v#1#0: vector<#0> - var $t2: &mut vector<#0> - var $t3: vector<#0> - 0: $t1 := vector::empty<#0>() - 1: $t2 := borrow_local($t1) - 2: vector::push_back<#0>($t2, $t0) - 3: $t3 := move($t1) - 4: return $t3 +public fun string::length($t0|s: string::String): u64 { + var $t1: vector + var $t2: u64 + 0: $t1 := get_field.bytes($t0) + 1: $t2 := vector::length($t1) + 2: return $t2 } [variant baseline] -public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64); +public fun string::as_bytes($t0|s: string::String): vector { + var $t1: vector + 0: $t1 := get_field.bytes($t0) + 1: return $t1 +} [variant baseline] -public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { - var $t2|last_idx#1#0: u64 - var $t3: vector<#0> - var $t4: bool - var $t5: bool - var $t6: u64 - var $t7: vector<#0> - var $t8: u64 +public fun string::into_bytes($t0|s: string::String): vector { + var $t1: vector + 0: $t1 := unpack string::String($t0) + 1: return $t1 +} + + +[variant baseline] +public fun string::bytes($t0|s: string::String): vector { + var $t1: vector + 0: $t1 := string::as_bytes($t0) + 1: return $t1 +} + + +[variant baseline] +public fun string::substring($t0|s: string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3|tmp#$3: bool + var $t4|tmp#$4: bool + var $t5|tmp#$5: bool + var $t6|bytes#1#0: vector + var $t7|l#1#0: u64 + var $t8: vector var $t9: u64 - var $t10: u64 - var $t11: #0 - 0: $t3 := read_ref($t0) - 1: $t4 := vector::is_empty<#0>($t3) - 2: $t5 := !($t4) - 3: if ($t5) goto 4 else goto 6 + var $t10: bool + var $t11: bool + var $t12: bool + var $t13: bool + var $t14: u64 + var $t15: vector + var $t16: string::String + 0: $t8 := get_field.bytes($t0) + 1: $t9 := vector::length($t8) + 2: $t10 := <=($t2, $t9) + 3: if ($t10) goto 4 else goto 7 4: label L1 - 5: goto 10 - 6: label L0 - 7: destroy($t0) - 8: $t6 := 131072 - 9: abort($t6) + 5: $t3 := <=($t1, $t2) + 6: goto 10 + 7: label L0 + 8: $t11 := false + 9: $t3 := $t11 10: label L2 - 11: $t7 := read_ref($t0) - 12: $t8 := vector::length<#0>($t7) - 13: $t9 := 1 - 14: $t10 := -($t8, $t9) - 15: vector::swap<#0>($t0, $t1, $t10) - 16: $t11 := vector::pop_back<#0>($t0) - 17: trace_local[v]($t0) - 18: return $t11 + 11: if ($t3) goto 12 else goto 15 + 12: label L4 + 13: $t4 := string::internal_is_char_boundary($t8, $t1) + 14: goto 18 + 15: label L3 + 16: $t12 := false + 17: $t4 := $t12 + 18: label L5 + 19: if ($t4) goto 20 else goto 23 + 20: label L7 + 21: $t5 := string::internal_is_char_boundary($t8, $t2) + 22: goto 26 + 23: label L6 + 24: $t13 := false + 25: $t5 := $t13 + 26: label L8 + 27: if ($t5) goto 28 else goto 30 + 28: label L10 + 29: goto 33 + 30: label L9 + 31: $t14 := 2 + 32: abort($t14) + 33: label L11 + 34: $t15 := string::internal_sub_string($t8, $t1, $t2) + 35: $t16 := pack string::String($t15) + 36: return $t16 +} + + +[variant baseline] +public fun string::append_utf8($t0|s: &mut string::String, $t1|bytes: vector) { + var $t2: string::String + 0: $t2 := string::utf8($t1) + 1: string::append($t0, $t2) + 2: trace_local[s]($t0) + 3: return () +} + + +[variant baseline] +public fun string::from_ascii($t0|s: ascii::String): string::String { + var $t1: vector + var $t2: string::String + 0: $t1 := ascii::into_bytes($t0) + 1: $t2 := pack string::String($t1) + 2: return $t2 +} + + +[variant baseline] +native fun string::internal_check_utf8($t0|v: vector): bool; + + +[variant baseline] +native fun string::internal_index_of($t0|v: vector, $t1|r: vector): u64; + + +[variant baseline] +native fun string::internal_is_char_boundary($t0|v: vector, $t1|i: u64): bool; + + +[variant baseline] +native fun string::internal_sub_string($t0|v: vector, $t1|i: u64, $t2|j: u64): vector; + + +[variant baseline] +public fun string::sub_string($t0|s: string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3: string::String + 0: $t3 := string::substring($t0, $t1, $t2) + 1: return $t3 +} + + +[variant baseline] +public fun string::to_ascii($t0|s: string::String): ascii::String { + var $t1: vector + var $t2: ascii::String + 0: $t1 := unpack string::String($t0) + 1: $t2 := ascii::string($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::try_utf8($t0|bytes: vector): option::Option { + var $t1|tmp#$1: option::Option + var $t2: bool + var $t3: string::String + 0: $t2 := string::internal_check_utf8($t0) + 1: if ($t2) goto 2 else goto 6 + 2: label L1 + 3: $t3 := pack string::String($t0) + 4: $t1 := option::some($t3) + 5: goto 8 + 6: label L0 + 7: $t1 := option::none() + 8: label L2 + 9: return $t1 +} + + +[variant baseline] +public fun string::utf8($t0|bytes: vector): string::String { + var $t1: bool + var $t2: u64 + var $t3: string::String + 0: $t1 := string::internal_check_utf8($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 1 + 6: abort($t2) + 7: label L2 + 8: $t3 := pack string::String($t0) + 9: return $t3 } @@ -908,6 +4422,10 @@ fun vector::borrow_mut[baseline] borrowed_by: Reference($t0) -> {([], Return(0))} borrows_from: Return(0) -> {([], Reference($t0))} +fun option::borrow_mut[baseline] +borrowed_by: Reference($t0) -> {(.vec (vector<#0>)/[], Return(0))} +borrows_from: Return(0) -> {(.vec (vector<#0>)/[], Reference($t0))} + fun MultiLayerCalling::inner[baseline] borrowed_by: Reference($t0) -> {(.v (vector)/[], Return(0))} borrows_from: Return(0) -> {(.v (vector)/[], Reference($t0))} diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.move b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.move index 003dbbcee8dab..b2f766c47e846 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/function_call.move @@ -1,13 +1,17 @@ +// dep: ../move-stdlib/sources/macros.move +// dep: ../move-stdlib/sources/u64.move +// dep: ../move-stdlib/sources/option.move +// dep: ../move-stdlib/sources/ascii.move +// dep: ../move-stdlib/sources/string.move // dep: ../move-stdlib/sources/vector.move module 0x2::MultiLayerCalling { - use std::vector; - struct HasVector { + public struct HasVector { v: vector, } - struct HasAnotherVector { + public struct HasAnotherVector { v: vector, } diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.exp b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.exp index e367f9ebff288..f3986a7ff742b 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.exp +++ b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.exp @@ -1,5 +1,339 @@ ============ initial translation from Move ================ +[variant baseline] +public fun u64::diff($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 14 + 8: label L1 + 9: $t10 := move($t3) + 10: $t11 := move($t4) + 11: $t12 := -($t10, $t11) + 12: $t2 := $t12 + 13: goto 20 + 14: label L0 + 15: $t13 := move($t4) + 16: $t14 := move($t3) + 17: $t15 := -($t13, $t14) + 18: $t2 := $t15 + 19: goto 20 + 20: label L2 + 21: $t16 := move($t2) + 22: return $t16 +} + + +[variant baseline] +public fun u64::divide_and_round_up($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: bool + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := %($t7, $t8) + 7: $t10 := 0 + 8: $t11 := ==($t9, $t10) + 9: if ($t11) goto 10 else goto 16 + 10: label L1 + 11: $t12 := move($t3) + 12: $t13 := move($t4) + 13: $t14 := /($t12, $t13) + 14: $t2 := $t14 + 15: goto 24 + 16: label L0 + 17: $t15 := move($t3) + 18: $t16 := move($t4) + 19: $t17 := /($t15, $t16) + 20: $t18 := 1 + 21: $t19 := +($t17, $t18) + 22: $t2 := $t19 + 23: goto 24 + 24: label L2 + 25: $t20 := move($t2) + 26: return $t20 +} + + +[variant baseline] +public fun u64::max($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::min($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := <($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::pow($t0|base: u64, $t1|exponent: u8): u64 { + var $t2|base#1#1: u64 + var $t3|exponent#1#1: u8 + var $t4|res#1#1: u64 + var $t5: u64 + var $t6: u8 + var $t7: u64 + var $t8: u8 + var $t9: u8 + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: bool + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u8 + var $t20: u8 + var $t21: u8 + var $t22: u64 + var $t23: u64 + var $t24: u64 + var $t25: u8 + var $t26: u8 + var $t27: u8 + var $t28: u64 + 0: $t5 := move($t0) + 1: $t2 := $t5 + 2: $t6 := move($t1) + 3: $t3 := $t6 + 4: $t7 := 1 + 5: $t4 := $t7 + 6: goto 7 + 7: label L5 + 8: $t8 := copy($t3) + 9: $t9 := 1 + 10: $t10 := >=($t8, $t9) + 11: if ($t10) goto 12 else goto 41 + 12: label L1 + 13: goto 14 + 14: label L2 + 15: $t11 := copy($t3) + 16: $t12 := 2 + 17: $t13 := %($t11, $t12) + 18: $t14 := 0 + 19: $t15 := ==($t13, $t14) + 20: if ($t15) goto 21 else goto 31 + 21: label L4 + 22: $t16 := copy($t2) + 23: $t17 := move($t2) + 24: $t18 := *($t16, $t17) + 25: $t2 := $t18 + 26: $t19 := move($t3) + 27: $t20 := 2 + 28: $t21 := /($t19, $t20) + 29: $t3 := $t21 + 30: goto 7 + 31: label L3 + 32: $t22 := move($t4) + 33: $t23 := copy($t2) + 34: $t24 := *($t22, $t23) + 35: $t4 := $t24 + 36: $t25 := move($t3) + 37: $t26 := 1 + 38: $t27 := -($t25, $t26) + 39: $t3 := $t27 + 40: goto 7 + 41: label L0 + 42: $t28 := move($t4) + 43: return $t28 +} + + +[variant baseline] +public fun u64::sqrt($t0|x: u64): u64 { + var $t1|bit#1#1: u128 + var $t2|res#1#1: u128 + var $t3|x#1#1: u64 + var $t4|x#2#1: u128 + var $t5: u64 + var $t6: u128 + var $t7: u128 + var $t8: u64 + var $t9: u128 + var $t10: u128 + var $t11: u128 + var $t12: bool + var $t13: u128 + var $t14: u128 + var $t15: u128 + var $t16: u128 + var $t17: bool + var $t18: u128 + var $t19: u128 + var $t20: u128 + var $t21: u128 + var $t22: u128 + var $t23: u128 + var $t24: u8 + var $t25: u128 + var $t26: u128 + var $t27: u128 + var $t28: u128 + var $t29: u8 + var $t30: u128 + var $t31: u128 + var $t32: u8 + var $t33: u128 + var $t34: u128 + var $t35: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := 18446744073709551616 + 3: $t1 := $t6 + 4: $t7 := 0 + 5: $t2 := $t7 + 6: $t8 := move($t3) + 7: $t9 := (u128)($t8) + 8: $t4 := $t9 + 9: goto 10 + 10: label L6 + 11: $t10 := copy($t1) + 12: $t11 := 0 + 13: $t12 := !=($t10, $t11) + 14: if ($t12) goto 15 else goto 50 + 15: label L1 + 16: goto 17 + 17: label L2 + 18: $t13 := copy($t4) + 19: $t14 := copy($t2) + 20: $t15 := copy($t1) + 21: $t16 := +($t14, $t15) + 22: $t17 := >=($t13, $t16) + 23: if ($t17) goto 24 else goto 38 + 24: label L4 + 25: $t18 := move($t4) + 26: $t19 := copy($t2) + 27: $t20 := copy($t1) + 28: $t21 := +($t19, $t20) + 29: $t22 := -($t18, $t21) + 30: $t4 := $t22 + 31: $t23 := move($t2) + 32: $t24 := 1 + 33: $t25 := >>($t23, $t24) + 34: $t26 := copy($t1) + 35: $t27 := +($t25, $t26) + 36: $t2 := $t27 + 37: goto 44 + 38: label L3 + 39: $t28 := move($t2) + 40: $t29 := 1 + 41: $t30 := >>($t28, $t29) + 42: $t2 := $t30 + 43: goto 44 + 44: label L5 + 45: $t31 := move($t1) + 46: $t32 := 2 + 47: $t33 := >>($t31, $t32) + 48: $t1 := $t33 + 49: goto 10 + 50: label L0 + 51: $t34 := move($t2) + 52: $t35 := (u64)($t34) + 53: return $t35 +} + + [variant baseline] public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { var $t2: &mut vector<#0> @@ -231,27 +565,25 @@ public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { 15: $t13 := move($t1) 16: vector::push_back<#0>($t12, $t13) 17: goto 18 - 18: label L5 + 18: label L4 19: $t14 := copy($t2) 20: $t15 := copy($t3) 21: $t16 := <($t14, $t15) - 22: if ($t16) goto 23 else goto 35 + 22: if ($t16) goto 23 else goto 33 23: label L3 - 24: goto 25 - 25: label L4 - 26: $t17 := copy($t0) - 27: $t18 := copy($t2) - 28: $t19 := copy($t3) - 29: vector::swap<#0>($t17, $t18, $t19) - 30: $t20 := move($t2) - 31: $t21 := 1 - 32: $t22 := +($t20, $t21) - 33: $t2 := $t22 - 34: goto 18 - 35: label L2 - 36: $t23 := move($t0) - 37: destroy($t23) - 38: return () + 24: $t17 := copy($t0) + 25: $t18 := copy($t2) + 26: $t19 := copy($t3) + 27: vector::swap<#0>($t17, $t18, $t19) + 28: $t20 := move($t2) + 29: $t21 := 1 + 30: $t22 := +($t20, $t21) + 31: $t2 := $t22 + 32: goto 18 + 33: label L2 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: return () } @@ -329,31 +661,29 @@ public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { 16: $t15 := -($t13, $t14) 17: $t4 := $t15 18: goto 19 - 19: label L5 + 19: label L4 20: $t16 := copy($t1) 21: $t17 := copy($t4) 22: $t18 := <($t16, $t17) - 23: if ($t18) goto 24 else goto 40 + 23: if ($t18) goto 24 else goto 38 24: label L3 - 25: goto 26 - 26: label L4 - 27: $t19 := copy($t0) - 28: $t3 := $t19 - 29: $t20 := copy($t1) - 30: $t2 := $t20 - 31: $t21 := move($t1) - 32: $t22 := 1 - 33: $t23 := +($t21, $t22) - 34: $t1 := $t23 - 35: $t24 := move($t3) - 36: $t25 := move($t2) - 37: $t26 := copy($t1) - 38: vector::swap<#0>($t24, $t25, $t26) - 39: goto 19 - 40: label L2 - 41: $t27 := move($t0) - 42: $t28 := vector::pop_back<#0>($t27) - 43: return $t28 + 25: $t19 := copy($t0) + 26: $t3 := $t19 + 27: $t20 := copy($t1) + 28: $t2 := $t20 + 29: $t21 := move($t1) + 30: $t22 := 1 + 31: $t23 := +($t21, $t22) + 32: $t1 := $t23 + 33: $t24 := move($t3) + 34: $t25 := move($t2) + 35: $t26 := copy($t1) + 36: vector::swap<#0>($t24, $t25, $t26) + 37: goto 19 + 38: label L2 + 39: $t27 := move($t0) + 40: $t28 := vector::pop_back<#0>($t27) + 41: return $t28 } @@ -406,31 +736,29 @@ public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { 17: $t14 := -($t12, $t13) 18: $t1 := $t14 19: goto 20 - 20: label L5 + 20: label L4 21: $t15 := copy($t2) 22: $t16 := copy($t1) 23: $t17 := <($t15, $t16) - 24: if ($t17) goto 25 else goto 41 + 24: if ($t17) goto 25 else goto 39 25: label L3 - 26: goto 27 - 27: label L4 - 28: $t18 := copy($t0) - 29: $t19 := copy($t2) - 30: $t20 := copy($t1) - 31: vector::swap<#0>($t18, $t19, $t20) - 32: $t21 := move($t2) - 33: $t22 := 1 - 34: $t23 := +($t21, $t22) - 35: $t2 := $t23 - 36: $t24 := move($t1) - 37: $t25 := 1 - 38: $t26 := -($t24, $t25) - 39: $t1 := $t26 - 40: goto 20 - 41: label L2 - 42: $t27 := move($t0) - 43: destroy($t27) - 44: return () + 26: $t18 := copy($t0) + 27: $t19 := copy($t2) + 28: $t20 := copy($t1) + 29: vector::swap<#0>($t18, $t19, $t20) + 30: $t21 := move($t2) + 31: $t22 := 1 + 32: $t23 := +($t21, $t22) + 33: $t2 := $t23 + 34: $t24 := move($t1) + 35: $t25 := 1 + 36: $t26 := -($t24, $t25) + 37: $t1 := $t26 + 38: goto 20 + 39: label L2 + 40: $t27 := move($t0) + 41: destroy($t27) + 42: return () } @@ -504,376 +832,3562 @@ public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { [variant baseline] -public fun Collection::borrow_mut<#0>($t0|c: &mut Collection::Collection<#0>, $t1|i: u64): &mut #0 { - var $t2: &mut Collection::Collection<#0> - var $t3: &mut vector<#0> +public fun option::borrow<#0>($t0|t: &option::Option<#0>): � { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: &option::Option<#0> var $t4: u64 - var $t5: &mut #0 + var $t5: &option::Option<#0> + var $t6: &vector<#0> + var $t7: u64 + var $t8: � + 0: $t1 := copy($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 10 + 5: label L0 + 6: $t3 := move($t0) + 7: destroy($t3) + 8: $t4 := 262145 + 9: abort($t4) + 10: label L2 + 11: $t5 := move($t0) + 12: $t6 := borrow_field>.vec($t5) + 13: $t7 := 0 + 14: $t8 := vector::borrow<#0>($t6, $t7) + 15: return $t8 +} + + +[variant baseline] +public fun option::borrow_mut<#0>($t0|t: &mut option::Option<#0>): &mut #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: u64 + var $t9: &mut #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := 0 + 15: $t9 := vector::borrow_mut<#0>($t7, $t8) + 16: return $t9 +} + + +[variant baseline] +public fun option::contains<#0>($t0|t: &option::Option<#0>, $t1|e_ref: �): bool { + var $t2: &option::Option<#0> + var $t3: &vector<#0> + var $t4: � + var $t5: bool 0: $t2 := move($t0) - 1: $t3 := borrow_field>.items($t2) + 1: $t3 := borrow_field>.vec($t2) 2: $t4 := move($t1) - 3: $t5 := vector::borrow_mut<#0>($t3, $t4) + 3: $t5 := vector::contains<#0>($t3, $t4) 4: return $t5 } [variant baseline] -public fun Collection::make_collection<#0>(): Collection::Collection<#0> { - var $t0: vector<#0> - var $t1: address - var $t2: Collection::Collection<#0> - 0: $t0 := vector::empty<#0>() - 1: $t1 := 0x2 - 2: $t2 := pack Collection::Collection<#0>($t0, $t1) - 3: return $t2 +public fun option::swap<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): #0 { + var $t2|old_value#1#0: #0 + var $t3|vec_ref#1#0: &mut vector<#0> + var $t4: &mut option::Option<#0> + var $t5: &option::Option<#0> + var $t6: bool + var $t7: &mut option::Option<#0> + var $t8: u64 + var $t9: &mut option::Option<#0> + var $t10: &mut vector<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: &mut vector<#0> + var $t14: #0 + var $t15: #0 + 0: $t4 := copy($t0) + 1: $t5 := freeze_ref($t4) + 2: $t6 := option::is_some<#0>($t5) + 3: if ($t6) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t7 := move($t0) + 8: destroy($t7) + 9: $t8 := 262145 + 10: abort($t8) + 11: label L2 + 12: $t9 := move($t0) + 13: $t10 := borrow_field>.vec($t9) + 14: $t3 := $t10 + 15: $t11 := copy($t3) + 16: $t12 := vector::pop_back<#0>($t11) + 17: $t2 := $t12 + 18: $t13 := move($t3) + 19: $t14 := move($t1) + 20: vector::push_back<#0>($t13, $t14) + 21: $t15 := move($t2) + 22: return $t15 } [variant baseline] -public fun Test::foo<#0>($t0|i: u64) { - var $t1|c#1#0: Collection::Collection> - var $t2|t#1#0: &mut Test::Token<#0> - var $t3: Collection::Collection> - var $t4: &mut Collection::Collection> - var $t5: u64 - var $t6: &mut Test::Token<#0> - var $t7: u64 - var $t8: &mut Test::Token<#0> - var $t9: &mut u64 - 0: $t3 := Collection::make_collection>() - 1: $t1 := $t3 - 2: $t4 := borrow_local($t1) - 3: $t5 := move($t0) - 4: $t6 := Collection::borrow_mut>($t4, $t5) - 5: $t2 := $t6 - 6: $t7 := 0 - 7: $t8 := move($t2) - 8: $t9 := borrow_field>.value($t8) - 9: write_ref($t9, $t7) - 10: return () +public fun option::borrow_with_default<#0>($t0|t: &option::Option<#0>, $t1|default_ref: �): � { + var $t2|tmp#$2: � + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: � + var $t10: � + var $t11: &vector<#0> + var $t12: u64 + var $t13: � + var $t14: � + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 20 + 12: label L0 + 13: $t10 := move($t1) + 14: destroy($t10) + 15: $t11 := move($t3) + 16: $t12 := 0 + 17: $t13 := vector::borrow<#0>($t11, $t12) + 18: $t2 := $t13 + 19: goto 20 + 20: label L2 + 21: $t14 := move($t2) + 22: return $t14 } -============ after pipeline `borrow` ================ [variant baseline] -public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { - var $t2: &mut vector<#0> - var $t3: vector<#0> - var $t4: bool - var $t5: bool - var $t6: &mut vector<#0> - var $t7: #0 - var $t8: vector<#0> - 0: $t2 := borrow_local($t1) - 1: vector::reverse<#0>($t2) - 2: label L3 - 3: $t3 := copy($t1) - 4: $t4 := vector::is_empty<#0>($t3) - 5: $t5 := !($t4) - 6: if ($t5) goto 7 else goto 13 - 7: label L1 +public fun option::destroy_none<#0>($t0|t: option::Option<#0>) { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: option::Option<#0> + var $t5: vector<#0> + 0: $t1 := borrow_local($t0) + 1: $t2 := option::is_none<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 262144 + 7: abort($t3) 8: label L2 - 9: $t6 := borrow_local($t1) - 10: $t7 := vector::pop_back<#0>($t6) - 11: vector::push_back<#0>($t0, $t7) - 12: goto 2 - 13: label L0 - 14: destroy($t0) - 15: $t8 := move($t1) - 16: vector::destroy_empty<#0>($t8) - 17: trace_local[lhs]($t0) - 18: return () + 9: $t4 := move($t0) + 10: $t5 := unpack option::Option<#0>($t4) + 11: vector::destroy_empty<#0>($t5) + 12: return () } [variant baseline] -public native fun vector::borrow<#0>($t0|v: vector<#0>, $t1|i: u64): #0; +public fun option::destroy_some<#0>($t0|t: option::Option<#0>): #0 { + var $t1|elem#1#0: #0 + var $t2|vec#1#0: vector<#0> + var $t3: &option::Option<#0> + var $t4: bool + var $t5: u64 + var $t6: option::Option<#0> + var $t7: vector<#0> + var $t8: &mut vector<#0> + var $t9: #0 + var $t10: vector<#0> + var $t11: #0 + 0: $t3 := borrow_local($t0) + 1: $t4 := option::is_some<#0>($t3) + 2: if ($t4) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t5 := 262145 + 7: abort($t5) + 8: label L2 + 9: $t6 := move($t0) + 10: $t7 := unpack option::Option<#0>($t6) + 11: $t2 := $t7 + 12: $t8 := borrow_local($t2) + 13: $t9 := vector::pop_back<#0>($t8) + 14: $t1 := $t9 + 15: $t10 := move($t2) + 16: vector::destroy_empty<#0>($t10) + 17: $t11 := move($t1) + 18: return $t11 +} [variant baseline] -public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0; +public fun option::destroy_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec#1#0: vector<#0> + var $t4: option::Option<#0> + var $t5: vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: #0 + var $t9: &mut vector<#0> + var $t10: #0 + var $t11: #0 + 0: $t4 := move($t0) + 1: $t5 := unpack option::Option<#0>($t4) + 2: $t3 := $t5 + 3: $t6 := borrow_local($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 10 + 6: label L1 + 7: $t8 := move($t1) + 8: $t2 := $t8 + 9: goto 15 + 10: label L0 + 11: $t9 := borrow_local($t3) + 12: $t10 := vector::pop_back<#0>($t9) + 13: $t2 := $t10 + 14: goto 15 + 15: label L2 + 16: $t11 := move($t2) + 17: return $t11 +} [variant baseline] -public fun vector::contains<#0>($t0|v: vector<#0>, $t1|e: #0): bool { - var $t2|i#1#0: u64 - var $t3|len#1#0: u64 - var $t4: u64 +public fun option::extract<#0>($t0|t: &mut option::Option<#0>): #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> var $t5: u64 - var $t6: bool - var $t7: #0 - var $t8: bool - var $t9: bool - var $t10: u64 - var $t11: bool - 0: $t4 := 0 - 1: $t2 := $t4 - 2: $t5 := vector::length<#0>($t0) - 3: label L5 - 4: $t6 := <($t2, $t5) - 5: if ($t6) goto 6 else goto 18 - 6: label L1 - 7: label L2 - 8: $t7 := vector::borrow<#0>($t0, $t2) - 9: $t8 := ==($t7, $t1) + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := vector::pop_back<#0>($t7) + 15: return $t8 +} + + +[variant baseline] +public fun option::fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0) { + var $t2|vec_ref#1#0: &mut vector<#0> + var $t3: &mut option::Option<#0> + var $t4: &mut vector<#0> + var $t5: &mut vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &mut vector<#0> + var $t9: u64 + var $t10: &mut vector<#0> + var $t11: #0 + 0: $t3 := move($t0) + 1: $t4 := borrow_field>.vec($t3) + 2: $t2 := $t4 + 3: $t5 := copy($t2) + 4: $t6 := freeze_ref($t5) + 5: $t7 := vector::is_empty<#0>($t6) + 6: if ($t7) goto 7 else goto 9 + 7: label L1 + 8: goto 14 + 9: label L0 + 10: $t8 := move($t2) + 11: destroy($t8) + 12: $t9 := 262144 + 13: abort($t9) + 14: label L2 + 15: $t10 := move($t2) + 16: $t11 := move($t1) + 17: vector::push_back<#0>($t10, $t11) + 18: return () +} + + +[variant baseline] +public fun option::get_with_default<#0>($t0|t: &option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: #0 + var $t10: &vector<#0> + var $t11: u64 + var $t12: � + var $t13: #0 + var $t14: #0 + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 19 + 12: label L0 + 13: $t10 := move($t3) + 14: $t11 := 0 + 15: $t12 := vector::borrow<#0>($t10, $t11) + 16: $t13 := read_ref($t12) + 17: $t2 := $t13 + 18: goto 19 + 19: label L2 + 20: $t14 := move($t2) + 21: return $t14 +} + + +[variant baseline] +public fun option::is_none<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::is_some<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + var $t4: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: $t4 := !($t3) + 4: return $t4 +} + + +[variant baseline] +public fun option::none<#0>(): option::Option<#0> { + var $t0: vector<#0> + var $t1: option::Option<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := pack option::Option<#0>($t0) + 2: return $t1 +} + + +[variant baseline] +public fun option::some<#0>($t0|e: #0): option::Option<#0> { + var $t1: #0 + var $t2: vector<#0> + var $t3: option::Option<#0> + 0: $t1 := move($t0) + 1: $t2 := vector::singleton<#0>($t1) + 2: $t3 := pack option::Option<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::swap_or_fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): option::Option<#0> { + var $t2|tmp#$2: option::Option<#0> + var $t3|old_value#1#0: option::Option<#0> + var $t4|vec_ref#1#0: &mut vector<#0> + var $t5: &mut option::Option<#0> + var $t6: &mut vector<#0> + var $t7: &mut vector<#0> + var $t8: &vector<#0> + var $t9: bool + var $t10: option::Option<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: option::Option<#0> + var $t14: option::Option<#0> + var $t15: &mut vector<#0> + var $t16: #0 + var $t17: option::Option<#0> + 0: $t5 := move($t0) + 1: $t6 := borrow_field>.vec($t5) + 2: $t4 := $t6 + 3: $t7 := copy($t4) + 4: $t8 := freeze_ref($t7) + 5: $t9 := vector::is_empty<#0>($t8) + 6: if ($t9) goto 7 else goto 11 + 7: label L1 + 8: $t10 := option::none<#0>() + 9: $t2 := $t10 + 10: goto 17 + 11: label L0 + 12: $t11 := copy($t4) + 13: $t12 := vector::pop_back<#0>($t11) + 14: $t13 := option::some<#0>($t12) + 15: $t2 := $t13 + 16: goto 17 + 17: label L2 + 18: $t14 := move($t2) + 19: $t3 := $t14 + 20: $t15 := move($t4) + 21: $t16 := move($t1) + 22: vector::push_back<#0>($t15, $t16) + 23: $t17 := move($t3) + 24: return $t17 +} + + +[variant baseline] +public fun option::to_vec<#0>($t0|t: option::Option<#0>): vector<#0> { + var $t1: option::Option<#0> + var $t2: vector<#0> + 0: $t1 := move($t0) + 1: $t2 := unpack option::Option<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::append($t0|string: &mut ascii::String, $t1|other: ascii::String) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: ascii::String + var $t5: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := ascii::into_bytes($t4) + 4: vector::append($t3, $t5) + 5: return () +} + + +[variant baseline] +public fun ascii::index_of($t0|string: &ascii::String, $t1|substr: &ascii::String): u64 { + var $t2|tmp#$2: bool + var $t3|i#1#0: u64 + var $t4|j#1#0: u64 + var $t5|m#1#0: u64 + var $t6|n#1#0: u64 + var $t7: u64 + var $t8: &ascii::String + var $t9: u64 + var $t10: &ascii::String + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: bool + var $t15: &ascii::String + var $t16: &ascii::String + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: u64 + var $t22: bool + var $t23: u64 + var $t24: u64 + var $t25: u64 + var $t26: bool + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: u64 + var $t31: u64 + var $t32: &u8 + var $t33: u8 + var $t34: &ascii::String + var $t35: &vector + var $t36: u64 + var $t37: &u8 + var $t38: u8 + var $t39: bool + var $t40: bool + var $t41: bool + var $t42: u64 + var $t43: u64 + var $t44: u64 + var $t45: u64 + var $t46: u64 + var $t47: bool + var $t48: &ascii::String + var $t49: &ascii::String + var $t50: u64 + var $t51: u64 + var $t52: u64 + var $t53: u64 + var $t54: &ascii::String + var $t55: &ascii::String + var $t56: u64 + 0: $t7 := 0 + 1: $t3 := $t7 + 2: $t8 := copy($t0) + 3: $t9 := ascii::length($t8) + 4: $t10 := copy($t1) + 5: $t11 := ascii::length($t10) + 6: $t5 := $t11 + 7: $t6 := $t9 + 8: $t12 := copy($t6) + 9: $t13 := copy($t5) + 10: $t14 := <($t12, $t13) + 11: if ($t14) goto 12 else goto 19 + 12: label L1 + 13: $t15 := move($t1) + 14: destroy($t15) + 15: $t16 := move($t0) + 16: destroy($t16) + 17: $t17 := move($t6) + 18: return $t17 + 19: label L0 + 20: $t18 := copy($t3) + 21: $t19 := copy($t6) + 22: $t20 := copy($t5) + 23: $t21 := -($t19, $t20) + 24: $t22 := <=($t18, $t21) + 25: if ($t22) goto 26 else goto 84 + 26: label L3 + 27: $t23 := 0 + 28: $t4 := $t23 + 29: goto 30 + 30: label L10 + 31: $t24 := copy($t4) + 32: $t25 := copy($t5) + 33: $t26 := <($t24, $t25) + 34: if ($t26) goto 35 else goto 53 + 35: label L5 + 36: goto 37 + 37: label L6 + 38: $t27 := copy($t0) + 39: $t28 := borrow_field.bytes($t27) + 40: $t29 := copy($t3) + 41: $t30 := copy($t4) + 42: $t31 := +($t29, $t30) + 43: $t32 := vector::borrow($t28, $t31) + 44: $t33 := read_ref($t32) + 45: $t34 := copy($t1) + 46: $t35 := borrow_field.bytes($t34) + 47: $t36 := copy($t4) + 48: $t37 := vector::borrow($t35, $t36) + 49: $t38 := read_ref($t37) + 50: $t39 := ==($t33, $t38) + 51: $t2 := $t39 + 52: goto 57 + 53: label L4 + 54: $t40 := false + 55: $t2 := $t40 + 56: goto 57 + 57: label L7 + 58: $t41 := move($t2) + 59: if ($t41) goto 60 else goto 66 + 60: label L9 + 61: $t42 := move($t4) + 62: $t43 := 1 + 63: $t44 := +($t42, $t43) + 64: $t4 := $t44 + 65: goto 30 + 66: label L8 + 67: $t45 := move($t4) + 68: $t46 := copy($t5) + 69: $t47 := ==($t45, $t46) + 70: if ($t47) goto 71 else goto 78 + 71: label L12 + 72: $t48 := move($t1) + 73: destroy($t48) + 74: $t49 := move($t0) + 75: destroy($t49) + 76: $t50 := move($t3) + 77: return $t50 + 78: label L11 + 79: $t51 := move($t3) + 80: $t52 := 1 + 81: $t53 := +($t51, $t52) + 82: $t3 := $t53 + 83: goto 19 + 84: label L2 + 85: $t54 := move($t1) + 86: destroy($t54) + 87: $t55 := move($t0) + 88: destroy($t55) + 89: $t56 := move($t6) + 90: return $t56 +} + + +[variant baseline] +public fun ascii::insert($t0|s: &mut ascii::String, $t1|at: u64, $t2|o: ascii::String) { + var $t3|e#1#2: u8 + var $t4|v#1#1: vector + var $t5: u64 + var $t6: &mut ascii::String + var $t7: &ascii::String + var $t8: u64 + var $t9: bool + var $t10: &mut ascii::String + var $t11: u64 + var $t12: ascii::String + var $t13: vector + var $t14: &vector + var $t15: bool + var $t16: bool + var $t17: &mut vector + var $t18: u8 + var $t19: &mut ascii::String + var $t20: &mut vector + var $t21: u8 + var $t22: u64 + var $t23: &mut ascii::String + var $t24: vector + 0: $t5 := copy($t1) + 1: $t6 := copy($t0) + 2: $t7 := freeze_ref($t6) + 3: $t8 := ascii::length($t7) + 4: $t9 := <=($t5, $t8) + 5: if ($t9) goto 6 else goto 8 + 6: label L1 + 7: goto 13 + 8: label L0 + 9: $t10 := move($t0) + 10: destroy($t10) + 11: $t11 := 65537 + 12: abort($t11) + 13: label L2 + 14: $t12 := move($t2) + 15: $t13 := ascii::into_bytes($t12) + 16: $t4 := $t13 + 17: goto 18 + 18: label L5 + 19: $t14 := borrow_local($t4) + 20: $t15 := vector::is_empty($t14) + 21: $t16 := !($t15) + 22: if ($t16) goto 23 else goto 33 + 23: label L4 + 24: $t17 := borrow_local($t4) + 25: $t18 := vector::pop_back($t17) + 26: $t3 := $t18 + 27: $t19 := copy($t0) + 28: $t20 := borrow_field.bytes($t19) + 29: $t21 := move($t3) + 30: $t22 := copy($t1) + 31: vector::insert($t20, $t21, $t22) + 32: goto 18 + 33: label L3 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: $t24 := move($t4) + 37: vector::destroy_empty($t24) + 38: return () +} + + +[variant baseline] +public fun ascii::is_empty($t0|string: &ascii::String): bool { + var $t1: &ascii::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::length($t0|string: &ascii::String): u64 { + var $t1: &ascii::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := ascii::as_bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::all_characters_printable($t0|string: &ascii::String): bool { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|i#1#12: u64 + var $t4|i#1#9: u64 + var $t5|stop#1#9: u64 + var $t6|v#1#3: &vector + var $t7: &ascii::String + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + 0: $t7 := move($t0) + 1: $t8 := borrow_field.bytes($t7) + 2: $t6 := $t8 + 3: $t9 := copy($t6) + 4: $t10 := vector::length($t9) + 5: $t1 := $t10 + 6: $t11 := 0 + 7: $t4 := $t11 + 8: $t12 := move($t1) + 9: $t5 := $t12 + 10: goto 11 + 11: label L5 + 12: $t13 := copy($t4) + 13: $t14 := copy($t5) + 14: $t15 := <($t13, $t14) + 15: if ($t15) goto 16 else goto 38 + 16: label L1 + 17: $t16 := copy($t4) + 18: $t3 := $t16 + 19: $t17 := copy($t6) + 20: $t18 := move($t3) + 21: $t19 := vector::borrow($t17, $t18) + 22: $t20 := read_ref($t19) + 23: $t21 := ascii::is_printable_char($t20) + 24: $t22 := !($t21) + 25: if ($t22) goto 26 else goto 32 + 26: label L3 + 27: $t23 := move($t6) + 28: destroy($t23) + 29: $t24 := false + 30: $t2 := $t24 + 31: goto 44 + 32: label L2 + 33: $t25 := move($t4) + 34: $t26 := 1 + 35: $t27 := +($t25, $t26) + 36: $t4 := $t27 + 37: goto 11 + 38: label L0 + 39: $t28 := move($t6) + 40: destroy($t28) + 41: $t29 := true + 42: $t2 := $t29 + 43: goto 44 + 44: label L4 + 45: $t30 := move($t2) + 46: return $t30 +} + + +[variant baseline] +public fun ascii::string($t0|bytes: vector): ascii::String { + var $t1|x#1#0: option::Option + var $t2: vector + var $t3: option::Option + var $t4: &option::Option + var $t5: bool + var $t6: u64 + var $t7: option::Option + var $t8: ascii::String + 0: $t2 := move($t0) + 1: $t3 := ascii::try_string($t2) + 2: $t1 := $t3 + 3: $t4 := borrow_local($t1) + 4: $t5 := option::is_some($t4) + 5: if ($t5) goto 6 else goto 8 + 6: label L1 + 7: goto 11 + 8: label L0 + 9: $t6 := 65536 + 10: abort($t6) + 11: label L2 + 12: $t7 := move($t1) + 13: $t8 := option::destroy_some($t7) + 14: return $t8 +} + + +[variant baseline] +public fun ascii::as_bytes($t0|string: &ascii::String): &vector { + var $t1: &ascii::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::byte($t0|char: ascii::Char): u8 { + var $t1: ascii::Char + var $t2: u8 + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::Char($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::char($t0|byte: u8): ascii::Char { + var $t1: u8 + var $t2: bool + var $t3: u64 + var $t4: u8 + var $t5: ascii::Char + 0: $t1 := copy($t0) + 1: $t2 := ascii::is_valid_char($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 65536 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack ascii::Char($t4) + 11: return $t5 +} + + +[variant baseline] +fun ascii::char_to_lowercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 65 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 90 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := +($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +fun ascii::char_to_uppercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 97 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 122 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := -($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +public fun ascii::into_bytes($t0|string: ascii::String): vector { + var $t1: ascii::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::is_printable_char($t0|byte: u8): bool { + var $t1|tmp#$1: bool + var $t2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: u8 + var $t7: bool + var $t8: bool + var $t9: bool + 0: $t2 := copy($t0) + 1: $t3 := 32 + 2: $t4 := >=($t2, $t3) + 3: if ($t4) goto 4 else goto 10 + 4: label L1 + 5: $t5 := move($t0) + 6: $t6 := 126 + 7: $t7 := <=($t5, $t6) + 8: $t1 := $t7 + 9: goto 14 + 10: label L0 + 11: $t8 := false + 12: $t1 := $t8 + 13: goto 14 + 14: label L2 + 15: $t9 := move($t1) + 16: return $t9 +} + + +[variant baseline] +public fun ascii::is_valid_char($t0|b: u8): bool { + var $t1: u8 + var $t2: u8 + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := 127 + 2: $t3 := <=($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::pop_char($t0|string: &mut ascii::String): ascii::Char { + var $t1: &mut ascii::String + var $t2: &mut vector + var $t3: u8 + var $t4: ascii::Char + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::pop_back($t2) + 3: $t4 := pack ascii::Char($t3) + 4: return $t4 +} + + +[variant baseline] +public fun ascii::push_char($t0|string: &mut ascii::String, $t1|char: ascii::Char) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: &ascii::Char + var $t5: &u8 + var $t6: u8 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.byte($t4) + 4: $t6 := read_ref($t5) + 5: vector::push_back($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun ascii::substring($t0|string: &ascii::String, $t1|i: u64, $t2|j: u64): ascii::String { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|i#1#3: u64 + var $t6|i#1#6: u64 + var $t7|stop#1#3: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: &ascii::String + var $t13: u64 + var $t14: bool + var $t15: bool + var $t16: bool + var $t17: &ascii::String + var $t18: u64 + var $t19: vector + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: u64 + var $t24: bool + var $t25: u64 + var $t26: &mut vector + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: &u8 + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &ascii::String + var $t36: vector + var $t37: ascii::String + 0: $t8 := copy($t1) + 1: $t9 := copy($t2) + 2: $t10 := <=($t8, $t9) + 3: if ($t10) goto 4 else goto 11 + 4: label L1 + 5: $t11 := copy($t2) + 6: $t12 := copy($t0) + 7: $t13 := ascii::length($t12) + 8: $t14 := <=($t11, $t13) + 9: $t3 := $t14 + 10: goto 15 + 11: label L0 + 12: $t15 := false + 13: $t3 := $t15 + 14: goto 15 + 15: label L2 + 16: $t16 := move($t3) + 17: if ($t16) goto 18 else goto 20 + 18: label L4 + 19: goto 25 + 20: label L3 + 21: $t17 := move($t0) + 22: destroy($t17) + 23: $t18 := 65537 + 24: abort($t18) + 25: label L5 + 26: $t19 := [] + 27: $t4 := $t19 + 28: $t20 := move($t1) + 29: $t5 := $t20 + 30: $t21 := move($t2) + 31: $t7 := $t21 + 32: goto 33 + 33: label L8 + 34: $t22 := copy($t5) + 35: $t23 := copy($t7) + 36: $t24 := <($t22, $t23) + 37: if ($t24) goto 38 else goto 53 + 38: label L7 + 39: $t25 := copy($t5) + 40: $t6 := $t25 + 41: $t26 := borrow_local($t4) + 42: $t27 := copy($t0) + 43: $t28 := borrow_field.bytes($t27) + 44: $t29 := move($t6) + 45: $t30 := vector::borrow($t28, $t29) + 46: $t31 := read_ref($t30) + 47: vector::push_back($t26, $t31) + 48: $t32 := move($t5) + 49: $t33 := 1 + 50: $t34 := +($t32, $t33) + 51: $t5 := $t34 + 52: goto 33 + 53: label L6 + 54: $t35 := move($t0) + 55: destroy($t35) + 56: $t36 := move($t4) + 57: $t37 := pack ascii::String($t36) + 58: return $t37 +} + + +[variant baseline] +public fun ascii::to_lowercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_lowercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} + + +[variant baseline] +public fun ascii::to_uppercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_uppercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} + + +[variant baseline] +public fun ascii::try_string($t0|bytes: vector): option::Option { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|tmp#$3: option::Option + var $t4|i#1#12: u64 + var $t5|i#1#9: u64 + var $t6|stop#1#9: u64 + var $t7|v#1#3: &vector + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + var $t31: vector + var $t32: ascii::String + var $t33: option::Option + var $t34: option::Option + var $t35: option::Option + 0: $t8 := borrow_local($t0) + 1: $t7 := $t8 + 2: $t9 := copy($t7) + 3: $t10 := vector::length($t9) + 4: $t1 := $t10 + 5: $t11 := 0 + 6: $t5 := $t11 + 7: $t12 := move($t1) + 8: $t6 := $t12 + 9: goto 10 + 10: label L5 + 11: $t13 := copy($t5) + 12: $t14 := copy($t6) + 13: $t15 := <($t13, $t14) + 14: if ($t15) goto 15 else goto 37 + 15: label L1 + 16: $t16 := copy($t5) + 17: $t4 := $t16 + 18: $t17 := copy($t7) + 19: $t18 := move($t4) + 20: $t19 := vector::borrow($t17, $t18) + 21: $t20 := read_ref($t19) + 22: $t21 := ascii::is_valid_char($t20) + 23: $t22 := !($t21) + 24: if ($t22) goto 25 else goto 31 + 25: label L3 + 26: $t23 := move($t7) + 27: destroy($t23) + 28: $t24 := false + 29: $t2 := $t24 + 30: goto 43 + 31: label L2 + 32: $t25 := move($t5) + 33: $t26 := 1 + 34: $t27 := +($t25, $t26) + 35: $t5 := $t27 + 36: goto 10 + 37: label L0 + 38: $t28 := move($t7) + 39: destroy($t28) + 40: $t29 := true + 41: $t2 := $t29 + 42: goto 43 + 43: label L4 + 44: $t30 := move($t2) + 45: if ($t30) goto 46 else goto 52 + 46: label L7 + 47: $t31 := move($t0) + 48: $t32 := pack ascii::String($t31) + 49: $t33 := option::some($t32) + 50: $t3 := $t33 + 51: goto 56 + 52: label L6 + 53: $t34 := option::none() + 54: $t3 := $t34 + 55: goto 56 + 56: label L8 + 57: $t35 := move($t3) + 58: return $t35 +} + + +[variant baseline] +public fun string::append($t0|s: &mut string::String, $t1|r: string::String) { + var $t2: &mut string::String + var $t3: &mut vector + var $t4: &string::String + var $t5: &vector + var $t6: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := read_ref($t5) + 5: vector::append($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun string::index_of($t0|s: &string::String, $t1|r: &string::String): u64 { + var $t2: &string::String + var $t3: &vector + var $t4: &string::String + var $t5: &vector + var $t6: u64 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := string::internal_index_of($t3, $t5) + 5: return $t6 +} + + +[variant baseline] +public fun string::insert($t0|s: &mut string::String, $t1|at: u64, $t2|o: string::String) { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: &vector + var $t5|end#1#0: string::String + var $t6|front#1#0: string::String + var $t7|l#1#0: u64 + var $t8: &mut string::String + var $t9: &vector + var $t10: u64 + var $t11: &vector + var $t12: u64 + var $t13: bool + var $t14: &vector + var $t15: u64 + var $t16: bool + var $t17: &vector + var $t18: bool + var $t19: bool + var $t20: &mut string::String + var $t21: u64 + var $t22: &mut string::String + var $t23: &string::String + var $t24: u64 + var $t25: &mut string::String + var $t26: &string::String + var $t27: u64 + var $t28: u64 + var $t29: string::String + var $t30: &mut string::String + var $t31: &string::String + var $t32: u64 + var $t33: u64 + var $t34: string::String + var $t35: &mut string::String + var $t36: string::String + var $t37: &mut string::String + var $t38: string::String + var $t39: string::String + var $t40: &mut string::String + 0: $t8 := copy($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t4 := $t9 + 3: $t10 := copy($t1) + 4: $t11 := copy($t4) + 5: $t12 := vector::length($t11) + 6: $t13 := <=($t10, $t12) + 7: if ($t13) goto 8 else goto 14 + 8: label L1 + 9: $t14 := move($t4) + 10: $t15 := copy($t1) + 11: $t16 := string::internal_is_char_boundary($t14, $t15) + 12: $t3 := $t16 + 13: goto 20 + 14: label L0 + 15: $t17 := move($t4) + 16: destroy($t17) + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 25 + 23: label L4 + 24: goto 30 + 25: label L3 + 26: $t20 := move($t0) + 27: destroy($t20) + 28: $t21 := 2 + 29: abort($t21) + 30: label L5 + 31: $t22 := copy($t0) + 32: $t23 := freeze_ref($t22) + 33: $t24 := string::length($t23) + 34: $t7 := $t24 + 35: $t25 := copy($t0) + 36: $t26 := freeze_ref($t25) + 37: $t27 := 0 + 38: $t28 := copy($t1) + 39: $t29 := string::substring($t26, $t27, $t28) + 40: $t6 := $t29 + 41: $t30 := copy($t0) + 42: $t31 := freeze_ref($t30) + 43: $t32 := move($t1) + 44: $t33 := move($t7) + 45: $t34 := string::substring($t31, $t32, $t33) + 46: $t5 := $t34 + 47: $t35 := borrow_local($t6) + 48: $t36 := move($t2) + 49: string::append($t35, $t36) + 50: $t37 := borrow_local($t6) + 51: $t38 := move($t5) + 52: string::append($t37, $t38) + 53: $t39 := move($t6) + 54: $t40 := move($t0) + 55: write_ref($t40, $t39) + 56: return () +} + + +[variant baseline] +public fun string::is_empty($t0|s: &string::String): bool { + var $t1: &string::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::length($t0|s: &string::String): u64 { + var $t1: &string::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::as_bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::into_bytes($t0|s: string::String): vector { + var $t1: string::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := string::as_bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::substring($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3|tmp#$3: bool + var $t4|tmp#$4: bool + var $t5|tmp#$5: bool + var $t6|bytes#1#0: &vector + var $t7|l#1#0: u64 + var $t8: &string::String + var $t9: &vector + var $t10: &vector + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: bool + var $t15: u64 + var $t16: u64 + var $t17: bool + var $t18: bool + var $t19: bool + var $t20: &vector + var $t21: u64 + var $t22: bool + var $t23: bool + var $t24: bool + var $t25: &vector + var $t26: u64 + var $t27: bool + var $t28: bool + var $t29: bool + var $t30: &vector + var $t31: u64 + var $t32: &vector + var $t33: u64 + var $t34: u64 + var $t35: vector + var $t36: string::String + 0: $t8 := move($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t6 := $t9 + 3: $t10 := copy($t6) + 4: $t11 := vector::length($t10) + 5: $t7 := $t11 + 6: $t12 := copy($t2) + 7: $t13 := move($t7) + 8: $t14 := <=($t12, $t13) + 9: if ($t14) goto 10 else goto 16 + 10: label L1 + 11: $t15 := copy($t1) + 12: $t16 := copy($t2) + 13: $t17 := <=($t15, $t16) + 14: $t3 := $t17 + 15: goto 20 + 16: label L0 + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 29 + 23: label L4 + 24: $t20 := copy($t6) + 25: $t21 := copy($t1) + 26: $t22 := string::internal_is_char_boundary($t20, $t21) + 27: $t4 := $t22 + 28: goto 33 + 29: label L3 + 30: $t23 := false + 31: $t4 := $t23 + 32: goto 33 + 33: label L5 + 34: $t24 := move($t4) + 35: if ($t24) goto 36 else goto 42 + 36: label L7 + 37: $t25 := copy($t6) + 38: $t26 := copy($t2) + 39: $t27 := string::internal_is_char_boundary($t25, $t26) + 40: $t5 := $t27 + 41: goto 46 + 42: label L6 + 43: $t28 := false + 44: $t5 := $t28 + 45: goto 46 + 46: label L8 + 47: $t29 := move($t5) + 48: if ($t29) goto 49 else goto 51 + 49: label L10 + 50: goto 56 + 51: label L9 + 52: $t30 := move($t6) + 53: destroy($t30) + 54: $t31 := 2 + 55: abort($t31) + 56: label L11 + 57: $t32 := move($t6) + 58: $t33 := move($t1) + 59: $t34 := move($t2) + 60: $t35 := string::internal_sub_string($t32, $t33, $t34) + 61: $t36 := pack string::String($t35) + 62: return $t36 +} + + +[variant baseline] +public fun string::append_utf8($t0|s: &mut string::String, $t1|bytes: vector) { + var $t2: &mut string::String + var $t3: vector + var $t4: string::String + 0: $t2 := move($t0) + 1: $t3 := move($t1) + 2: $t4 := string::utf8($t3) + 3: string::append($t2, $t4) + 4: return () +} + + +[variant baseline] +public fun string::from_ascii($t0|s: ascii::String): string::String { + var $t1: ascii::String + var $t2: vector + var $t3: string::String + 0: $t1 := move($t0) + 1: $t2 := ascii::into_bytes($t1) + 2: $t3 := pack string::String($t2) + 3: return $t3 +} + + +[variant baseline] +native fun string::internal_check_utf8($t0|v: &vector): bool; + + +[variant baseline] +native fun string::internal_index_of($t0|v: &vector, $t1|r: &vector): u64; + + +[variant baseline] +native fun string::internal_is_char_boundary($t0|v: &vector, $t1|i: u64): bool; + + +[variant baseline] +native fun string::internal_sub_string($t0|v: &vector, $t1|i: u64, $t2|j: u64): vector; + + +[variant baseline] +public fun string::sub_string($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3: &string::String + var $t4: u64 + var $t5: u64 + var $t6: string::String + 0: $t3 := move($t0) + 1: $t4 := move($t1) + 2: $t5 := move($t2) + 3: $t6 := string::substring($t3, $t4, $t5) + 4: return $t6 +} + + +[variant baseline] +public fun string::to_ascii($t0|s: string::String): ascii::String { + var $t1: string::String + var $t2: vector + var $t3: ascii::String + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: $t3 := ascii::string($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::try_utf8($t0|bytes: vector): option::Option { + var $t1|tmp#$1: option::Option + var $t2: &vector + var $t3: bool + var $t4: vector + var $t5: string::String + var $t6: option::Option + var $t7: option::Option + var $t8: option::Option + 0: $t2 := borrow_local($t0) + 1: $t3 := string::internal_check_utf8($t2) + 2: if ($t3) goto 3 else goto 9 + 3: label L1 + 4: $t4 := move($t0) + 5: $t5 := pack string::String($t4) + 6: $t6 := option::some($t5) + 7: $t1 := $t6 + 8: goto 13 + 9: label L0 + 10: $t7 := option::none() + 11: $t1 := $t7 + 12: goto 13 + 13: label L2 + 14: $t8 := move($t1) + 15: return $t8 +} + + +[variant baseline] +public fun string::utf8($t0|bytes: vector): string::String { + var $t1: &vector + var $t2: bool + var $t3: u64 + var $t4: vector + var $t5: string::String + 0: $t1 := borrow_local($t0) + 1: $t2 := string::internal_check_utf8($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 1 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack string::String($t4) + 11: return $t5 +} + + +[variant baseline] +public fun Collection::borrow_mut<#0>($t0|c: &mut Collection::Collection<#0>, $t1|i: u64): &mut #0 { + var $t2: &mut Collection::Collection<#0> + var $t3: &mut vector<#0> + var $t4: u64 + var $t5: &mut #0 + 0: $t2 := move($t0) + 1: $t3 := borrow_field>.items($t2) + 2: $t4 := move($t1) + 3: $t5 := vector::borrow_mut<#0>($t3, $t4) + 4: return $t5 +} + + +[variant baseline] +public fun Collection::make_collection<#0>(): Collection::Collection<#0> { + var $t0: vector<#0> + var $t1: address + var $t2: Collection::Collection<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := 0x2 + 2: $t2 := pack Collection::Collection<#0>($t0, $t1) + 3: return $t2 +} + + +[variant baseline] +public fun Test::foo<#0>($t0|i: u64) { + var $t1|c#1#0: Collection::Collection> + var $t2|t#1#0: &mut Test::Token<#0> + var $t3: Collection::Collection> + var $t4: &mut Collection::Collection> + var $t5: u64 + var $t6: &mut Test::Token<#0> + var $t7: u64 + var $t8: &mut Test::Token<#0> + var $t9: &mut u64 + 0: $t3 := Collection::make_collection>() + 1: $t1 := $t3 + 2: $t4 := borrow_local($t1) + 3: $t5 := move($t0) + 4: $t6 := Collection::borrow_mut>($t4, $t5) + 5: $t2 := $t6 + 6: $t7 := 0 + 7: $t8 := move($t2) + 8: $t9 := borrow_field>.value($t8) + 9: write_ref($t9, $t7) + 10: return () +} + +============ after pipeline `borrow` ================ + +[variant baseline] +public fun u64::diff($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: bool + 0: $t5 := >($t0, $t1) + 1: if ($t5) goto 2 else goto 5 + 2: label L1 + 3: $t2 := -($t0, $t1) + 4: goto 7 + 5: label L0 + 6: $t2 := -($t1, $t0) + 7: label L2 + 8: return $t2 +} + + +[variant baseline] +public fun u64::divide_and_round_up($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: u64 + 0: $t5 := %($t0, $t1) + 1: $t6 := 0 + 2: $t7 := ==($t5, $t6) + 3: if ($t7) goto 4 else goto 7 + 4: label L1 + 5: $t2 := /($t0, $t1) + 6: goto 11 + 7: label L0 + 8: $t8 := /($t0, $t1) + 9: $t9 := 1 + 10: $t2 := +($t8, $t9) + 11: label L2 + 12: return $t2 +} + + +[variant baseline] +public fun u64::max($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: bool + 0: $t5 := >($t0, $t1) + 1: if ($t5) goto 2 else goto 5 + 2: label L1 + 3: $t2 := $t0 + 4: goto 7 + 5: label L0 + 6: $t2 := $t1 + 7: label L2 + 8: return $t2 +} + + +[variant baseline] +public fun u64::min($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: bool + 0: $t5 := <($t0, $t1) + 1: if ($t5) goto 2 else goto 5 + 2: label L1 + 3: $t2 := $t0 + 4: goto 7 + 5: label L0 + 6: $t2 := $t1 + 7: label L2 + 8: return $t2 +} + + +[variant baseline] +public fun u64::pow($t0|base: u64, $t1|exponent: u8): u64 { + var $t2|base#1#1: u64 + var $t3|exponent#1#1: u8 + var $t4|res#1#1: u64 + var $t5: u64 + var $t6: u8 + var $t7: bool + var $t8: u8 + var $t9: u8 + var $t10: u8 + var $t11: bool + var $t12: u8 + var $t13: u8 + 0: $t2 := $t0 + 1: $t3 := $t1 + 2: $t5 := 1 + 3: $t4 := $t5 + 4: label L5 + 5: $t6 := 1 + 6: $t7 := >=($t3, $t6) + 7: if ($t7) goto 8 else goto 25 + 8: label L1 + 9: label L2 + 10: $t8 := 2 + 11: $t9 := %($t3, $t8) + 12: $t10 := 0 + 13: $t11 := ==($t9, $t10) + 14: if ($t11) goto 15 else goto 20 + 15: label L4 + 16: $t2 := *($t2, $t2) + 17: $t12 := 2 + 18: $t3 := /($t3, $t12) + 19: goto 4 + 20: label L3 + 21: $t4 := *($t4, $t2) + 22: $t13 := 1 + 23: $t3 := -($t3, $t13) + 24: goto 4 + 25: label L0 + 26: return $t4 +} + + +[variant baseline] +public fun u64::sqrt($t0|x: u64): u64 { + var $t1|bit#1#1: u128 + var $t2|res#1#1: u128 + var $t3|x#1#1: u64 + var $t4|x#2#1: u128 + var $t5: u128 + var $t6: u128 + var $t7: u128 + var $t8: bool + var $t9: u128 + var $t10: bool + var $t11: u128 + var $t12: u8 + var $t13: u128 + var $t14: u8 + var $t15: u8 + var $t16: u64 + 0: $t5 := 18446744073709551616 + 1: $t1 := $t5 + 2: $t6 := 0 + 3: $t2 := $t6 + 4: $t4 := (u128)($t0) + 5: label L6 + 6: $t7 := 0 + 7: $t8 := !=($t1, $t7) + 8: if ($t8) goto 9 else goto 28 + 9: label L1 + 10: label L2 + 11: $t9 := +($t2, $t1) + 12: $t10 := >=($t4, $t9) + 13: if ($t10) goto 14 else goto 21 + 14: label L4 + 15: $t11 := +($t2, $t1) + 16: $t4 := -($t4, $t11) + 17: $t12 := 1 + 18: $t13 := >>($t2, $t12) + 19: $t2 := +($t13, $t1) + 20: goto 24 + 21: label L3 + 22: $t14 := 1 + 23: $t2 := >>($t2, $t14) + 24: label L5 + 25: $t15 := 2 + 26: $t1 := >>($t1, $t15) + 27: goto 5 + 28: label L0 + 29: $t16 := (u64)($t2) + 30: return $t16 +} + + +[variant baseline] +public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { + var $t2: &mut vector<#0> + var $t3: vector<#0> + var $t4: bool + var $t5: bool + var $t6: &mut vector<#0> + var $t7: #0 + var $t8: vector<#0> + 0: $t2 := borrow_local($t1) + 1: vector::reverse<#0>($t2) + 2: label L3 + 3: $t3 := copy($t1) + 4: $t4 := vector::is_empty<#0>($t3) + 5: $t5 := !($t4) + 6: if ($t5) goto 7 else goto 13 + 7: label L1 + 8: label L2 + 9: $t6 := borrow_local($t1) + 10: $t7 := vector::pop_back<#0>($t6) + 11: vector::push_back<#0>($t0, $t7) + 12: goto 2 + 13: label L0 + 14: destroy($t0) + 15: $t8 := move($t1) + 16: vector::destroy_empty<#0>($t8) + 17: trace_local[lhs]($t0) + 18: return () +} + + +[variant baseline] +public native fun vector::borrow<#0>($t0|v: vector<#0>, $t1|i: u64): #0; + + +[variant baseline] +public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0; + + +[variant baseline] +public fun vector::contains<#0>($t0|v: vector<#0>, $t1|e: #0): bool { + var $t2|i#1#0: u64 + var $t3|len#1#0: u64 + var $t4: u64 + var $t5: u64 + var $t6: bool + var $t7: #0 + var $t8: bool + var $t9: bool + var $t10: u64 + var $t11: bool + 0: $t4 := 0 + 1: $t2 := $t4 + 2: $t5 := vector::length<#0>($t0) + 3: label L5 + 4: $t6 := <($t2, $t5) + 5: if ($t6) goto 6 else goto 18 + 6: label L1 + 7: label L2 + 8: $t7 := vector::borrow<#0>($t0, $t2) + 9: $t8 := ==($t7, $t1) 10: if ($t8) goto 11 else goto 14 11: label L4 12: $t9 := true 13: return $t9 14: label L3 - 15: $t10 := 1 - 16: $t2 := +($t2, $t10) - 17: goto 3 - 18: label L0 - 19: $t11 := false - 20: return $t11 + 15: $t10 := 1 + 16: $t2 := +($t2, $t10) + 17: goto 3 + 18: label L0 + 19: $t11 := false + 20: return $t11 +} + + +[variant baseline] +public native fun vector::destroy_empty<#0>($t0|v: vector<#0>); + + +[variant baseline] +public native fun vector::empty<#0>(): vector<#0>; + + +[variant baseline] +public fun vector::index_of<#0>($t0|v: vector<#0>, $t1|e: #0): (bool, u64) { + var $t2|i#1#0: u64 + var $t3|len#1#0: u64 + var $t4: u64 + var $t5: u64 + var $t6: bool + var $t7: #0 + var $t8: bool + var $t9: bool + var $t10: u64 + var $t11: bool + var $t12: u64 + 0: $t4 := 0 + 1: $t2 := $t4 + 2: $t5 := vector::length<#0>($t0) + 3: label L5 + 4: $t6 := <($t2, $t5) + 5: if ($t6) goto 6 else goto 18 + 6: label L1 + 7: label L2 + 8: $t7 := vector::borrow<#0>($t0, $t2) + 9: $t8 := ==($t7, $t1) + 10: if ($t8) goto 11 else goto 14 + 11: label L4 + 12: $t9 := true + 13: return ($t9, $t2) + 14: label L3 + 15: $t10 := 1 + 16: $t2 := +($t2, $t10) + 17: goto 3 + 18: label L0 + 19: $t11 := false + 20: $t12 := 0 + 21: return ($t11, $t12) +} + + +[variant baseline] +public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { + var $t3|len#1#0: u64 + var $t4: vector<#0> + var $t5: u64 + var $t6: bool + var $t7: u64 + var $t8: bool + var $t9: u64 + 0: $t4 := read_ref($t0) + 1: $t5 := vector::length<#0>($t4) + 2: $t6 := >($t2, $t5) + 3: if ($t6) goto 4 else goto 8 + 4: label L1 + 5: destroy($t0) + 6: $t7 := 131072 + 7: abort($t7) + 8: label L0 + 9: vector::push_back<#0>($t0, $t1) + 10: label L4 + 11: $t8 := <($t2, $t5) + 12: if ($t8) goto 13 else goto 18 + 13: label L3 + 14: vector::swap<#0>($t0, $t2, $t5) + 15: $t9 := 1 + 16: $t2 := +($t2, $t9) + 17: goto 10 + 18: label L2 + 19: destroy($t0) + 20: trace_local[v]($t0) + 21: return () +} + + +[variant baseline] +public fun vector::is_empty<#0>($t0|v: vector<#0>): bool { + var $t1: u64 + var $t2: u64 + var $t3: bool + 0: $t1 := vector::length<#0>($t0) + 1: $t2 := 0 + 2: $t3 := ==($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public native fun vector::length<#0>($t0|v: vector<#0>): u64; + + +[variant baseline] +public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0; + + +[variant baseline] +public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0); + + +[variant baseline] +public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { + var $t2|tmp#$2: u64 + var $t3|tmp#$3: &mut vector<#0> + var $t4|len#1#0: u64 + var $t5: vector<#0> + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: bool + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: #0 + 0: $t5 := read_ref($t0) + 1: $t6 := vector::length<#0>($t5) + 2: $t7 := >=($t1, $t6) + 3: if ($t7) goto 4 else goto 8 + 4: label L1 + 5: destroy($t0) + 6: $t8 := 131072 + 7: abort($t8) + 8: label L0 + 9: $t9 := 1 + 10: $t10 := -($t6, $t9) + 11: label L4 + 12: $t11 := <($t1, $t10) + 13: if ($t11) goto 14 else goto 21 + 14: label L3 + 15: $t12 := copy($t1) + 16: $t13 := 1 + 17: $t14 := +($t1, $t13) + 18: $t1 := $t14 + 19: vector::swap<#0>($t0, $t12, $t14) + 20: goto 11 + 21: label L2 + 22: $t15 := vector::pop_back<#0>($t0) + 23: trace_local[v]($t0) + 24: return $t15 +} + + +[variant baseline] +public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { + var $t1|back_index#1#0: u64 + var $t2|front_index#1#0: u64 + var $t3|len#1#0: u64 + var $t4: vector<#0> + var $t5: u64 + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: u64 + 0: $t4 := read_ref($t0) + 1: $t5 := vector::length<#0>($t4) + 2: $t6 := 0 + 3: $t7 := ==($t5, $t6) + 4: if ($t7) goto 5 else goto 9 + 5: label L1 + 6: destroy($t0) + 7: trace_local[v]($t0) + 8: return () + 9: label L0 + 10: $t8 := 0 + 11: $t2 := $t8 + 12: $t9 := 1 + 13: $t1 := -($t5, $t9) + 14: label L4 + 15: $t10 := <($t2, $t1) + 16: if ($t10) goto 17 else goto 24 + 17: label L3 + 18: vector::swap<#0>($t0, $t2, $t1) + 19: $t11 := 1 + 20: $t2 := +($t2, $t11) + 21: $t12 := 1 + 22: $t1 := -($t1, $t12) + 23: goto 14 + 24: label L2 + 25: destroy($t0) + 26: trace_local[v]($t0) + 27: return () +} + + +[variant baseline] +public fun vector::singleton<#0>($t0|e: #0): vector<#0> { + var $t1|v#1#0: vector<#0> + var $t2: &mut vector<#0> + var $t3: vector<#0> + 0: $t1 := vector::empty<#0>() + 1: $t2 := borrow_local($t1) + 2: vector::push_back<#0>($t2, $t0) + 3: $t3 := move($t1) + 4: return $t3 +} + + +[variant baseline] +public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64); + + +[variant baseline] +public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { + var $t2|last_idx#1#0: u64 + var $t3: vector<#0> + var $t4: bool + var $t5: bool + var $t6: u64 + var $t7: vector<#0> + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: #0 + 0: $t3 := read_ref($t0) + 1: $t4 := vector::is_empty<#0>($t3) + 2: $t5 := !($t4) + 3: if ($t5) goto 4 else goto 6 + 4: label L1 + 5: goto 10 + 6: label L0 + 7: destroy($t0) + 8: $t6 := 131072 + 9: abort($t6) + 10: label L2 + 11: $t7 := read_ref($t0) + 12: $t8 := vector::length<#0>($t7) + 13: $t9 := 1 + 14: $t10 := -($t8, $t9) + 15: vector::swap<#0>($t0, $t1, $t10) + 16: $t11 := vector::pop_back<#0>($t0) + 17: trace_local[v]($t0) + 18: return $t11 +} + + +[variant baseline] +public fun option::borrow<#0>($t0|t: option::Option<#0>): #0 { + var $t1: bool + var $t2: u64 + var $t3: vector<#0> + var $t4: u64 + var $t5: #0 + 0: $t1 := option::is_some<#0>($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 262145 + 6: abort($t2) + 7: label L2 + 8: $t3 := get_field>.vec($t0) + 9: $t4 := 0 + 10: $t5 := vector::borrow<#0>($t3, $t4) + 11: return $t5 +} + + +[variant baseline] +public fun option::borrow_mut<#0>($t0|t: &mut option::Option<#0>): &mut #0 { + var $t1: option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: &mut vector<#0> + var $t5: u64 + var $t6: &mut #0 + 0: $t1 := read_ref($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 9 + 5: label L0 + 6: destroy($t0) + 7: $t3 := 262145 + 8: abort($t3) + 9: label L2 + 10: $t4 := borrow_field>.vec($t0) + 11: $t5 := 0 + 12: $t6 := vector::borrow_mut<#0>($t4, $t5) + 13: trace_local[t]($t0) + 14: return $t6 +} + + +[variant baseline] +public fun option::contains<#0>($t0|t: option::Option<#0>, $t1|e_ref: #0): bool { + var $t2: vector<#0> + var $t3: bool + 0: $t2 := get_field>.vec($t0) + 1: $t3 := vector::contains<#0>($t2, $t1) + 2: return $t3 +} + + +[variant baseline] +public fun option::swap<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): #0 { + var $t2|old_value#1#0: #0 + var $t3|vec_ref#1#0: &mut vector<#0> + var $t4: option::Option<#0> + var $t5: bool + var $t6: u64 + var $t7: &mut vector<#0> + var $t8: #0 + 0: $t4 := read_ref($t0) + 1: $t5 := option::is_some<#0>($t4) + 2: if ($t5) goto 3 else goto 5 + 3: label L1 + 4: goto 9 + 5: label L0 + 6: destroy($t0) + 7: $t6 := 262145 + 8: abort($t6) + 9: label L2 + 10: $t7 := borrow_field>.vec($t0) + 11: $t8 := vector::pop_back<#0>($t7) + 12: vector::push_back<#0>($t7, $t1) + 13: trace_local[t]($t0) + 14: return $t8 +} + + +[variant baseline] +public fun option::borrow_with_default<#0>($t0|t: option::Option<#0>, $t1|default_ref: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: u64 + 0: $t4 := get_field>.vec($t0) + 1: $t5 := vector::is_empty<#0>($t4) + 2: if ($t5) goto 3 else goto 6 + 3: label L1 + 4: $t2 := $t1 + 5: goto 9 + 6: label L0 + 7: $t6 := 0 + 8: $t2 := vector::borrow<#0>($t4, $t6) + 9: label L2 + 10: return $t2 +} + + +[variant baseline] +public fun option::destroy_none<#0>($t0|t: option::Option<#0>) { + var $t1: bool + var $t2: u64 + var $t3: vector<#0> + 0: $t1 := option::is_none<#0>($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 262144 + 6: abort($t2) + 7: label L2 + 8: $t3 := unpack option::Option<#0>($t0) + 9: vector::destroy_empty<#0>($t3) + 10: return () +} + + +[variant baseline] +public fun option::destroy_some<#0>($t0|t: option::Option<#0>): #0 { + var $t1|elem#1#0: #0 + var $t2|vec#1#0: vector<#0> + var $t3: bool + var $t4: u64 + var $t5: &mut vector<#0> + var $t6: #0 + var $t7: vector<#0> + 0: $t3 := option::is_some<#0>($t0) + 1: if ($t3) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t4 := 262145 + 6: abort($t4) + 7: label L2 + 8: $t2 := unpack option::Option<#0>($t0) + 9: $t5 := borrow_local($t2) + 10: $t6 := vector::pop_back<#0>($t5) + 11: $t7 := move($t2) + 12: vector::destroy_empty<#0>($t7) + 13: return $t6 +} + + +[variant baseline] +public fun option::destroy_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec#1#0: vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: &mut vector<#0> + 0: $t3 := unpack option::Option<#0>($t0) + 1: $t4 := copy($t3) + 2: $t5 := vector::is_empty<#0>($t4) + 3: if ($t5) goto 4 else goto 7 + 4: label L1 + 5: $t2 := $t1 + 6: goto 10 + 7: label L0 + 8: $t6 := borrow_local($t3) + 9: $t2 := vector::pop_back<#0>($t6) + 10: label L2 + 11: return $t2 +} + + +[variant baseline] +public fun option::extract<#0>($t0|t: &mut option::Option<#0>): #0 { + var $t1: option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: &mut vector<#0> + var $t5: #0 + 0: $t1 := read_ref($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 9 + 5: label L0 + 6: destroy($t0) + 7: $t3 := 262145 + 8: abort($t3) + 9: label L2 + 10: $t4 := borrow_field>.vec($t0) + 11: $t5 := vector::pop_back<#0>($t4) + 12: trace_local[t]($t0) + 13: return $t5 +} + + +[variant baseline] +public fun option::fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0) { + var $t2|vec_ref#1#0: &mut vector<#0> + var $t3: &mut vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: u64 + 0: $t3 := borrow_field>.vec($t0) + 1: $t4 := read_ref($t3) + 2: $t5 := vector::is_empty<#0>($t4) + 3: if ($t5) goto 4 else goto 14 + 4: label L1 + 5: goto 10 + 6: label L0 + 7: destroy($t3) + 8: $t6 := 262144 + 9: abort($t6) + 10: label L2 + 11: vector::push_back<#0>($t3, $t1) + 12: trace_local[t]($t0) + 13: return () + 14: label L3 + 15: destroy($t0) + 16: goto 6 +} + + +[variant baseline] +public fun option::get_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: vector<#0> + var $t4: vector<#0> + var $t5: bool + var $t6: u64 + var $t7: #0 + 0: $t4 := get_field>.vec($t0) + 1: $t5 := vector::is_empty<#0>($t4) + 2: if ($t5) goto 3 else goto 6 + 3: label L1 + 4: $t2 := $t1 + 5: goto 10 + 6: label L0 + 7: $t6 := 0 + 8: $t7 := vector::borrow<#0>($t4, $t6) + 9: $t2 := $t7 + 10: label L2 + 11: return $t2 +} + + +[variant baseline] +public fun option::is_none<#0>($t0|t: option::Option<#0>): bool { + var $t1: vector<#0> + var $t2: bool + 0: $t1 := get_field>.vec($t0) + 1: $t2 := vector::is_empty<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun option::is_some<#0>($t0|t: option::Option<#0>): bool { + var $t1: vector<#0> + var $t2: bool + var $t3: bool + 0: $t1 := get_field>.vec($t0) + 1: $t2 := vector::is_empty<#0>($t1) + 2: $t3 := !($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::none<#0>(): option::Option<#0> { + var $t0: vector<#0> + var $t1: option::Option<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := pack option::Option<#0>($t0) + 2: return $t1 +} + + +[variant baseline] +public fun option::some<#0>($t0|e: #0): option::Option<#0> { + var $t1: vector<#0> + var $t2: option::Option<#0> + 0: $t1 := vector::singleton<#0>($t0) + 1: $t2 := pack option::Option<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun option::swap_or_fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): option::Option<#0> { + var $t2|tmp#$2: option::Option<#0> + var $t3|old_value#1#0: option::Option<#0> + var $t4|vec_ref#1#0: &mut vector<#0> + var $t5: &mut vector<#0> + var $t6: vector<#0> + var $t7: bool + var $t8: #0 + 0: $t5 := borrow_field>.vec($t0) + 1: $t6 := read_ref($t5) + 2: $t7 := vector::is_empty<#0>($t6) + 3: if ($t7) goto 4 else goto 7 + 4: label L1 + 5: $t2 := option::none<#0>() + 6: goto 10 + 7: label L0 + 8: $t8 := vector::pop_back<#0>($t5) + 9: $t2 := option::some<#0>($t8) + 10: label L2 + 11: vector::push_back<#0>($t5, $t1) + 12: trace_local[t]($t0) + 13: return $t2 +} + + +[variant baseline] +public fun option::to_vec<#0>($t0|t: option::Option<#0>): vector<#0> { + var $t1: vector<#0> + 0: $t1 := unpack option::Option<#0>($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::append($t0|string: &mut ascii::String, $t1|other: ascii::String) { + var $t2: &mut vector + var $t3: vector + 0: $t2 := borrow_field.bytes($t0) + 1: $t3 := ascii::into_bytes($t1) + 2: vector::append($t2, $t3) + 3: trace_local[string]($t0) + 4: return () +} + + +[variant baseline] +public fun ascii::index_of($t0|string: ascii::String, $t1|substr: ascii::String): u64 { + var $t2|tmp#$2: bool + var $t3|i#1#0: u64 + var $t4|j#1#0: u64 + var $t5|m#1#0: u64 + var $t6|n#1#0: u64 + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: bool + var $t13: u64 + var $t14: bool + var $t15: vector + var $t16: u64 + var $t17: u8 + var $t18: vector + var $t19: u8 + var $t20: bool + var $t21: u64 + var $t22: bool + var $t23: u64 + 0: $t7 := 0 + 1: $t3 := $t7 + 2: $t8 := ascii::length($t0) + 3: $t9 := ascii::length($t1) + 4: $t10 := <($t8, $t9) + 5: if ($t10) goto 6 else goto 8 + 6: label L1 + 7: return $t8 + 8: label L0 + 9: $t11 := -($t8, $t9) + 10: $t12 := <=($t3, $t11) + 11: if ($t12) goto 12 else goto 45 + 12: label L3 + 13: $t13 := 0 + 14: $t4 := $t13 + 15: label L10 + 16: $t14 := <($t4, $t9) + 17: if ($t14) goto 18 else goto 27 + 18: label L5 + 19: label L6 + 20: $t15 := get_field.bytes($t0) + 21: $t16 := +($t3, $t4) + 22: $t17 := vector::borrow($t15, $t16) + 23: $t18 := get_field.bytes($t1) + 24: $t19 := vector::borrow($t18, $t4) + 25: $t2 := ==($t17, $t19) + 26: goto 30 + 27: label L4 + 28: $t20 := false + 29: $t2 := $t20 + 30: label L7 + 31: if ($t2) goto 32 else goto 36 + 32: label L9 + 33: $t21 := 1 + 34: $t4 := +($t4, $t21) + 35: goto 15 + 36: label L8 + 37: $t22 := ==($t4, $t9) + 38: if ($t22) goto 39 else goto 41 + 39: label L12 + 40: return $t3 + 41: label L11 + 42: $t23 := 1 + 43: $t3 := +($t3, $t23) + 44: goto 8 + 45: label L2 + 46: return $t8 +} + + +[variant baseline] +public fun ascii::insert($t0|s: &mut ascii::String, $t1|at: u64, $t2|o: ascii::String) { + var $t3|e#1#2: u8 + var $t4|v#1#1: vector + var $t5: ascii::String + var $t6: u64 + var $t7: bool + var $t8: u64 + var $t9: vector + var $t10: bool + var $t11: bool + var $t12: &mut vector + var $t13: u8 + var $t14: &mut vector + var $t15: vector + 0: $t5 := read_ref($t0) + 1: $t6 := ascii::length($t5) + 2: $t7 := <=($t1, $t6) + 3: if ($t7) goto 4 else goto 6 + 4: label L1 + 5: goto 10 + 6: label L0 + 7: destroy($t0) + 8: $t8 := 65537 + 9: abort($t8) + 10: label L2 + 11: $t4 := ascii::into_bytes($t2) + 12: label L5 + 13: $t9 := copy($t4) + 14: $t10 := vector::is_empty($t9) + 15: $t11 := !($t10) + 16: if ($t11) goto 17 else goto 23 + 17: label L4 + 18: $t12 := borrow_local($t4) + 19: $t13 := vector::pop_back($t12) + 20: $t14 := borrow_field.bytes($t0) + 21: vector::insert($t14, $t13, $t1) + 22: goto 12 + 23: label L3 + 24: destroy($t0) + 25: $t15 := move($t4) + 26: vector::destroy_empty($t15) + 27: trace_local[s]($t0) + 28: return () +} + + +[variant baseline] +public fun ascii::is_empty($t0|string: ascii::String): bool { + var $t1: vector + var $t2: bool + 0: $t1 := get_field.bytes($t0) + 1: $t2 := vector::is_empty($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::length($t0|string: ascii::String): u64 { + var $t1: vector + var $t2: u64 + 0: $t1 := ascii::as_bytes($t0) + 1: $t2 := vector::length($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::all_characters_printable($t0|string: ascii::String): bool { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|i#1#12: u64 + var $t4|i#1#9: u64 + var $t5|stop#1#9: u64 + var $t6|v#1#3: vector + var $t7: vector + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u8 + var $t12: bool + var $t13: bool + var $t14: bool + var $t15: u64 + var $t16: bool + 0: $t7 := get_field.bytes($t0) + 1: $t8 := vector::length($t7) + 2: $t9 := 0 + 3: $t4 := $t9 + 4: label L5 + 5: $t10 := <($t4, $t8) + 6: if ($t10) goto 7 else goto 20 + 7: label L1 + 8: $t11 := vector::borrow($t7, $t4) + 9: $t12 := ascii::is_printable_char($t11) + 10: $t13 := !($t12) + 11: if ($t13) goto 12 else goto 16 + 12: label L3 + 13: $t14 := false + 14: $t2 := $t14 + 15: goto 23 + 16: label L2 + 17: $t15 := 1 + 18: $t4 := +($t4, $t15) + 19: goto 4 + 20: label L0 + 21: $t16 := true + 22: $t2 := $t16 + 23: label L4 + 24: return $t2 +} + + +[variant baseline] +public fun ascii::string($t0|bytes: vector): ascii::String { + var $t1|x#1#0: option::Option + var $t2: option::Option + var $t3: bool + var $t4: u64 + var $t5: ascii::String + 0: $t2 := ascii::try_string($t0) + 1: $t3 := option::is_some($t2) + 2: if ($t3) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t4 := 65536 + 7: abort($t4) + 8: label L2 + 9: $t5 := option::destroy_some($t2) + 10: return $t5 +} + + +[variant baseline] +public fun ascii::as_bytes($t0|string: ascii::String): vector { + var $t1: vector + 0: $t1 := get_field.bytes($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::byte($t0|char: ascii::Char): u8 { + var $t1: u8 + 0: $t1 := unpack ascii::Char($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::char($t0|byte: u8): ascii::Char { + var $t1: bool + var $t2: u64 + var $t3: ascii::Char + 0: $t1 := ascii::is_valid_char($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 65536 + 6: abort($t2) + 7: label L2 + 8: $t3 := pack ascii::Char($t0) + 9: return $t3 +} + + +[variant baseline] +fun ascii::char_to_lowercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: bool + var $t7: u8 + 0: $t3 := 65 + 1: $t4 := >=($t0, $t3) + 2: if ($t4) goto 3 else goto 7 + 3: label L1 + 4: $t5 := 90 + 5: $t1 := <=($t0, $t5) + 6: goto 10 + 7: label L0 + 8: $t6 := false + 9: $t1 := $t6 + 10: label L2 + 11: if ($t1) goto 12 else goto 16 + 12: label L4 + 13: $t7 := 32 + 14: $t2 := +($t0, $t7) + 15: goto 18 + 16: label L3 + 17: $t2 := $t0 + 18: label L5 + 19: return $t2 +} + + +[variant baseline] +fun ascii::char_to_uppercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: bool + var $t7: u8 + 0: $t3 := 97 + 1: $t4 := >=($t0, $t3) + 2: if ($t4) goto 3 else goto 7 + 3: label L1 + 4: $t5 := 122 + 5: $t1 := <=($t0, $t5) + 6: goto 10 + 7: label L0 + 8: $t6 := false + 9: $t1 := $t6 + 10: label L2 + 11: if ($t1) goto 12 else goto 16 + 12: label L4 + 13: $t7 := 32 + 14: $t2 := -($t0, $t7) + 15: goto 18 + 16: label L3 + 17: $t2 := $t0 + 18: label L5 + 19: return $t2 +} + + +[variant baseline] +public fun ascii::into_bytes($t0|string: ascii::String): vector { + var $t1: vector + 0: $t1 := unpack ascii::String($t0) + 1: return $t1 +} + + +[variant baseline] +public fun ascii::is_printable_char($t0|byte: u8): bool { + var $t1|tmp#$1: bool + var $t2: u8 + var $t3: bool + var $t4: u8 + var $t5: bool + 0: $t2 := 32 + 1: $t3 := >=($t0, $t2) + 2: if ($t3) goto 3 else goto 7 + 3: label L1 + 4: $t4 := 126 + 5: $t1 := <=($t0, $t4) + 6: goto 10 + 7: label L0 + 8: $t5 := false + 9: $t1 := $t5 + 10: label L2 + 11: return $t1 } [variant baseline] -public native fun vector::destroy_empty<#0>($t0|v: vector<#0>); +public fun ascii::is_valid_char($t0|b: u8): bool { + var $t1: u8 + var $t2: bool + 0: $t1 := 127 + 1: $t2 := <=($t0, $t1) + 2: return $t2 +} [variant baseline] -public native fun vector::empty<#0>(): vector<#0>; +public fun ascii::pop_char($t0|string: &mut ascii::String): ascii::Char { + var $t1: &mut vector + var $t2: u8 + var $t3: ascii::Char + 0: $t1 := borrow_field.bytes($t0) + 1: $t2 := vector::pop_back($t1) + 2: $t3 := pack ascii::Char($t2) + 3: trace_local[string]($t0) + 4: return $t3 +} [variant baseline] -public fun vector::index_of<#0>($t0|v: vector<#0>, $t1|e: #0): (bool, u64) { - var $t2|i#1#0: u64 - var $t3|len#1#0: u64 - var $t4: u64 - var $t5: u64 - var $t6: bool - var $t7: #0 - var $t8: bool - var $t9: bool - var $t10: u64 - var $t11: bool - var $t12: u64 - 0: $t4 := 0 - 1: $t2 := $t4 - 2: $t5 := vector::length<#0>($t0) - 3: label L5 - 4: $t6 := <($t2, $t5) - 5: if ($t6) goto 6 else goto 18 - 6: label L1 - 7: label L2 - 8: $t7 := vector::borrow<#0>($t0, $t2) - 9: $t8 := ==($t7, $t1) - 10: if ($t8) goto 11 else goto 14 - 11: label L4 - 12: $t9 := true - 13: return ($t9, $t2) - 14: label L3 - 15: $t10 := 1 - 16: $t2 := +($t2, $t10) - 17: goto 3 - 18: label L0 - 19: $t11 := false - 20: $t12 := 0 - 21: return ($t11, $t12) +public fun ascii::push_char($t0|string: &mut ascii::String, $t1|char: ascii::Char) { + var $t2: &mut vector + var $t3: u8 + 0: $t2 := borrow_field.bytes($t0) + 1: $t3 := get_field.byte($t1) + 2: vector::push_back($t2, $t3) + 3: trace_local[string]($t0) + 4: return () } [variant baseline] -public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { - var $t3|len#1#0: u64 - var $t4: vector<#0> - var $t5: u64 - var $t6: bool - var $t7: u64 +public fun ascii::substring($t0|string: ascii::String, $t1|i: u64, $t2|j: u64): ascii::String { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|i#1#3: u64 + var $t6|i#1#6: u64 + var $t7|stop#1#3: u64 var $t8: bool var $t9: u64 - 0: $t4 := read_ref($t0) - 1: $t5 := vector::length<#0>($t4) - 2: $t6 := >($t2, $t5) - 3: if ($t6) goto 4 else goto 8 - 4: label L1 - 5: destroy($t0) - 6: $t7 := 131072 - 7: abort($t7) - 8: label L0 - 9: vector::push_back<#0>($t0, $t1) - 10: label L5 - 11: $t8 := <($t2, $t5) - 12: if ($t8) goto 13 else goto 19 + var $t10: bool + var $t11: u64 + var $t12: vector + var $t13: bool + var $t14: &mut vector + var $t15: vector + var $t16: u8 + var $t17: u64 + var $t18: vector + var $t19: ascii::String + 0: $t8 := <=($t1, $t2) + 1: if ($t8) goto 2 else goto 6 + 2: label L1 + 3: $t9 := ascii::length($t0) + 4: $t3 := <=($t2, $t9) + 5: goto 9 + 6: label L0 + 7: $t10 := false + 8: $t3 := $t10 + 9: label L2 + 10: if ($t3) goto 11 else goto 13 + 11: label L4 + 12: goto 16 13: label L3 - 14: label L4 - 15: vector::swap<#0>($t0, $t2, $t5) - 16: $t9 := 1 - 17: $t2 := +($t2, $t9) - 18: goto 10 - 19: label L2 - 20: destroy($t0) - 21: trace_local[v]($t0) - 22: return () + 14: $t11 := 65537 + 15: abort($t11) + 16: label L5 + 17: $t12 := [] + 18: $t4 := $t12 + 19: $t5 := $t1 + 20: label L8 + 21: $t13 := <($t5, $t2) + 22: if ($t13) goto 23 else goto 31 + 23: label L7 + 24: $t14 := borrow_local($t4) + 25: $t15 := get_field.bytes($t0) + 26: $t16 := vector::borrow($t15, $t5) + 27: vector::push_back($t14, $t16) + 28: $t17 := 1 + 29: $t5 := +($t5, $t17) + 30: goto 20 + 31: label L6 + 32: $t18 := move($t4) + 33: $t19 := pack ascii::String($t18) + 34: return $t19 } [variant baseline] -public fun vector::is_empty<#0>($t0|v: vector<#0>): bool { - var $t1: u64 - var $t2: u64 - var $t3: bool - 0: $t1 := vector::length<#0>($t0) - 1: $t2 := 0 - 2: $t3 := ==($t1, $t2) - 3: return $t3 +public fun ascii::to_lowercase($t0|string: ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: vector + var $t10|v#1#3: vector + var $t11: vector + var $t12: vector + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u8 + var $t17: &mut vector + var $t18: u8 + var $t19: u64 + var $t20: vector + var $t21: ascii::String + 0: $t11 := ascii::as_bytes($t0) + 1: $t12 := [] + 2: $t7 := $t12 + 3: $t13 := vector::length($t11) + 4: $t14 := 0 + 5: $t6 := $t14 + 6: label L2 + 7: $t15 := <($t6, $t13) + 8: if ($t15) goto 9 else goto 17 + 9: label L1 + 10: $t16 := vector::borrow($t11, $t6) + 11: $t17 := borrow_local($t7) + 12: $t18 := ascii::char_to_lowercase($t16) + 13: vector::push_back($t17, $t18) + 14: $t19 := 1 + 15: $t6 := +($t6, $t19) + 16: goto 6 + 17: label L0 + 18: $t20 := move($t7) + 19: $t21 := pack ascii::String($t20) + 20: return $t21 } [variant baseline] -public native fun vector::length<#0>($t0|v: vector<#0>): u64; +public fun ascii::to_uppercase($t0|string: ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: vector + var $t10|v#1#3: vector + var $t11: vector + var $t12: vector + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u8 + var $t17: &mut vector + var $t18: u8 + var $t19: u64 + var $t20: vector + var $t21: ascii::String + 0: $t11 := ascii::as_bytes($t0) + 1: $t12 := [] + 2: $t7 := $t12 + 3: $t13 := vector::length($t11) + 4: $t14 := 0 + 5: $t6 := $t14 + 6: label L2 + 7: $t15 := <($t6, $t13) + 8: if ($t15) goto 9 else goto 17 + 9: label L1 + 10: $t16 := vector::borrow($t11, $t6) + 11: $t17 := borrow_local($t7) + 12: $t18 := ascii::char_to_uppercase($t16) + 13: vector::push_back($t17, $t18) + 14: $t19 := 1 + 15: $t6 := +($t6, $t19) + 16: goto 6 + 17: label L0 + 18: $t20 := move($t7) + 19: $t21 := pack ascii::String($t20) + 20: return $t21 +} [variant baseline] -public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0; +public fun ascii::try_string($t0|bytes: vector): option::Option { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|tmp#$3: option::Option + var $t4|i#1#12: u64 + var $t5|i#1#9: u64 + var $t6|stop#1#9: u64 + var $t7|v#1#3: vector + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u8 + var $t12: bool + var $t13: bool + var $t14: bool + var $t15: u64 + var $t16: bool + var $t17: ascii::String + 0: $t8 := vector::length($t0) + 1: $t9 := 0 + 2: $t5 := $t9 + 3: label L5 + 4: $t10 := <($t5, $t8) + 5: if ($t10) goto 6 else goto 19 + 6: label L1 + 7: $t11 := vector::borrow($t0, $t5) + 8: $t12 := ascii::is_valid_char($t11) + 9: $t13 := !($t12) + 10: if ($t13) goto 11 else goto 15 + 11: label L3 + 12: $t14 := false + 13: $t2 := $t14 + 14: goto 22 + 15: label L2 + 16: $t15 := 1 + 17: $t5 := +($t5, $t15) + 18: goto 3 + 19: label L0 + 20: $t16 := true + 21: $t2 := $t16 + 22: label L4 + 23: if ($t2) goto 24 else goto 28 + 24: label L7 + 25: $t17 := pack ascii::String($t0) + 26: $t3 := option::some($t17) + 27: goto 30 + 28: label L6 + 29: $t3 := option::none() + 30: label L8 + 31: return $t3 +} [variant baseline] -public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0); +public fun string::append($t0|s: &mut string::String, $t1|r: string::String) { + var $t2: &mut vector + var $t3: vector + 0: $t2 := borrow_field.bytes($t0) + 1: $t3 := get_field.bytes($t1) + 2: vector::append($t2, $t3) + 3: trace_local[s]($t0) + 4: return () +} [variant baseline] -public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { - var $t2|tmp#$2: u64 - var $t3|tmp#$3: &mut vector<#0> - var $t4|len#1#0: u64 - var $t5: vector<#0> - var $t6: u64 - var $t7: bool - var $t8: u64 +public fun string::index_of($t0|s: string::String, $t1|r: string::String): u64 { + var $t2: vector + var $t3: vector + var $t4: u64 + 0: $t2 := get_field.bytes($t0) + 1: $t3 := get_field.bytes($t1) + 2: $t4 := string::internal_index_of($t2, $t3) + 3: return $t4 +} + + +[variant baseline] +public fun string::insert($t0|s: &mut string::String, $t1|at: u64, $t2|o: string::String) { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|end#1#0: string::String + var $t6|front#1#0: string::String + var $t7|l#1#0: u64 + var $t8: vector var $t9: u64 - var $t10: u64 + var $t10: bool var $t11: bool var $t12: u64 - var $t13: u64 + var $t13: string::String var $t14: u64 - var $t15: #0 - 0: $t5 := read_ref($t0) - 1: $t6 := vector::length<#0>($t5) - 2: $t7 := >=($t1, $t6) - 3: if ($t7) goto 4 else goto 8 + var $t15: string::String + var $t16: u64 + var $t17: string::String + var $t18: string::String + var $t19: &mut string::String + var $t20: &mut string::String + var $t21: string::String + 0: $t8 := get_field.bytes($t0) + 1: $t9 := vector::length($t8) + 2: $t10 := <=($t1, $t9) + 3: if ($t10) goto 4 else goto 7 4: label L1 - 5: destroy($t0) - 6: $t8 := 131072 - 7: abort($t8) - 8: label L0 - 9: $t9 := 1 - 10: $t10 := -($t6, $t9) - 11: label L5 - 12: $t11 := <($t1, $t10) - 13: if ($t11) goto 14 else goto 22 + 5: $t3 := string::internal_is_char_boundary($t8, $t1) + 6: goto 10 + 7: label L0 + 8: $t11 := false + 9: $t3 := $t11 + 10: label L2 + 11: if ($t3) goto 12 else goto 14 + 12: label L4 + 13: goto 18 14: label L3 - 15: label L4 - 16: $t12 := copy($t1) - 17: $t13 := 1 - 18: $t14 := +($t1, $t13) - 19: $t1 := $t14 - 20: vector::swap<#0>($t0, $t12, $t14) - 21: goto 11 - 22: label L2 - 23: $t15 := vector::pop_back<#0>($t0) - 24: trace_local[v]($t0) - 25: return $t15 + 15: destroy($t0) + 16: $t12 := 2 + 17: abort($t12) + 18: label L5 + 19: $t13 := read_ref($t0) + 20: $t14 := string::length($t13) + 21: $t15 := read_ref($t0) + 22: $t16 := 0 + 23: $t6 := string::substring($t15, $t16, $t1) + 24: $t17 := read_ref($t0) + 25: $t18 := string::substring($t17, $t1, $t14) + 26: $t19 := borrow_local($t6) + 27: string::append($t19, $t2) + 28: $t20 := borrow_local($t6) + 29: string::append($t20, $t18) + 30: $t21 := move($t6) + 31: write_ref($t0, $t21) + 32: trace_local[s]($t0) + 33: return () } [variant baseline] -public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { - var $t1|back_index#1#0: u64 - var $t2|front_index#1#0: u64 - var $t3|len#1#0: u64 - var $t4: vector<#0> - var $t5: u64 - var $t6: u64 - var $t7: bool - var $t8: u64 - var $t9: u64 - var $t10: bool - var $t11: u64 - var $t12: u64 - 0: $t4 := read_ref($t0) - 1: $t5 := vector::length<#0>($t4) - 2: $t6 := 0 - 3: $t7 := ==($t5, $t6) - 4: if ($t7) goto 5 else goto 9 - 5: label L1 - 6: destroy($t0) - 7: trace_local[v]($t0) - 8: return () - 9: label L0 - 10: $t8 := 0 - 11: $t2 := $t8 - 12: $t9 := 1 - 13: $t1 := -($t5, $t9) - 14: label L5 - 15: $t10 := <($t2, $t1) - 16: if ($t10) goto 17 else goto 25 - 17: label L3 - 18: label L4 - 19: vector::swap<#0>($t0, $t2, $t1) - 20: $t11 := 1 - 21: $t2 := +($t2, $t11) - 22: $t12 := 1 - 23: $t1 := -($t1, $t12) - 24: goto 14 - 25: label L2 - 26: destroy($t0) - 27: trace_local[v]($t0) - 28: return () +public fun string::is_empty($t0|s: string::String): bool { + var $t1: vector + var $t2: bool + 0: $t1 := get_field.bytes($t0) + 1: $t2 := vector::is_empty($t1) + 2: return $t2 } [variant baseline] -public fun vector::singleton<#0>($t0|e: #0): vector<#0> { - var $t1|v#1#0: vector<#0> - var $t2: &mut vector<#0> - var $t3: vector<#0> - 0: $t1 := vector::empty<#0>() - 1: $t2 := borrow_local($t1) - 2: vector::push_back<#0>($t2, $t0) - 3: $t3 := move($t1) - 4: return $t3 +public fun string::length($t0|s: string::String): u64 { + var $t1: vector + var $t2: u64 + 0: $t1 := get_field.bytes($t0) + 1: $t2 := vector::length($t1) + 2: return $t2 } [variant baseline] -public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64); +public fun string::as_bytes($t0|s: string::String): vector { + var $t1: vector + 0: $t1 := get_field.bytes($t0) + 1: return $t1 +} [variant baseline] -public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { - var $t2|last_idx#1#0: u64 - var $t3: vector<#0> - var $t4: bool - var $t5: bool - var $t6: u64 - var $t7: vector<#0> - var $t8: u64 +public fun string::into_bytes($t0|s: string::String): vector { + var $t1: vector + 0: $t1 := unpack string::String($t0) + 1: return $t1 +} + + +[variant baseline] +public fun string::bytes($t0|s: string::String): vector { + var $t1: vector + 0: $t1 := string::as_bytes($t0) + 1: return $t1 +} + + +[variant baseline] +public fun string::substring($t0|s: string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3|tmp#$3: bool + var $t4|tmp#$4: bool + var $t5|tmp#$5: bool + var $t6|bytes#1#0: vector + var $t7|l#1#0: u64 + var $t8: vector var $t9: u64 - var $t10: u64 - var $t11: #0 - 0: $t3 := read_ref($t0) - 1: $t4 := vector::is_empty<#0>($t3) - 2: $t5 := !($t4) - 3: if ($t5) goto 4 else goto 6 + var $t10: bool + var $t11: bool + var $t12: bool + var $t13: bool + var $t14: u64 + var $t15: vector + var $t16: string::String + 0: $t8 := get_field.bytes($t0) + 1: $t9 := vector::length($t8) + 2: $t10 := <=($t2, $t9) + 3: if ($t10) goto 4 else goto 7 4: label L1 - 5: goto 10 - 6: label L0 - 7: destroy($t0) - 8: $t6 := 131072 - 9: abort($t6) + 5: $t3 := <=($t1, $t2) + 6: goto 10 + 7: label L0 + 8: $t11 := false + 9: $t3 := $t11 10: label L2 - 11: $t7 := read_ref($t0) - 12: $t8 := vector::length<#0>($t7) - 13: $t9 := 1 - 14: $t10 := -($t8, $t9) - 15: vector::swap<#0>($t0, $t1, $t10) - 16: $t11 := vector::pop_back<#0>($t0) - 17: trace_local[v]($t0) - 18: return $t11 + 11: if ($t3) goto 12 else goto 15 + 12: label L4 + 13: $t4 := string::internal_is_char_boundary($t8, $t1) + 14: goto 18 + 15: label L3 + 16: $t12 := false + 17: $t4 := $t12 + 18: label L5 + 19: if ($t4) goto 20 else goto 23 + 20: label L7 + 21: $t5 := string::internal_is_char_boundary($t8, $t2) + 22: goto 26 + 23: label L6 + 24: $t13 := false + 25: $t5 := $t13 + 26: label L8 + 27: if ($t5) goto 28 else goto 30 + 28: label L10 + 29: goto 33 + 30: label L9 + 31: $t14 := 2 + 32: abort($t14) + 33: label L11 + 34: $t15 := string::internal_sub_string($t8, $t1, $t2) + 35: $t16 := pack string::String($t15) + 36: return $t16 +} + + +[variant baseline] +public fun string::append_utf8($t0|s: &mut string::String, $t1|bytes: vector) { + var $t2: string::String + 0: $t2 := string::utf8($t1) + 1: string::append($t0, $t2) + 2: trace_local[s]($t0) + 3: return () +} + + +[variant baseline] +public fun string::from_ascii($t0|s: ascii::String): string::String { + var $t1: vector + var $t2: string::String + 0: $t1 := ascii::into_bytes($t0) + 1: $t2 := pack string::String($t1) + 2: return $t2 +} + + +[variant baseline] +native fun string::internal_check_utf8($t0|v: vector): bool; + + +[variant baseline] +native fun string::internal_index_of($t0|v: vector, $t1|r: vector): u64; + + +[variant baseline] +native fun string::internal_is_char_boundary($t0|v: vector, $t1|i: u64): bool; + + +[variant baseline] +native fun string::internal_sub_string($t0|v: vector, $t1|i: u64, $t2|j: u64): vector; + + +[variant baseline] +public fun string::sub_string($t0|s: string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3: string::String + 0: $t3 := string::substring($t0, $t1, $t2) + 1: return $t3 +} + + +[variant baseline] +public fun string::to_ascii($t0|s: string::String): ascii::String { + var $t1: vector + var $t2: ascii::String + 0: $t1 := unpack string::String($t0) + 1: $t2 := ascii::string($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::try_utf8($t0|bytes: vector): option::Option { + var $t1|tmp#$1: option::Option + var $t2: bool + var $t3: string::String + 0: $t2 := string::internal_check_utf8($t0) + 1: if ($t2) goto 2 else goto 6 + 2: label L1 + 3: $t3 := pack string::String($t0) + 4: $t1 := option::some($t3) + 5: goto 8 + 6: label L0 + 7: $t1 := option::none() + 8: label L2 + 9: return $t1 +} + + +[variant baseline] +public fun string::utf8($t0|bytes: vector): string::String { + var $t1: bool + var $t2: u64 + var $t3: string::String + 0: $t1 := string::internal_check_utf8($t0) + 1: if ($t1) goto 2 else goto 4 + 2: label L1 + 3: goto 7 + 4: label L0 + 5: $t2 := 1 + 6: abort($t2) + 7: label L2 + 8: $t3 := pack string::String($t0) + 9: return $t3 } @@ -925,6 +4439,10 @@ fun vector::borrow_mut[baseline] borrowed_by: Reference($t0) -> {([], Return(0))} borrows_from: Return(0) -> {([], Reference($t0))} +fun option::borrow_mut[baseline] +borrowed_by: Reference($t0) -> {(.vec (vector<#0>)/[], Return(0))} +borrows_from: Return(0) -> {(.vec (vector<#0>)/[], Reference($t0))} + fun Collection::borrow_mut[baseline] borrowed_by: Reference($t0) -> {(.items (vector<#0>)/[], Return(0))} borrows_from: Return(0) -> {(.items (vector<#0>)/[], Reference($t0))} diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.move b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.move index 9aee1d251b47c..a0f97ccdc06d9 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/borrow/hyper_edge.move @@ -1,9 +1,12 @@ +// dep: ../move-stdlib/sources/macros.move +// dep: ../move-stdlib/sources/u64.move +// dep: ../move-stdlib/sources/option.move +// dep: ../move-stdlib/sources/ascii.move +// dep: ../move-stdlib/sources/string.move // dep: ../move-stdlib/sources/vector.move module 0x2::Collection { - use std::vector; - - struct Collection has drop { + public struct Collection has drop { items: vector, owner: address, } @@ -23,10 +26,10 @@ module 0x2::Collection { module 0x2::Test { use 0x2::Collection; - struct Token has drop { value: u64 } + public struct Token has drop { value: u64 } public fun foo(i: u64) { - let c = Collection::make_collection>(); + let mut c = Collection::make_collection>(); let t = Collection::borrow_mut(&mut c, i); t.value = 0; } diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/borrow_strong/basic_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/borrow_strong/basic_test.move index 9b530c7ebec2f..0582dcc24b1c3 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/borrow_strong/basic_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/borrow_strong/basic_test.move @@ -1,11 +1,11 @@ module 0x42::TestBorrow { - struct R has copy, drop { + public struct R has copy, drop { x: u64, y: u64 } fun test1() : R { - let r = R {x: 3, y: 4}; + let mut r = R {x: 3, y: 4}; let r_ref = &mut r; let x_ref = &mut r_ref.x; *x_ref = 0; @@ -22,7 +22,7 @@ module 0x42::TestBorrow { } fun test4() : R { - let r = R {x: 3, y: 4}; + let mut r = R {x: 3, y: 4}; let r_ref = &mut r; test3(r_ref, 0); r @@ -33,7 +33,7 @@ module 0x42::TestBorrow { } fun test6() : R { - let r = R {x: 3, y: 4}; + let mut r = R {x: 3, y: 4}; let r_ref = &mut r; let x_ref = test5(r_ref); test2(x_ref, 0); @@ -41,19 +41,19 @@ module 0x42::TestBorrow { } fun test7(b: bool) { - let r1 = R {x: 3, y: 4}; - let r2 = R {x: 4, y: 5}; - let r_ref = &mut r1; + let mut r1 = R {x: 3, y: 4}; + let mut r2 = R {x: 4, y: 5}; + let mut r_ref = &mut r1; if (b) { r_ref = &mut r2; }; test3(r_ref, 0) } - fun test8(b: bool, n: u64, r_ref: &mut R) { - let r1 = R {x: 3, y: 4}; - let r2 = R {x: 4, y: 5}; - let t_ref = &mut r2; + fun test8(b: bool, mut n: u64, r_ref: &mut R) { + let mut r1 = R {x: 3, y: 4}; + let mut r2 = R {x: 4, y: 5}; + let mut t_ref = &mut r2; while (0 < n) { if (n/2 == 0) { t_ref = &mut r1 @@ -70,7 +70,7 @@ module 0x42::TestBorrow { } fun test9(b : bool, r_ref: &mut R) : &mut u64 { - let r_field = &mut r_ref.x; + let mut r_field = &mut r_ref.x; if(b) { r_field = &mut r_ref.y; }; @@ -79,9 +79,9 @@ module 0x42::TestBorrow { } fun test10(b : bool) : R { - let r = R {x: 3, y: 4}; + let mut r = R {x: 3, y: 4}; let r_ref = &mut r; - let r_field = &mut r_ref.x; + let mut r_field = &mut r_ref.x; if(b) { r_field = test9(b, r_ref); }; diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/eliminate_imm_refs/basic_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/eliminate_imm_refs/basic_test.move index 8dada99bc3612..82065de503a20 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/eliminate_imm_refs/basic_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/eliminate_imm_refs/basic_test.move @@ -1,11 +1,11 @@ module 0x42::TestEliminateImmRefs { - struct R has copy, drop { + public struct R has copy, drop { x: u64 } fun test1() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = &mut r_ref.x; *x_ref = 0; diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_internal_refs.move b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_internal_refs.move index 9d5d2663d9850..15df8e2cbee95 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_internal_refs.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_internal_refs.move @@ -1,6 +1,6 @@ module 0x1::LeakInternalRefs { - struct S { f: u64, g: u64 } + public struct S { f: u64, g: u64 } fun leak_mut_ref(s: &mut S): &mut u64 { &mut s.f @@ -23,7 +23,7 @@ module 0x1::LeakInternalRefs { } fun leak_in_loop(x: &mut u64, s: &mut S): &mut u64 { - let i = 0; + let mut i = 0; while (i < 10) { if (i == 7) { return &mut s.f diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.exp b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.exp index a5e235909a205..30333879c28e8 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.exp +++ b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.exp @@ -1,5 +1,339 @@ ============ initial translation from Move ================ +[variant baseline] +public fun u64::diff($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 14 + 8: label L1 + 9: $t10 := move($t3) + 10: $t11 := move($t4) + 11: $t12 := -($t10, $t11) + 12: $t2 := $t12 + 13: goto 20 + 14: label L0 + 15: $t13 := move($t4) + 16: $t14 := move($t3) + 17: $t15 := -($t13, $t14) + 18: $t2 := $t15 + 19: goto 20 + 20: label L2 + 21: $t16 := move($t2) + 22: return $t16 +} + + +[variant baseline] +public fun u64::divide_and_round_up($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: bool + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := %($t7, $t8) + 7: $t10 := 0 + 8: $t11 := ==($t9, $t10) + 9: if ($t11) goto 10 else goto 16 + 10: label L1 + 11: $t12 := move($t3) + 12: $t13 := move($t4) + 13: $t14 := /($t12, $t13) + 14: $t2 := $t14 + 15: goto 24 + 16: label L0 + 17: $t15 := move($t3) + 18: $t16 := move($t4) + 19: $t17 := /($t15, $t16) + 20: $t18 := 1 + 21: $t19 := +($t17, $t18) + 22: $t2 := $t19 + 23: goto 24 + 24: label L2 + 25: $t20 := move($t2) + 26: return $t20 +} + + +[variant baseline] +public fun u64::max($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::min($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := <($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::pow($t0|base: u64, $t1|exponent: u8): u64 { + var $t2|base#1#1: u64 + var $t3|exponent#1#1: u8 + var $t4|res#1#1: u64 + var $t5: u64 + var $t6: u8 + var $t7: u64 + var $t8: u8 + var $t9: u8 + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: bool + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u8 + var $t20: u8 + var $t21: u8 + var $t22: u64 + var $t23: u64 + var $t24: u64 + var $t25: u8 + var $t26: u8 + var $t27: u8 + var $t28: u64 + 0: $t5 := move($t0) + 1: $t2 := $t5 + 2: $t6 := move($t1) + 3: $t3 := $t6 + 4: $t7 := 1 + 5: $t4 := $t7 + 6: goto 7 + 7: label L5 + 8: $t8 := copy($t3) + 9: $t9 := 1 + 10: $t10 := >=($t8, $t9) + 11: if ($t10) goto 12 else goto 41 + 12: label L1 + 13: goto 14 + 14: label L2 + 15: $t11 := copy($t3) + 16: $t12 := 2 + 17: $t13 := %($t11, $t12) + 18: $t14 := 0 + 19: $t15 := ==($t13, $t14) + 20: if ($t15) goto 21 else goto 31 + 21: label L4 + 22: $t16 := copy($t2) + 23: $t17 := move($t2) + 24: $t18 := *($t16, $t17) + 25: $t2 := $t18 + 26: $t19 := move($t3) + 27: $t20 := 2 + 28: $t21 := /($t19, $t20) + 29: $t3 := $t21 + 30: goto 7 + 31: label L3 + 32: $t22 := move($t4) + 33: $t23 := copy($t2) + 34: $t24 := *($t22, $t23) + 35: $t4 := $t24 + 36: $t25 := move($t3) + 37: $t26 := 1 + 38: $t27 := -($t25, $t26) + 39: $t3 := $t27 + 40: goto 7 + 41: label L0 + 42: $t28 := move($t4) + 43: return $t28 +} + + +[variant baseline] +public fun u64::sqrt($t0|x: u64): u64 { + var $t1|bit#1#1: u128 + var $t2|res#1#1: u128 + var $t3|x#1#1: u64 + var $t4|x#2#1: u128 + var $t5: u64 + var $t6: u128 + var $t7: u128 + var $t8: u64 + var $t9: u128 + var $t10: u128 + var $t11: u128 + var $t12: bool + var $t13: u128 + var $t14: u128 + var $t15: u128 + var $t16: u128 + var $t17: bool + var $t18: u128 + var $t19: u128 + var $t20: u128 + var $t21: u128 + var $t22: u128 + var $t23: u128 + var $t24: u8 + var $t25: u128 + var $t26: u128 + var $t27: u128 + var $t28: u128 + var $t29: u8 + var $t30: u128 + var $t31: u128 + var $t32: u8 + var $t33: u128 + var $t34: u128 + var $t35: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := 18446744073709551616 + 3: $t1 := $t6 + 4: $t7 := 0 + 5: $t2 := $t7 + 6: $t8 := move($t3) + 7: $t9 := (u128)($t8) + 8: $t4 := $t9 + 9: goto 10 + 10: label L6 + 11: $t10 := copy($t1) + 12: $t11 := 0 + 13: $t12 := !=($t10, $t11) + 14: if ($t12) goto 15 else goto 50 + 15: label L1 + 16: goto 17 + 17: label L2 + 18: $t13 := copy($t4) + 19: $t14 := copy($t2) + 20: $t15 := copy($t1) + 21: $t16 := +($t14, $t15) + 22: $t17 := >=($t13, $t16) + 23: if ($t17) goto 24 else goto 38 + 24: label L4 + 25: $t18 := move($t4) + 26: $t19 := copy($t2) + 27: $t20 := copy($t1) + 28: $t21 := +($t19, $t20) + 29: $t22 := -($t18, $t21) + 30: $t4 := $t22 + 31: $t23 := move($t2) + 32: $t24 := 1 + 33: $t25 := >>($t23, $t24) + 34: $t26 := copy($t1) + 35: $t27 := +($t25, $t26) + 36: $t2 := $t27 + 37: goto 44 + 38: label L3 + 39: $t28 := move($t2) + 40: $t29 := 1 + 41: $t30 := >>($t28, $t29) + 42: $t2 := $t30 + 43: goto 44 + 44: label L5 + 45: $t31 := move($t1) + 46: $t32 := 2 + 47: $t33 := >>($t31, $t32) + 48: $t1 := $t33 + 49: goto 10 + 50: label L0 + 51: $t34 := move($t2) + 52: $t35 := (u64)($t34) + 53: return $t35 +} + + [variant baseline] public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { var $t2: &mut vector<#0> @@ -231,27 +565,25 @@ public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { 15: $t13 := move($t1) 16: vector::push_back<#0>($t12, $t13) 17: goto 18 - 18: label L5 + 18: label L4 19: $t14 := copy($t2) 20: $t15 := copy($t3) 21: $t16 := <($t14, $t15) - 22: if ($t16) goto 23 else goto 35 + 22: if ($t16) goto 23 else goto 33 23: label L3 - 24: goto 25 - 25: label L4 - 26: $t17 := copy($t0) - 27: $t18 := copy($t2) - 28: $t19 := copy($t3) - 29: vector::swap<#0>($t17, $t18, $t19) - 30: $t20 := move($t2) - 31: $t21 := 1 - 32: $t22 := +($t20, $t21) - 33: $t2 := $t22 - 34: goto 18 - 35: label L2 - 36: $t23 := move($t0) - 37: destroy($t23) - 38: return () + 24: $t17 := copy($t0) + 25: $t18 := copy($t2) + 26: $t19 := copy($t3) + 27: vector::swap<#0>($t17, $t18, $t19) + 28: $t20 := move($t2) + 29: $t21 := 1 + 30: $t22 := +($t20, $t21) + 31: $t2 := $t22 + 32: goto 18 + 33: label L2 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: return () } @@ -329,31 +661,29 @@ public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { 16: $t15 := -($t13, $t14) 17: $t4 := $t15 18: goto 19 - 19: label L5 + 19: label L4 20: $t16 := copy($t1) 21: $t17 := copy($t4) 22: $t18 := <($t16, $t17) - 23: if ($t18) goto 24 else goto 40 + 23: if ($t18) goto 24 else goto 38 24: label L3 - 25: goto 26 - 26: label L4 - 27: $t19 := copy($t0) - 28: $t3 := $t19 - 29: $t20 := copy($t1) - 30: $t2 := $t20 - 31: $t21 := move($t1) - 32: $t22 := 1 - 33: $t23 := +($t21, $t22) - 34: $t1 := $t23 - 35: $t24 := move($t3) - 36: $t25 := move($t2) - 37: $t26 := copy($t1) - 38: vector::swap<#0>($t24, $t25, $t26) - 39: goto 19 - 40: label L2 - 41: $t27 := move($t0) - 42: $t28 := vector::pop_back<#0>($t27) - 43: return $t28 + 25: $t19 := copy($t0) + 26: $t3 := $t19 + 27: $t20 := copy($t1) + 28: $t2 := $t20 + 29: $t21 := move($t1) + 30: $t22 := 1 + 31: $t23 := +($t21, $t22) + 32: $t1 := $t23 + 33: $t24 := move($t3) + 34: $t25 := move($t2) + 35: $t26 := copy($t1) + 36: vector::swap<#0>($t24, $t25, $t26) + 37: goto 19 + 38: label L2 + 39: $t27 := move($t0) + 40: $t28 := vector::pop_back<#0>($t27) + 41: return $t28 } @@ -406,31 +736,29 @@ public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { 17: $t14 := -($t12, $t13) 18: $t1 := $t14 19: goto 20 - 20: label L5 + 20: label L4 21: $t15 := copy($t2) 22: $t16 := copy($t1) 23: $t17 := <($t15, $t16) - 24: if ($t17) goto 25 else goto 41 + 24: if ($t17) goto 25 else goto 39 25: label L3 - 26: goto 27 - 27: label L4 - 28: $t18 := copy($t0) - 29: $t19 := copy($t2) - 30: $t20 := copy($t1) - 31: vector::swap<#0>($t18, $t19, $t20) - 32: $t21 := move($t2) - 33: $t22 := 1 - 34: $t23 := +($t21, $t22) - 35: $t2 := $t23 - 36: $t24 := move($t1) - 37: $t25 := 1 - 38: $t26 := -($t24, $t25) - 39: $t1 := $t26 - 40: goto 20 - 41: label L2 - 42: $t27 := move($t0) - 43: destroy($t27) - 44: return () + 26: $t18 := copy($t0) + 27: $t19 := copy($t2) + 28: $t20 := copy($t1) + 29: vector::swap<#0>($t18, $t19, $t20) + 30: $t21 := move($t2) + 31: $t22 := 1 + 32: $t23 := +($t21, $t22) + 33: $t2 := $t23 + 34: $t24 := move($t1) + 35: $t25 := 1 + 36: $t26 := -($t24, $t25) + 37: $t1 := $t26 + 38: goto 20 + 39: label L2 + 40: $t27 := move($t0) + 41: destroy($t27) + 42: return () } @@ -526,530 +854,4518 @@ fun ReturnRefsIntoVec::return_vec_index_mut($t0|v: &mut vector): &mut u64 { 3: return $t3 } -============ after pipeline `escape_analysis` ================ [variant baseline] -public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { - var $t2: &mut vector<#0> - var $t3: &vector<#0> - var $t4: bool - var $t5: bool - var $t6: &mut vector<#0> - var $t7: &mut vector<#0> - var $t8: #0 - var $t9: &mut vector<#0> - var $t10: vector<#0> - 0: $t2 := borrow_local($t1) - 1: vector::reverse<#0>($t2) - 2: goto 3 - 3: label L3 - 4: $t3 := borrow_local($t1) - 5: $t4 := vector::is_empty<#0>($t3) - 6: $t5 := !($t4) - 7: if ($t5) goto 8 else goto 16 - 8: label L1 - 9: goto 10 +public fun option::borrow<#0>($t0|t: &option::Option<#0>): � { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: &option::Option<#0> + var $t4: u64 + var $t5: &option::Option<#0> + var $t6: &vector<#0> + var $t7: u64 + var $t8: � + 0: $t1 := copy($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 10 + 5: label L0 + 6: $t3 := move($t0) + 7: destroy($t3) + 8: $t4 := 262145 + 9: abort($t4) 10: label L2 - 11: $t6 := copy($t0) - 12: $t7 := borrow_local($t1) - 13: $t8 := vector::pop_back<#0>($t7) - 14: vector::push_back<#0>($t6, $t8) - 15: goto 3 - 16: label L0 - 17: $t9 := move($t0) - 18: destroy($t9) - 19: $t10 := move($t1) - 20: vector::destroy_empty<#0>($t10) - 21: return () + 11: $t5 := move($t0) + 12: $t6 := borrow_field>.vec($t5) + 13: $t7 := 0 + 14: $t8 := vector::borrow<#0>($t6, $t7) + 15: return $t8 } [variant baseline] -public native fun vector::borrow<#0>($t0|v: &vector<#0>, $t1|i: u64): � +public fun option::borrow_mut<#0>($t0|t: &mut option::Option<#0>): &mut #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: u64 + var $t9: &mut #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := 0 + 15: $t9 := vector::borrow_mut<#0>($t7, $t8) + 16: return $t9 +} [variant baseline] -public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0; +public fun option::contains<#0>($t0|t: &option::Option<#0>, $t1|e_ref: �): bool { + var $t2: &option::Option<#0> + var $t3: &vector<#0> + var $t4: � + var $t5: bool + 0: $t2 := move($t0) + 1: $t3 := borrow_field>.vec($t2) + 2: $t4 := move($t1) + 3: $t5 := vector::contains<#0>($t3, $t4) + 4: return $t5 +} [variant baseline] -public fun vector::contains<#0>($t0|v: &vector<#0>, $t1|e: �): bool { - var $t2|i#1#0: u64 - var $t3|len#1#0: u64 - var $t4: u64 - var $t5: &vector<#0> - var $t6: u64 - var $t7: u64 +public fun option::swap<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): #0 { + var $t2|old_value#1#0: #0 + var $t3|vec_ref#1#0: &mut vector<#0> + var $t4: &mut option::Option<#0> + var $t5: &option::Option<#0> + var $t6: bool + var $t7: &mut option::Option<#0> var $t8: u64 - var $t9: bool - var $t10: &vector<#0> - var $t11: u64 - var $t12: � + var $t9: &mut option::Option<#0> + var $t10: &mut vector<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: &mut vector<#0> + var $t14: #0 + var $t15: #0 + 0: $t4 := copy($t0) + 1: $t5 := freeze_ref($t4) + 2: $t6 := option::is_some<#0>($t5) + 3: if ($t6) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t7 := move($t0) + 8: destroy($t7) + 9: $t8 := 262145 + 10: abort($t8) + 11: label L2 + 12: $t9 := move($t0) + 13: $t10 := borrow_field>.vec($t9) + 14: $t3 := $t10 + 15: $t11 := copy($t3) + 16: $t12 := vector::pop_back<#0>($t11) + 17: $t2 := $t12 + 18: $t13 := move($t3) + 19: $t14 := move($t1) + 20: vector::push_back<#0>($t13, $t14) + 21: $t15 := move($t2) + 22: return $t15 +} + + +[variant baseline] +public fun option::borrow_with_default<#0>($t0|t: &option::Option<#0>, $t1|default_ref: �): � { + var $t2|tmp#$2: � + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: � + var $t10: � + var $t11: &vector<#0> + var $t12: u64 var $t13: � - var $t14: bool - var $t15: &vector<#0> - var $t16: � - var $t17: bool - var $t18: u64 - var $t19: u64 - var $t20: u64 - var $t21: &vector<#0> - var $t22: � - var $t23: bool - 0: $t4 := 0 - 1: $t2 := $t4 - 2: $t5 := copy($t0) - 3: $t6 := vector::length<#0>($t5) - 4: $t3 := $t6 - 5: goto 6 - 6: label L5 - 7: $t7 := copy($t2) - 8: $t8 := copy($t3) - 9: $t9 := <($t7, $t8) - 10: if ($t9) goto 11 else goto 33 - 11: label L1 - 12: goto 13 - 13: label L2 - 14: $t10 := copy($t0) - 15: $t11 := copy($t2) - 16: $t12 := vector::borrow<#0>($t10, $t11) - 17: $t13 := copy($t1) - 18: $t14 := ==($t12, $t13) - 19: if ($t14) goto 20 else goto 27 - 20: label L4 - 21: $t15 := move($t0) - 22: destroy($t15) - 23: $t16 := move($t1) - 24: destroy($t16) - 25: $t17 := true - 26: return $t17 - 27: label L3 - 28: $t18 := move($t2) - 29: $t19 := 1 - 30: $t20 := +($t18, $t19) - 31: $t2 := $t20 - 32: goto 6 - 33: label L0 - 34: $t21 := move($t0) - 35: destroy($t21) - 36: $t22 := move($t1) - 37: destroy($t22) - 38: $t23 := false - 39: return $t23 + var $t14: � + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 20 + 12: label L0 + 13: $t10 := move($t1) + 14: destroy($t10) + 15: $t11 := move($t3) + 16: $t12 := 0 + 17: $t13 := vector::borrow<#0>($t11, $t12) + 18: $t2 := $t13 + 19: goto 20 + 20: label L2 + 21: $t14 := move($t2) + 22: return $t14 } [variant baseline] -public native fun vector::destroy_empty<#0>($t0|v: vector<#0>); +public fun option::destroy_none<#0>($t0|t: option::Option<#0>) { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: option::Option<#0> + var $t5: vector<#0> + 0: $t1 := borrow_local($t0) + 1: $t2 := option::is_none<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 262144 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := unpack option::Option<#0>($t4) + 11: vector::destroy_empty<#0>($t5) + 12: return () +} [variant baseline] -public native fun vector::empty<#0>(): vector<#0>; +public fun option::destroy_some<#0>($t0|t: option::Option<#0>): #0 { + var $t1|elem#1#0: #0 + var $t2|vec#1#0: vector<#0> + var $t3: &option::Option<#0> + var $t4: bool + var $t5: u64 + var $t6: option::Option<#0> + var $t7: vector<#0> + var $t8: &mut vector<#0> + var $t9: #0 + var $t10: vector<#0> + var $t11: #0 + 0: $t3 := borrow_local($t0) + 1: $t4 := option::is_some<#0>($t3) + 2: if ($t4) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t5 := 262145 + 7: abort($t5) + 8: label L2 + 9: $t6 := move($t0) + 10: $t7 := unpack option::Option<#0>($t6) + 11: $t2 := $t7 + 12: $t8 := borrow_local($t2) + 13: $t9 := vector::pop_back<#0>($t8) + 14: $t1 := $t9 + 15: $t10 := move($t2) + 16: vector::destroy_empty<#0>($t10) + 17: $t11 := move($t1) + 18: return $t11 +} [variant baseline] -public fun vector::index_of<#0>($t0|v: &vector<#0>, $t1|e: �): (bool, u64) { - var $t2|i#1#0: u64 - var $t3|len#1#0: u64 - var $t4: u64 +public fun option::destroy_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec#1#0: vector<#0> + var $t4: option::Option<#0> + var $t5: vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: #0 + var $t9: &mut vector<#0> + var $t10: #0 + var $t11: #0 + 0: $t4 := move($t0) + 1: $t5 := unpack option::Option<#0>($t4) + 2: $t3 := $t5 + 3: $t6 := borrow_local($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 10 + 6: label L1 + 7: $t8 := move($t1) + 8: $t2 := $t8 + 9: goto 15 + 10: label L0 + 11: $t9 := borrow_local($t3) + 12: $t10 := vector::pop_back<#0>($t9) + 13: $t2 := $t10 + 14: goto 15 + 15: label L2 + 16: $t11 := move($t2) + 17: return $t11 +} + + +[variant baseline] +public fun option::extract<#0>($t0|t: &mut option::Option<#0>): #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := vector::pop_back<#0>($t7) + 15: return $t8 +} + + +[variant baseline] +public fun option::fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0) { + var $t2|vec_ref#1#0: &mut vector<#0> + var $t3: &mut option::Option<#0> + var $t4: &mut vector<#0> + var $t5: &mut vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &mut vector<#0> + var $t9: u64 + var $t10: &mut vector<#0> + var $t11: #0 + 0: $t3 := move($t0) + 1: $t4 := borrow_field>.vec($t3) + 2: $t2 := $t4 + 3: $t5 := copy($t2) + 4: $t6 := freeze_ref($t5) + 5: $t7 := vector::is_empty<#0>($t6) + 6: if ($t7) goto 7 else goto 9 + 7: label L1 + 8: goto 14 + 9: label L0 + 10: $t8 := move($t2) + 11: destroy($t8) + 12: $t9 := 262144 + 13: abort($t9) + 14: label L2 + 15: $t10 := move($t2) + 16: $t11 := move($t1) + 17: vector::push_back<#0>($t10, $t11) + 18: return () +} + + +[variant baseline] +public fun option::get_with_default<#0>($t0|t: &option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: #0 + var $t10: &vector<#0> + var $t11: u64 + var $t12: � + var $t13: #0 + var $t14: #0 + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 19 + 12: label L0 + 13: $t10 := move($t3) + 14: $t11 := 0 + 15: $t12 := vector::borrow<#0>($t10, $t11) + 16: $t13 := read_ref($t12) + 17: $t2 := $t13 + 18: goto 19 + 19: label L2 + 20: $t14 := move($t2) + 21: return $t14 +} + + +[variant baseline] +public fun option::is_none<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::is_some<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + var $t4: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: $t4 := !($t3) + 4: return $t4 +} + + +[variant baseline] +public fun option::none<#0>(): option::Option<#0> { + var $t0: vector<#0> + var $t1: option::Option<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := pack option::Option<#0>($t0) + 2: return $t1 +} + + +[variant baseline] +public fun option::some<#0>($t0|e: #0): option::Option<#0> { + var $t1: #0 + var $t2: vector<#0> + var $t3: option::Option<#0> + 0: $t1 := move($t0) + 1: $t2 := vector::singleton<#0>($t1) + 2: $t3 := pack option::Option<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::swap_or_fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): option::Option<#0> { + var $t2|tmp#$2: option::Option<#0> + var $t3|old_value#1#0: option::Option<#0> + var $t4|vec_ref#1#0: &mut vector<#0> + var $t5: &mut option::Option<#0> + var $t6: &mut vector<#0> + var $t7: &mut vector<#0> + var $t8: &vector<#0> + var $t9: bool + var $t10: option::Option<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: option::Option<#0> + var $t14: option::Option<#0> + var $t15: &mut vector<#0> + var $t16: #0 + var $t17: option::Option<#0> + 0: $t5 := move($t0) + 1: $t6 := borrow_field>.vec($t5) + 2: $t4 := $t6 + 3: $t7 := copy($t4) + 4: $t8 := freeze_ref($t7) + 5: $t9 := vector::is_empty<#0>($t8) + 6: if ($t9) goto 7 else goto 11 + 7: label L1 + 8: $t10 := option::none<#0>() + 9: $t2 := $t10 + 10: goto 17 + 11: label L0 + 12: $t11 := copy($t4) + 13: $t12 := vector::pop_back<#0>($t11) + 14: $t13 := option::some<#0>($t12) + 15: $t2 := $t13 + 16: goto 17 + 17: label L2 + 18: $t14 := move($t2) + 19: $t3 := $t14 + 20: $t15 := move($t4) + 21: $t16 := move($t1) + 22: vector::push_back<#0>($t15, $t16) + 23: $t17 := move($t3) + 24: return $t17 +} + + +[variant baseline] +public fun option::to_vec<#0>($t0|t: option::Option<#0>): vector<#0> { + var $t1: option::Option<#0> + var $t2: vector<#0> + 0: $t1 := move($t0) + 1: $t2 := unpack option::Option<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::append($t0|string: &mut ascii::String, $t1|other: ascii::String) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: ascii::String + var $t5: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := ascii::into_bytes($t4) + 4: vector::append($t3, $t5) + 5: return () +} + + +[variant baseline] +public fun ascii::index_of($t0|string: &ascii::String, $t1|substr: &ascii::String): u64 { + var $t2|tmp#$2: bool + var $t3|i#1#0: u64 + var $t4|j#1#0: u64 + var $t5|m#1#0: u64 + var $t6|n#1#0: u64 + var $t7: u64 + var $t8: &ascii::String + var $t9: u64 + var $t10: &ascii::String + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: bool + var $t15: &ascii::String + var $t16: &ascii::String + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: u64 + var $t22: bool + var $t23: u64 + var $t24: u64 + var $t25: u64 + var $t26: bool + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: u64 + var $t31: u64 + var $t32: &u8 + var $t33: u8 + var $t34: &ascii::String + var $t35: &vector + var $t36: u64 + var $t37: &u8 + var $t38: u8 + var $t39: bool + var $t40: bool + var $t41: bool + var $t42: u64 + var $t43: u64 + var $t44: u64 + var $t45: u64 + var $t46: u64 + var $t47: bool + var $t48: &ascii::String + var $t49: &ascii::String + var $t50: u64 + var $t51: u64 + var $t52: u64 + var $t53: u64 + var $t54: &ascii::String + var $t55: &ascii::String + var $t56: u64 + 0: $t7 := 0 + 1: $t3 := $t7 + 2: $t8 := copy($t0) + 3: $t9 := ascii::length($t8) + 4: $t10 := copy($t1) + 5: $t11 := ascii::length($t10) + 6: $t5 := $t11 + 7: $t6 := $t9 + 8: $t12 := copy($t6) + 9: $t13 := copy($t5) + 10: $t14 := <($t12, $t13) + 11: if ($t14) goto 12 else goto 19 + 12: label L1 + 13: $t15 := move($t1) + 14: destroy($t15) + 15: $t16 := move($t0) + 16: destroy($t16) + 17: $t17 := move($t6) + 18: return $t17 + 19: label L0 + 20: $t18 := copy($t3) + 21: $t19 := copy($t6) + 22: $t20 := copy($t5) + 23: $t21 := -($t19, $t20) + 24: $t22 := <=($t18, $t21) + 25: if ($t22) goto 26 else goto 84 + 26: label L3 + 27: $t23 := 0 + 28: $t4 := $t23 + 29: goto 30 + 30: label L10 + 31: $t24 := copy($t4) + 32: $t25 := copy($t5) + 33: $t26 := <($t24, $t25) + 34: if ($t26) goto 35 else goto 53 + 35: label L5 + 36: goto 37 + 37: label L6 + 38: $t27 := copy($t0) + 39: $t28 := borrow_field.bytes($t27) + 40: $t29 := copy($t3) + 41: $t30 := copy($t4) + 42: $t31 := +($t29, $t30) + 43: $t32 := vector::borrow($t28, $t31) + 44: $t33 := read_ref($t32) + 45: $t34 := copy($t1) + 46: $t35 := borrow_field.bytes($t34) + 47: $t36 := copy($t4) + 48: $t37 := vector::borrow($t35, $t36) + 49: $t38 := read_ref($t37) + 50: $t39 := ==($t33, $t38) + 51: $t2 := $t39 + 52: goto 57 + 53: label L4 + 54: $t40 := false + 55: $t2 := $t40 + 56: goto 57 + 57: label L7 + 58: $t41 := move($t2) + 59: if ($t41) goto 60 else goto 66 + 60: label L9 + 61: $t42 := move($t4) + 62: $t43 := 1 + 63: $t44 := +($t42, $t43) + 64: $t4 := $t44 + 65: goto 30 + 66: label L8 + 67: $t45 := move($t4) + 68: $t46 := copy($t5) + 69: $t47 := ==($t45, $t46) + 70: if ($t47) goto 71 else goto 78 + 71: label L12 + 72: $t48 := move($t1) + 73: destroy($t48) + 74: $t49 := move($t0) + 75: destroy($t49) + 76: $t50 := move($t3) + 77: return $t50 + 78: label L11 + 79: $t51 := move($t3) + 80: $t52 := 1 + 81: $t53 := +($t51, $t52) + 82: $t3 := $t53 + 83: goto 19 + 84: label L2 + 85: $t54 := move($t1) + 86: destroy($t54) + 87: $t55 := move($t0) + 88: destroy($t55) + 89: $t56 := move($t6) + 90: return $t56 +} + + +[variant baseline] +public fun ascii::insert($t0|s: &mut ascii::String, $t1|at: u64, $t2|o: ascii::String) { + var $t3|e#1#2: u8 + var $t4|v#1#1: vector + var $t5: u64 + var $t6: &mut ascii::String + var $t7: &ascii::String + var $t8: u64 + var $t9: bool + var $t10: &mut ascii::String + var $t11: u64 + var $t12: ascii::String + var $t13: vector + var $t14: &vector + var $t15: bool + var $t16: bool + var $t17: &mut vector + var $t18: u8 + var $t19: &mut ascii::String + var $t20: &mut vector + var $t21: u8 + var $t22: u64 + var $t23: &mut ascii::String + var $t24: vector + 0: $t5 := copy($t1) + 1: $t6 := copy($t0) + 2: $t7 := freeze_ref($t6) + 3: $t8 := ascii::length($t7) + 4: $t9 := <=($t5, $t8) + 5: if ($t9) goto 6 else goto 8 + 6: label L1 + 7: goto 13 + 8: label L0 + 9: $t10 := move($t0) + 10: destroy($t10) + 11: $t11 := 65537 + 12: abort($t11) + 13: label L2 + 14: $t12 := move($t2) + 15: $t13 := ascii::into_bytes($t12) + 16: $t4 := $t13 + 17: goto 18 + 18: label L5 + 19: $t14 := borrow_local($t4) + 20: $t15 := vector::is_empty($t14) + 21: $t16 := !($t15) + 22: if ($t16) goto 23 else goto 33 + 23: label L4 + 24: $t17 := borrow_local($t4) + 25: $t18 := vector::pop_back($t17) + 26: $t3 := $t18 + 27: $t19 := copy($t0) + 28: $t20 := borrow_field.bytes($t19) + 29: $t21 := move($t3) + 30: $t22 := copy($t1) + 31: vector::insert($t20, $t21, $t22) + 32: goto 18 + 33: label L3 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: $t24 := move($t4) + 37: vector::destroy_empty($t24) + 38: return () +} + + +[variant baseline] +public fun ascii::is_empty($t0|string: &ascii::String): bool { + var $t1: &ascii::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::length($t0|string: &ascii::String): u64 { + var $t1: &ascii::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := ascii::as_bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::all_characters_printable($t0|string: &ascii::String): bool { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|i#1#12: u64 + var $t4|i#1#9: u64 + var $t5|stop#1#9: u64 + var $t6|v#1#3: &vector + var $t7: &ascii::String + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + 0: $t7 := move($t0) + 1: $t8 := borrow_field.bytes($t7) + 2: $t6 := $t8 + 3: $t9 := copy($t6) + 4: $t10 := vector::length($t9) + 5: $t1 := $t10 + 6: $t11 := 0 + 7: $t4 := $t11 + 8: $t12 := move($t1) + 9: $t5 := $t12 + 10: goto 11 + 11: label L5 + 12: $t13 := copy($t4) + 13: $t14 := copy($t5) + 14: $t15 := <($t13, $t14) + 15: if ($t15) goto 16 else goto 38 + 16: label L1 + 17: $t16 := copy($t4) + 18: $t3 := $t16 + 19: $t17 := copy($t6) + 20: $t18 := move($t3) + 21: $t19 := vector::borrow($t17, $t18) + 22: $t20 := read_ref($t19) + 23: $t21 := ascii::is_printable_char($t20) + 24: $t22 := !($t21) + 25: if ($t22) goto 26 else goto 32 + 26: label L3 + 27: $t23 := move($t6) + 28: destroy($t23) + 29: $t24 := false + 30: $t2 := $t24 + 31: goto 44 + 32: label L2 + 33: $t25 := move($t4) + 34: $t26 := 1 + 35: $t27 := +($t25, $t26) + 36: $t4 := $t27 + 37: goto 11 + 38: label L0 + 39: $t28 := move($t6) + 40: destroy($t28) + 41: $t29 := true + 42: $t2 := $t29 + 43: goto 44 + 44: label L4 + 45: $t30 := move($t2) + 46: return $t30 +} + + +[variant baseline] +public fun ascii::string($t0|bytes: vector): ascii::String { + var $t1|x#1#0: option::Option + var $t2: vector + var $t3: option::Option + var $t4: &option::Option + var $t5: bool + var $t6: u64 + var $t7: option::Option + var $t8: ascii::String + 0: $t2 := move($t0) + 1: $t3 := ascii::try_string($t2) + 2: $t1 := $t3 + 3: $t4 := borrow_local($t1) + 4: $t5 := option::is_some($t4) + 5: if ($t5) goto 6 else goto 8 + 6: label L1 + 7: goto 11 + 8: label L0 + 9: $t6 := 65536 + 10: abort($t6) + 11: label L2 + 12: $t7 := move($t1) + 13: $t8 := option::destroy_some($t7) + 14: return $t8 +} + + +[variant baseline] +public fun ascii::as_bytes($t0|string: &ascii::String): &vector { + var $t1: &ascii::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::byte($t0|char: ascii::Char): u8 { + var $t1: ascii::Char + var $t2: u8 + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::Char($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::char($t0|byte: u8): ascii::Char { + var $t1: u8 + var $t2: bool + var $t3: u64 + var $t4: u8 + var $t5: ascii::Char + 0: $t1 := copy($t0) + 1: $t2 := ascii::is_valid_char($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 65536 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack ascii::Char($t4) + 11: return $t5 +} + + +[variant baseline] +fun ascii::char_to_lowercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 65 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 90 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := +($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +fun ascii::char_to_uppercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 97 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 122 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := -($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +public fun ascii::into_bytes($t0|string: ascii::String): vector { + var $t1: ascii::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::is_printable_char($t0|byte: u8): bool { + var $t1|tmp#$1: bool + var $t2: u8 + var $t3: u8 + var $t4: bool + var $t5: u8 + var $t6: u8 + var $t7: bool + var $t8: bool + var $t9: bool + 0: $t2 := copy($t0) + 1: $t3 := 32 + 2: $t4 := >=($t2, $t3) + 3: if ($t4) goto 4 else goto 10 + 4: label L1 + 5: $t5 := move($t0) + 6: $t6 := 126 + 7: $t7 := <=($t5, $t6) + 8: $t1 := $t7 + 9: goto 14 + 10: label L0 + 11: $t8 := false + 12: $t1 := $t8 + 13: goto 14 + 14: label L2 + 15: $t9 := move($t1) + 16: return $t9 +} + + +[variant baseline] +public fun ascii::is_valid_char($t0|b: u8): bool { + var $t1: u8 + var $t2: u8 + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := 127 + 2: $t3 := <=($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::pop_char($t0|string: &mut ascii::String): ascii::Char { + var $t1: &mut ascii::String + var $t2: &mut vector + var $t3: u8 + var $t4: ascii::Char + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::pop_back($t2) + 3: $t4 := pack ascii::Char($t3) + 4: return $t4 +} + + +[variant baseline] +public fun ascii::push_char($t0|string: &mut ascii::String, $t1|char: ascii::Char) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: &ascii::Char + var $t5: &u8 + var $t6: u8 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.byte($t4) + 4: $t6 := read_ref($t5) + 5: vector::push_back($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun ascii::substring($t0|string: &ascii::String, $t1|i: u64, $t2|j: u64): ascii::String { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|i#1#3: u64 + var $t6|i#1#6: u64 + var $t7|stop#1#3: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: &ascii::String + var $t13: u64 + var $t14: bool + var $t15: bool + var $t16: bool + var $t17: &ascii::String + var $t18: u64 + var $t19: vector + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: u64 + var $t24: bool + var $t25: u64 + var $t26: &mut vector + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: &u8 + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &ascii::String + var $t36: vector + var $t37: ascii::String + 0: $t8 := copy($t1) + 1: $t9 := copy($t2) + 2: $t10 := <=($t8, $t9) + 3: if ($t10) goto 4 else goto 11 + 4: label L1 + 5: $t11 := copy($t2) + 6: $t12 := copy($t0) + 7: $t13 := ascii::length($t12) + 8: $t14 := <=($t11, $t13) + 9: $t3 := $t14 + 10: goto 15 + 11: label L0 + 12: $t15 := false + 13: $t3 := $t15 + 14: goto 15 + 15: label L2 + 16: $t16 := move($t3) + 17: if ($t16) goto 18 else goto 20 + 18: label L4 + 19: goto 25 + 20: label L3 + 21: $t17 := move($t0) + 22: destroy($t17) + 23: $t18 := 65537 + 24: abort($t18) + 25: label L5 + 26: $t19 := [] + 27: $t4 := $t19 + 28: $t20 := move($t1) + 29: $t5 := $t20 + 30: $t21 := move($t2) + 31: $t7 := $t21 + 32: goto 33 + 33: label L8 + 34: $t22 := copy($t5) + 35: $t23 := copy($t7) + 36: $t24 := <($t22, $t23) + 37: if ($t24) goto 38 else goto 53 + 38: label L7 + 39: $t25 := copy($t5) + 40: $t6 := $t25 + 41: $t26 := borrow_local($t4) + 42: $t27 := copy($t0) + 43: $t28 := borrow_field.bytes($t27) + 44: $t29 := move($t6) + 45: $t30 := vector::borrow($t28, $t29) + 46: $t31 := read_ref($t30) + 47: vector::push_back($t26, $t31) + 48: $t32 := move($t5) + 49: $t33 := 1 + 50: $t34 := +($t32, $t33) + 51: $t5 := $t34 + 52: goto 33 + 53: label L6 + 54: $t35 := move($t0) + 55: destroy($t35) + 56: $t36 := move($t4) + 57: $t37 := pack ascii::String($t36) + 58: return $t37 +} + + +[variant baseline] +public fun ascii::to_lowercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_lowercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} + + +[variant baseline] +public fun ascii::to_uppercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_uppercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} + + +[variant baseline] +public fun ascii::try_string($t0|bytes: vector): option::Option { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|tmp#$3: option::Option + var $t4|i#1#12: u64 + var $t5|i#1#9: u64 + var $t6|stop#1#9: u64 + var $t7|v#1#3: &vector + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + var $t31: vector + var $t32: ascii::String + var $t33: option::Option + var $t34: option::Option + var $t35: option::Option + 0: $t8 := borrow_local($t0) + 1: $t7 := $t8 + 2: $t9 := copy($t7) + 3: $t10 := vector::length($t9) + 4: $t1 := $t10 + 5: $t11 := 0 + 6: $t5 := $t11 + 7: $t12 := move($t1) + 8: $t6 := $t12 + 9: goto 10 + 10: label L5 + 11: $t13 := copy($t5) + 12: $t14 := copy($t6) + 13: $t15 := <($t13, $t14) + 14: if ($t15) goto 15 else goto 37 + 15: label L1 + 16: $t16 := copy($t5) + 17: $t4 := $t16 + 18: $t17 := copy($t7) + 19: $t18 := move($t4) + 20: $t19 := vector::borrow($t17, $t18) + 21: $t20 := read_ref($t19) + 22: $t21 := ascii::is_valid_char($t20) + 23: $t22 := !($t21) + 24: if ($t22) goto 25 else goto 31 + 25: label L3 + 26: $t23 := move($t7) + 27: destroy($t23) + 28: $t24 := false + 29: $t2 := $t24 + 30: goto 43 + 31: label L2 + 32: $t25 := move($t5) + 33: $t26 := 1 + 34: $t27 := +($t25, $t26) + 35: $t5 := $t27 + 36: goto 10 + 37: label L0 + 38: $t28 := move($t7) + 39: destroy($t28) + 40: $t29 := true + 41: $t2 := $t29 + 42: goto 43 + 43: label L4 + 44: $t30 := move($t2) + 45: if ($t30) goto 46 else goto 52 + 46: label L7 + 47: $t31 := move($t0) + 48: $t32 := pack ascii::String($t31) + 49: $t33 := option::some($t32) + 50: $t3 := $t33 + 51: goto 56 + 52: label L6 + 53: $t34 := option::none() + 54: $t3 := $t34 + 55: goto 56 + 56: label L8 + 57: $t35 := move($t3) + 58: return $t35 +} + + +[variant baseline] +public fun string::append($t0|s: &mut string::String, $t1|r: string::String) { + var $t2: &mut string::String + var $t3: &mut vector + var $t4: &string::String + var $t5: &vector + var $t6: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := read_ref($t5) + 5: vector::append($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun string::index_of($t0|s: &string::String, $t1|r: &string::String): u64 { + var $t2: &string::String + var $t3: &vector + var $t4: &string::String + var $t5: &vector + var $t6: u64 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := string::internal_index_of($t3, $t5) + 5: return $t6 +} + + +[variant baseline] +public fun string::insert($t0|s: &mut string::String, $t1|at: u64, $t2|o: string::String) { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: &vector + var $t5|end#1#0: string::String + var $t6|front#1#0: string::String + var $t7|l#1#0: u64 + var $t8: &mut string::String + var $t9: &vector + var $t10: u64 + var $t11: &vector + var $t12: u64 + var $t13: bool + var $t14: &vector + var $t15: u64 + var $t16: bool + var $t17: &vector + var $t18: bool + var $t19: bool + var $t20: &mut string::String + var $t21: u64 + var $t22: &mut string::String + var $t23: &string::String + var $t24: u64 + var $t25: &mut string::String + var $t26: &string::String + var $t27: u64 + var $t28: u64 + var $t29: string::String + var $t30: &mut string::String + var $t31: &string::String + var $t32: u64 + var $t33: u64 + var $t34: string::String + var $t35: &mut string::String + var $t36: string::String + var $t37: &mut string::String + var $t38: string::String + var $t39: string::String + var $t40: &mut string::String + 0: $t8 := copy($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t4 := $t9 + 3: $t10 := copy($t1) + 4: $t11 := copy($t4) + 5: $t12 := vector::length($t11) + 6: $t13 := <=($t10, $t12) + 7: if ($t13) goto 8 else goto 14 + 8: label L1 + 9: $t14 := move($t4) + 10: $t15 := copy($t1) + 11: $t16 := string::internal_is_char_boundary($t14, $t15) + 12: $t3 := $t16 + 13: goto 20 + 14: label L0 + 15: $t17 := move($t4) + 16: destroy($t17) + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 25 + 23: label L4 + 24: goto 30 + 25: label L3 + 26: $t20 := move($t0) + 27: destroy($t20) + 28: $t21 := 2 + 29: abort($t21) + 30: label L5 + 31: $t22 := copy($t0) + 32: $t23 := freeze_ref($t22) + 33: $t24 := string::length($t23) + 34: $t7 := $t24 + 35: $t25 := copy($t0) + 36: $t26 := freeze_ref($t25) + 37: $t27 := 0 + 38: $t28 := copy($t1) + 39: $t29 := string::substring($t26, $t27, $t28) + 40: $t6 := $t29 + 41: $t30 := copy($t0) + 42: $t31 := freeze_ref($t30) + 43: $t32 := move($t1) + 44: $t33 := move($t7) + 45: $t34 := string::substring($t31, $t32, $t33) + 46: $t5 := $t34 + 47: $t35 := borrow_local($t6) + 48: $t36 := move($t2) + 49: string::append($t35, $t36) + 50: $t37 := borrow_local($t6) + 51: $t38 := move($t5) + 52: string::append($t37, $t38) + 53: $t39 := move($t6) + 54: $t40 := move($t0) + 55: write_ref($t40, $t39) + 56: return () +} + + +[variant baseline] +public fun string::is_empty($t0|s: &string::String): bool { + var $t1: &string::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::length($t0|s: &string::String): u64 { + var $t1: &string::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::as_bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::into_bytes($t0|s: string::String): vector { + var $t1: string::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := string::as_bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::substring($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3|tmp#$3: bool + var $t4|tmp#$4: bool + var $t5|tmp#$5: bool + var $t6|bytes#1#0: &vector + var $t7|l#1#0: u64 + var $t8: &string::String + var $t9: &vector + var $t10: &vector + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: bool + var $t15: u64 + var $t16: u64 + var $t17: bool + var $t18: bool + var $t19: bool + var $t20: &vector + var $t21: u64 + var $t22: bool + var $t23: bool + var $t24: bool + var $t25: &vector + var $t26: u64 + var $t27: bool + var $t28: bool + var $t29: bool + var $t30: &vector + var $t31: u64 + var $t32: &vector + var $t33: u64 + var $t34: u64 + var $t35: vector + var $t36: string::String + 0: $t8 := move($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t6 := $t9 + 3: $t10 := copy($t6) + 4: $t11 := vector::length($t10) + 5: $t7 := $t11 + 6: $t12 := copy($t2) + 7: $t13 := move($t7) + 8: $t14 := <=($t12, $t13) + 9: if ($t14) goto 10 else goto 16 + 10: label L1 + 11: $t15 := copy($t1) + 12: $t16 := copy($t2) + 13: $t17 := <=($t15, $t16) + 14: $t3 := $t17 + 15: goto 20 + 16: label L0 + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 29 + 23: label L4 + 24: $t20 := copy($t6) + 25: $t21 := copy($t1) + 26: $t22 := string::internal_is_char_boundary($t20, $t21) + 27: $t4 := $t22 + 28: goto 33 + 29: label L3 + 30: $t23 := false + 31: $t4 := $t23 + 32: goto 33 + 33: label L5 + 34: $t24 := move($t4) + 35: if ($t24) goto 36 else goto 42 + 36: label L7 + 37: $t25 := copy($t6) + 38: $t26 := copy($t2) + 39: $t27 := string::internal_is_char_boundary($t25, $t26) + 40: $t5 := $t27 + 41: goto 46 + 42: label L6 + 43: $t28 := false + 44: $t5 := $t28 + 45: goto 46 + 46: label L8 + 47: $t29 := move($t5) + 48: if ($t29) goto 49 else goto 51 + 49: label L10 + 50: goto 56 + 51: label L9 + 52: $t30 := move($t6) + 53: destroy($t30) + 54: $t31 := 2 + 55: abort($t31) + 56: label L11 + 57: $t32 := move($t6) + 58: $t33 := move($t1) + 59: $t34 := move($t2) + 60: $t35 := string::internal_sub_string($t32, $t33, $t34) + 61: $t36 := pack string::String($t35) + 62: return $t36 +} + + +[variant baseline] +public fun string::append_utf8($t0|s: &mut string::String, $t1|bytes: vector) { + var $t2: &mut string::String + var $t3: vector + var $t4: string::String + 0: $t2 := move($t0) + 1: $t3 := move($t1) + 2: $t4 := string::utf8($t3) + 3: string::append($t2, $t4) + 4: return () +} + + +[variant baseline] +public fun string::from_ascii($t0|s: ascii::String): string::String { + var $t1: ascii::String + var $t2: vector + var $t3: string::String + 0: $t1 := move($t0) + 1: $t2 := ascii::into_bytes($t1) + 2: $t3 := pack string::String($t2) + 3: return $t3 +} + + +[variant baseline] +native fun string::internal_check_utf8($t0|v: &vector): bool; + + +[variant baseline] +native fun string::internal_index_of($t0|v: &vector, $t1|r: &vector): u64; + + +[variant baseline] +native fun string::internal_is_char_boundary($t0|v: &vector, $t1|i: u64): bool; + + +[variant baseline] +native fun string::internal_sub_string($t0|v: &vector, $t1|i: u64, $t2|j: u64): vector; + + +[variant baseline] +public fun string::sub_string($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3: &string::String + var $t4: u64 + var $t5: u64 + var $t6: string::String + 0: $t3 := move($t0) + 1: $t4 := move($t1) + 2: $t5 := move($t2) + 3: $t6 := string::substring($t3, $t4, $t5) + 4: return $t6 +} + + +[variant baseline] +public fun string::to_ascii($t0|s: string::String): ascii::String { + var $t1: string::String + var $t2: vector + var $t3: ascii::String + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: $t3 := ascii::string($t2) + 3: return $t3 +} + + +[variant baseline] +public fun string::try_utf8($t0|bytes: vector): option::Option { + var $t1|tmp#$1: option::Option + var $t2: &vector + var $t3: bool + var $t4: vector + var $t5: string::String + var $t6: option::Option + var $t7: option::Option + var $t8: option::Option + 0: $t2 := borrow_local($t0) + 1: $t3 := string::internal_check_utf8($t2) + 2: if ($t3) goto 3 else goto 9 + 3: label L1 + 4: $t4 := move($t0) + 5: $t5 := pack string::String($t4) + 6: $t6 := option::some($t5) + 7: $t1 := $t6 + 8: goto 13 + 9: label L0 + 10: $t7 := option::none() + 11: $t1 := $t7 + 12: goto 13 + 13: label L2 + 14: $t8 := move($t1) + 15: return $t8 +} + + +[variant baseline] +public fun string::utf8($t0|bytes: vector): string::String { + var $t1: &vector + var $t2: bool + var $t3: u64 + var $t4: vector + var $t5: string::String + 0: $t1 := borrow_local($t0) + 1: $t2 := string::internal_check_utf8($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 1 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack string::String($t4) + 11: return $t5 +} + +============ after pipeline `escape_analysis` ================ + +[variant baseline] +public fun u64::diff($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 14 + 8: label L1 + 9: $t10 := move($t3) + 10: $t11 := move($t4) + 11: $t12 := -($t10, $t11) + 12: $t2 := $t12 + 13: goto 20 + 14: label L0 + 15: $t13 := move($t4) + 16: $t14 := move($t3) + 17: $t15 := -($t13, $t14) + 18: $t2 := $t15 + 19: goto 20 + 20: label L2 + 21: $t16 := move($t2) + 22: return $t16 +} + + +[variant baseline] +public fun u64::divide_and_round_up($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: u64 + var $t11: bool + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := %($t7, $t8) + 7: $t10 := 0 + 8: $t11 := ==($t9, $t10) + 9: if ($t11) goto 10 else goto 16 + 10: label L1 + 11: $t12 := move($t3) + 12: $t13 := move($t4) + 13: $t14 := /($t12, $t13) + 14: $t2 := $t14 + 15: goto 24 + 16: label L0 + 17: $t15 := move($t3) + 18: $t16 := move($t4) + 19: $t17 := /($t15, $t16) + 20: $t18 := 1 + 21: $t19 := +($t17, $t18) + 22: $t2 := $t19 + 23: goto 24 + 24: label L2 + 25: $t20 := move($t2) + 26: return $t20 +} + + +[variant baseline] +public fun u64::max($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::min($t0|x: u64, $t1|y: u64): u64 { + var $t2|tmp#$2: u64 + var $t3|x#1#1: u64 + var $t4|y#1#1: u64 + var $t5: u64 + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: u64 + var $t11: u64 + var $t12: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := move($t1) + 3: $t4 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := copy($t4) + 6: $t9 := <($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t3) + 10: $t2 := $t10 + 11: goto 16 + 12: label L0 + 13: $t11 := move($t4) + 14: $t2 := $t11 + 15: goto 16 + 16: label L2 + 17: $t12 := move($t2) + 18: return $t12 +} + + +[variant baseline] +public fun u64::pow($t0|base: u64, $t1|exponent: u8): u64 { + var $t2|base#1#1: u64 + var $t3|exponent#1#1: u8 + var $t4|res#1#1: u64 + var $t5: u64 + var $t6: u8 + var $t7: u64 + var $t8: u8 + var $t9: u8 + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: bool + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u8 + var $t20: u8 + var $t21: u8 + var $t22: u64 + var $t23: u64 + var $t24: u64 + var $t25: u8 + var $t26: u8 + var $t27: u8 + var $t28: u64 + 0: $t5 := move($t0) + 1: $t2 := $t5 + 2: $t6 := move($t1) + 3: $t3 := $t6 + 4: $t7 := 1 + 5: $t4 := $t7 + 6: goto 7 + 7: label L5 + 8: $t8 := copy($t3) + 9: $t9 := 1 + 10: $t10 := >=($t8, $t9) + 11: if ($t10) goto 12 else goto 41 + 12: label L1 + 13: goto 14 + 14: label L2 + 15: $t11 := copy($t3) + 16: $t12 := 2 + 17: $t13 := %($t11, $t12) + 18: $t14 := 0 + 19: $t15 := ==($t13, $t14) + 20: if ($t15) goto 21 else goto 31 + 21: label L4 + 22: $t16 := copy($t2) + 23: $t17 := move($t2) + 24: $t18 := *($t16, $t17) + 25: $t2 := $t18 + 26: $t19 := move($t3) + 27: $t20 := 2 + 28: $t21 := /($t19, $t20) + 29: $t3 := $t21 + 30: goto 7 + 31: label L3 + 32: $t22 := move($t4) + 33: $t23 := copy($t2) + 34: $t24 := *($t22, $t23) + 35: $t4 := $t24 + 36: $t25 := move($t3) + 37: $t26 := 1 + 38: $t27 := -($t25, $t26) + 39: $t3 := $t27 + 40: goto 7 + 41: label L0 + 42: $t28 := move($t4) + 43: return $t28 +} + + +[variant baseline] +public fun u64::sqrt($t0|x: u64): u64 { + var $t1|bit#1#1: u128 + var $t2|res#1#1: u128 + var $t3|x#1#1: u64 + var $t4|x#2#1: u128 + var $t5: u64 + var $t6: u128 + var $t7: u128 + var $t8: u64 + var $t9: u128 + var $t10: u128 + var $t11: u128 + var $t12: bool + var $t13: u128 + var $t14: u128 + var $t15: u128 + var $t16: u128 + var $t17: bool + var $t18: u128 + var $t19: u128 + var $t20: u128 + var $t21: u128 + var $t22: u128 + var $t23: u128 + var $t24: u8 + var $t25: u128 + var $t26: u128 + var $t27: u128 + var $t28: u128 + var $t29: u8 + var $t30: u128 + var $t31: u128 + var $t32: u8 + var $t33: u128 + var $t34: u128 + var $t35: u64 + 0: $t5 := move($t0) + 1: $t3 := $t5 + 2: $t6 := 18446744073709551616 + 3: $t1 := $t6 + 4: $t7 := 0 + 5: $t2 := $t7 + 6: $t8 := move($t3) + 7: $t9 := (u128)($t8) + 8: $t4 := $t9 + 9: goto 10 + 10: label L6 + 11: $t10 := copy($t1) + 12: $t11 := 0 + 13: $t12 := !=($t10, $t11) + 14: if ($t12) goto 15 else goto 50 + 15: label L1 + 16: goto 17 + 17: label L2 + 18: $t13 := copy($t4) + 19: $t14 := copy($t2) + 20: $t15 := copy($t1) + 21: $t16 := +($t14, $t15) + 22: $t17 := >=($t13, $t16) + 23: if ($t17) goto 24 else goto 38 + 24: label L4 + 25: $t18 := move($t4) + 26: $t19 := copy($t2) + 27: $t20 := copy($t1) + 28: $t21 := +($t19, $t20) + 29: $t22 := -($t18, $t21) + 30: $t4 := $t22 + 31: $t23 := move($t2) + 32: $t24 := 1 + 33: $t25 := >>($t23, $t24) + 34: $t26 := copy($t1) + 35: $t27 := +($t25, $t26) + 36: $t2 := $t27 + 37: goto 44 + 38: label L3 + 39: $t28 := move($t2) + 40: $t29 := 1 + 41: $t30 := >>($t28, $t29) + 42: $t2 := $t30 + 43: goto 44 + 44: label L5 + 45: $t31 := move($t1) + 46: $t32 := 2 + 47: $t33 := >>($t31, $t32) + 48: $t1 := $t33 + 49: goto 10 + 50: label L0 + 51: $t34 := move($t2) + 52: $t35 := (u64)($t34) + 53: return $t35 +} + + +[variant baseline] +public fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>) { + var $t2: &mut vector<#0> + var $t3: &vector<#0> + var $t4: bool + var $t5: bool + var $t6: &mut vector<#0> + var $t7: &mut vector<#0> + var $t8: #0 + var $t9: &mut vector<#0> + var $t10: vector<#0> + 0: $t2 := borrow_local($t1) + 1: vector::reverse<#0>($t2) + 2: goto 3 + 3: label L3 + 4: $t3 := borrow_local($t1) + 5: $t4 := vector::is_empty<#0>($t3) + 6: $t5 := !($t4) + 7: if ($t5) goto 8 else goto 16 + 8: label L1 + 9: goto 10 + 10: label L2 + 11: $t6 := copy($t0) + 12: $t7 := borrow_local($t1) + 13: $t8 := vector::pop_back<#0>($t7) + 14: vector::push_back<#0>($t6, $t8) + 15: goto 3 + 16: label L0 + 17: $t9 := move($t0) + 18: destroy($t9) + 19: $t10 := move($t1) + 20: vector::destroy_empty<#0>($t10) + 21: return () +} + + +[variant baseline] +public native fun vector::borrow<#0>($t0|v: &vector<#0>, $t1|i: u64): � + + +[variant baseline] +public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0; + + +[variant baseline] +public fun vector::contains<#0>($t0|v: &vector<#0>, $t1|e: �): bool { + var $t2|i#1#0: u64 + var $t3|len#1#0: u64 + var $t4: u64 + var $t5: &vector<#0> + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: &vector<#0> + var $t11: u64 + var $t12: � + var $t13: � + var $t14: bool + var $t15: &vector<#0> + var $t16: � + var $t17: bool + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: &vector<#0> + var $t22: � + var $t23: bool + 0: $t4 := 0 + 1: $t2 := $t4 + 2: $t5 := copy($t0) + 3: $t6 := vector::length<#0>($t5) + 4: $t3 := $t6 + 5: goto 6 + 6: label L5 + 7: $t7 := copy($t2) + 8: $t8 := copy($t3) + 9: $t9 := <($t7, $t8) + 10: if ($t9) goto 11 else goto 33 + 11: label L1 + 12: goto 13 + 13: label L2 + 14: $t10 := copy($t0) + 15: $t11 := copy($t2) + 16: $t12 := vector::borrow<#0>($t10, $t11) + 17: $t13 := copy($t1) + 18: $t14 := ==($t12, $t13) + 19: if ($t14) goto 20 else goto 27 + 20: label L4 + 21: $t15 := move($t0) + 22: destroy($t15) + 23: $t16 := move($t1) + 24: destroy($t16) + 25: $t17 := true + 26: return $t17 + 27: label L3 + 28: $t18 := move($t2) + 29: $t19 := 1 + 30: $t20 := +($t18, $t19) + 31: $t2 := $t20 + 32: goto 6 + 33: label L0 + 34: $t21 := move($t0) + 35: destroy($t21) + 36: $t22 := move($t1) + 37: destroy($t22) + 38: $t23 := false + 39: return $t23 +} + + +[variant baseline] +public native fun vector::destroy_empty<#0>($t0|v: vector<#0>); + + +[variant baseline] +public native fun vector::empty<#0>(): vector<#0>; + + +[variant baseline] +public fun vector::index_of<#0>($t0|v: &vector<#0>, $t1|e: �): (bool, u64) { + var $t2|i#1#0: u64 + var $t3|len#1#0: u64 + var $t4: u64 + var $t5: &vector<#0> + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: &vector<#0> + var $t11: u64 + var $t12: � + var $t13: � + var $t14: bool + var $t15: &vector<#0> + var $t16: � + var $t17: bool + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: u64 + var $t22: &vector<#0> + var $t23: � + var $t24: bool + var $t25: u64 + 0: $t4 := 0 + 1: $t2 := $t4 + 2: $t5 := copy($t0) + 3: $t6 := vector::length<#0>($t5) + 4: $t3 := $t6 + 5: goto 6 + 6: label L5 + 7: $t7 := copy($t2) + 8: $t8 := copy($t3) + 9: $t9 := <($t7, $t8) + 10: if ($t9) goto 11 else goto 34 + 11: label L1 + 12: goto 13 + 13: label L2 + 14: $t10 := copy($t0) + 15: $t11 := copy($t2) + 16: $t12 := vector::borrow<#0>($t10, $t11) + 17: $t13 := copy($t1) + 18: $t14 := ==($t12, $t13) + 19: if ($t14) goto 20 else goto 28 + 20: label L4 + 21: $t15 := move($t0) + 22: destroy($t15) + 23: $t16 := move($t1) + 24: destroy($t16) + 25: $t17 := true + 26: $t18 := move($t2) + 27: return ($t17, $t18) + 28: label L3 + 29: $t19 := move($t2) + 30: $t20 := 1 + 31: $t21 := +($t19, $t20) + 32: $t2 := $t21 + 33: goto 6 + 34: label L0 + 35: $t22 := move($t0) + 36: destroy($t22) + 37: $t23 := move($t1) + 38: destroy($t23) + 39: $t24 := false + 40: $t25 := 0 + 41: return ($t24, $t25) +} + + +[variant baseline] +public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { + var $t3|len#1#0: u64 + var $t4: &mut vector<#0> + var $t5: &vector<#0> + var $t6: u64 + var $t7: u64 + var $t8: u64 + var $t9: bool + var $t10: &mut vector<#0> + var $t11: u64 + var $t12: &mut vector<#0> + var $t13: #0 + var $t14: u64 + var $t15: u64 + var $t16: bool + var $t17: &mut vector<#0> + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: &mut vector<#0> + 0: $t4 := copy($t0) + 1: $t5 := freeze_ref($t4) + 2: $t6 := vector::length<#0>($t5) + 3: $t3 := $t6 + 4: $t7 := copy($t2) + 5: $t8 := copy($t3) + 6: $t9 := >($t7, $t8) + 7: if ($t9) goto 8 else goto 13 + 8: label L1 + 9: $t10 := move($t0) + 10: destroy($t10) + 11: $t11 := 131072 + 12: abort($t11) + 13: label L0 + 14: $t12 := copy($t0) + 15: $t13 := move($t1) + 16: vector::push_back<#0>($t12, $t13) + 17: goto 18 + 18: label L4 + 19: $t14 := copy($t2) + 20: $t15 := copy($t3) + 21: $t16 := <($t14, $t15) + 22: if ($t16) goto 23 else goto 33 + 23: label L3 + 24: $t17 := copy($t0) + 25: $t18 := copy($t2) + 26: $t19 := copy($t3) + 27: vector::swap<#0>($t17, $t18, $t19) + 28: $t20 := move($t2) + 29: $t21 := 1 + 30: $t22 := +($t20, $t21) + 31: $t2 := $t22 + 32: goto 18 + 33: label L2 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: return () +} + + +[variant baseline] +public fun vector::is_empty<#0>($t0|v: &vector<#0>): bool { + var $t1: &vector<#0> + var $t2: u64 + var $t3: u64 + var $t4: bool + 0: $t1 := move($t0) + 1: $t2 := vector::length<#0>($t1) + 2: $t3 := 0 + 3: $t4 := ==($t2, $t3) + 4: return $t4 +} + + +[variant baseline] +public native fun vector::length<#0>($t0|v: &vector<#0>): u64; + + +[variant baseline] +public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0; + + +[variant baseline] +public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0); + + +[variant baseline] +public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { + var $t2|tmp#$2: u64 + var $t3|tmp#$3: &mut vector<#0> + var $t4|len#1#0: u64 + var $t5: &mut vector<#0> + var $t6: &vector<#0> + var $t7: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: &mut vector<#0> + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + var $t17: u64 + var $t18: bool + var $t19: &mut vector<#0> + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: u64 + var $t24: &mut vector<#0> + var $t25: u64 + var $t26: u64 + var $t27: &mut vector<#0> + var $t28: #0 + 0: $t5 := copy($t0) + 1: $t6 := freeze_ref($t5) + 2: $t7 := vector::length<#0>($t6) + 3: $t4 := $t7 + 4: $t8 := copy($t1) + 5: $t9 := copy($t4) + 6: $t10 := >=($t8, $t9) + 7: if ($t10) goto 8 else goto 13 + 8: label L1 + 9: $t11 := move($t0) + 10: destroy($t11) + 11: $t12 := 131072 + 12: abort($t12) + 13: label L0 + 14: $t13 := move($t4) + 15: $t14 := 1 + 16: $t15 := -($t13, $t14) + 17: $t4 := $t15 + 18: goto 19 + 19: label L4 + 20: $t16 := copy($t1) + 21: $t17 := copy($t4) + 22: $t18 := <($t16, $t17) + 23: if ($t18) goto 24 else goto 38 + 24: label L3 + 25: $t19 := copy($t0) + 26: $t3 := $t19 + 27: $t20 := copy($t1) + 28: $t2 := $t20 + 29: $t21 := move($t1) + 30: $t22 := 1 + 31: $t23 := +($t21, $t22) + 32: $t1 := $t23 + 33: $t24 := move($t3) + 34: $t25 := move($t2) + 35: $t26 := copy($t1) + 36: vector::swap<#0>($t24, $t25, $t26) + 37: goto 19 + 38: label L2 + 39: $t27 := move($t0) + 40: $t28 := vector::pop_back<#0>($t27) + 41: return $t28 +} + + +[variant baseline] +public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { + var $t1|back_index#1#0: u64 + var $t2|front_index#1#0: u64 + var $t3|len#1#0: u64 + var $t4: &mut vector<#0> var $t5: &vector<#0> var $t6: u64 var $t7: u64 var $t8: u64 var $t9: bool + var $t10: &mut vector<#0> + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: u64 + var $t16: u64 + var $t17: bool + var $t18: &mut vector<#0> + var $t19: u64 + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: u64 + var $t24: u64 + var $t25: u64 + var $t26: u64 + var $t27: &mut vector<#0> + 0: $t4 := copy($t0) + 1: $t5 := freeze_ref($t4) + 2: $t6 := vector::length<#0>($t5) + 3: $t3 := $t6 + 4: $t7 := copy($t3) + 5: $t8 := 0 + 6: $t9 := ==($t7, $t8) + 7: if ($t9) goto 8 else goto 12 + 8: label L1 + 9: $t10 := move($t0) + 10: destroy($t10) + 11: return () + 12: label L0 + 13: $t11 := 0 + 14: $t2 := $t11 + 15: $t12 := move($t3) + 16: $t13 := 1 + 17: $t14 := -($t12, $t13) + 18: $t1 := $t14 + 19: goto 20 + 20: label L4 + 21: $t15 := copy($t2) + 22: $t16 := copy($t1) + 23: $t17 := <($t15, $t16) + 24: if ($t17) goto 25 else goto 39 + 25: label L3 + 26: $t18 := copy($t0) + 27: $t19 := copy($t2) + 28: $t20 := copy($t1) + 29: vector::swap<#0>($t18, $t19, $t20) + 30: $t21 := move($t2) + 31: $t22 := 1 + 32: $t23 := +($t21, $t22) + 33: $t2 := $t23 + 34: $t24 := move($t1) + 35: $t25 := 1 + 36: $t26 := -($t24, $t25) + 37: $t1 := $t26 + 38: goto 20 + 39: label L2 + 40: $t27 := move($t0) + 41: destroy($t27) + 42: return () +} + + +[variant baseline] +public fun vector::singleton<#0>($t0|e: #0): vector<#0> { + var $t1|v#1#0: vector<#0> + var $t2: vector<#0> + var $t3: &mut vector<#0> + var $t4: #0 + var $t5: vector<#0> + 0: $t2 := vector::empty<#0>() + 1: $t1 := $t2 + 2: $t3 := borrow_local($t1) + 3: $t4 := move($t0) + 4: vector::push_back<#0>($t3, $t4) + 5: $t5 := move($t1) + 6: return $t5 +} + + +[variant baseline] +public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64); + + +[variant baseline] +public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { + var $t2|last_idx#1#0: u64 + var $t3: &mut vector<#0> + var $t4: &vector<#0> + var $t5: bool + var $t6: bool + var $t7: &mut vector<#0> + var $t8: u64 + var $t9: &mut vector<#0> + var $t10: &vector<#0> + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: &mut vector<#0> + var $t15: u64 + var $t16: u64 + var $t17: &mut vector<#0> + var $t18: #0 + 0: $t3 := copy($t0) + 1: $t4 := freeze_ref($t3) + 2: $t5 := vector::is_empty<#0>($t4) + 3: $t6 := !($t5) + 4: if ($t6) goto 5 else goto 7 + 5: label L1 + 6: goto 12 + 7: label L0 + 8: $t7 := move($t0) + 9: destroy($t7) + 10: $t8 := 131072 + 11: abort($t8) + 12: label L2 + 13: $t9 := copy($t0) + 14: $t10 := freeze_ref($t9) + 15: $t11 := vector::length<#0>($t10) + 16: $t12 := 1 + 17: $t13 := -($t11, $t12) + 18: $t2 := $t13 + 19: $t14 := copy($t0) + 20: $t15 := move($t1) + 21: $t16 := move($t2) + 22: vector::swap<#0>($t14, $t15, $t16) + 23: $t17 := move($t0) + 24: $t18 := vector::pop_back<#0>($t17) + 25: return $t18 +} + + +[variant baseline] +fun ReturnRefsIntoVec::return_vec_index_immut($t0|v: &vector): &u64 { + var $t1: &vector + var $t2: u64 + var $t3: &u64 + 0: $t1 := move($t0) + 1: $t2 := 0 + 2: $t3 := vector::borrow($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +fun ReturnRefsIntoVec::return_vec_index_mut($t0|v: &mut vector): &mut u64 { + var $t1: &mut vector + var $t2: u64 + var $t3: &mut u64 + 0: $t1 := move($t0) + 1: $t2 := 0 + 2: $t3 := vector::borrow_mut($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::borrow<#0>($t0|t: &option::Option<#0>): � { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: &option::Option<#0> + var $t4: u64 + var $t5: &option::Option<#0> + var $t6: &vector<#0> + var $t7: u64 + var $t8: � + 0: $t1 := copy($t0) + 1: $t2 := option::is_some<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 10 + 5: label L0 + 6: $t3 := move($t0) + 7: destroy($t3) + 8: $t4 := 262145 + 9: abort($t4) + 10: label L2 + 11: $t5 := move($t0) + 12: $t6 := borrow_field>.vec($t5) + 13: $t7 := 0 + 14: $t8 := vector::borrow<#0>($t6, $t7) + 15: return $t8 +} + + +[variant baseline] +public fun option::borrow_mut<#0>($t0|t: &mut option::Option<#0>): &mut #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: u64 + var $t9: &mut #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := 0 + 15: $t9 := vector::borrow_mut<#0>($t7, $t8) + 16: return $t9 +} + + +[variant baseline] +public fun option::contains<#0>($t0|t: &option::Option<#0>, $t1|e_ref: �): bool { + var $t2: &option::Option<#0> + var $t3: &vector<#0> + var $t4: � + var $t5: bool + 0: $t2 := move($t0) + 1: $t3 := borrow_field>.vec($t2) + 2: $t4 := move($t1) + 3: $t5 := vector::contains<#0>($t3, $t4) + 4: return $t5 +} + + +[variant baseline] +public fun option::swap<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): #0 { + var $t2|old_value#1#0: #0 + var $t3|vec_ref#1#0: &mut vector<#0> + var $t4: &mut option::Option<#0> + var $t5: &option::Option<#0> + var $t6: bool + var $t7: &mut option::Option<#0> + var $t8: u64 + var $t9: &mut option::Option<#0> + var $t10: &mut vector<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: &mut vector<#0> + var $t14: #0 + var $t15: #0 + 0: $t4 := copy($t0) + 1: $t5 := freeze_ref($t4) + 2: $t6 := option::is_some<#0>($t5) + 3: if ($t6) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t7 := move($t0) + 8: destroy($t7) + 9: $t8 := 262145 + 10: abort($t8) + 11: label L2 + 12: $t9 := move($t0) + 13: $t10 := borrow_field>.vec($t9) + 14: $t3 := $t10 + 15: $t11 := copy($t3) + 16: $t12 := vector::pop_back<#0>($t11) + 17: $t2 := $t12 + 18: $t13 := move($t3) + 19: $t14 := move($t1) + 20: vector::push_back<#0>($t13, $t14) + 21: $t15 := move($t2) + 22: return $t15 +} + + +[variant baseline] +public fun option::borrow_with_default<#0>($t0|t: &option::Option<#0>, $t1|default_ref: �): � { + var $t2|tmp#$2: � + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: � + var $t10: � + var $t11: &vector<#0> + var $t12: u64 + var $t13: � + var $t14: � + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 20 + 12: label L0 + 13: $t10 := move($t1) + 14: destroy($t10) + 15: $t11 := move($t3) + 16: $t12 := 0 + 17: $t13 := vector::borrow<#0>($t11, $t12) + 18: $t2 := $t13 + 19: goto 20 + 20: label L2 + 21: $t14 := move($t2) + 22: return $t14 +} + + +[variant baseline] +public fun option::destroy_none<#0>($t0|t: option::Option<#0>) { + var $t1: &option::Option<#0> + var $t2: bool + var $t3: u64 + var $t4: option::Option<#0> + var $t5: vector<#0> + 0: $t1 := borrow_local($t0) + 1: $t2 := option::is_none<#0>($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 262144 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := unpack option::Option<#0>($t4) + 11: vector::destroy_empty<#0>($t5) + 12: return () +} + + +[variant baseline] +public fun option::destroy_some<#0>($t0|t: option::Option<#0>): #0 { + var $t1|elem#1#0: #0 + var $t2|vec#1#0: vector<#0> + var $t3: &option::Option<#0> + var $t4: bool + var $t5: u64 + var $t6: option::Option<#0> + var $t7: vector<#0> + var $t8: &mut vector<#0> + var $t9: #0 + var $t10: vector<#0> + var $t11: #0 + 0: $t3 := borrow_local($t0) + 1: $t4 := option::is_some<#0>($t3) + 2: if ($t4) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t5 := 262145 + 7: abort($t5) + 8: label L2 + 9: $t6 := move($t0) + 10: $t7 := unpack option::Option<#0>($t6) + 11: $t2 := $t7 + 12: $t8 := borrow_local($t2) + 13: $t9 := vector::pop_back<#0>($t8) + 14: $t1 := $t9 + 15: $t10 := move($t2) + 16: vector::destroy_empty<#0>($t10) + 17: $t11 := move($t1) + 18: return $t11 +} + + +[variant baseline] +public fun option::destroy_with_default<#0>($t0|t: option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec#1#0: vector<#0> + var $t4: option::Option<#0> + var $t5: vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: #0 + var $t9: &mut vector<#0> + var $t10: #0 + var $t11: #0 + 0: $t4 := move($t0) + 1: $t5 := unpack option::Option<#0>($t4) + 2: $t3 := $t5 + 3: $t6 := borrow_local($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 10 + 6: label L1 + 7: $t8 := move($t1) + 8: $t2 := $t8 + 9: goto 15 + 10: label L0 + 11: $t9 := borrow_local($t3) + 12: $t10 := vector::pop_back<#0>($t9) + 13: $t2 := $t10 + 14: goto 15 + 15: label L2 + 16: $t11 := move($t2) + 17: return $t11 +} + + +[variant baseline] +public fun option::extract<#0>($t0|t: &mut option::Option<#0>): #0 { + var $t1: &mut option::Option<#0> + var $t2: &option::Option<#0> + var $t3: bool + var $t4: &mut option::Option<#0> + var $t5: u64 + var $t6: &mut option::Option<#0> + var $t7: &mut vector<#0> + var $t8: #0 + 0: $t1 := copy($t0) + 1: $t2 := freeze_ref($t1) + 2: $t3 := option::is_some<#0>($t2) + 3: if ($t3) goto 4 else goto 6 + 4: label L1 + 5: goto 11 + 6: label L0 + 7: $t4 := move($t0) + 8: destroy($t4) + 9: $t5 := 262145 + 10: abort($t5) + 11: label L2 + 12: $t6 := move($t0) + 13: $t7 := borrow_field>.vec($t6) + 14: $t8 := vector::pop_back<#0>($t7) + 15: return $t8 +} + + +[variant baseline] +public fun option::fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0) { + var $t2|vec_ref#1#0: &mut vector<#0> + var $t3: &mut option::Option<#0> + var $t4: &mut vector<#0> + var $t5: &mut vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &mut vector<#0> + var $t9: u64 + var $t10: &mut vector<#0> + var $t11: #0 + 0: $t3 := move($t0) + 1: $t4 := borrow_field>.vec($t3) + 2: $t2 := $t4 + 3: $t5 := copy($t2) + 4: $t6 := freeze_ref($t5) + 5: $t7 := vector::is_empty<#0>($t6) + 6: if ($t7) goto 7 else goto 9 + 7: label L1 + 8: goto 14 + 9: label L0 + 10: $t8 := move($t2) + 11: destroy($t8) + 12: $t9 := 262144 + 13: abort($t9) + 14: label L2 + 15: $t10 := move($t2) + 16: $t11 := move($t1) + 17: vector::push_back<#0>($t10, $t11) + 18: return () +} + + +[variant baseline] +public fun option::get_with_default<#0>($t0|t: &option::Option<#0>, $t1|default: #0): #0 { + var $t2|tmp#$2: #0 + var $t3|vec_ref#1#0: &vector<#0> + var $t4: &option::Option<#0> + var $t5: &vector<#0> + var $t6: &vector<#0> + var $t7: bool + var $t8: &vector<#0> + var $t9: #0 var $t10: &vector<#0> var $t11: u64 var $t12: � - var $t13: � + var $t13: #0 + var $t14: #0 + 0: $t4 := move($t0) + 1: $t5 := borrow_field>.vec($t4) + 2: $t3 := $t5 + 3: $t6 := copy($t3) + 4: $t7 := vector::is_empty<#0>($t6) + 5: if ($t7) goto 6 else goto 12 + 6: label L1 + 7: $t8 := move($t3) + 8: destroy($t8) + 9: $t9 := move($t1) + 10: $t2 := $t9 + 11: goto 19 + 12: label L0 + 13: $t10 := move($t3) + 14: $t11 := 0 + 15: $t12 := vector::borrow<#0>($t10, $t11) + 16: $t13 := read_ref($t12) + 17: $t2 := $t13 + 18: goto 19 + 19: label L2 + 20: $t14 := move($t2) + 21: return $t14 +} + + +[variant baseline] +public fun option::is_none<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::is_some<#0>($t0|t: &option::Option<#0>): bool { + var $t1: &option::Option<#0> + var $t2: &vector<#0> + var $t3: bool + var $t4: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field>.vec($t1) + 2: $t3 := vector::is_empty<#0>($t2) + 3: $t4 := !($t3) + 4: return $t4 +} + + +[variant baseline] +public fun option::none<#0>(): option::Option<#0> { + var $t0: vector<#0> + var $t1: option::Option<#0> + 0: $t0 := vector::empty<#0>() + 1: $t1 := pack option::Option<#0>($t0) + 2: return $t1 +} + + +[variant baseline] +public fun option::some<#0>($t0|e: #0): option::Option<#0> { + var $t1: #0 + var $t2: vector<#0> + var $t3: option::Option<#0> + 0: $t1 := move($t0) + 1: $t2 := vector::singleton<#0>($t1) + 2: $t3 := pack option::Option<#0>($t2) + 3: return $t3 +} + + +[variant baseline] +public fun option::swap_or_fill<#0>($t0|t: &mut option::Option<#0>, $t1|e: #0): option::Option<#0> { + var $t2|tmp#$2: option::Option<#0> + var $t3|old_value#1#0: option::Option<#0> + var $t4|vec_ref#1#0: &mut vector<#0> + var $t5: &mut option::Option<#0> + var $t6: &mut vector<#0> + var $t7: &mut vector<#0> + var $t8: &vector<#0> + var $t9: bool + var $t10: option::Option<#0> + var $t11: &mut vector<#0> + var $t12: #0 + var $t13: option::Option<#0> + var $t14: option::Option<#0> + var $t15: &mut vector<#0> + var $t16: #0 + var $t17: option::Option<#0> + 0: $t5 := move($t0) + 1: $t6 := borrow_field>.vec($t5) + 2: $t4 := $t6 + 3: $t7 := copy($t4) + 4: $t8 := freeze_ref($t7) + 5: $t9 := vector::is_empty<#0>($t8) + 6: if ($t9) goto 7 else goto 11 + 7: label L1 + 8: $t10 := option::none<#0>() + 9: $t2 := $t10 + 10: goto 17 + 11: label L0 + 12: $t11 := copy($t4) + 13: $t12 := vector::pop_back<#0>($t11) + 14: $t13 := option::some<#0>($t12) + 15: $t2 := $t13 + 16: goto 17 + 17: label L2 + 18: $t14 := move($t2) + 19: $t3 := $t14 + 20: $t15 := move($t4) + 21: $t16 := move($t1) + 22: vector::push_back<#0>($t15, $t16) + 23: $t17 := move($t3) + 24: return $t17 +} + + +[variant baseline] +public fun option::to_vec<#0>($t0|t: option::Option<#0>): vector<#0> { + var $t1: option::Option<#0> + var $t2: vector<#0> + 0: $t1 := move($t0) + 1: $t2 := unpack option::Option<#0>($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::append($t0|string: &mut ascii::String, $t1|other: ascii::String) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: ascii::String + var $t5: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := ascii::into_bytes($t4) + 4: vector::append($t3, $t5) + 5: return () +} + + +[variant baseline] +public fun ascii::index_of($t0|string: &ascii::String, $t1|substr: &ascii::String): u64 { + var $t2|tmp#$2: bool + var $t3|i#1#0: u64 + var $t4|j#1#0: u64 + var $t5|m#1#0: u64 + var $t6|n#1#0: u64 + var $t7: u64 + var $t8: &ascii::String + var $t9: u64 + var $t10: &ascii::String + var $t11: u64 + var $t12: u64 + var $t13: u64 var $t14: bool - var $t15: &vector<#0> - var $t16: � - var $t17: bool + var $t15: &ascii::String + var $t16: &ascii::String + var $t17: u64 var $t18: u64 var $t19: u64 var $t20: u64 var $t21: u64 - var $t22: &vector<#0> - var $t23: � - var $t24: bool + var $t22: bool + var $t23: u64 + var $t24: u64 var $t25: u64 - 0: $t4 := 0 - 1: $t2 := $t4 - 2: $t5 := copy($t0) - 3: $t6 := vector::length<#0>($t5) - 4: $t3 := $t6 - 5: goto 6 - 6: label L5 - 7: $t7 := copy($t2) - 8: $t8 := copy($t3) - 9: $t9 := <($t7, $t8) - 10: if ($t9) goto 11 else goto 34 - 11: label L1 - 12: goto 13 - 13: label L2 - 14: $t10 := copy($t0) - 15: $t11 := copy($t2) - 16: $t12 := vector::borrow<#0>($t10, $t11) - 17: $t13 := copy($t1) - 18: $t14 := ==($t12, $t13) - 19: if ($t14) goto 20 else goto 28 - 20: label L4 - 21: $t15 := move($t0) - 22: destroy($t15) - 23: $t16 := move($t1) - 24: destroy($t16) - 25: $t17 := true - 26: $t18 := move($t2) - 27: return ($t17, $t18) - 28: label L3 - 29: $t19 := move($t2) - 30: $t20 := 1 - 31: $t21 := +($t19, $t20) - 32: $t2 := $t21 - 33: goto 6 - 34: label L0 - 35: $t22 := move($t0) - 36: destroy($t22) - 37: $t23 := move($t1) - 38: destroy($t23) - 39: $t24 := false - 40: $t25 := 0 - 41: return ($t24, $t25) + var $t26: bool + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: u64 + var $t31: u64 + var $t32: &u8 + var $t33: u8 + var $t34: &ascii::String + var $t35: &vector + var $t36: u64 + var $t37: &u8 + var $t38: u8 + var $t39: bool + var $t40: bool + var $t41: bool + var $t42: u64 + var $t43: u64 + var $t44: u64 + var $t45: u64 + var $t46: u64 + var $t47: bool + var $t48: &ascii::String + var $t49: &ascii::String + var $t50: u64 + var $t51: u64 + var $t52: u64 + var $t53: u64 + var $t54: &ascii::String + var $t55: &ascii::String + var $t56: u64 + 0: $t7 := 0 + 1: $t3 := $t7 + 2: $t8 := copy($t0) + 3: $t9 := ascii::length($t8) + 4: $t10 := copy($t1) + 5: $t11 := ascii::length($t10) + 6: $t5 := $t11 + 7: $t6 := $t9 + 8: $t12 := copy($t6) + 9: $t13 := copy($t5) + 10: $t14 := <($t12, $t13) + 11: if ($t14) goto 12 else goto 19 + 12: label L1 + 13: $t15 := move($t1) + 14: destroy($t15) + 15: $t16 := move($t0) + 16: destroy($t16) + 17: $t17 := move($t6) + 18: return $t17 + 19: label L0 + 20: $t18 := copy($t3) + 21: $t19 := copy($t6) + 22: $t20 := copy($t5) + 23: $t21 := -($t19, $t20) + 24: $t22 := <=($t18, $t21) + 25: if ($t22) goto 26 else goto 84 + 26: label L3 + 27: $t23 := 0 + 28: $t4 := $t23 + 29: goto 30 + 30: label L10 + 31: $t24 := copy($t4) + 32: $t25 := copy($t5) + 33: $t26 := <($t24, $t25) + 34: if ($t26) goto 35 else goto 53 + 35: label L5 + 36: goto 37 + 37: label L6 + 38: $t27 := copy($t0) + 39: $t28 := borrow_field.bytes($t27) + 40: $t29 := copy($t3) + 41: $t30 := copy($t4) + 42: $t31 := +($t29, $t30) + 43: $t32 := vector::borrow($t28, $t31) + 44: $t33 := read_ref($t32) + 45: $t34 := copy($t1) + 46: $t35 := borrow_field.bytes($t34) + 47: $t36 := copy($t4) + 48: $t37 := vector::borrow($t35, $t36) + 49: $t38 := read_ref($t37) + 50: $t39 := ==($t33, $t38) + 51: $t2 := $t39 + 52: goto 57 + 53: label L4 + 54: $t40 := false + 55: $t2 := $t40 + 56: goto 57 + 57: label L7 + 58: $t41 := move($t2) + 59: if ($t41) goto 60 else goto 66 + 60: label L9 + 61: $t42 := move($t4) + 62: $t43 := 1 + 63: $t44 := +($t42, $t43) + 64: $t4 := $t44 + 65: goto 30 + 66: label L8 + 67: $t45 := move($t4) + 68: $t46 := copy($t5) + 69: $t47 := ==($t45, $t46) + 70: if ($t47) goto 71 else goto 78 + 71: label L12 + 72: $t48 := move($t1) + 73: destroy($t48) + 74: $t49 := move($t0) + 75: destroy($t49) + 76: $t50 := move($t3) + 77: return $t50 + 78: label L11 + 79: $t51 := move($t3) + 80: $t52 := 1 + 81: $t53 := +($t51, $t52) + 82: $t3 := $t53 + 83: goto 19 + 84: label L2 + 85: $t54 := move($t1) + 86: destroy($t54) + 87: $t55 := move($t0) + 88: destroy($t55) + 89: $t56 := move($t6) + 90: return $t56 } [variant baseline] -public fun vector::insert<#0>($t0|v: &mut vector<#0>, $t1|e: #0, $t2|i: u64) { - var $t3|len#1#0: u64 - var $t4: &mut vector<#0> - var $t5: &vector<#0> - var $t6: u64 - var $t7: u64 +public fun ascii::insert($t0|s: &mut ascii::String, $t1|at: u64, $t2|o: ascii::String) { + var $t3|e#1#2: u8 + var $t4|v#1#1: vector + var $t5: u64 + var $t6: &mut ascii::String + var $t7: &ascii::String var $t8: u64 var $t9: bool - var $t10: &mut vector<#0> + var $t10: &mut ascii::String var $t11: u64 - var $t12: &mut vector<#0> - var $t13: #0 - var $t14: u64 - var $t15: u64 + var $t12: ascii::String + var $t13: vector + var $t14: &vector + var $t15: bool var $t16: bool - var $t17: &mut vector<#0> - var $t18: u64 - var $t19: u64 - var $t20: u64 - var $t21: u64 + var $t17: &mut vector + var $t18: u8 + var $t19: &mut ascii::String + var $t20: &mut vector + var $t21: u8 var $t22: u64 - var $t23: &mut vector<#0> - 0: $t4 := copy($t0) - 1: $t5 := freeze_ref($t4) - 2: $t6 := vector::length<#0>($t5) - 3: $t3 := $t6 - 4: $t7 := copy($t2) - 5: $t8 := copy($t3) - 6: $t9 := >($t7, $t8) - 7: if ($t9) goto 8 else goto 13 - 8: label L1 + var $t23: &mut ascii::String + var $t24: vector + 0: $t5 := copy($t1) + 1: $t6 := copy($t0) + 2: $t7 := freeze_ref($t6) + 3: $t8 := ascii::length($t7) + 4: $t9 := <=($t5, $t8) + 5: if ($t9) goto 6 else goto 8 + 6: label L1 + 7: goto 13 + 8: label L0 9: $t10 := move($t0) 10: destroy($t10) - 11: $t11 := 131072 + 11: $t11 := 65537 12: abort($t11) - 13: label L0 - 14: $t12 := copy($t0) - 15: $t13 := move($t1) - 16: vector::push_back<#0>($t12, $t13) + 13: label L2 + 14: $t12 := move($t2) + 15: $t13 := ascii::into_bytes($t12) + 16: $t4 := $t13 17: goto 18 18: label L5 - 19: $t14 := copy($t2) - 20: $t15 := copy($t3) - 21: $t16 := <($t14, $t15) - 22: if ($t16) goto 23 else goto 35 - 23: label L3 - 24: goto 25 - 25: label L4 - 26: $t17 := copy($t0) - 27: $t18 := copy($t2) - 28: $t19 := copy($t3) - 29: vector::swap<#0>($t17, $t18, $t19) - 30: $t20 := move($t2) - 31: $t21 := 1 - 32: $t22 := +($t20, $t21) - 33: $t2 := $t22 - 34: goto 18 - 35: label L2 - 36: $t23 := move($t0) - 37: destroy($t23) + 19: $t14 := borrow_local($t4) + 20: $t15 := vector::is_empty($t14) + 21: $t16 := !($t15) + 22: if ($t16) goto 23 else goto 33 + 23: label L4 + 24: $t17 := borrow_local($t4) + 25: $t18 := vector::pop_back($t17) + 26: $t3 := $t18 + 27: $t19 := copy($t0) + 28: $t20 := borrow_field.bytes($t19) + 29: $t21 := move($t3) + 30: $t22 := copy($t1) + 31: vector::insert($t20, $t21, $t22) + 32: goto 18 + 33: label L3 + 34: $t23 := move($t0) + 35: destroy($t23) + 36: $t24 := move($t4) + 37: vector::destroy_empty($t24) 38: return () } [variant baseline] -public fun vector::is_empty<#0>($t0|v: &vector<#0>): bool { - var $t1: &vector<#0> - var $t2: u64 +public fun ascii::is_empty($t0|string: &ascii::String): bool { + var $t1: &ascii::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::length($t0|string: &ascii::String): u64 { + var $t1: &ascii::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := ascii::as_bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::all_characters_printable($t0|string: &ascii::String): bool { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|i#1#12: u64 + var $t4|i#1#9: u64 + var $t5|stop#1#9: u64 + var $t6|v#1#3: &vector + var $t7: &ascii::String + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 + var $t12: u64 + var $t13: u64 + var $t14: u64 + var $t15: bool + var $t16: u64 + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool + var $t25: u64 + var $t26: u64 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + 0: $t7 := move($t0) + 1: $t8 := borrow_field.bytes($t7) + 2: $t6 := $t8 + 3: $t9 := copy($t6) + 4: $t10 := vector::length($t9) + 5: $t1 := $t10 + 6: $t11 := 0 + 7: $t4 := $t11 + 8: $t12 := move($t1) + 9: $t5 := $t12 + 10: goto 11 + 11: label L5 + 12: $t13 := copy($t4) + 13: $t14 := copy($t5) + 14: $t15 := <($t13, $t14) + 15: if ($t15) goto 16 else goto 38 + 16: label L1 + 17: $t16 := copy($t4) + 18: $t3 := $t16 + 19: $t17 := copy($t6) + 20: $t18 := move($t3) + 21: $t19 := vector::borrow($t17, $t18) + 22: $t20 := read_ref($t19) + 23: $t21 := ascii::is_printable_char($t20) + 24: $t22 := !($t21) + 25: if ($t22) goto 26 else goto 32 + 26: label L3 + 27: $t23 := move($t6) + 28: destroy($t23) + 29: $t24 := false + 30: $t2 := $t24 + 31: goto 44 + 32: label L2 + 33: $t25 := move($t4) + 34: $t26 := 1 + 35: $t27 := +($t25, $t26) + 36: $t4 := $t27 + 37: goto 11 + 38: label L0 + 39: $t28 := move($t6) + 40: destroy($t28) + 41: $t29 := true + 42: $t2 := $t29 + 43: goto 44 + 44: label L4 + 45: $t30 := move($t2) + 46: return $t30 +} + + +[variant baseline] +public fun ascii::string($t0|bytes: vector): ascii::String { + var $t1|x#1#0: option::Option + var $t2: vector + var $t3: option::Option + var $t4: &option::Option + var $t5: bool + var $t6: u64 + var $t7: option::Option + var $t8: ascii::String + 0: $t2 := move($t0) + 1: $t3 := ascii::try_string($t2) + 2: $t1 := $t3 + 3: $t4 := borrow_local($t1) + 4: $t5 := option::is_some($t4) + 5: if ($t5) goto 6 else goto 8 + 6: label L1 + 7: goto 11 + 8: label L0 + 9: $t6 := 65536 + 10: abort($t6) + 11: label L2 + 12: $t7 := move($t1) + 13: $t8 := option::destroy_some($t7) + 14: return $t8 +} + + +[variant baseline] +public fun ascii::as_bytes($t0|string: &ascii::String): &vector { + var $t1: &ascii::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::byte($t0|char: ascii::Char): u8 { + var $t1: ascii::Char + var $t2: u8 + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::Char($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::char($t0|byte: u8): ascii::Char { + var $t1: u8 + var $t2: bool var $t3: u64 + var $t4: u8 + var $t5: ascii::Char + 0: $t1 := copy($t0) + 1: $t2 := ascii::is_valid_char($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 65536 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack ascii::Char($t4) + 11: return $t5 +} + + +[variant baseline] +fun ascii::char_to_lowercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 65 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 90 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := +($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +fun ascii::char_to_uppercase($t0|byte: u8): u8 { + var $t1|tmp#$1: bool + var $t2|tmp#$2: u8 + var $t3: u8 + var $t4: u8 + var $t5: bool + var $t6: u8 + var $t7: u8 + var $t8: bool + var $t9: bool + var $t10: bool + var $t11: u8 + var $t12: u8 + var $t13: u8 + var $t14: u8 + var $t15: u8 + 0: $t3 := copy($t0) + 1: $t4 := 97 + 2: $t5 := >=($t3, $t4) + 3: if ($t5) goto 4 else goto 10 + 4: label L1 + 5: $t6 := copy($t0) + 6: $t7 := 122 + 7: $t8 := <=($t6, $t7) + 8: $t1 := $t8 + 9: goto 14 + 10: label L0 + 11: $t9 := false + 12: $t1 := $t9 + 13: goto 14 + 14: label L2 + 15: $t10 := move($t1) + 16: if ($t10) goto 17 else goto 23 + 17: label L4 + 18: $t11 := move($t0) + 19: $t12 := 32 + 20: $t13 := -($t11, $t12) + 21: $t2 := $t13 + 22: goto 27 + 23: label L3 + 24: $t14 := move($t0) + 25: $t2 := $t14 + 26: goto 27 + 27: label L5 + 28: $t15 := move($t2) + 29: return $t15 +} + + +[variant baseline] +public fun ascii::into_bytes($t0|string: ascii::String): vector { + var $t1: ascii::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack ascii::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun ascii::is_printable_char($t0|byte: u8): bool { + var $t1|tmp#$1: bool + var $t2: u8 + var $t3: u8 var $t4: bool + var $t5: u8 + var $t6: u8 + var $t7: bool + var $t8: bool + var $t9: bool + 0: $t2 := copy($t0) + 1: $t3 := 32 + 2: $t4 := >=($t2, $t3) + 3: if ($t4) goto 4 else goto 10 + 4: label L1 + 5: $t5 := move($t0) + 6: $t6 := 126 + 7: $t7 := <=($t5, $t6) + 8: $t1 := $t7 + 9: goto 14 + 10: label L0 + 11: $t8 := false + 12: $t1 := $t8 + 13: goto 14 + 14: label L2 + 15: $t9 := move($t1) + 16: return $t9 +} + + +[variant baseline] +public fun ascii::is_valid_char($t0|b: u8): bool { + var $t1: u8 + var $t2: u8 + var $t3: bool 0: $t1 := move($t0) - 1: $t2 := vector::length<#0>($t1) - 2: $t3 := 0 - 3: $t4 := ==($t2, $t3) + 1: $t2 := 127 + 2: $t3 := <=($t1, $t2) + 3: return $t3 +} + + +[variant baseline] +public fun ascii::pop_char($t0|string: &mut ascii::String): ascii::Char { + var $t1: &mut ascii::String + var $t2: &mut vector + var $t3: u8 + var $t4: ascii::Char + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::pop_back($t2) + 3: $t4 := pack ascii::Char($t3) 4: return $t4 } [variant baseline] -public native fun vector::length<#0>($t0|v: &vector<#0>): u64; - - -[variant baseline] -public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0; +public fun ascii::push_char($t0|string: &mut ascii::String, $t1|char: ascii::Char) { + var $t2: &mut ascii::String + var $t3: &mut vector + var $t4: &ascii::Char + var $t5: &u8 + var $t6: u8 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.byte($t4) + 4: $t6 := read_ref($t5) + 5: vector::push_back($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun ascii::substring($t0|string: &ascii::String, $t1|i: u64, $t2|j: u64): ascii::String { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: vector + var $t5|i#1#3: u64 + var $t6|i#1#6: u64 + var $t7|stop#1#3: u64 + var $t8: u64 + var $t9: u64 + var $t10: bool + var $t11: u64 + var $t12: &ascii::String + var $t13: u64 + var $t14: bool + var $t15: bool + var $t16: bool + var $t17: &ascii::String + var $t18: u64 + var $t19: vector + var $t20: u64 + var $t21: u64 + var $t22: u64 + var $t23: u64 + var $t24: bool + var $t25: u64 + var $t26: &mut vector + var $t27: &ascii::String + var $t28: &vector + var $t29: u64 + var $t30: &u8 + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &ascii::String + var $t36: vector + var $t37: ascii::String + 0: $t8 := copy($t1) + 1: $t9 := copy($t2) + 2: $t10 := <=($t8, $t9) + 3: if ($t10) goto 4 else goto 11 + 4: label L1 + 5: $t11 := copy($t2) + 6: $t12 := copy($t0) + 7: $t13 := ascii::length($t12) + 8: $t14 := <=($t11, $t13) + 9: $t3 := $t14 + 10: goto 15 + 11: label L0 + 12: $t15 := false + 13: $t3 := $t15 + 14: goto 15 + 15: label L2 + 16: $t16 := move($t3) + 17: if ($t16) goto 18 else goto 20 + 18: label L4 + 19: goto 25 + 20: label L3 + 21: $t17 := move($t0) + 22: destroy($t17) + 23: $t18 := 65537 + 24: abort($t18) + 25: label L5 + 26: $t19 := [] + 27: $t4 := $t19 + 28: $t20 := move($t1) + 29: $t5 := $t20 + 30: $t21 := move($t2) + 31: $t7 := $t21 + 32: goto 33 + 33: label L8 + 34: $t22 := copy($t5) + 35: $t23 := copy($t7) + 36: $t24 := <($t22, $t23) + 37: if ($t24) goto 38 else goto 53 + 38: label L7 + 39: $t25 := copy($t5) + 40: $t6 := $t25 + 41: $t26 := borrow_local($t4) + 42: $t27 := copy($t0) + 43: $t28 := borrow_field.bytes($t27) + 44: $t29 := move($t6) + 45: $t30 := vector::borrow($t28, $t29) + 46: $t31 := read_ref($t30) + 47: vector::push_back($t26, $t31) + 48: $t32 := move($t5) + 49: $t33 := 1 + 50: $t34 := +($t32, $t33) + 51: $t5 := $t34 + 52: goto 33 + 53: label L6 + 54: $t35 := move($t0) + 55: destroy($t35) + 56: $t36 := move($t4) + 57: $t37 := pack ascii::String($t36) + 58: return $t37 +} + + +[variant baseline] +public fun ascii::to_lowercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_lowercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} [variant baseline] -public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0); +public fun ascii::to_uppercase($t0|string: &ascii::String): ascii::String { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: u8 + var $t3|tmp#$3: &mut vector + var $t4|e#1#13: &u8 + var $t5|i#1#12: u64 + var $t6|i#1#9: u64 + var $t7|r#1#1: vector + var $t8|stop#1#9: u64 + var $t9|v#1#1: &vector + var $t10|v#1#3: &vector + var $t11: &ascii::String + var $t12: &vector + var $t13: vector + var $t14: &vector + var $t15: &vector + var $t16: u64 + var $t17: u64 + var $t18: u64 + var $t19: u64 + var $t20: u64 + var $t21: bool + var $t22: u64 + var $t23: &vector + var $t24: u64 + var $t25: &u8 + var $t26: &mut vector + var $t27: &u8 + var $t28: u8 + var $t29: u8 + var $t30: &mut vector + var $t31: u8 + var $t32: u64 + var $t33: u64 + var $t34: u64 + var $t35: &vector + var $t36: vector + var $t37: ascii::String + 0: $t11 := move($t0) + 1: $t12 := ascii::as_bytes($t11) + 2: $t9 := $t12 + 3: $t13 := [] + 4: $t7 := $t13 + 5: $t14 := move($t9) + 6: $t10 := $t14 + 7: $t15 := copy($t10) + 8: $t16 := vector::length($t15) + 9: $t1 := $t16 + 10: $t17 := 0 + 11: $t6 := $t17 + 12: $t18 := move($t1) + 13: $t8 := $t18 + 14: goto 15 + 15: label L2 + 16: $t19 := copy($t6) + 17: $t20 := copy($t8) + 18: $t21 := <($t19, $t20) + 19: if ($t21) goto 20 else goto 41 + 20: label L1 + 21: $t22 := copy($t6) + 22: $t5 := $t22 + 23: $t23 := copy($t10) + 24: $t24 := move($t5) + 25: $t25 := vector::borrow($t23, $t24) + 26: $t4 := $t25 + 27: $t26 := borrow_local($t7) + 28: $t3 := $t26 + 29: $t27 := move($t4) + 30: $t28 := read_ref($t27) + 31: $t29 := ascii::char_to_uppercase($t28) + 32: $t2 := $t29 + 33: $t30 := move($t3) + 34: $t31 := move($t2) + 35: vector::push_back($t30, $t31) + 36: $t32 := move($t6) + 37: $t33 := 1 + 38: $t34 := +($t32, $t33) + 39: $t6 := $t34 + 40: goto 15 + 41: label L0 + 42: $t35 := move($t10) + 43: destroy($t35) + 44: $t36 := move($t7) + 45: $t37 := pack ascii::String($t36) + 46: return $t37 +} [variant baseline] -public fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { - var $t2|tmp#$2: u64 - var $t3|tmp#$3: &mut vector<#0> - var $t4|len#1#0: u64 - var $t5: &mut vector<#0> - var $t6: &vector<#0> - var $t7: u64 - var $t8: u64 - var $t9: u64 - var $t10: bool - var $t11: &mut vector<#0> +public fun ascii::try_string($t0|bytes: vector): option::Option { + var $t1|$stop#0#6: u64 + var $t2|tmp#$2: bool + var $t3|tmp#$3: option::Option + var $t4|i#1#12: u64 + var $t5|i#1#9: u64 + var $t6|stop#1#9: u64 + var $t7|v#1#3: &vector + var $t8: &vector + var $t9: &vector + var $t10: u64 + var $t11: u64 var $t12: u64 var $t13: u64 var $t14: u64 - var $t15: u64 + var $t15: bool var $t16: u64 - var $t17: u64 - var $t18: bool - var $t19: &mut vector<#0> - var $t20: u64 - var $t21: u64 - var $t22: u64 - var $t23: u64 - var $t24: &mut vector<#0> + var $t17: &vector + var $t18: u64 + var $t19: &u8 + var $t20: u8 + var $t21: bool + var $t22: bool + var $t23: &vector + var $t24: bool var $t25: u64 var $t26: u64 - var $t27: &mut vector<#0> - var $t28: #0 - 0: $t5 := copy($t0) - 1: $t6 := freeze_ref($t5) - 2: $t7 := vector::length<#0>($t6) - 3: $t4 := $t7 - 4: $t8 := copy($t1) - 5: $t9 := copy($t4) - 6: $t10 := >=($t8, $t9) - 7: if ($t10) goto 8 else goto 13 - 8: label L1 - 9: $t11 := move($t0) - 10: destroy($t11) - 11: $t12 := 131072 - 12: abort($t12) - 13: label L0 - 14: $t13 := move($t4) - 15: $t14 := 1 - 16: $t15 := -($t13, $t14) - 17: $t4 := $t15 - 18: goto 19 - 19: label L5 - 20: $t16 := copy($t1) - 21: $t17 := copy($t4) - 22: $t18 := <($t16, $t17) - 23: if ($t18) goto 24 else goto 40 - 24: label L3 - 25: goto 26 - 26: label L4 - 27: $t19 := copy($t0) - 28: $t3 := $t19 - 29: $t20 := copy($t1) - 30: $t2 := $t20 - 31: $t21 := move($t1) - 32: $t22 := 1 - 33: $t23 := +($t21, $t22) - 34: $t1 := $t23 - 35: $t24 := move($t3) - 36: $t25 := move($t2) - 37: $t26 := copy($t1) - 38: vector::swap<#0>($t24, $t25, $t26) - 39: goto 19 - 40: label L2 - 41: $t27 := move($t0) - 42: $t28 := vector::pop_back<#0>($t27) - 43: return $t28 + var $t27: u64 + var $t28: &vector + var $t29: bool + var $t30: bool + var $t31: vector + var $t32: ascii::String + var $t33: option::Option + var $t34: option::Option + var $t35: option::Option + 0: $t8 := borrow_local($t0) + 1: $t7 := $t8 + 2: $t9 := copy($t7) + 3: $t10 := vector::length($t9) + 4: $t1 := $t10 + 5: $t11 := 0 + 6: $t5 := $t11 + 7: $t12 := move($t1) + 8: $t6 := $t12 + 9: goto 10 + 10: label L5 + 11: $t13 := copy($t5) + 12: $t14 := copy($t6) + 13: $t15 := <($t13, $t14) + 14: if ($t15) goto 15 else goto 37 + 15: label L1 + 16: $t16 := copy($t5) + 17: $t4 := $t16 + 18: $t17 := copy($t7) + 19: $t18 := move($t4) + 20: $t19 := vector::borrow($t17, $t18) + 21: $t20 := read_ref($t19) + 22: $t21 := ascii::is_valid_char($t20) + 23: $t22 := !($t21) + 24: if ($t22) goto 25 else goto 31 + 25: label L3 + 26: $t23 := move($t7) + 27: destroy($t23) + 28: $t24 := false + 29: $t2 := $t24 + 30: goto 43 + 31: label L2 + 32: $t25 := move($t5) + 33: $t26 := 1 + 34: $t27 := +($t25, $t26) + 35: $t5 := $t27 + 36: goto 10 + 37: label L0 + 38: $t28 := move($t7) + 39: destroy($t28) + 40: $t29 := true + 41: $t2 := $t29 + 42: goto 43 + 43: label L4 + 44: $t30 := move($t2) + 45: if ($t30) goto 46 else goto 52 + 46: label L7 + 47: $t31 := move($t0) + 48: $t32 := pack ascii::String($t31) + 49: $t33 := option::some($t32) + 50: $t3 := $t33 + 51: goto 56 + 52: label L6 + 53: $t34 := option::none() + 54: $t3 := $t34 + 55: goto 56 + 56: label L8 + 57: $t35 := move($t3) + 58: return $t35 } [variant baseline] -public fun vector::reverse<#0>($t0|v: &mut vector<#0>) { - var $t1|back_index#1#0: u64 - var $t2|front_index#1#0: u64 - var $t3|len#1#0: u64 - var $t4: &mut vector<#0> - var $t5: &vector<#0> +public fun string::append($t0|s: &mut string::String, $t1|r: string::String) { + var $t2: &mut string::String + var $t3: &mut vector + var $t4: &string::String + var $t5: &vector + var $t6: vector + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := borrow_local($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := read_ref($t5) + 5: vector::append($t3, $t6) + 6: return () +} + + +[variant baseline] +public fun string::index_of($t0|s: &string::String, $t1|r: &string::String): u64 { + var $t2: &string::String + var $t3: &vector + var $t4: &string::String + var $t5: &vector var $t6: u64 - var $t7: u64 - var $t8: u64 - var $t9: bool - var $t10: &mut vector<#0> - var $t11: u64 + 0: $t2 := move($t0) + 1: $t3 := borrow_field.bytes($t2) + 2: $t4 := move($t1) + 3: $t5 := borrow_field.bytes($t4) + 4: $t6 := string::internal_index_of($t3, $t5) + 5: return $t6 +} + + +[variant baseline] +public fun string::insert($t0|s: &mut string::String, $t1|at: u64, $t2|o: string::String) { + var $t3|tmp#$3: bool + var $t4|bytes#1#0: &vector + var $t5|end#1#0: string::String + var $t6|front#1#0: string::String + var $t7|l#1#0: u64 + var $t8: &mut string::String + var $t9: &vector + var $t10: u64 + var $t11: &vector var $t12: u64 - var $t13: u64 - var $t14: u64 + var $t13: bool + var $t14: &vector var $t15: u64 - var $t16: u64 - var $t17: bool - var $t18: &mut vector<#0> - var $t19: u64 - var $t20: u64 + var $t16: bool + var $t17: &vector + var $t18: bool + var $t19: bool + var $t20: &mut string::String var $t21: u64 - var $t22: u64 - var $t23: u64 + var $t22: &mut string::String + var $t23: &string::String var $t24: u64 - var $t25: u64 - var $t26: u64 - var $t27: &mut vector<#0> - 0: $t4 := copy($t0) - 1: $t5 := freeze_ref($t4) - 2: $t6 := vector::length<#0>($t5) - 3: $t3 := $t6 - 4: $t7 := copy($t3) - 5: $t8 := 0 - 6: $t9 := ==($t7, $t8) - 7: if ($t9) goto 8 else goto 12 + var $t25: &mut string::String + var $t26: &string::String + var $t27: u64 + var $t28: u64 + var $t29: string::String + var $t30: &mut string::String + var $t31: &string::String + var $t32: u64 + var $t33: u64 + var $t34: string::String + var $t35: &mut string::String + var $t36: string::String + var $t37: &mut string::String + var $t38: string::String + var $t39: string::String + var $t40: &mut string::String + 0: $t8 := copy($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t4 := $t9 + 3: $t10 := copy($t1) + 4: $t11 := copy($t4) + 5: $t12 := vector::length($t11) + 6: $t13 := <=($t10, $t12) + 7: if ($t13) goto 8 else goto 14 8: label L1 - 9: $t10 := move($t0) - 10: destroy($t10) - 11: return () - 12: label L0 - 13: $t11 := 0 - 14: $t2 := $t11 - 15: $t12 := move($t3) - 16: $t13 := 1 - 17: $t14 := -($t12, $t13) - 18: $t1 := $t14 + 9: $t14 := move($t4) + 10: $t15 := copy($t1) + 11: $t16 := string::internal_is_char_boundary($t14, $t15) + 12: $t3 := $t16 + 13: goto 20 + 14: label L0 + 15: $t17 := move($t4) + 16: destroy($t17) + 17: $t18 := false + 18: $t3 := $t18 19: goto 20 - 20: label L5 - 21: $t15 := copy($t2) - 22: $t16 := copy($t1) - 23: $t17 := <($t15, $t16) - 24: if ($t17) goto 25 else goto 41 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 25 + 23: label L4 + 24: goto 30 25: label L3 - 26: goto 27 - 27: label L4 - 28: $t18 := copy($t0) - 29: $t19 := copy($t2) - 30: $t20 := copy($t1) - 31: vector::swap<#0>($t18, $t19, $t20) - 32: $t21 := move($t2) - 33: $t22 := 1 - 34: $t23 := +($t21, $t22) - 35: $t2 := $t23 - 36: $t24 := move($t1) - 37: $t25 := 1 - 38: $t26 := -($t24, $t25) - 39: $t1 := $t26 - 40: goto 20 - 41: label L2 - 42: $t27 := move($t0) - 43: destroy($t27) - 44: return () + 26: $t20 := move($t0) + 27: destroy($t20) + 28: $t21 := 2 + 29: abort($t21) + 30: label L5 + 31: $t22 := copy($t0) + 32: $t23 := freeze_ref($t22) + 33: $t24 := string::length($t23) + 34: $t7 := $t24 + 35: $t25 := copy($t0) + 36: $t26 := freeze_ref($t25) + 37: $t27 := 0 + 38: $t28 := copy($t1) + 39: $t29 := string::substring($t26, $t27, $t28) + 40: $t6 := $t29 + 41: $t30 := copy($t0) + 42: $t31 := freeze_ref($t30) + 43: $t32 := move($t1) + 44: $t33 := move($t7) + 45: $t34 := string::substring($t31, $t32, $t33) + 46: $t5 := $t34 + 47: $t35 := borrow_local($t6) + 48: $t36 := move($t2) + 49: string::append($t35, $t36) + 50: $t37 := borrow_local($t6) + 51: $t38 := move($t5) + 52: string::append($t37, $t38) + 53: $t39 := move($t6) + 54: $t40 := move($t0) + 55: write_ref($t40, $t39) + 56: return () } [variant baseline] -public fun vector::singleton<#0>($t0|e: #0): vector<#0> { - var $t1|v#1#0: vector<#0> - var $t2: vector<#0> - var $t3: &mut vector<#0> - var $t4: #0 - var $t5: vector<#0> - 0: $t2 := vector::empty<#0>() - 1: $t1 := $t2 - 2: $t3 := borrow_local($t1) - 3: $t4 := move($t0) - 4: vector::push_back<#0>($t3, $t4) - 5: $t5 := move($t1) - 6: return $t5 +public fun string::is_empty($t0|s: &string::String): bool { + var $t1: &string::String + var $t2: &vector + var $t3: bool + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::is_empty($t2) + 3: return $t3 } [variant baseline] -public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64); +public fun string::length($t0|s: &string::String): u64 { + var $t1: &string::String + var $t2: &vector + var $t3: u64 + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: $t3 := vector::length($t2) + 3: return $t3 +} [variant baseline] -public fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0 { - var $t2|last_idx#1#0: u64 - var $t3: &mut vector<#0> - var $t4: &vector<#0> - var $t5: bool - var $t6: bool - var $t7: &mut vector<#0> - var $t8: u64 - var $t9: &mut vector<#0> - var $t10: &vector<#0> +public fun string::as_bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := borrow_field.bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::into_bytes($t0|s: string::String): vector { + var $t1: string::String + var $t2: vector + 0: $t1 := move($t0) + 1: $t2 := unpack string::String($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::bytes($t0|s: &string::String): &vector { + var $t1: &string::String + var $t2: &vector + 0: $t1 := move($t0) + 1: $t2 := string::as_bytes($t1) + 2: return $t2 +} + + +[variant baseline] +public fun string::substring($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3|tmp#$3: bool + var $t4|tmp#$4: bool + var $t5|tmp#$5: bool + var $t6|bytes#1#0: &vector + var $t7|l#1#0: u64 + var $t8: &string::String + var $t9: &vector + var $t10: &vector var $t11: u64 var $t12: u64 var $t13: u64 - var $t14: &mut vector<#0> + var $t14: bool var $t15: u64 var $t16: u64 - var $t17: &mut vector<#0> - var $t18: #0 - 0: $t3 := copy($t0) - 1: $t4 := freeze_ref($t3) - 2: $t5 := vector::is_empty<#0>($t4) - 3: $t6 := !($t5) - 4: if ($t6) goto 5 else goto 7 - 5: label L1 - 6: goto 12 - 7: label L0 - 8: $t7 := move($t0) - 9: destroy($t7) - 10: $t8 := 131072 - 11: abort($t8) - 12: label L2 - 13: $t9 := copy($t0) - 14: $t10 := freeze_ref($t9) - 15: $t11 := vector::length<#0>($t10) - 16: $t12 := 1 - 17: $t13 := -($t11, $t12) - 18: $t2 := $t13 - 19: $t14 := copy($t0) - 20: $t15 := move($t1) - 21: $t16 := move($t2) - 22: vector::swap<#0>($t14, $t15, $t16) - 23: $t17 := move($t0) - 24: $t18 := vector::pop_back<#0>($t17) - 25: return $t18 + var $t17: bool + var $t18: bool + var $t19: bool + var $t20: &vector + var $t21: u64 + var $t22: bool + var $t23: bool + var $t24: bool + var $t25: &vector + var $t26: u64 + var $t27: bool + var $t28: bool + var $t29: bool + var $t30: &vector + var $t31: u64 + var $t32: &vector + var $t33: u64 + var $t34: u64 + var $t35: vector + var $t36: string::String + 0: $t8 := move($t0) + 1: $t9 := borrow_field.bytes($t8) + 2: $t6 := $t9 + 3: $t10 := copy($t6) + 4: $t11 := vector::length($t10) + 5: $t7 := $t11 + 6: $t12 := copy($t2) + 7: $t13 := move($t7) + 8: $t14 := <=($t12, $t13) + 9: if ($t14) goto 10 else goto 16 + 10: label L1 + 11: $t15 := copy($t1) + 12: $t16 := copy($t2) + 13: $t17 := <=($t15, $t16) + 14: $t3 := $t17 + 15: goto 20 + 16: label L0 + 17: $t18 := false + 18: $t3 := $t18 + 19: goto 20 + 20: label L2 + 21: $t19 := move($t3) + 22: if ($t19) goto 23 else goto 29 + 23: label L4 + 24: $t20 := copy($t6) + 25: $t21 := copy($t1) + 26: $t22 := string::internal_is_char_boundary($t20, $t21) + 27: $t4 := $t22 + 28: goto 33 + 29: label L3 + 30: $t23 := false + 31: $t4 := $t23 + 32: goto 33 + 33: label L5 + 34: $t24 := move($t4) + 35: if ($t24) goto 36 else goto 42 + 36: label L7 + 37: $t25 := copy($t6) + 38: $t26 := copy($t2) + 39: $t27 := string::internal_is_char_boundary($t25, $t26) + 40: $t5 := $t27 + 41: goto 46 + 42: label L6 + 43: $t28 := false + 44: $t5 := $t28 + 45: goto 46 + 46: label L8 + 47: $t29 := move($t5) + 48: if ($t29) goto 49 else goto 51 + 49: label L10 + 50: goto 56 + 51: label L9 + 52: $t30 := move($t6) + 53: destroy($t30) + 54: $t31 := 2 + 55: abort($t31) + 56: label L11 + 57: $t32 := move($t6) + 58: $t33 := move($t1) + 59: $t34 := move($t2) + 60: $t35 := string::internal_sub_string($t32, $t33, $t34) + 61: $t36 := pack string::String($t35) + 62: return $t36 } [variant baseline] -fun ReturnRefsIntoVec::return_vec_index_immut($t0|v: &vector): &u64 { - var $t1: &vector - var $t2: u64 - var $t3: &u64 +public fun string::append_utf8($t0|s: &mut string::String, $t1|bytes: vector) { + var $t2: &mut string::String + var $t3: vector + var $t4: string::String + 0: $t2 := move($t0) + 1: $t3 := move($t1) + 2: $t4 := string::utf8($t3) + 3: string::append($t2, $t4) + 4: return () +} + + +[variant baseline] +public fun string::from_ascii($t0|s: ascii::String): string::String { + var $t1: ascii::String + var $t2: vector + var $t3: string::String 0: $t1 := move($t0) - 1: $t2 := 0 - 2: $t3 := vector::borrow($t1, $t2) + 1: $t2 := ascii::into_bytes($t1) + 2: $t3 := pack string::String($t2) 3: return $t3 } [variant baseline] -fun ReturnRefsIntoVec::return_vec_index_mut($t0|v: &mut vector): &mut u64 { - var $t1: &mut vector - var $t2: u64 - var $t3: &mut u64 +native fun string::internal_check_utf8($t0|v: &vector): bool; + + +[variant baseline] +native fun string::internal_index_of($t0|v: &vector, $t1|r: &vector): u64; + + +[variant baseline] +native fun string::internal_is_char_boundary($t0|v: &vector, $t1|i: u64): bool; + + +[variant baseline] +native fun string::internal_sub_string($t0|v: &vector, $t1|i: u64, $t2|j: u64): vector; + + +[variant baseline] +public fun string::sub_string($t0|s: &string::String, $t1|i: u64, $t2|j: u64): string::String { + var $t3: &string::String + var $t4: u64 + var $t5: u64 + var $t6: string::String + 0: $t3 := move($t0) + 1: $t4 := move($t1) + 2: $t5 := move($t2) + 3: $t6 := string::substring($t3, $t4, $t5) + 4: return $t6 +} + + +[variant baseline] +public fun string::to_ascii($t0|s: string::String): ascii::String { + var $t1: string::String + var $t2: vector + var $t3: ascii::String 0: $t1 := move($t0) - 1: $t2 := 0 - 2: $t3 := vector::borrow_mut($t1, $t2) + 1: $t2 := unpack string::String($t1) + 2: $t3 := ascii::string($t2) 3: return $t3 } + + +[variant baseline] +public fun string::try_utf8($t0|bytes: vector): option::Option { + var $t1|tmp#$1: option::Option + var $t2: &vector + var $t3: bool + var $t4: vector + var $t5: string::String + var $t6: option::Option + var $t7: option::Option + var $t8: option::Option + 0: $t2 := borrow_local($t0) + 1: $t3 := string::internal_check_utf8($t2) + 2: if ($t3) goto 3 else goto 9 + 3: label L1 + 4: $t4 := move($t0) + 5: $t5 := pack string::String($t4) + 6: $t6 := option::some($t5) + 7: $t1 := $t6 + 8: goto 13 + 9: label L0 + 10: $t7 := option::none() + 11: $t1 := $t7 + 12: goto 13 + 13: label L2 + 14: $t8 := move($t1) + 15: return $t8 +} + + +[variant baseline] +public fun string::utf8($t0|bytes: vector): string::String { + var $t1: &vector + var $t2: bool + var $t3: u64 + var $t4: vector + var $t5: string::String + 0: $t1 := borrow_local($t0) + 1: $t2 := string::internal_check_utf8($t1) + 2: if ($t2) goto 3 else goto 5 + 3: label L1 + 4: goto 8 + 5: label L0 + 6: $t3 := 1 + 7: abort($t3) + 8: label L2 + 9: $t4 := move($t0) + 10: $t5 := pack string::String($t4) + 11: return $t5 +} diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.move b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.move index f6518eabc4402..7c6ac51c5377a 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/return_refs_into_vec.move @@ -1,7 +1,11 @@ +// dep: ../move-stdlib/sources/macros.move +// dep: ../move-stdlib/sources/u64.move +// dep: ../move-stdlib/sources/option.move +// dep: ../move-stdlib/sources/ascii.move +// dep: ../move-stdlib/sources/string.move // dep: ../move-stdlib/sources/vector.move module 0x1::ReturnRefsIntoVec { - use std::vector; // should not complain fun return_vec_index_immut(v: &vector): &u64 { diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.exp b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.exp index 5b40517253203..a54b79a43f823 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.exp +++ b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.exp @@ -39,10 +39,3 @@ public fun StructEq::new(): StructEq::S { 1: $t1 := pack StructEq::S($t0) 2: return $t1 } - -============ Diagnostics ================ -warning: DEPRECATED. will be removed - ┌─ tests/escape_analysis/struct_eq.move:5:5 - │ -5 │ invariant forall s: S: s == S { f: 10 }; - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Specification blocks are deprecated and are no longer used diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.move b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.move index 33b9ff48059ee..216c7b3074f1a 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/escape_analysis/struct_eq.move @@ -1,8 +1,6 @@ module 0x1::StructEq { - struct S { f: u64 } - - invariant forall s: S: s == S { f: 10 }; + public struct S { f: u64 } public fun new(): S { S { f: 10 } diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.exp b/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.exp index 7c4c9b025d777..5f67678cfb725 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.exp +++ b/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.exp @@ -1,21 +1,13 @@ ============ initial translation from Move ================ [variant baseline] -public fun signer::address_of($t0|s: &signer): address { - var $t1: &signer - var $t2: &address - var $t3: address - 0: $t1 := move($t0) - 1: $t2 := signer::borrow_address($t1) - 2: $t3 := read_ref($t2) - 3: return $t3 +public fun address::length(): u64 { + var $t0: u64 + 0: $t0 := 32 + 1: return $t0 } -[variant baseline] -public native fun signer::borrow_address($t0|s: &signer): &address; - - [variant baseline] fun SmokeTest::arithmetic_ops($t0|a: u64): (u64, u64) { var $t1|c#1#0: u64 diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.move index 92acb6be19f0a..a4a211a59f280 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/from_move/smoke_test.move @@ -1,7 +1,7 @@ // This module contains just some arbitrary code to smoke test the basic functionality of translation from Move // to stackless bytecode. Coverage for byte code translation is achieved by many more tests in the prover. -// dep: ../move-stdlib/sources/signer.move +// dep: ../move-stdlib/sources/address.move module 0x42::SmokeTest { // ----------------- @@ -24,17 +24,17 @@ module 0x42::SmokeTest { (c, a) } - struct A { + public struct A { addr: address, val: u64, } - struct B { + public struct B { val: u64, a: A, } - struct C { + public struct C { val: u64, b: B, } diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/livevar/basic_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/livevar/basic_test.move index 9f0c3f241ef16..5d3373fa01e66 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/livevar/basic_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/livevar/basic_test.move @@ -1,5 +1,5 @@ module 0x42::TestLiveVars { - struct R has copy, drop { + public struct R has copy, drop { x: u64 } @@ -11,14 +11,14 @@ module 0x42::TestLiveVars { fun test2(b: bool) : u64 { let r1 = R {x: 3}; let r2 = R {x: 4}; - let r_ref = &r1; + let mut r_ref = &r1; if (b) { r_ref = &r2; }; test1(r_ref) } - fun test3(n: u64, r_ref: &R) : u64 { + fun test3(mut n: u64, mut r_ref: &R) : u64 { let r1 = R {x: 3}; let r2 = R {x: 4}; while (0 < n) { diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/memory_instr/basic_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/memory_instr/basic_test.move index bacf2b4f7fd61..2f85281358bc4 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/memory_instr/basic_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/memory_instr/basic_test.move @@ -1,10 +1,10 @@ module 0x42::TestPackref { - struct R has copy, drop { + public struct R has copy, drop { x: u64 } fun test1() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = &mut r_ref.x; *x_ref = 0; @@ -21,7 +21,7 @@ module 0x42::TestPackref { } fun test4() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; test3(r_ref, 0); r @@ -32,7 +32,7 @@ module 0x42::TestPackref { } fun test6() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = test5(r_ref); test2(x_ref, 0); @@ -40,19 +40,19 @@ module 0x42::TestPackref { } fun test7(b: bool) { - let r1 = R {x: 3}; - let r2 = R {x: 4}; - let r_ref = &mut r1; + let mut r1 = R {x: 3}; + let mut r2 = R {x: 4}; + let mut r_ref = &mut r1; if (b) { r_ref = &mut r2; }; test3(r_ref, 0) } - fun test8(b: bool, n: u64, r_ref: &mut R) { - let r1 = R {x: 3}; - let r2 = R {x: 4}; - let t_ref = &mut r2; + fun test8(b: bool, mut n: u64, r_ref: &mut R) { + let mut r1 = R {x: 3}; + let mut r2 = R {x: 4}; + let mut t_ref = &mut r2; while (0 < n) { if (n/2 == 0) { t_ref = &mut r1 diff --git a/external-crates/move/crates/move-stackless-bytecode/tests/mut_ref_instrumentation/basic_test.move b/external-crates/move/crates/move-stackless-bytecode/tests/mut_ref_instrumentation/basic_test.move index 5133d72e27845..62ce5ab86038f 100644 --- a/external-crates/move/crates/move-stackless-bytecode/tests/mut_ref_instrumentation/basic_test.move +++ b/external-crates/move/crates/move-stackless-bytecode/tests/mut_ref_instrumentation/basic_test.move @@ -1,11 +1,11 @@ module 0x42::TestEliminateMutRefs { - struct R has copy, drop { + public struct R has copy, drop { x: u64 } fun test1() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = &mut r_ref.x; *x_ref = 0; @@ -22,7 +22,7 @@ module 0x42::TestEliminateMutRefs { } fun test4() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; test3(r_ref, 0); r @@ -33,7 +33,7 @@ module 0x42::TestEliminateMutRefs { } fun test6() : R { - let r = R {x: 3}; + let mut r = R {x: 3}; let r_ref = &mut r; let x_ref = test5(r_ref); test2(x_ref, 0); @@ -41,19 +41,19 @@ module 0x42::TestEliminateMutRefs { } fun test7(b: bool) { - let r1 = R {x: 3}; - let r2 = R {x: 4}; - let r_ref = &mut r1; + let mut r1 = R {x: 3}; + let mut r2 = R {x: 4}; + let mut r_ref = &mut r1; if (b) { r_ref = &mut r2; }; test3(r_ref, 0) } - fun test8(b: bool, n: u64, r_ref: &mut R) { - let r1 = R {x: 3}; - let r2 = R {x: 4}; - let t_ref = &mut r2; + fun test8(b: bool, mut n: u64, r_ref: &mut R) { + let mut r1 = R {x: 3}; + let mut r2 = R {x: 4}; + let mut t_ref = &mut r2; while (0 < n) { if (n/2 == 0) { t_ref = &mut r1 diff --git a/external-crates/move/crates/move-stdlib-natives/src/lib.rs b/external-crates/move/crates/move-stdlib-natives/src/lib.rs index 0a49187cb9623..4859724018619 100644 --- a/external-crates/move/crates/move-stdlib-natives/src/lib.rs +++ b/external-crates/move/crates/move-stdlib-natives/src/lib.rs @@ -20,6 +20,7 @@ use move_vm_runtime::native_functions::{make_table_from_iter, NativeFunctionTabl #[derive(Debug, Clone)] pub struct GasParameters { pub bcs: bcs::GasParameters, + pub debug: debug::GasParameters, pub hash: hash::GasParameters, pub signer: signer::GasParameters, pub string: string::GasParameters, @@ -40,7 +41,14 @@ impl GasParameters { failure: 0.into(), }, }, - + debug: debug::GasParameters { + print: debug::PrintGasParameters { + base_cost: 0.into(), + }, + print_stack_trace: debug::PrintStackTraceGasParameters { + base_cost: 0.into(), + }, + }, hash: hash::GasParameters { sha2_256: hash::Sha2_256GasParameters { base: 0.into(), @@ -102,49 +110,32 @@ impl GasParameters { }, } } -} - -pub fn all_natives( - move_std_addr: AccountAddress, - gas_params: GasParameters, -) -> NativeFunctionTable { - let mut natives = vec![]; - macro_rules! add_natives { - ($module_name: expr, $natives: expr) => { - natives.extend( - $natives.map(|(func_name, func)| ($module_name.to_string(), func_name, func)), - ); - }; - } - - add_natives!("bcs", bcs::make_all(gas_params.bcs)); - add_natives!("hash", hash::make_all(gas_params.hash)); - add_natives!("signer", signer::make_all(gas_params.signer)); - add_natives!("string", string::make_all(gas_params.string)); - add_natives!("type_name", type_name::make_all(gas_params.type_name)); - add_natives!("vector", vector::make_all(gas_params.vector)); - #[cfg(feature = "testing")] - { - add_natives!("unit_test", unit_test::make_all(gas_params.unit_test)); - } - - make_table_from_iter(move_std_addr, natives) -} - -#[derive(Debug, Clone)] -pub struct NurseryGasParameters { - debug: debug::GasParameters, -} - -impl NurseryGasParameters { - pub fn zeros() -> Self { + pub fn new( + bcs: bcs::GasParameters, + debug: debug::GasParameters, + hash: hash::GasParameters, + string: string::GasParameters, + type_name: type_name::GasParameters, + vector: vector::GasParameters, + ) -> Self { Self { - debug: debug::GasParameters { - print: debug::PrintGasParameters { + bcs, + debug, + hash, + string, + type_name, + vector, + signer: signer::GasParameters { + borrow_address: signer::BorrowAddressGasParameters { base: 0.into() }, + }, + #[cfg(feature = "testing")] + unit_test: unit_test::GasParameters { + create_signers_for_testing: unit_test::CreateSignersForTestingGasParameters { base_cost: 0.into(), + unit_cost: 0.into(), }, - print_stack_trace: debug::PrintStackTraceGasParameters { + poison: unit_test::PoisonGasParameters { base_cost: 0.into(), }, }, @@ -152,10 +143,10 @@ impl NurseryGasParameters { } } -pub fn nursery_natives( - silent: bool, +pub fn all_natives( move_std_addr: AccountAddress, - gas_params: NurseryGasParameters, + gas_params: GasParameters, + debug_is_silent: bool, ) -> NativeFunctionTable { let mut natives = vec![]; @@ -167,10 +158,20 @@ pub fn nursery_natives( }; } + add_natives!("bcs", bcs::make_all(gas_params.bcs)); + add_natives!("hash", hash::make_all(gas_params.hash)); + add_natives!("signer", signer::make_all(gas_params.signer)); + add_natives!("string", string::make_all(gas_params.string)); + add_natives!("type_name", type_name::make_all(gas_params.type_name)); + add_natives!("vector", vector::make_all(gas_params.vector)); add_natives!( "debug", - debug::make_all(silent, gas_params.debug, move_std_addr) + debug::make_all(debug_is_silent, gas_params.debug, move_std_addr) ); + #[cfg(feature = "testing")] + { + add_natives!("unit_test", unit_test::make_all(gas_params.unit_test)); + } make_table_from_iter(move_std_addr, natives) } diff --git a/external-crates/move/crates/move-stdlib/Move.toml b/external-crates/move/crates/move-stdlib/Move.toml index 8ea2f565bf829..43c2eb345a90b 100644 --- a/external-crates/move/crates/move-stdlib/Move.toml +++ b/external-crates/move/crates/move-stdlib/Move.toml @@ -1,5 +1,6 @@ [package] name = "MoveStdlib" +edition = "2024.beta" [addresses] std = "_" diff --git a/external-crates/move/crates/move-stdlib/docs/address.md b/external-crates/move/crates/move-stdlib/docs/address.md new file mode 100644 index 0000000000000..830fada18e886 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/address.md @@ -0,0 +1,44 @@ + + + +# Module `0x1::address` + +Provides a way to get address length since it's a +platform-specific parameter. + + +- [Function `length`](#0x1_address_length) + + +

+ + + + + +## Function `length` + +Should be converted to a native function. +Current implementation only works for Sui. + + +
public fun length(): u64
+
+ + + +
+Implementation + + +
public fun length(): u64 {
+    32
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/ascii.md b/external-crates/move/crates/move-stdlib/docs/ascii.md index 5430a4e361c65..92cb66877a162 100644 --- a/external-crates/move/crates/move-stdlib/docs/ascii.md +++ b/external-crates/move/crates/move-stdlib/docs/ascii.md @@ -17,14 +17,24 @@ that characters are valid ASCII, and that strings consist of only valid ASCII ch - [Function `push_char`](#0x1_ascii_push_char) - [Function `pop_char`](#0x1_ascii_pop_char) - [Function `length`](#0x1_ascii_length) +- [Function `append`](#0x1_ascii_append) +- [Function `insert`](#0x1_ascii_insert) +- [Function `substring`](#0x1_ascii_substring) - [Function `as_bytes`](#0x1_ascii_as_bytes) - [Function `into_bytes`](#0x1_ascii_into_bytes) - [Function `byte`](#0x1_ascii_byte) - [Function `is_valid_char`](#0x1_ascii_is_valid_char) - [Function `is_printable_char`](#0x1_ascii_is_printable_char) +- [Function `is_empty`](#0x1_ascii_is_empty) +- [Function `to_uppercase`](#0x1_ascii_to_uppercase) +- [Function `to_lowercase`](#0x1_ascii_to_lowercase) +- [Function `index_of`](#0x1_ascii_index_of) +- [Function `char_to_uppercase`](#0x1_ascii_char_to_uppercase) +- [Function `char_to_lowercase`](#0x1_ascii_char_to_lowercase)
use 0x1::option;
+use 0x1::vector;
 
@@ -51,7 +61,7 @@ defined in this module.
-bytes: vector<u8> +bytes: vector<u8>
@@ -79,7 +89,7 @@ An ASCII character.
-byte: u8 +byte: u8
@@ -94,12 +104,22 @@ An ASCII character. ## Constants - + An invalid ASCII character was encountered when creating an ASCII string. -
const EINVALID_ASCII_CHARACTER: u64 = 65536;
+
const EInvalidASCIICharacter: u64 = 65536;
+
+ + + + + +An invalid index was encountered when creating a substring. + + +
const EInvalidIndex: u64 = 65537;
 
@@ -111,7 +131,7 @@ An invalid ASCII character was encountered when creating an ASCII string. Convert a byte into a Char that is checked to make sure it is valid ASCII. -
public fun char(byte: u8): ascii::Char
+
public fun char(byte: u8): ascii::Char
 
@@ -120,8 +140,8 @@ Convert a byte into a Char< Implementation -
public fun char(byte: u8): Char {
-    assert!(is_valid_char(byte), EINVALID_ASCII_CHARACTER);
+
public fun char(byte: u8): Char {
+    assert!(is_valid_char(byte), EInvalidASCIICharacter);
     Char { byte }
 }
 
@@ -138,7 +158,7 @@ Convert a vector of bytes bytes into an string(bytes: vector<u8>): ascii::String +
public fun string(bytes: vector<u8>): ascii::String
 
@@ -147,13 +167,10 @@ Convert a vector of bytes bytes into an string(bytes: vector<u8>): String { - let x = try_string(bytes); - assert!( - option::is_some(&x), - EINVALID_ASCII_CHARACTER - ); - option::destroy_some(x) +
public fun string(bytes: vector<u8>): String {
+    let x = try_string(bytes);
+    assert!(x.is_some(), EInvalidASCIICharacter);
+    x.destroy_some()
 }
 
@@ -170,7 +187,7 @@ Convert a vector of bytes bytes into an try_string(bytes: vector<u8>): option::Option<ascii::String> +
public fun try_string(bytes: vector<u8>): option::Option<ascii::String>
 
@@ -179,15 +196,10 @@ characters. Otherwise returns None. Implementation -
public fun try_string(bytes: vector<u8>): Option<String> {
-    let len = vector::length(&bytes);
-    let i = 0;
-    while (i < len) {
-        let possible_byte = *vector::borrow(&bytes, i);
-        if (!is_valid_char(possible_byte)) return option::none();
-        i = i + 1;
-    };
-    option::some(String { bytes })
+
public fun try_string(bytes: vector<u8>): Option<String> {
+    let is_valid = bytes.all!(|byte| is_valid_char(*byte));
+    if (is_valid) option::some(String { bytes })
+    else option::none()
 }
 
@@ -213,14 +225,7 @@ Returns false otherwise. Not all all_characters_printable(string: &String): bool { - let len = vector::length(&string.bytes); - let i = 0; - while (i < len) { - let byte = *vector::borrow(&string.bytes, i); - if (!is_printable_char(byte)) return false; - i = i + 1; - }; - true + string.bytes.all!(|byte| is_printable_char(*byte)) }
@@ -232,6 +237,7 @@ Returns false otherwise. Not all Char to the end of the string.
public fun push_char(string: &mut ascii::String, char: ascii::Char)
@@ -244,7 +250,7 @@ Returns false otherwise. Not all push_char(string: &mut String, char: Char) {
-    vector::push_back(&mut string.bytes, char.byte);
+    string.bytes.push_back(char.byte);
 }
 
@@ -256,6 +262,7 @@ Returns false otherwise. Not all Char from the end of the string.
public fun pop_char(string: &mut ascii::String): ascii::Char
@@ -268,7 +275,7 @@ Returns false otherwise. Not all pop_char(string: &mut String): Char {
-    Char { byte: vector::pop_back(&mut string.bytes) }
+    Char { byte: string.bytes.pop_back() }
 }
 
@@ -280,9 +287,60 @@ Returns false otherwise. Not all string in bytes. + + +
public fun length(string: &ascii::String): u64
+
+ + + +
+Implementation + + +
public fun length(string: &String): u64 {
+    string.as_bytes().length()
+}
+
+ + + +
+ + + +## Function `append` + +Append the other string to the end of string. + + +
public fun append(string: &mut ascii::String, other: ascii::String)
+
+ + + +
+Implementation + + +
public fun append(string: &mut String, other: String) {
+    string.bytes.append(other.into_bytes())
+}
+
+ + + +
+ + + +## Function `insert` + +Insert the other string at the at index of string. -
public fun length(string: &ascii::String): u64
+
public fun insert(s: &mut ascii::String, at: u64, o: ascii::String)
 
@@ -291,8 +349,37 @@ Returns false otherwise. Not all length(string: &String): u64 { - vector::length(as_bytes(string)) +
public fun insert(s: &mut String, at: u64, o: String) {
+    assert!(at <= s.length(), EInvalidIndex);
+    o.into_bytes().destroy!(|e| s.bytes.insert(e, at));
+}
+
+ + + + + + + +## Function `substring` + +Copy the slice of the string from i to j into a new String. + + +
public fun substring(string: &ascii::String, i: u64, j: u64): ascii::String
+
+ + + +
+Implementation + + +
public fun substring(string: &String, i: u64, j: u64): String {
+    assert!(i <= j && j <= string.length(), EInvalidIndex);
+    let mut bytes = vector[];
+    i.range_do!(j, |i| bytes.push_back(string.bytes[i]));
+    String { bytes }
 }
 
@@ -307,7 +394,7 @@ Returns false otherwise. Not all string as a reference -
public fun as_bytes(string: &ascii::String): &vector<u8>
+
public fun as_bytes(string: &ascii::String): &vector<u8>
 
@@ -316,8 +403,8 @@ Get the inner bytes of the stringImplementation -
public fun as_bytes(string: &String): &vector<u8> {
-   &string.bytes
+
public fun as_bytes(string: &String): &vector<u8> {
+    &string.bytes
 }
 
@@ -332,7 +419,7 @@ Get the inner bytes of the stringstring
to get its backing bytes -
public fun into_bytes(string: ascii::String): vector<u8>
+
public fun into_bytes(string: ascii::String): vector<u8>
 
@@ -341,9 +428,9 @@ Unpack the string to get its bac Implementation -
public fun into_bytes(string: String): vector<u8> {
-   let String { bytes } = string;
-   bytes
+
public fun into_bytes(string: String): vector<u8> {
+    let String { bytes } = string;
+    bytes
 }
 
@@ -355,10 +442,10 @@ Unpack the string to get its bac ## Function `byte` -Unpack the char into its underlying byte. +Unpack the char into its underlying bytes. -
public fun byte(char: ascii::Char): u8
+
public fun byte(char: ascii::Char): u8
 
@@ -367,9 +454,9 @@ Unpack the char into its underlying byte. Implementation -
public fun byte(char: Char): u8 {
-   let Char { byte } = char;
-   byte
+
public fun byte(char: Char): u8 {
+    let Char { byte } = char;
+    byte
 }
 
@@ -381,10 +468,11 @@ Unpack the char into its underlying byte. ## Function `is_valid_char` -Returns true if b is a valid ASCII character. Returns false otherwise. +Returns true if b is a valid ASCII character. +Returns false otherwise. -
public fun is_valid_char(b: u8): bool
+
public fun is_valid_char(b: u8): bool
 
@@ -393,8 +481,8 @@ Returns true if b is a valid ASCII character. R Implementation -
public fun is_valid_char(b: u8): bool {
-   b <= 0x7F
+
public fun is_valid_char(b: u8): bool {
+    b <= 0x7F
 }
 
@@ -406,10 +494,176 @@ Returns true if b is a valid ASCII character. R ## Function `is_printable_char` -Returns true if byte is an printable ASCII character. Returns false otherwise. +Returns true if byte is an printable ASCII character. +Returns false otherwise. + + +
public fun is_printable_char(byte: u8): bool
+
+ + + +
+Implementation + + +
public fun is_printable_char(byte: u8): bool {
+    byte >= 0x20 && // Disallow metacharacters
+    byte <= 0x7E // Don't allow DEL metacharacter
+}
+
+ + + +
+ + + +## Function `is_empty` + +Returns true if string is empty. + + +
public fun is_empty(string: &ascii::String): bool
+
+ + + +
+Implementation + + +
public fun is_empty(string: &String): bool {
+    string.bytes.is_empty()
+}
+
+ + + +
+ + + +## Function `to_uppercase` + +Convert a string to its uppercase equivalent. + + +
public fun to_uppercase(string: &ascii::String): ascii::String
+
+ + + +
+Implementation + + +
public fun to_uppercase(string: &String): String {
+    let bytes = string.as_bytes().map_ref!(|byte| char_to_uppercase(*byte));
+    String { bytes }
+}
+
+ + + +
+ + + +## Function `to_lowercase` + +Convert a string to its lowercase equivalent. + + +
public fun to_lowercase(string: &ascii::String): ascii::String
+
+ + + +
+Implementation + + +
public fun to_lowercase(string: &String): String {
+    let bytes = string.as_bytes().map_ref!(|byte| char_to_lowercase(*byte));
+    String { bytes }
+}
+
+ + + +
+ + + +## Function `index_of` + +Computes the index of the first occurrence of the substr in the string. +Returns the length of the string if the substr is not found. +Returns 0 if the substr is empty. + + +
public fun index_of(string: &ascii::String, substr: &ascii::String): u64
+
+ + + +
+Implementation + + +
public fun index_of(string: &String, substr: &String): u64 {
+    let mut i = 0;
+    let (n, m) = (string.length(), substr.length());
+    if (n < m) return n;
+    while (i <= n - m) {
+        let mut j = 0;
+        while (j < m && string.bytes[i + j] == substr.bytes[j]) j = j + 1;
+        if (j == m) return i;
+        i = i + 1;
+    };
+    n
+}
+
+ + + +
+ + + +## Function `char_to_uppercase` + +Convert a char to its lowercase equivalent. + + +
fun char_to_uppercase(byte: u8): u8
+
+ + + +
+Implementation + + +
fun char_to_uppercase(byte: u8): u8 {
+    if (byte >= 0x61 && byte <= 0x7A) byte - 0x20
+    else byte
+}
+
+ + + +
+ + + +## Function `char_to_lowercase` + +Convert a char to its lowercase equivalent. -
public fun is_printable_char(byte: u8): bool
+
fun char_to_lowercase(byte: u8): u8
 
@@ -418,9 +672,9 @@ Returns true if byte is an printable ASCII char Implementation -
public fun is_printable_char(byte: u8): bool {
-   byte >= 0x20 && // Disallow metacharacters
-   byte <= 0x7E // Don't allow DEL metacharacter
+
fun char_to_lowercase(byte: u8): u8 {
+    if (byte >= 0x41 && byte <= 0x5A) byte + 0x20
+    else byte
 }
 
diff --git a/external-crates/move/crates/move-stdlib/docs/bcs.md b/external-crates/move/crates/move-stdlib/docs/bcs.md index 1b89050bb7799..3497986f00b38 100644 --- a/external-crates/move/crates/move-stdlib/docs/bcs.md +++ b/external-crates/move/crates/move-stdlib/docs/bcs.md @@ -23,7 +23,7 @@ details on BCS. Return the binary representation of v in BCS (Binary Canonical Serialization) format -
public fun to_bytes<MoveValue>(v: &MoveValue): vector<u8>
+
public fun to_bytes<MoveValue>(v: &MoveValue): vector<u8>
 
@@ -32,7 +32,7 @@ Return the binary representation of v in BCS (Binary Canonical Seri Implementation -
native public fun to_bytes<MoveValue>(v: &MoveValue): vector<u8>;
+
native public fun to_bytes<MoveValue>(v: &MoveValue): vector<u8>;
 
diff --git a/external-crates/move/crates/move-stdlib/docs/bit_vector.md b/external-crates/move/crates/move-stdlib/docs/bit_vector.md index 30e0a7496901b..465aa95a26ff6 100644 --- a/external-crates/move/crates/move-stdlib/docs/bit_vector.md +++ b/external-crates/move/crates/move-stdlib/docs/bit_vector.md @@ -37,7 +37,7 @@
-length: u64 +length: u64
@@ -63,7 +63,7 @@ The provided index is out of bounds -
const EINDEX: u64 = 131072;
+
const EINDEX: u64 = 131072;
 
@@ -73,7 +73,7 @@ The provided index is out of bounds An invalid length of bitvector was given -
const ELENGTH: u64 = 131073;
+
const ELENGTH: u64 = 131073;
 
@@ -83,7 +83,16 @@ An invalid length of bitvector was given The maximum allowed bitvector size -
const MAX_SIZE: u64 = 1024;
+
const MAX_SIZE: u64 = 1024;
+
+ + + + + + + +
const WORD_SIZE: u64 = 1;
 
@@ -94,7 +103,7 @@ The maximum allowed bitvector size -
public fun new(length: u64): bit_vector::BitVector
+
public fun new(length: u64): bit_vector::BitVector
 
@@ -103,13 +112,13 @@ The maximum allowed bitvector size Implementation -
public fun new(length: u64): BitVector {
+
public fun new(length: u64): BitVector {
     assert!(length > 0, ELENGTH);
     assert!(length < MAX_SIZE, ELENGTH);
-    let counter = 0;
-    let bit_field = vector::empty();
+    let mut counter = 0;
+    let mut bit_field = vector::empty();
     while (counter < length) {
-        vector::push_back(&mut bit_field, false);
+        bit_field.push_back(false);
         counter = counter + 1;
     };
 
@@ -131,7 +140,7 @@ The maximum allowed bitvector size
 Set the bit at bit_index in the bitvector regardless of its previous state.
 
 
-
public fun set(bitvector: &mut bit_vector::BitVector, bit_index: u64)
+
public fun set(bitvector: &mut bit_vector::BitVector, bit_index: u64)
 
@@ -140,9 +149,9 @@ Set the bit at bit_index in the bitvector regardless o Implementation -
public fun set(bitvector: &mut BitVector, bit_index: u64) {
-    assert!(bit_index < vector::length(&bitvector.bit_field), EINDEX);
-    let x = vector::borrow_mut(&mut bitvector.bit_field, bit_index);
+
public fun set(bitvector: &mut BitVector, bit_index: u64) {
+    assert!(bit_index < bitvector.bit_field.length(), EINDEX);
+    let x = &mut bitvector.bit_field[bit_index];
     *x = true;
 }
 
@@ -158,7 +167,7 @@ Set the bit at bit_index in the bitvector regardless o Unset the bit at bit_index in the bitvector regardless of its previous state. -
public fun unset(bitvector: &mut bit_vector::BitVector, bit_index: u64)
+
public fun unset(bitvector: &mut bit_vector::BitVector, bit_index: u64)
 
@@ -167,9 +176,9 @@ Unset the bit at bit_index in the bitvector regardless Implementation -
public fun unset(bitvector: &mut BitVector, bit_index: u64) {
-    assert!(bit_index < vector::length(&bitvector.bit_field), EINDEX);
-    let x = vector::borrow_mut(&mut bitvector.bit_field, bit_index);
+
public fun unset(bitvector: &mut BitVector, bit_index: u64) {
+    assert!(bit_index < bitvector.bit_field.length(), EINDEX);
+    let x = &mut bitvector.bit_field[bit_index];
     *x = false;
 }
 
@@ -186,7 +195,7 @@ Shift the bitvector left by amount. If amountpublic fun shift_left(bitvector: &mut bit_vector::BitVector, amount: u64) +
public fun shift_left(bitvector: &mut bit_vector::BitVector, amount: u64)
 
@@ -195,21 +204,21 @@ bitvector's length the bitvector will be zeroed out. Implementation -
public fun shift_left(bitvector: &mut BitVector, amount: u64) {
+
public fun shift_left(bitvector: &mut BitVector, amount: u64) {
     if (amount >= bitvector.length) {
-       let len = vector::length(&bitvector.bit_field);
-       let i = 0;
+       let len = bitvector.bit_field.length();
+       let mut i = 0;
        while (i < len) {
-           let elem = vector::borrow_mut(&mut bitvector.bit_field, i);
+           let elem = &mut bitvector.bit_field[i];
            *elem = false;
            i = i + 1;
        };
     } else {
-        let i = amount;
+        let mut i = amount;
 
         while (i < bitvector.length) {
-            if (is_index_set(bitvector, i)) set(bitvector, i - amount)
-            else unset(bitvector, i - amount);
+            if (bitvector.is_index_set(i)) bitvector.set(i - amount)
+            else bitvector.unset(i - amount);
             i = i + 1;
         };
 
@@ -235,7 +244,7 @@ Return the value of the bit at bit_index in the bitvectorfalse represents a 0
 
 
-
public fun is_index_set(bitvector: &bit_vector::BitVector, bit_index: u64): bool
+
public fun is_index_set(bitvector: &bit_vector::BitVector, bit_index: u64): bool
 
@@ -244,9 +253,9 @@ represents "1" and false represents a 0 Implementation -
public fun is_index_set(bitvector: &BitVector, bit_index: u64): bool {
-    assert!(bit_index < vector::length(&bitvector.bit_field), EINDEX);
-    *vector::borrow(&bitvector.bit_field, bit_index)
+
public fun is_index_set(bitvector: &BitVector, bit_index: u64): bool {
+    assert!(bit_index < bitvector.bit_field.length(), EINDEX);
+    bitvector.bit_field[bit_index]
 }
 
@@ -261,7 +270,7 @@ represents "1" and false represents a 0 Return the length (number of usable bits) of this bitvector -
public fun length(bitvector: &bit_vector::BitVector): u64
+
public fun length(bitvector: &bit_vector::BitVector): u64
 
@@ -270,8 +279,8 @@ Return the length (number of usable bits) of this bitvector Implementation -
public fun length(bitvector: &BitVector): u64 {
-    vector::length(&bitvector.bit_field)
+
public fun length(bitvector: &BitVector): u64 {
+    bitvector.bit_field.length()
 }
 
@@ -288,7 +297,7 @@ including) start_index in the bitvector. If there is n sequence, then 0 is returned. -
public fun longest_set_sequence_starting_at(bitvector: &bit_vector::BitVector, start_index: u64): u64
+
public fun longest_set_sequence_starting_at(bitvector: &bit_vector::BitVector, start_index: u64): u64
 
@@ -297,13 +306,13 @@ sequence, then 0 is returned. Implementation -
public fun longest_set_sequence_starting_at(bitvector: &BitVector, start_index: u64): u64 {
+
public fun longest_set_sequence_starting_at(bitvector: &BitVector, start_index: u64): u64 {
     assert!(start_index < bitvector.length, EINDEX);
-    let index = start_index;
+    let mut index = start_index;
 
     // Find the greatest index in the vector such that all indices less than it are set.
     while (index < bitvector.length) {
-        if (!is_index_set(bitvector, index)) break;
+        if (!bitvector.is_index_set(index)) break;
         index = index + 1;
     };
 
diff --git a/external-crates/move/crates/move-stdlib/nursery/docs/debug.md b/external-crates/move/crates/move-stdlib/docs/debug.md
similarity index 86%
rename from external-crates/move/crates/move-stdlib/nursery/docs/debug.md
rename to external-crates/move/crates/move-stdlib/docs/debug.md
index 33bd18df12f6f..8cd525b3ea6ef 100644
--- a/external-crates/move/crates/move-stdlib/nursery/docs/debug.md
+++ b/external-crates/move/crates/move-stdlib/docs/debug.md
@@ -18,7 +18,6 @@ Module providing debug functionality.
 
 ## Function `print`
 
-Pretty-prints any Move value. For a Move struct, includes its field names, their types and their values.
 
 
 
public fun print<T>(x: &T)
@@ -41,7 +40,6 @@ Pretty-prints any Move value. For a Move struct, includes its field names, their
 
 ## Function `print_stack_trace`
 
-Prints the calling function's stack trace.
 
 
 
public fun print_stack_trace()
@@ -59,3 +57,6 @@ Prints the calling function's stack trace.
 
 
 
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/error.md b/external-crates/move/crates/move-stdlib/docs/error.md deleted file mode 100644 index 0cc2487da9611..0000000000000 --- a/external-crates/move/crates/move-stdlib/docs/error.md +++ /dev/null @@ -1,475 +0,0 @@ - - - -# Module `0x1::error` - -This module defines a set of canonical error codes which are optional to use by applications for the -abort and assert! features. - -Canonical error codes use the 3 lowest bytes of the u64 abort code range (the upper 5 bytes are free for other use). -Of those, the highest byte represents the *error category* and the lower two bytes the *error reason*. -Given an error category 0x1 and a reason 0x3, a canonical abort code looks as 0x10003. - -A module can use a canonical code with a constant declaration of the following form: - -``` -/// An invalid ASCII character was encountered when creating a string. -const EINVALID_CHARACTER: u64 = 0x010003; -``` - -This code is both valid in the worlds with and without canonical errors. It can be used as a plain module local -error reason understand by the existing error map tooling, or as a canonical code. - -The actual canonical categories have been adopted from Google's canonical error codes, which in turn are derived -from Unix error codes [see here](https://cloud.google.com/apis/design/errors#handling_errors). Each code has an -associated HTTP error code which can be used in REST apis. The mapping from error code to http code is not 1:1; -error codes here are a bit richer than HTTP codes. - - -- [Constants](#@Constants_0) -- [Function `canonical`](#0x1_error_canonical) -- [Function `invalid_argument`](#0x1_error_invalid_argument) -- [Function `out_of_range`](#0x1_error_out_of_range) -- [Function `invalid_state`](#0x1_error_invalid_state) -- [Function `unauthenticated`](#0x1_error_unauthenticated) -- [Function `permission_denied`](#0x1_error_permission_denied) -- [Function `not_found`](#0x1_error_not_found) -- [Function `aborted`](#0x1_error_aborted) -- [Function `already_exists`](#0x1_error_already_exists) -- [Function `resource_exhausted`](#0x1_error_resource_exhausted) -- [Function `internal`](#0x1_error_internal) -- [Function `not_implemented`](#0x1_error_not_implemented) -- [Function `unavailable`](#0x1_error_unavailable) - - -
- - - - - -## Constants - - - - -Concurrency conflict, such as read-modify-write conflict (http: 409) - - -
const ABORTED: u64 = 7;
-
- - - - - -The resource that a client tried to create already exists (http: 409) - - -
const ALREADY_EXISTS: u64 = 8;
-
- - - - - -Request cancelled by the client (http: 499) - - -
const CANCELLED: u64 = 10;
-
- - - - - -Internal error (http: 500) - - -
const INTERNAL: u64 = 11;
-
- - - - - -Caller specified an invalid argument (http: 400) - - -
const INVALID_ARGUMENT: u64 = 1;
-
- - - - - -The system is not in a state where the operation can be performed (http: 400) - - -
const INVALID_STATE: u64 = 3;
-
- - - - - -A specified resource is not found (http: 404) - - -
const NOT_FOUND: u64 = 6;
-
- - - - - -Feature not implemented (http: 501) - - -
const NOT_IMPLEMENTED: u64 = 12;
-
- - - - - -An input or result of a computation is out of range (http: 400) - - -
const OUT_OF_RANGE: u64 = 2;
-
- - - - - -client does not have sufficient permission (http: 403) - - -
const PERMISSION_DENIED: u64 = 5;
-
- - - - - -Out of gas or other forms of quota (http: 429) - - -
const RESOURCE_EXHAUSTED: u64 = 9;
-
- - - - - -Request not authenticated due to missing, invalid, or expired auth token (http: 401) - - -
const UNAUTHENTICATED: u64 = 4;
-
- - - - - -The service is currently unavailable. Indicates that a retry could solve the issue (http: 503) - - -
const UNAVAILABLE: u64 = 13;
-
- - - - - -## Function `canonical` - -Construct a canonical error code from a category and a reason. - - -
public fun canonical(category: u64, reason: u64): u64
-
- - - -
-Implementation - - -
public fun canonical(category: u64, reason: u64): u64 {
-  (category << 16) + reason
-}
-
- - - -
- - - -## Function `invalid_argument` - -Functions to construct a canonical error code of the given category. - - -
public fun invalid_argument(r: u64): u64
-
- - - -
-Implementation - - -
public fun invalid_argument(r: u64): u64 {  canonical(INVALID_ARGUMENT, r) }
-
- - - -
- - - -## Function `out_of_range` - - - -
public fun out_of_range(r: u64): u64
-
- - - -
-Implementation - - -
public fun out_of_range(r: u64): u64 {  canonical(OUT_OF_RANGE, r) }
-
- - - -
- - - -## Function `invalid_state` - - - -
public fun invalid_state(r: u64): u64
-
- - - -
-Implementation - - -
public fun invalid_state(r: u64): u64 {  canonical(INVALID_STATE, r) }
-
- - - -
- - - -## Function `unauthenticated` - - - -
public fun unauthenticated(r: u64): u64
-
- - - -
-Implementation - - -
public fun unauthenticated(r: u64): u64 { canonical(UNAUTHENTICATED, r) }
-
- - - -
- - - -## Function `permission_denied` - - - -
public fun permission_denied(r: u64): u64
-
- - - -
-Implementation - - -
public fun permission_denied(r: u64): u64 { canonical(PERMISSION_DENIED, r) }
-
- - - -
- - - -## Function `not_found` - - - -
public fun not_found(r: u64): u64
-
- - - -
-Implementation - - -
public fun not_found(r: u64): u64 { canonical(NOT_FOUND, r) }
-
- - - -
- - - -## Function `aborted` - - - -
public fun aborted(r: u64): u64
-
- - - -
-Implementation - - -
public fun aborted(r: u64): u64 { canonical(ABORTED, r) }
-
- - - -
- - - -## Function `already_exists` - - - -
public fun already_exists(r: u64): u64
-
- - - -
-Implementation - - -
public fun already_exists(r: u64): u64 { canonical(ALREADY_EXISTS, r) }
-
- - - -
- - - -## Function `resource_exhausted` - - - -
public fun resource_exhausted(r: u64): u64
-
- - - -
-Implementation - - -
public fun resource_exhausted(r: u64): u64 {  canonical(RESOURCE_EXHAUSTED, r) }
-
- - - -
- - - -## Function `internal` - - - -
public fun internal(r: u64): u64
-
- - - -
-Implementation - - -
public fun internal(r: u64): u64 {  canonical(INTERNAL, r) }
-
- - - -
- - - -## Function `not_implemented` - - - -
public fun not_implemented(r: u64): u64
-
- - - -
-Implementation - - -
public fun not_implemented(r: u64): u64 {  canonical(NOT_IMPLEMENTED, r) }
-
- - - -
- - - -## Function `unavailable` - - - -
public fun unavailable(r: u64): u64
-
- - - -
-Implementation - - -
public fun unavailable(r: u64): u64 { canonical(UNAVAILABLE, r) }
-
- - - -
- - -[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/fixed_point32.md b/external-crates/move/crates/move-stdlib/docs/fixed_point32.md index 8644f861dd01d..95abd66963732 100644 --- a/external-crates/move/crates/move-stdlib/docs/fixed_point32.md +++ b/external-crates/move/crates/move-stdlib/docs/fixed_point32.md @@ -15,12 +15,6 @@ a 32-bit fractional part. - [Function `create_from_raw_value`](#0x1_fixed_point32_create_from_raw_value) - [Function `get_raw_value`](#0x1_fixed_point32_get_raw_value) - [Function `is_zero`](#0x1_fixed_point32_is_zero) -- [Function `min`](#0x1_fixed_point32_min) -- [Function `max`](#0x1_fixed_point32_max) -- [Function `create_from_u64`](#0x1_fixed_point32_create_from_u64) -- [Function `floor`](#0x1_fixed_point32_floor) -- [Function `ceil`](#0x1_fixed_point32_ceil) -- [Function `round`](#0x1_fixed_point32_round)
@@ -53,7 +47,7 @@ decimal.
-value: u64 +value: u64
@@ -73,17 +67,17 @@ decimal. The denominator provided was zero -
const EDENOMINATOR: u64 = 65537;
+
const EDENOMINATOR: u64 = 65537;
 
-The quotient value would be too large to be held in a u64 +The quotient value would be too large to be held in a u64 -
const EDIVISION: u64 = 131074;
+
const EDIVISION: u64 = 131074;
 
@@ -93,17 +87,17 @@ The quotient value would be too large to be held in a u64 A division by zero was encountered -
const EDIVISION_BY_ZERO: u64 = 65540;
+
const EDIVISION_BY_ZERO: u64 = 65540;
 
-The multiplied value would be too large to be held in a u64 +The multiplied value would be too large to be held in a u64 -
const EMULTIPLICATION: u64 = 131075;
+
const EMULTIPLICATION: u64 = 131075;
 
@@ -113,7 +107,7 @@ The multiplied value would be too large to be held in a u64 The computed ratio when converting to a FixedPoint32 would be unrepresentable -
const ERATIO_OUT_OF_RANGE: u64 = 131077;
+
const ERATIO_OUT_OF_RANGE: u64 = 131077;
 
@@ -123,7 +117,7 @@ The computed ratio when converting to a MAX_U64: u128 = 18446744073709551615; +
const MAX_U64: u128 = 18446744073709551615;
 
@@ -137,7 +131,7 @@ fractional part of the product. This will abort if the product overflows. -
public fun multiply_u64(val: u64, multiplier: fixed_point32::FixedPoint32): u64
+
public fun multiply_u64(val: u64, multiplier: fixed_point32::FixedPoint32): u64
 
@@ -146,17 +140,17 @@ overflows. Implementation -
public fun multiply_u64(val: u64, multiplier: FixedPoint32): u64 {
+
public fun multiply_u64(val: u64, multiplier: FixedPoint32): u64 {
     // The product of two 64 bit values has 128 bits, so perform the
-    // multiplication with u128 types and keep the full 128 bit product
+    // multiplication with u128 types and keep the full 128 bit product
     // to avoid losing accuracy.
-    let unscaled_product = (val as u128) * (multiplier.value as u128);
+    let unscaled_product = val as u128 * (multiplier.value as u128);
     // The unscaled product has 32 fractional bits (from the multiplier)
     // so rescale it by shifting away the low bits.
     let product = unscaled_product >> 32;
     // Check whether the value is too large.
     assert!(product <= MAX_U64, EMULTIPLICATION);
-    (product as u64)
+    product as u64
 }
 
@@ -173,7 +167,7 @@ fractional part of the quotient. This will abort if the divisor is zero or if the quotient overflows. -
public fun divide_u64(val: u64, divisor: fixed_point32::FixedPoint32): u64
+
public fun divide_u64(val: u64, divisor: fixed_point32::FixedPoint32): u64
 
@@ -182,18 +176,18 @@ is zero or if the quotient overflows. Implementation -
public fun divide_u64(val: u64, divisor: FixedPoint32): u64 {
+
public fun divide_u64(val: u64, divisor: FixedPoint32): u64 {
     // Check for division by zero.
     assert!(divisor.value != 0, EDIVISION_BY_ZERO);
     // First convert to 128 bits and then shift left to
     // add 32 fractional zero bits to the dividend.
-    let scaled_value = (val as u128) << 32;
-    let quotient = scaled_value / (divisor.value as u128);
+    let scaled_value = val as u128 << 32;
+    let quotient = scaled_value / (divisor.value as u128);
     // Check whether the value is too large.
     assert!(quotient <= MAX_U64, EDIVISION);
     // the value may be too large, which will cause the cast to fail
-    // with an arithmetic error.
-    (quotient as u64)
+    // with an arithmetic error.
+    quotient as u64
 }
 
@@ -217,7 +211,7 @@ very small imprecision in the binary representation could change the rounding, e.g., 0.0125 will round down to 0.012 instead of up to 0.013. -
public fun create_from_rational(numerator: u64, denominator: u64): fixed_point32::FixedPoint32
+
public fun create_from_rational(numerator: u64, denominator: u64): fixed_point32::FixedPoint32
 
@@ -226,20 +220,20 @@ rounding, e.g., 0.0125 will round down to 0.012 instead of up to 0.013. Implementation -
public fun create_from_rational(numerator: u64, denominator: u64): FixedPoint32 {
+
public fun create_from_rational(numerator: u64, denominator: u64): FixedPoint32 {
     // If the denominator is zero, this will abort.
     // Scale the numerator to have 64 fractional bits and the denominator
     // to have 32 fractional bits, so that the quotient will have 32
     // fractional bits.
-    let scaled_numerator = (numerator as u128) << 64;
-    let scaled_denominator = (denominator as u128) << 32;
+    let scaled_numerator = numerator as u128 << 64;
+    let scaled_denominator = denominator as u128 << 32;
     assert!(scaled_denominator != 0, EDENOMINATOR);
     let quotient = scaled_numerator / scaled_denominator;
     assert!(quotient != 0 || numerator == 0, ERATIO_OUT_OF_RANGE);
     // Return the quotient as a fixed-point number. We first need to check whether the cast
     // can succeed.
     assert!(quotient <= MAX_U64, ERATIO_OUT_OF_RANGE);
-    FixedPoint32 { value: (quotient as u64) }
+    FixedPoint32 { value: quotient as u64 }
 }
 
@@ -254,7 +248,7 @@ rounding, e.g., 0.0125 will round down to 0.012 instead of up to 0.013. Create a fixedpoint value from a raw value. -
public fun create_from_raw_value(value: u64): fixed_point32::FixedPoint32
+
public fun create_from_raw_value(value: u64): fixed_point32::FixedPoint32
 
@@ -263,7 +257,7 @@ Create a fixedpoint value from a raw value. Implementation -
public fun create_from_raw_value(value: u64): FixedPoint32 {
+
public fun create_from_raw_value(value: u64): FixedPoint32 {
     FixedPoint32 { value }
 }
 
@@ -281,7 +275,7 @@ adding or subtracting FixedPoint32 values, can be done using the raw values directly. -
public fun get_raw_value(num: fixed_point32::FixedPoint32): u64
+
public fun get_raw_value(num: fixed_point32::FixedPoint32): u64
 
@@ -290,7 +284,7 @@ values directly. Implementation -
public fun get_raw_value(num: FixedPoint32): u64 {
+
public fun get_raw_value(num: FixedPoint32): u64 {
     num.value
 }
 
@@ -322,177 +316,6 @@ Returns true if the ratio is zero. - - - - -## Function `min` - -Returns the smaller of the two FixedPoint32 numbers. - - -
public fun min(num1: fixed_point32::FixedPoint32, num2: fixed_point32::FixedPoint32): fixed_point32::FixedPoint32
-
- - - -
-Implementation - - -
public fun min(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 {
-    if (num1.value < num2.value) {
-        num1
-    } else {
-        num2
-    }
-}
-
- - - -
- - - -## Function `max` - -Returns the larger of the two FixedPoint32 numbers. - - -
public fun max(num1: fixed_point32::FixedPoint32, num2: fixed_point32::FixedPoint32): fixed_point32::FixedPoint32
-
- - - -
-Implementation - - -
public fun max(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 {
-    if (num1.value > num2.value) {
-        num1
-    } else {
-        num2
-    }
-}
-
- - - -
- - - -## Function `create_from_u64` - -Create a fixedpoint value from a u64 value. - - -
public fun create_from_u64(val: u64): fixed_point32::FixedPoint32
-
- - - -
-Implementation - - -
public fun create_from_u64(val: u64): FixedPoint32 {
-    let value = (val as u128) << 32;
-    assert!(value <= MAX_U64, ERATIO_OUT_OF_RANGE);
-    FixedPoint32{value: (value as u64)}
-}
-
- - - -
- - - -## Function `floor` - -Returns the largest integer less than or equal to a given number. - - -
public fun floor(num: fixed_point32::FixedPoint32): u64
-
- - - -
-Implementation - - -
public fun floor(num: FixedPoint32): u64 {
-    num.value >> 32
-}
-
- - - -
- - - -## Function `ceil` - -Rounds up the given FixedPoint32 to the next largest integer. - - -
public fun ceil(num: fixed_point32::FixedPoint32): u64
-
- - - -
-Implementation - - -
public fun ceil(num: FixedPoint32): u64 {
-    let floored_num = floor(num) << 32;
-    if (num.value == floored_num) {
-        return floored_num >> 32
-    };
-    let val = ((floored_num as u128) + (1 << 32));
-    (val >> 32 as u64)
-}
-
- - - -
- - - -## Function `round` - -Returns the value of a FixedPoint32 to the nearest integer. - - -
public fun round(num: fixed_point32::FixedPoint32): u64
-
- - - -
-Implementation - - -
public fun round(num: FixedPoint32): u64 {
-    let floored_num = floor(num) << 32;
-    let boundary = floored_num + ((1 << 32) / 2);
-    if (num.value < boundary) {
-        floored_num >> 32
-    } else {
-        ceil(num)
-    }
-}
-
- - -
diff --git a/external-crates/move/crates/move-stdlib/docs/hash.md b/external-crates/move/crates/move-stdlib/docs/hash.md index c054f33cb569a..e3b110a627729 100644 --- a/external-crates/move/crates/move-stdlib/docs/hash.md +++ b/external-crates/move/crates/move-stdlib/docs/hash.md @@ -23,7 +23,7 @@ as in the Move prover's prelude. -
public fun sha2_256(data: vector<u8>): vector<u8>
+
public fun sha2_256(data: vector<u8>): vector<u8>
 
@@ -32,7 +32,7 @@ as in the Move prover's prelude. Implementation -
native public fun sha2_256(data: vector<u8>): vector<u8>;
+
native public fun sha2_256(data: vector<u8>): vector<u8>;
 
@@ -45,7 +45,7 @@ as in the Move prover's prelude. -
public fun sha3_256(data: vector<u8>): vector<u8>
+
public fun sha3_256(data: vector<u8>): vector<u8>
 
@@ -54,7 +54,7 @@ as in the Move prover's prelude. Implementation -
native public fun sha3_256(data: vector<u8>): vector<u8>;
+
native public fun sha3_256(data: vector<u8>): vector<u8>;
 
diff --git a/external-crates/move/crates/move-stdlib/docs/macros.md b/external-crates/move/crates/move-stdlib/docs/macros.md new file mode 100644 index 0000000000000..4fd3e7cd33d95 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/macros.md @@ -0,0 +1,14 @@ + + + +# Module `0x1::macros` + +This module holds shared implementation of macros used in std + + + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/option.md b/external-crates/move/crates/move-stdlib/docs/option.md index 04baf52a56f91..070a8f9672a07 100644 --- a/external-crates/move/crates/move-stdlib/docs/option.md +++ b/external-crates/move/crates/move-stdlib/docs/option.md @@ -72,7 +72,7 @@ The Option is in an inval The Option is Some while it should be None. -
const EOPTION_IS_SET: u64 = 262144;
+
const EOPTION_IS_SET: u64 = 262144;
 
@@ -83,7 +83,7 @@ The Option is in an inval The Option is None while it should be Some. -
const EOPTION_NOT_SET: u64 = 262145;
+
const EOPTION_NOT_SET: u64 = 262145;
 
@@ -155,7 +155,7 @@ Return true if t does not hold a value
public fun is_none<Element>(t: &Option<Element>): bool {
-    vector::is_empty(&t.vec)
+    t.vec.is_empty()
 }
 
@@ -180,7 +180,7 @@ Return true if t holds a value
public fun is_some<Element>(t: &Option<Element>): bool {
-    !vector::is_empty(&t.vec)
+    !t.vec.is_empty()
 }
 
@@ -206,7 +206,7 @@ Always returns false if t does not hold a value
public fun contains<Element>(t: &Option<Element>, e_ref: &Element): bool {
-    vector::contains(&t.vec, e_ref)
+    t.vec.contains(e_ref)
 }
 
@@ -232,8 +232,8 @@ Aborts if t does not hold a value
public fun borrow<Element>(t: &Option<Element>): &Element {
-    assert!(is_some(t), EOPTION_NOT_SET);
-    vector::borrow(&t.vec, 0)
+    assert!(t.is_some(), EOPTION_NOT_SET);
+    &t.vec[0]
 }
 
@@ -260,8 +260,8 @@ Return default_ref if t does not hold a value
public fun borrow_with_default<Element>(t: &Option<Element>, default_ref: &Element): &Element {
     let vec_ref = &t.vec;
-    if (vector::is_empty(vec_ref)) default_ref
-    else vector::borrow(vec_ref, 0)
+    if (vec_ref.is_empty()) default_ref
+    else &vec_ref[0]
 }
 
@@ -291,8 +291,8 @@ Return default if t does not hold a value default: Element, ): Element { let vec_ref = &t.vec; - if (vector::is_empty(vec_ref)) default - else *vector::borrow(vec_ref, 0) + if (vec_ref.is_empty()) default + else vec_ref[0] }
@@ -319,7 +319,7 @@ Aborts if t already holds a value
public fun fill<Element>(t: &mut Option<Element>, e: Element) {
     let vec_ref = &mut t.vec;
-    if (vector::is_empty(vec_ref)) vector::push_back(vec_ref, e)
+    if (vec_ref.is_empty()) vec_ref.push_back(e)
     else abort EOPTION_IS_SET
 }
 
@@ -346,8 +346,8 @@ Aborts if t does not hold a value
public fun extract<Element>(t: &mut Option<Element>): Element {
-    assert!(is_some(t), EOPTION_NOT_SET);
-    vector::pop_back(&mut t.vec)
+    assert!(t.is_some(), EOPTION_NOT_SET);
+    t.vec.pop_back()
 }
 
@@ -373,8 +373,8 @@ Aborts if t does not hold a value
public fun borrow_mut<Element>(t: &mut Option<Element>): &mut Element {
-    assert!(is_some(t), EOPTION_NOT_SET);
-    vector::borrow_mut(&mut t.vec, 0)
+    assert!(t.is_some(), EOPTION_NOT_SET);
+    &mut t.vec[0]
 }
 
@@ -400,10 +400,10 @@ Aborts if t does not hold a value
public fun swap<Element>(t: &mut Option<Element>, e: Element): Element {
-    assert!(is_some(t), EOPTION_NOT_SET);
+    assert!(t.is_some(), EOPTION_NOT_SET);
     let vec_ref = &mut t.vec;
-    let old_value = vector::pop_back(vec_ref);
-    vector::push_back(vec_ref, e);
+    let old_value = vec_ref.pop_back();
+    vec_ref.push_back(e);
     old_value
 }
 
@@ -432,9 +432,9 @@ Different from swap(), swap_or_fill() allows for t not holding a va
public fun swap_or_fill<Element>(t: &mut Option<Element>, e: Element): Option<Element> {
     let vec_ref = &mut t.vec;
-    let old_value = if (vector::is_empty(vec_ref)) none()
-        else some(vector::pop_back(vec_ref));
-    vector::push_back(vec_ref, e);
+    let old_value = if (vec_ref.is_empty()) none()
+        else some(vec_ref.pop_back());
+    vec_ref.push_back(e);
     old_value
 }
 
@@ -460,9 +460,9 @@ Destroys t. If t holds a value, return it. Returns public fun destroy_with_default<Element: drop>(t: Option<Element>, default: Element): Element { - let Option { vec } = t; - if (vector::is_empty(&vec)) default - else vector::pop_back(&mut vec) + let Option { mut vec } = t; + if (vec.is_empty()) default + else vec.pop_back() }
@@ -488,10 +488,10 @@ Aborts if t does not hold a value
public fun destroy_some<Element>(t: Option<Element>): Element {
-    assert!(is_some(&t), EOPTION_NOT_SET);
-    let Option { vec } = t;
-    let elem = vector::pop_back(&mut vec);
-    vector::destroy_empty(vec);
+    assert!(t.is_some(), EOPTION_NOT_SET);
+    let Option { mut vec } = t;
+    let elem = vec.pop_back();
+    vec.destroy_empty();
     elem
 }
 
@@ -518,9 +518,9 @@ Aborts if t holds a value
public fun destroy_none<Element>(t: Option<Element>) {
-    assert!(is_none(&t), EOPTION_IS_SET);
+    assert!(t.is_none(), EOPTION_IS_SET);
     let Option { vec } = t;
-    vector::destroy_empty(vec)
+    vec.destroy_empty()
 }
 
diff --git a/external-crates/move/crates/move-stdlib/docs/overview.md b/external-crates/move/crates/move-stdlib/docs/overview.md index e8aff3f0414fa..e3e118394a99c 100644 --- a/external-crates/move/crates/move-stdlib/docs/overview.md +++ b/external-crates/move/crates/move-stdlib/docs/overview.md @@ -12,16 +12,23 @@ This is the root document for the Move stdlib module documentation. The Move std ## Index +- [`0x1::address`](address.md#0x1_address) - [`0x1::ascii`](ascii.md#0x1_ascii) - [`0x1::bcs`](bcs.md#0x1_bcs) - [`0x1::bit_vector`](bit_vector.md#0x1_bit_vector) -- [`0x1::error`](error.md#0x1_error) +- [`0x1::debug`](debug.md#0x1_debug) - [`0x1::fixed_point32`](fixed_point32.md#0x1_fixed_point32) - [`0x1::hash`](hash.md#0x1_hash) +- [`0x1::macros`](macros.md#0x1_macros) - [`0x1::option`](option.md#0x1_option) -- [`0x1::signer`](signer.md#0x1_signer) - [`0x1::string`](string.md#0x1_string) - [`0x1::type_name`](type_name.md#0x1_type_name) +- [`0x1::u128`](u128.md#0x1_u128) +- [`0x1::u16`](u16.md#0x1_u16) +- [`0x1::u256`](u256.md#0x1_u256) +- [`0x1::u32`](u32.md#0x1_u32) +- [`0x1::u64`](u64.md#0x1_u64) +- [`0x1::u8`](u8.md#0x1_u8) - [`0x1::vector`](vector.md#0x1_vector) diff --git a/external-crates/move/crates/move-stdlib/docs/signer.md b/external-crates/move/crates/move-stdlib/docs/signer.md deleted file mode 100644 index 99b418f9e1abc..0000000000000 --- a/external-crates/move/crates/move-stdlib/docs/signer.md +++ /dev/null @@ -1,63 +0,0 @@ - - - -# Module `0x1::signer` - - - -- [Function `borrow_address`](#0x1_signer_borrow_address) -- [Function `address_of`](#0x1_signer_address_of) - - -
- - - - - -## Function `borrow_address` - - - -
public fun borrow_address(s: &signer): &address
-
- - - -
-Implementation - - -
native public fun borrow_address(s: &signer): &address;
-
- - - -
- - - -## Function `address_of` - - - -
public fun address_of(s: &signer): address
-
- - - -
-Implementation - - -
public fun address_of(s: &signer): address {
-    *borrow_address(s)
-}
-
- - - -
- - -[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/string.md b/external-crates/move/crates/move-stdlib/docs/string.md index e962b56d86758..c08d3514d8861 100644 --- a/external-crates/move/crates/move-stdlib/docs/string.md +++ b/external-crates/move/crates/move-stdlib/docs/string.md @@ -3,28 +3,35 @@ # Module `0x1::string` -The string module defines the String type which represents UTF8 encoded strings. +The string module defines the String type which represents UTF8 encoded +strings. - [Struct `String`](#0x1_string_String) - [Constants](#@Constants_0) - [Function `utf8`](#0x1_string_utf8) +- [Function `from_ascii`](#0x1_string_from_ascii) +- [Function `to_ascii`](#0x1_string_to_ascii) - [Function `try_utf8`](#0x1_string_try_utf8) -- [Function `bytes`](#0x1_string_bytes) +- [Function `as_bytes`](#0x1_string_as_bytes) +- [Function `into_bytes`](#0x1_string_into_bytes) - [Function `is_empty`](#0x1_string_is_empty) - [Function `length`](#0x1_string_length) - [Function `append`](#0x1_string_append) - [Function `append_utf8`](#0x1_string_append_utf8) - [Function `insert`](#0x1_string_insert) -- [Function `sub_string`](#0x1_string_sub_string) +- [Function `substring`](#0x1_string_substring) - [Function `index_of`](#0x1_string_index_of) - [Function `internal_check_utf8`](#0x1_string_internal_check_utf8) - [Function `internal_is_char_boundary`](#0x1_string_internal_is_char_boundary) - [Function `internal_sub_string`](#0x1_string_internal_sub_string) - [Function `internal_index_of`](#0x1_string_internal_index_of) +- [Function `bytes`](#0x1_string_bytes) +- [Function `sub_string`](#0x1_string_sub_string) -
use 0x1::option;
+
use 0x1::ascii;
+use 0x1::option;
 use 0x1::vector;
 
@@ -34,7 +41,8 @@ The string module defines the String
holds a sequence of bytes which is guaranteed to be in utf8 format. +A String holds a sequence of bytes which is guaranteed to be in utf8 +format.
struct String has copy, drop, store
@@ -48,7 +56,7 @@ A String holds a sequence
 
 
-bytes: vector<u8> +bytes: vector<u8>
@@ -63,22 +71,22 @@ A String holds a sequence ## Constants - + Index out of range. -
const EINVALID_INDEX: u64 = 2;
+
const EInvalidIndex: u64 = 2;
 
- + An invalid UTF8 encoding. -
const EINVALID_UTF8: u64 = 1;
+
const EInvalidUTF8: u64 = 1;
 
@@ -87,10 +95,63 @@ An invalid UTF8 encoding. ## Function `utf8` -Creates a new string from a sequence of bytes. Aborts if the bytes do not represent valid utf8. +Creates a new string from a sequence of bytes. Aborts if the bytes do +not represent valid utf8. + + +
public fun utf8(bytes: vector<u8>): string::String
+
+ + + +
+Implementation + + +
public fun utf8(bytes: vector<u8>): String {
+    assert!(internal_check_utf8(&bytes), EInvalidUTF8);
+    String { bytes }
+}
+
+ + + +
+ + + +## Function `from_ascii` + +Convert an ASCII string to a UTF8 string + + +
public fun from_ascii(s: ascii::String): string::String
+
+ -
public fun utf8(bytes: vector<u8>): string::String
+
+Implementation + + +
public fun from_ascii(s: ascii::String): String {
+    String { bytes: s.into_bytes() }
+}
+
+ + + +
+ + + +## Function `to_ascii` + +Convert an UTF8 string to an ASCII string. +Aborts if s is not valid ASCII + + +
public fun to_ascii(s: string::String): ascii::String
 
@@ -99,9 +160,9 @@ Creates a new string from a sequence of bytes. Aborts if the bytes do not repres Implementation -
public fun utf8(bytes: vector<u8>): String {
-    assert!(internal_check_utf8(&bytes), EINVALID_UTF8);
-    String{bytes}
+
public fun to_ascii(s: String): ascii::String {
+    let String { bytes } = s;
+    bytes.to_ascii_string()
 }
 
@@ -116,7 +177,7 @@ Creates a new string from a sequence of bytes. Aborts if the bytes do not repres Tries to create a new string from a sequence of bytes. -
public fun try_utf8(bytes: vector<u8>): option::Option<string::String>
+
public fun try_utf8(bytes: vector<u8>): option::Option<string::String>
 
@@ -125,12 +186,9 @@ Tries to create a new string from a sequence of bytes. Implementation -
public fun try_utf8(bytes: vector<u8>): Option<String> {
-    if (internal_check_utf8(&bytes)) {
-        option::some(String{bytes})
-    } else {
-        option::none()
-    }
+
public fun try_utf8(bytes: vector<u8>): Option<String> {
+    if (internal_check_utf8(&bytes)) option::some(String { bytes })
+    else option::none()
 }
 
@@ -138,14 +196,14 @@ Tries to create a new string from a sequence of bytes. - + -## Function `bytes` +## Function `as_bytes` Returns a reference to the underlying byte vector. -
public fun bytes(s: &string::String): &vector<u8>
+
public fun as_bytes(s: &string::String): &vector<u8>
 
@@ -154,13 +212,39 @@ Returns a reference to the underlying byte vector. Implementation -
public fun bytes(s: &String): &vector<u8> {
+
public fun as_bytes(s: &String): &vector<u8> {
     &s.bytes
 }
 
+ + + + +## Function `into_bytes` + +Unpack the string to get its underlying bytes. + + +
public fun into_bytes(s: string::String): vector<u8>
+
+ + + +
+Implementation + + +
public fun into_bytes(s: String): vector<u8> {
+    let String { bytes } = s;
+    bytes
+}
+
+ + +
@@ -180,7 +264,7 @@ Checks whether this string is empty.
public fun is_empty(s: &String): bool {
-    vector::is_empty(&s.bytes)
+    s.bytes.is_empty()
 }
 
@@ -195,7 +279,7 @@ Checks whether this string is empty. Returns the length of this string, in bytes. -
public fun length(s: &string::String): u64
+
public fun length(s: &string::String): u64
 
@@ -204,8 +288,8 @@ Returns the length of this string, in bytes. Implementation -
public fun length(s: &String): u64 {
-    vector::length(&s.bytes)
+
public fun length(s: &String): u64 {
+    s.bytes.length()
 }
 
@@ -230,7 +314,7 @@ Appends a string.
public fun append(s: &mut String, r: String) {
-    vector::append(&mut s.bytes, r.bytes)
+    s.bytes.append(r.bytes)
 }
 
@@ -245,7 +329,7 @@ Appends a string. Appends bytes which must be in valid utf8 format. -
public fun append_utf8(s: &mut string::String, bytes: vector<u8>)
+
public fun append_utf8(s: &mut string::String, bytes: vector<u8>)
 
@@ -254,8 +338,8 @@ Appends bytes which must be in valid utf8 format. Implementation -
public fun append_utf8(s: &mut String, bytes: vector<u8>) {
-    append(s, utf8(bytes))
+
public fun append_utf8(s: &mut String, bytes: vector<u8>) {
+    s.append(utf8(bytes))
 }
 
@@ -267,11 +351,11 @@ Appends bytes which must be in valid utf8 format. ## Function `insert` -Insert the other string at the byte index in given string. The index must be at a valid utf8 char -boundary. +Insert the other string at the byte index in given string. The index +must be at a valid utf8 char boundary. -
public fun insert(s: &mut string::String, at: u64, o: string::String)
+
public fun insert(s: &mut string::String, at: u64, o: string::String)
 
@@ -280,14 +364,17 @@ boundary. Implementation -
public fun insert(s: &mut String, at: u64, o: String) {
+
public fun insert(s: &mut String, at: u64, o: String) {
     let bytes = &s.bytes;
-    assert!(at <= vector::length(bytes) && internal_is_char_boundary(bytes, at), EINVALID_INDEX);
-    let l = length(s);
-    let front = sub_string(s, 0, at);
-    let end = sub_string(s, at, l);
-    append(&mut front, o);
-    append(&mut front, end);
+    assert!(
+        at <= bytes.length() && internal_is_char_boundary(bytes, at),
+        EInvalidIndex,
+    );
+    let l = s.length();
+    let mut front = s.substring(0, at);
+    let end = s.substring(at, l);
+    front.append(o);
+    front.append(end);
     *s = front;
 }
 
@@ -296,16 +383,17 @@ boundary. - + -## Function `sub_string` +## Function `substring` -Returns a sub-string using the given byte indices, where i is the first byte position and j is the start -of the first byte not included (or the length of the string). The indices must be at valid utf8 char boundaries, +Returns a sub-string using the given byte indices, where i is the first +byte position and j is the start of the first byte not included (or the +length of the string). The indices must be at valid utf8 char boundaries, guaranteeing that the result is valid utf8. -
public fun sub_string(s: &string::String, i: u64, j: u64): string::String
+
public fun substring(s: &string::String, i: u64, j: u64): string::String
 
@@ -314,14 +402,17 @@ guaranteeing that the result is valid utf8. Implementation -
public fun sub_string(s: &String, i: u64, j: u64): String {
+
public fun substring(s: &String, i: u64, j: u64): String {
     let bytes = &s.bytes;
-    let l = vector::length(bytes);
+    let l = bytes.length();
     assert!(
-        j <= l && i <= j && internal_is_char_boundary(bytes, i) && internal_is_char_boundary(bytes, j),
-        EINVALID_INDEX
+        j <= l &&
+        i <= j &&
+        internal_is_char_boundary(bytes, i) &&
+        internal_is_char_boundary(bytes, j),
+        EInvalidIndex,
     );
-    String{bytes: internal_sub_string(bytes, i, j)}
+    String { bytes: internal_sub_string(bytes, i, j) }
 }
 
@@ -333,10 +424,11 @@ guaranteeing that the result is valid utf8. ## Function `index_of` -Computes the index of the first occurrence of a string. Returns length(s) if no occurrence found. +Computes the index of the first occurrence of a string. Returns s.length() +if no occurrence found. -
public fun index_of(s: &string::String, r: &string::String): u64
+
public fun index_of(s: &string::String, r: &string::String): u64
 
@@ -345,7 +437,7 @@ Computes the index of the first occurrence of a string. Returns index_of(s: &String, r: &String): u64 { +
public fun index_of(s: &String, r: &String): u64 {
     internal_index_of(&s.bytes, &r.bytes)
 }
 
@@ -360,7 +452,7 @@ Computes the index of the first occurrence of a string. Returns internal_check_utf8(v: &vector<u8>): bool +
fun internal_check_utf8(v: &vector<u8>): bool
 
@@ -369,7 +461,7 @@ Computes the index of the first occurrence of a string. Returns internal_check_utf8(v: &vector<u8>): bool; +
native fun internal_check_utf8(v: &vector<u8>): bool;
 
@@ -382,7 +474,7 @@ Computes the index of the first occurrence of a string. Returns internal_is_char_boundary(v: &vector<u8>, i: u64): bool +
fun internal_is_char_boundary(v: &vector<u8>, i: u64): bool
 
@@ -391,7 +483,7 @@ Computes the index of the first occurrence of a string. Returns internal_is_char_boundary(v: &vector<u8>, i: u64): bool; +
native fun internal_is_char_boundary(v: &vector<u8>, i: u64): bool;
 
@@ -404,7 +496,7 @@ Computes the index of the first occurrence of a string. Returns internal_sub_string(v: &vector<u8>, i: u64, j: u64): vector<u8> +
fun internal_sub_string(v: &vector<u8>, i: u64, j: u64): vector<u8>
 
@@ -413,7 +505,7 @@ Computes the index of the first occurrence of a string. Returns internal_sub_string(v: &vector<u8>, i: u64, j: u64): vector<u8>; +
native fun internal_sub_string(v: &vector<u8>, i: u64, j: u64): vector<u8>;
 
@@ -426,7 +518,29 @@ Computes the index of the first occurrence of a string. Returns internal_index_of(v: &vector<u8>, r: &vector<u8>): u64 +
fun internal_index_of(v: &vector<u8>, r: &vector<u8>): u64
+
+ + + +
+Implementation + + +
native fun internal_index_of(v: &vector<u8>, r: &vector<u8>): u64;
+
+ + + +
+ + + +## Function `bytes` + + + +
public fun bytes(s: &string::String): &vector<u8>
 
@@ -435,7 +549,31 @@ Computes the index of the first occurrence of a string. Returns internal_index_of(v: &vector<u8>, r: &vector<u8>): u64; +
public fun bytes(s: &String): &vector<u8> { s.as_bytes() }
+
+ + + + + + + +## Function `sub_string` + + + +
public fun sub_string(s: &string::String, i: u64, j: u64): string::String
+
+ + + +
+Implementation + + +
public fun sub_string(s: &String, i: u64, j: u64): String {
+    s.substring(i, j)
+}
 
diff --git a/external-crates/move/crates/move-stdlib/docs/type_name.md b/external-crates/move/crates/move-stdlib/docs/type_name.md index 070e0ffd56e45..2c79606a1aefe 100644 --- a/external-crates/move/crates/move-stdlib/docs/type_name.md +++ b/external-crates/move/crates/move-stdlib/docs/type_name.md @@ -7,13 +7,18 @@ Functionality for converting Move types into values. Use with care! - [Struct `TypeName`](#0x1_type_name_TypeName) +- [Constants](#@Constants_0) - [Function `get`](#0x1_type_name_get) - [Function `get_with_original_ids`](#0x1_type_name_get_with_original_ids) +- [Function `is_primitive`](#0x1_type_name_is_primitive) - [Function `borrow_string`](#0x1_type_name_borrow_string) +- [Function `get_address`](#0x1_type_name_get_address) +- [Function `get_module`](#0x1_type_name_get_module) - [Function `into_string`](#0x1_type_name_into_string) -
use 0x1::ascii;
+
use 0x1::address;
+use 0x1::ascii;
 
@@ -40,10 +45,10 @@ Functionality for converting Move types into values. Use with care!
String representation of the type. All types are represented using their source syntax: - "u8", "u64", "u128", "bool", "address", "vector", "signer" for ground types. + "u8", "u64", "bool", "address", "vector", and so on for primitive types. Struct types are represented as fully qualified type names; e.g. 00000000000000000000000000000001::string::String or - 0000000000000000000000000000000a::module_name1::type_name1<0000000000000000000000000000000a::module_name2::type_name2<u64>> + 0000000000000000000000000000000a::module_name1::type_name1<0000000000000000000000000000000a::module_name2::type_name2<u64>> Addresses are hex-encoded lowercase values of length ADDRESS_LENGTH (16, 20, or 32 depending on the Move platform)
@@ -51,6 +56,91 @@ Functionality for converting Move types into values. Use with care! + + +## Constants + + + + +ASCII Character code for the c (lowercase c) symbol. + + +
const ASCII_C: u8 = 99;
+
+ + + + + +ASCII Character code for the : (colon) symbol. + + +
const ASCII_COLON: u8 = 58;
+
+ + + + + +ASCII Character code for the e (lowercase e) symbol. + + +
const ASCII_E: u8 = 101;
+
+ + + + + +ASCII Character code for the o (lowercase o) symbol. + + +
const ASCII_O: u8 = 111;
+
+ + + + + +ASCII Character code for the r (lowercase r) symbol. + + +
const ASCII_R: u8 = 114;
+
+ + + + + +ASCII Character code for the t (lowercase t) symbol. + + +
const ASCII_T: u8 = 116;
+
+ + + + + +ASCII Character code for the v (lowercase v) symbol. + + +
const ASCII_V: u8 = 118;
+
+ + + + + +The type is not from a package/module. It is a primitive type. + + +
const ENonModuleType: u64 = 0;
+
+ + + ## Function `get` @@ -102,6 +192,49 @@ later upgrade). + + + + +## Function `is_primitive` + +Returns true iff the TypeName represents a primitive type, i.e. one of +u8, u16, u32, u64, u128, u256, bool, address, vector. + + +
public fun is_primitive(self: &type_name::TypeName): bool
+
+ + + +
+Implementation + + +
public fun is_primitive(self: &TypeName): bool {
+    let bytes = self.name.as_bytes();
+    bytes == &b"bool" ||
+    bytes == &b"u8" ||
+    bytes == &b"u16" ||
+    bytes == &b"u32" ||
+    bytes == &b"u64" ||
+    bytes == &b"u128" ||
+    bytes == &b"u256" ||
+    bytes == &b"address" ||
+    (
+        bytes.length() >= 6 &&
+        bytes[0] == ASCII_V &&
+        bytes[1] == ASCII_E &&
+        bytes[2] == ASCII_C &&
+        bytes[3] == ASCII_T &&
+        bytes[4] == ASCII_O &&
+        bytes[5] == ASCII_R,
+    )
+}
+
+ + +
@@ -127,6 +260,89 @@ Get the String representation of self + + + + +## Function `get_address` + +Get Address string (Base16 encoded), first part of the TypeName. +Aborts if given a primitive type. + + +
public fun get_address(self: &type_name::TypeName): ascii::String
+
+ + + +
+Implementation + + +
public fun get_address(self: &TypeName): String {
+    assert!(!self.is_primitive(), ENonModuleType);
+
+    // Base16 (string) representation of an address has 2 symbols per byte.
+    let len = address::length() * 2;
+    let str_bytes = self.name.as_bytes();
+    let mut addr_bytes = vector[];
+    let mut i = 0;
+
+    // Read `len` bytes from the type name and push them to addr_bytes.
+    while (i < len) {
+        addr_bytes.push_back(str_bytes[i]);
+        i = i + 1;
+    };
+
+    ascii::string(addr_bytes)
+}
+
+ + + +
+ + + +## Function `get_module` + +Get name of the module. +Aborts if given a primitive type. + + +
public fun get_module(self: &type_name::TypeName): ascii::String
+
+ + + +
+Implementation + + +
public fun get_module(self: &TypeName): String {
+    assert!(!self.is_primitive(), ENonModuleType);
+
+    // Starts after address and a double colon: `<addr as HEX>::`
+    let mut i = address::length() * 2 + 2;
+    let str_bytes = self.name.as_bytes();
+    let mut module_name = vector[];
+    let colon = ASCII_COLON;
+    loop {
+        let char = &str_bytes[i];
+        if (char != &colon) {
+            module_name.push_back(*char);
+            i = i + 1;
+        } else {
+            break
+        }
+    };
+
+    ascii::string(module_name)
+}
+
+ + +
diff --git a/external-crates/move/crates/move-stdlib/docs/u128.md b/external-crates/move/crates/move-stdlib/docs/u128.md new file mode 100644 index 0000000000000..682372e184dc2 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/u128.md @@ -0,0 +1,195 @@ + + + +# Module `0x1::u128` + + + +- [Function `max`](#0x1_u128_max) +- [Function `min`](#0x1_u128_min) +- [Function `diff`](#0x1_u128_diff) +- [Function `divide_and_round_up`](#0x1_u128_divide_and_round_up) +- [Function `pow`](#0x1_u128_pow) +- [Function `sqrt`](#0x1_u128_sqrt) + + +
+ + + + + +## Function `max` + +Return the larger of x and y + + +
public fun max(x: u128, y: u128): u128
+
+ + + +
+Implementation + + +
public fun max(x: u128, y: u128): u128 {
+    std::macros::num_max!(x, y)
+}
+
+ + + +
+ + + +## Function `min` + +Return the smaller of x and y + + +
public fun min(x: u128, y: u128): u128
+
+ + + +
+Implementation + + +
public fun min(x: u128, y: u128): u128 {
+    std::macros::num_min!(x, y)
+}
+
+ + + +
+ + + +## Function `diff` + +Return the absolute value of x - y + + +
public fun diff(x: u128, y: u128): u128
+
+ + + +
+Implementation + + +
public fun diff(x: u128, y: u128): u128 {
+    std::macros::num_diff!(x, y)
+}
+
+ + + +
+ + + +## Function `divide_and_round_up` + +Calculate x / y, but round up the result. + + +
public fun divide_and_round_up(x: u128, y: u128): u128
+
+ + + +
+Implementation + + +
public fun divide_and_round_up(x: u128, y: u128): u128 {
+    std::macros::num_divide_and_round_up!(x, y)
+}
+
+ + + +
+ + + +## Function `pow` + +Return the value of a base raised to a power + + +
public fun pow(base: u128, exponent: u8): u128
+
+ + + +
+Implementation + + +
public fun pow(base: u128, exponent: u8): u128 {
+    std::macros::num_pow!(base, exponent)
+}
+
+ + + +
+ + + +## Function `sqrt` + +Get a nearest lower integer Square Root for x. Given that this +function can only operate with integers, it is impossible +to get perfect (or precise) integer square root for some numbers. + +Example: +``` +math::sqrt(9) => 3 +math::sqrt(8) => 2 // the nearest lower square root is 4; +``` + +In integer math, one of the possible ways to get results with more +precision is to use higher values or temporarily multiply the +value by some bigger number. Ideally if this is a square of 10 or 100. + +Example: +``` +math::sqrt(8) => 2; +math::sqrt(8 * 10000) => 282; +// now we can use this value as if it was 2.82; +// but to get the actual result, this value needs +// to be divided by 100 (because sqrt(10000)). + + +math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) +``` + + +
public fun sqrt(x: u128): u128
+
+ + + +
+Implementation + + +
public fun sqrt(x: u128): u128 {
+    std::macros::num_sqrt!<u128, u256>(x, 128)
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/u16.md b/external-crates/move/crates/move-stdlib/docs/u16.md new file mode 100644 index 0000000000000..08f849ea354fa --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/u16.md @@ -0,0 +1,195 @@ + + + +# Module `0x1::u16` + + + +- [Function `max`](#0x1_u16_max) +- [Function `min`](#0x1_u16_min) +- [Function `diff`](#0x1_u16_diff) +- [Function `divide_and_round_up`](#0x1_u16_divide_and_round_up) +- [Function `pow`](#0x1_u16_pow) +- [Function `sqrt`](#0x1_u16_sqrt) + + +
+ + + + + +## Function `max` + +Return the larger of x and y + + +
public fun max(x: u16, y: u16): u16
+
+ + + +
+Implementation + + +
public fun max(x: u16, y: u16): u16 {
+    std::macros::num_max!(x, y)
+}
+
+ + + +
+ + + +## Function `min` + +Return the smaller of x and y + + +
public fun min(x: u16, y: u16): u16
+
+ + + +
+Implementation + + +
public fun min(x: u16, y: u16): u16 {
+    std::macros::num_min!(x, y)
+}
+
+ + + +
+ + + +## Function `diff` + +Return the absolute value of x - y + + +
public fun diff(x: u16, y: u16): u16
+
+ + + +
+Implementation + + +
public fun diff(x: u16, y: u16): u16 {
+    std::macros::num_diff!(x, y)
+}
+
+ + + +
+ + + +## Function `divide_and_round_up` + +Calculate x / y, but round up the result. + + +
public fun divide_and_round_up(x: u16, y: u16): u16
+
+ + + +
+Implementation + + +
public fun divide_and_round_up(x: u16, y: u16): u16 {
+    std::macros::num_divide_and_round_up!(x, y)
+}
+
+ + + +
+ + + +## Function `pow` + +Return the value of a base raised to a power + + +
public fun pow(base: u16, exponent: u8): u16
+
+ + + +
+Implementation + + +
public fun pow(base: u16, exponent: u8): u16 {
+    std::macros::num_pow!(base, exponent)
+}
+
+ + + +
+ + + +## Function `sqrt` + +Get a nearest lower integer Square Root for x. Given that this +function can only operate with integers, it is impossible +to get perfect (or precise) integer square root for some numbers. + +Example: +``` +math::sqrt(9) => 3 +math::sqrt(8) => 2 // the nearest lower square root is 4; +``` + +In integer math, one of the possible ways to get results with more +precision is to use higher values or temporarily multiply the +value by some bigger number. Ideally if this is a square of 10 or 100. + +Example: +``` +math::sqrt(8) => 2; +math::sqrt(8 * 10000) => 282; +// now we can use this value as if it was 2.82; +// but to get the actual result, this value needs +// to be divided by 100 (because sqrt(10000)). + + +math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) +``` + + +
public fun sqrt(x: u16): u16
+
+ + + +
+Implementation + + +
public fun sqrt(x: u16): u16 {
+    std::macros::num_sqrt!<u16, u32>(x, 16)
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/u256.md b/external-crates/move/crates/move-stdlib/docs/u256.md new file mode 100644 index 0000000000000..84ed79a1229c6 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/u256.md @@ -0,0 +1,145 @@ + + + +# Module `0x1::u256` + + + +- [Function `max`](#0x1_u256_max) +- [Function `min`](#0x1_u256_min) +- [Function `diff`](#0x1_u256_diff) +- [Function `divide_and_round_up`](#0x1_u256_divide_and_round_up) +- [Function `pow`](#0x1_u256_pow) + + +
+ + + + + +## Function `max` + +Return the larger of x and y + + +
public fun max(x: u256, y: u256): u256
+
+ + + +
+Implementation + + +
public fun max(x: u256, y: u256): u256 {
+    std::macros::num_max!(x, y)
+}
+
+ + + +
+ + + +## Function `min` + +Return the smaller of x and y + + +
public fun min(x: u256, y: u256): u256
+
+ + + +
+Implementation + + +
public fun min(x: u256, y: u256): u256 {
+    std::macros::num_min!(x, y)
+}
+
+ + + +
+ + + +## Function `diff` + +Return the absolute value of x - y + + +
public fun diff(x: u256, y: u256): u256
+
+ + + +
+Implementation + + +
public fun diff(x: u256, y: u256): u256 {
+    std::macros::num_diff!(x, y)
+}
+
+ + + +
+ + + +## Function `divide_and_round_up` + +Calculate x / y, but round up the result. + + +
public fun divide_and_round_up(x: u256, y: u256): u256
+
+ + + +
+Implementation + + +
public fun divide_and_round_up(x: u256, y: u256): u256 {
+    std::macros::num_divide_and_round_up!(x, y)
+}
+
+ + + +
+ + + +## Function `pow` + +Return the value of a base raised to a power + + +
public fun pow(base: u256, exponent: u8): u256
+
+ + + +
+Implementation + + +
public fun pow(base: u256, exponent: u8): u256 {
+    std::macros::num_pow!(base, exponent)
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/u32.md b/external-crates/move/crates/move-stdlib/docs/u32.md new file mode 100644 index 0000000000000..084335a41875f --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/u32.md @@ -0,0 +1,195 @@ + + + +# Module `0x1::u32` + + + +- [Function `max`](#0x1_u32_max) +- [Function `min`](#0x1_u32_min) +- [Function `diff`](#0x1_u32_diff) +- [Function `divide_and_round_up`](#0x1_u32_divide_and_round_up) +- [Function `pow`](#0x1_u32_pow) +- [Function `sqrt`](#0x1_u32_sqrt) + + +
+ + + + + +## Function `max` + +Return the larger of x and y + + +
public fun max(x: u32, y: u32): u32
+
+ + + +
+Implementation + + +
public fun max(x: u32, y: u32): u32 {
+    std::macros::num_max!(x, y)
+}
+
+ + + +
+ + + +## Function `min` + +Return the smaller of x and y + + +
public fun min(x: u32, y: u32): u32
+
+ + + +
+Implementation + + +
public fun min(x: u32, y: u32): u32 {
+    std::macros::num_min!(x, y)
+}
+
+ + + +
+ + + +## Function `diff` + +Return the absolute value of x - y + + +
public fun diff(x: u32, y: u32): u32
+
+ + + +
+Implementation + + +
public fun diff(x: u32, y: u32): u32 {
+    std::macros::num_diff!(x, y)
+}
+
+ + + +
+ + + +## Function `divide_and_round_up` + +Calculate x / y, but round up the result. + + +
public fun divide_and_round_up(x: u32, y: u32): u32
+
+ + + +
+Implementation + + +
public fun divide_and_round_up(x: u32, y: u32): u32 {
+    std::macros::num_divide_and_round_up!(x, y)
+}
+
+ + + +
+ + + +## Function `pow` + +Return the value of a base raised to a power + + +
public fun pow(base: u32, exponent: u8): u32
+
+ + + +
+Implementation + + +
public fun pow(base: u32, exponent: u8): u32 {
+    std::macros::num_pow!(base, exponent)
+}
+
+ + + +
+ + + +## Function `sqrt` + +Get a nearest lower integer Square Root for x. Given that this +function can only operate with integers, it is impossible +to get perfect (or precise) integer square root for some numbers. + +Example: +``` +math::sqrt(9) => 3 +math::sqrt(8) => 2 // the nearest lower square root is 4; +``` + +In integer math, one of the possible ways to get results with more +precision is to use higher values or temporarily multiply the +value by some bigger number. Ideally if this is a square of 10 or 100. + +Example: +``` +math::sqrt(8) => 2; +math::sqrt(8 * 10000) => 282; +// now we can use this value as if it was 2.82; +// but to get the actual result, this value needs +// to be divided by 100 (because sqrt(10000)). + + +math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) +``` + + +
public fun sqrt(x: u32): u32
+
+ + + +
+Implementation + + +
public fun sqrt(x: u32): u32 {
+    std::macros::num_sqrt!<u32, u64>(x, 32)
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/u64.md b/external-crates/move/crates/move-stdlib/docs/u64.md new file mode 100644 index 0000000000000..9d27a4311f1c6 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/u64.md @@ -0,0 +1,195 @@ + + + +# Module `0x1::u64` + + + +- [Function `max`](#0x1_u64_max) +- [Function `min`](#0x1_u64_min) +- [Function `diff`](#0x1_u64_diff) +- [Function `divide_and_round_up`](#0x1_u64_divide_and_round_up) +- [Function `pow`](#0x1_u64_pow) +- [Function `sqrt`](#0x1_u64_sqrt) + + +
+ + + + + +## Function `max` + +Return the larger of x and y + + +
public fun max(x: u64, y: u64): u64
+
+ + + +
+Implementation + + +
public fun max(x: u64, y: u64): u64 {
+    std::macros::num_max!(x, y)
+}
+
+ + + +
+ + + +## Function `min` + +Return the smaller of x and y + + +
public fun min(x: u64, y: u64): u64
+
+ + + +
+Implementation + + +
public fun min(x: u64, y: u64): u64 {
+    std::macros::num_min!(x, y)
+}
+
+ + + +
+ + + +## Function `diff` + +Return the absolute value of x - y + + +
public fun diff(x: u64, y: u64): u64
+
+ + + +
+Implementation + + +
public fun diff(x: u64, y: u64): u64 {
+    std::macros::num_diff!(x, y)
+}
+
+ + + +
+ + + +## Function `divide_and_round_up` + +Calculate x / y, but round up the result. + + +
public fun divide_and_round_up(x: u64, y: u64): u64
+
+ + + +
+Implementation + + +
public fun divide_and_round_up(x: u64, y: u64): u64 {
+    std::macros::num_divide_and_round_up!(x, y)
+}
+
+ + + +
+ + + +## Function `pow` + +Return the value of a base raised to a power + + +
public fun pow(base: u64, exponent: u8): u64
+
+ + + +
+Implementation + + +
public fun pow(base: u64, exponent: u8): u64 {
+    std::macros::num_pow!(base, exponent)
+}
+
+ + + +
+ + + +## Function `sqrt` + +Get a nearest lower integer Square Root for x. Given that this +function can only operate with integers, it is impossible +to get perfect (or precise) integer square root for some numbers. + +Example: +``` +math::sqrt(9) => 3 +math::sqrt(8) => 2 // the nearest lower square root is 4; +``` + +In integer math, one of the possible ways to get results with more +precision is to use higher values or temporarily multiply the +value by some bigger number. Ideally if this is a square of 10 or 100. + +Example: +``` +math::sqrt(8) => 2; +math::sqrt(8 * 10000) => 282; +// now we can use this value as if it was 2.82; +// but to get the actual result, this value needs +// to be divided by 100 (because sqrt(10000)). + + +math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) +``` + + +
public fun sqrt(x: u64): u64
+
+ + + +
+Implementation + + +
public fun sqrt(x: u64): u64 {
+    std::macros::num_sqrt!<u64, u128>(x, 64)
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/u8.md b/external-crates/move/crates/move-stdlib/docs/u8.md new file mode 100644 index 0000000000000..0dc6d3b4fc02e --- /dev/null +++ b/external-crates/move/crates/move-stdlib/docs/u8.md @@ -0,0 +1,195 @@ + + + +# Module `0x1::u8` + + + +- [Function `max`](#0x1_u8_max) +- [Function `min`](#0x1_u8_min) +- [Function `diff`](#0x1_u8_diff) +- [Function `divide_and_round_up`](#0x1_u8_divide_and_round_up) +- [Function `pow`](#0x1_u8_pow) +- [Function `sqrt`](#0x1_u8_sqrt) + + +
+ + + + + +## Function `max` + +Return the larger of x and y + + +
public fun max(x: u8, y: u8): u8
+
+ + + +
+Implementation + + +
public fun max(x: u8, y: u8): u8 {
+    std::macros::num_max!(x, y)
+}
+
+ + + +
+ + + +## Function `min` + +Return the smaller of x and y + + +
public fun min(x: u8, y: u8): u8
+
+ + + +
+Implementation + + +
public fun min(x: u8, y: u8): u8 {
+    std::macros::num_min!(x, y)
+}
+
+ + + +
+ + + +## Function `diff` + +Return the absolute value of x - y + + +
public fun diff(x: u8, y: u8): u8
+
+ + + +
+Implementation + + +
public fun diff(x: u8, y: u8): u8 {
+    std::macros::num_diff!(x, y)
+}
+
+ + + +
+ + + +## Function `divide_and_round_up` + +Calculate x / y, but round up the result. + + +
public fun divide_and_round_up(x: u8, y: u8): u8
+
+ + + +
+Implementation + + +
public fun divide_and_round_up(x: u8, y: u8): u8 {
+    std::macros::num_divide_and_round_up!(x, y)
+}
+
+ + + +
+ + + +## Function `pow` + +Return the value of a base raised to a power + + +
public fun pow(base: u8, exponent: u8): u8
+
+ + + +
+Implementation + + +
public fun pow(base: u8, exponent: u8): u8 {
+    std::macros::num_pow!(base, exponent)
+}
+
+ + + +
+ + + +## Function `sqrt` + +Get a nearest lower integer Square Root for x. Given that this +function can only operate with integers, it is impossible +to get perfect (or precise) integer square root for some numbers. + +Example: +``` +math::sqrt(9) => 3 +math::sqrt(8) => 2 // the nearest lower square root is 4; +``` + +In integer math, one of the possible ways to get results with more +precision is to use higher values or temporarily multiply the +value by some bigger number. Ideally if this is a square of 10 or 100. + +Example: +``` +math::sqrt(8) => 2; +math::sqrt(8 * 10000) => 282; +// now we can use this value as if it was 2.82; +// but to get the actual result, this value needs +// to be divided by 100 (because sqrt(10000)). + + +math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) +``` + + +
public fun sqrt(x: u8): u8
+
+ + + +
+Implementation + + +
public fun sqrt(x: u8): u8 {
+    std::macros::num_sqrt!<u8, u16>(x, 8)
+}
+
+ + + +
+ + +[//]: # ("File containing references which can be used from documentation") diff --git a/external-crates/move/crates/move-stdlib/docs/vector.md b/external-crates/move/crates/move-stdlib/docs/vector.md index be96fad8c4044..1e13e7dc46eaf 100644 --- a/external-crates/move/crates/move-stdlib/docs/vector.md +++ b/external-crates/move/crates/move-stdlib/docs/vector.md @@ -41,7 +41,7 @@ vectors are growable. This module has many native functions. The index into the vector is out of bounds -
const EINDEX_OUT_OF_BOUNDS: u64 = 131072;
+
const EINDEX_OUT_OF_BOUNDS: u64 = 131072;
 
@@ -62,7 +62,7 @@ Create an empty vector. Implementation -
native public fun empty<Element>(): vector<Element>;
+
public native fun empty<Element>(): vector<Element>;
 
@@ -76,7 +76,7 @@ Create an empty vector. Return the length of the vector. -
public fun length<Element>(v: &vector<Element>): u64
+
public fun length<Element>(v: &vector<Element>): u64
 
@@ -85,7 +85,7 @@ Return the length of the vector. Implementation -
native public fun length<Element>(v: &vector<Element>): u64;
+
public native fun length<Element>(v: &vector<Element>): u64;
 
@@ -100,7 +100,7 @@ Acquire an immutable reference to the ith element of the vector i
is out of bounds. -
public fun borrow<Element>(v: &vector<Element>, i: u64): &Element
+
public fun borrow<Element>(v: &vector<Element>, i: u64): &Element
 
@@ -109,7 +109,7 @@ Aborts if i is out of bounds. Implementation -
native public fun borrow<Element>(v: &vector<Element>, i: u64): ∈
+
public native fun borrow<Element>(v: &vector<Element>, i: u64): ∈
 
@@ -132,7 +132,7 @@ Add element e to the end of the vector v. Implementation -
native public fun push_back<Element>(v: &mut vector<Element>, e: Element);
+
public native fun push_back<Element>(v: &mut vector<Element>, e: Element);
 
@@ -147,7 +147,7 @@ Return a mutable reference to the ith element in the vector v Aborts if i is out of bounds. -
public fun borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element
+
public fun borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element
 
@@ -156,7 +156,7 @@ Aborts if i is out of bounds. Implementation -
native public fun borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element;
+
public native fun borrow_mut<Element>(v: &mut vector<Element>, i: u64): &mut Element;
 
@@ -180,7 +180,7 @@ Aborts if v is empty. Implementation -
native public fun pop_back<Element>(v: &mut vector<Element>): Element;
+
public native fun pop_back<Element>(v: &mut vector<Element>): Element;
 
@@ -204,7 +204,7 @@ Aborts if v is not empty. Implementation -
native public fun destroy_empty<Element>(v: vector<Element>);
+
public native fun destroy_empty<Element>(v: vector<Element>);
 
@@ -219,7 +219,7 @@ Swaps the elements at the ith and jth indices in the v Aborts if i or j is out of bounds. -
public fun swap<Element>(v: &mut vector<Element>, i: u64, j: u64)
+
public fun swap<Element>(v: &mut vector<Element>, i: u64, j: u64)
 
@@ -228,7 +228,7 @@ Aborts if i or j is out of bounds. Implementation -
native public fun swap<Element>(v: &mut vector<Element>, i: u64, j: u64);
+
public native fun swap<Element>(v: &mut vector<Element>, i: u64, j: u64);
 
@@ -252,8 +252,8 @@ Return an vector of size one containing element e.
public fun singleton<Element>(e: Element): vector<Element> {
-    let v = empty();
-    push_back(&mut v, e);
+    let mut v = empty();
+    v.push_back(e);
     v
 }
 
@@ -279,13 +279,13 @@ Reverses the order of the elements in the vector v in place.
public fun reverse<Element>(v: &mut vector<Element>) {
-    let len = length(v);
+    let len = v.length();
     if (len == 0) return ();
 
-    let front_index = 0;
-    let back_index = len -1;
+    let mut front_index = 0;
+    let mut back_index = len - 1;
     while (front_index < back_index) {
-        swap(v, front_index, back_index);
+        v.swap(front_index, back_index);
         front_index = front_index + 1;
         back_index = back_index - 1;
     }
@@ -312,10 +312,10 @@ Pushes all of the elements of the other vector into the lhsImplementation
 
 
-
public fun append<Element>(lhs: &mut vector<Element>, other: vector<Element>) {
-    reverse(&mut other);
-    while (!is_empty(&other)) push_back(lhs, pop_back(&mut other));
-    destroy_empty(other);
+
public fun append<Element>(lhs: &mut vector<Element>, mut other: vector<Element>) {
+    other.reverse();
+    while (!other.is_empty()) lhs.push_back(other.pop_back());
+    other.destroy_empty();
 }
 
@@ -340,7 +340,7 @@ Return true if the vector v has no elements and
public fun is_empty<Element>(v: &vector<Element>): bool {
-    length(v) == 0
+    v.length() == 0
 }
 
@@ -366,10 +366,10 @@ Otherwise, returns false.
public fun contains<Element>(v: &vector<Element>, e: &Element): bool {
-    let i = 0;
-    let len = length(v);
+    let mut i = 0;
+    let len = v.length();
     while (i < len) {
-        if (borrow(v, i) == e) return true;
+        if (&v[i] == e) return true;
         i = i + 1;
     };
     false
@@ -388,7 +388,7 @@ Return (true, i) if e is in the vector v<
 Otherwise, returns (false, 0).
 
 
-
public fun index_of<Element>(v: &vector<Element>, e: &Element): (bool, u64)
+
public fun index_of<Element>(v: &vector<Element>, e: &Element): (bool, u64)
 
@@ -397,11 +397,11 @@ Otherwise, returns (false, 0). Implementation -
public fun index_of<Element>(v: &vector<Element>, e: &Element): (bool, u64) {
-    let i = 0;
-    let len = length(v);
+
public fun index_of<Element>(v: &vector<Element>, e: &Element): (bool, u64) {
+    let mut i = 0;
+    let len = v.length();
     while (i < len) {
-        if (borrow(v, i) == e) return (true, i);
+        if (&v[i] == e) return (true, i);
         i = i + 1;
     };
     (false, 0)
@@ -421,7 +421,7 @@ This is O(n) and preserves ordering of elements in the vector.
 Aborts if i is out of bounds.
 
 
-
public fun remove<Element>(v: &mut vector<Element>, i: u64): Element
+
public fun remove<Element>(v: &mut vector<Element>, i: u64): Element
 
@@ -430,14 +430,14 @@ Aborts if i is out of bounds. Implementation -
public fun remove<Element>(v: &mut vector<Element>, i: u64): Element {
-    let len = length(v);
+
public fun remove<Element>(v: &mut vector<Element>, mut i: u64): Element {
+    let mut len = v.length();
     // i out of bounds; abort
     if (i >= len) abort EINDEX_OUT_OF_BOUNDS;
 
     len = len - 1;
-    while (i < len) swap(v, i, { i = i + 1; i });
-    pop_back(v)
+    while (i < len) v.swap(i, { i = i + 1; i });
+    v.pop_back()
 }
 
@@ -451,12 +451,12 @@ Aborts if i is out of bounds. Insert e at position i in the vector v. If i is in bounds, this shifts the old v[i] and all subsequent elements to the right. -If i == length(v), this adds e to the end of the vector. +If i == v.length(), this adds e to the end of the vector. This is O(n) and preserves ordering of elements in the vector. -Aborts if i > length(v) +Aborts if i > v.length() -
public fun insert<Element>(v: &mut vector<Element>, e: Element, i: u64)
+
public fun insert<Element>(v: &mut vector<Element>, e: Element, i: u64)
 
@@ -465,14 +465,14 @@ Aborts if i > length(v)Implementation -
public fun insert<Element>(v: &mut vector<Element>, e: Element, i: u64) {
-    let len = length(v);
+
public fun insert<Element>(v: &mut vector<Element>, e: Element, mut i: u64) {
+    let len = v.length();
     // i too big abort
     if (i > len) abort EINDEX_OUT_OF_BOUNDS;
 
-    push_back(v, e);
+    v.push_back(e);
     while (i < len) {
-        swap(v, i, len);
+        v.swap(i, len);
         i = i + 1
     }
 }
@@ -491,7 +491,7 @@ This is O(1), but does not preserve ordering of elements in the vector.
 Aborts if i is out of bounds.
 
 
-
public fun swap_remove<Element>(v: &mut vector<Element>, i: u64): Element
+
public fun swap_remove<Element>(v: &mut vector<Element>, i: u64): Element
 
@@ -500,11 +500,11 @@ Aborts if i is out of bounds. Implementation -
public fun swap_remove<Element>(v: &mut vector<Element>, i: u64): Element {
-    assert!(!is_empty(v), EINDEX_OUT_OF_BOUNDS);
-    let last_idx = length(v) - 1;
-    swap(v, i, last_idx);
-    pop_back(v)
+
public fun swap_remove<Element>(v: &mut vector<Element>, i: u64): Element {
+    assert!(!v.is_empty(), EINDEX_OUT_OF_BOUNDS);
+    let last_idx = v.length() - 1;
+    v.swap(i, last_idx);
+    v.pop_back()
 }
 
diff --git a/external-crates/move/crates/move-stdlib/error_description.errmap b/external-crates/move/crates/move-stdlib/error_description.errmap deleted file mode 100644 index e278809587b0938d92310bc82416685344e3b14e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1310 zcmcJP(Qnf*5XO_S4KXn$#2ye&C*TDk?Ew(tVM5AUZ!_wWs!b>0B}tQOYbmvZ<8*_+ zo{Qs7(_ou;Ac_# z87vNV{)mu{)e=+U7A1l(P%l(d7BD59P)SS=e8;l4W(lMCzrk3^zrt9|`wi@j-sno| zdAnCdoy5nVUR$^pKN@8O zN&_^U4Z_8`b&XO`W_pf5#!@RUkXpK(6-b+pAJPXd+#Wld3}QYU@Ltf4*=HMc*_1|9 zr69ZhE$pVt?&%d}a`Y|v&PLHI2%r!vQMc1L{b_T$d30 - -# Module `0x1::compare` - -Utilities for comparing Move values based on their representation in BCS. - - -- [Constants](#@Constants_0) -- [Function `cmp_bcs_bytes`](#0x1_compare_cmp_bcs_bytes) -- [Function `cmp_u8`](#0x1_compare_cmp_u8) -- [Function `cmp_u64`](#0x1_compare_cmp_u64) - - -
- - - - - -## Constants - - - - - - -
const EQUAL: u8 = 0;
-
- - - - - - - -
const GREATER_THAN: u8 = 2;
-
- - - - - - - -
const LESS_THAN: u8 = 1;
-
- - - - - -## Function `cmp_bcs_bytes` - -compare vectors v1 and v2 using (1) vector contents from right to left and then -(2) vector length to break ties. -Returns either EQUAL (0u8), LESS_THAN (1u8), or GREATER_THAN (2u8). - -This function is designed to compare BCS (Binary Canonical Serialization)-encoded values -(i.e., vectors produced by bcs::to_bytes). A typical client will call -compare::cmp_bcs_bytes(bcs::to_bytes(&t1), bcs::to_bytes(&t2)). The comparison provides the -following guarantees w.r.t the original values t1 and t2: -- cmp_bcs_bytes(bcs(t1), bcs(t2)) == LESS_THAN iff cmp_bcs_bytes(t2, t1) == GREATER_THAN -- compare::cmp<T>(t1, t2) == EQUAL iff t1 == t2 and (similarly) -compare::cmp<T>(t1, t2) != EQUAL iff t1 != t2, where == and != denote the Move -bytecode operations for polymorphic equality. -- for all primitive types T with < and > comparison operators exposed in Move bytecode -(u8, u16, u32, u64, u128, u256), we have -compare_bcs_bytes(bcs(t1), bcs(t2)) == LESS_THAN iff t1 < t2 and (similarly) -compare_bcs_bytes(bcs(t1), bcs(t2)) == LESS_THAN iff t1 > t2. - -For all other types, the order is whatever the BCS encoding of the type and the comparison -strategy above gives you. One case where the order might be surprising is the address -type. -CoreAddresses are 16 byte hex values that BCS encodes with the identity function. The right -to left, byte-by-byte comparison means that (for example) -compare_bcs_bytes(bcs(0x01), bcs(0x10)) == LESS_THAN (as you'd expect), but -compare_bcs_bytes(bcs(0x100), bcs(0x001)) == LESS_THAN (as you probably wouldn't expect). -Keep this in mind when using this function to compare addresses. - - -
public fun cmp_bcs_bytes(v1: &vector<u8>, v2: &vector<u8>): u8
-
- - - -
-Implementation - - -
public fun cmp_bcs_bytes(v1: &vector<u8>, v2: &vector<u8>): u8 {
-    let i1 = vector::length(v1);
-    let i2 = vector::length(v2);
-    let len_cmp = cmp_u64(i1, i2);
-
-    // BCS uses little endian encoding for all integer types, so we choose to compare from left
-    // to right. Going right to left would make the behavior of compare::cmp diverge from the
-    // bytecode operators < and > on integer values (which would be confusing).
-    while (i1 > 0 && i2 > 0) {
-        i1 = i1 - 1;
-        i2 = i2 - 1;
-        let elem_cmp = cmp_u8(*vector::borrow(v1, i1), *vector::borrow(v2, i2));
-        if (elem_cmp != 0) return elem_cmp
-        // else, compare next element
-    };
-    // all compared elements equal; use length comparion to break the tie
-    len_cmp
-}
-
- - - -
- - - -## Function `cmp_u8` - -Compare two u8's - - -
fun cmp_u8(i1: u8, i2: u8): u8
-
- - - -
-Implementation - - -
fun cmp_u8(i1: u8, i2: u8): u8 {
-    if (i1 == i2) EQUAL
-    else if (i1 < i2) LESS_THAN
-    else GREATER_THAN
-}
-
- - - -
- - - -## Function `cmp_u64` - -Compare two u64's - - -
fun cmp_u64(i1: u64, i2: u64): u8
-
- - - -
-Implementation - - -
fun cmp_u64(i1: u64, i2: u64): u8 {
-    if (i1 == i2) EQUAL
-    else if (i1 < i2) LESS_THAN
-    else GREATER_THAN
-}
-
- - - -
diff --git a/external-crates/move/crates/move-stdlib/nursery/sources/compare.move b/external-crates/move/crates/move-stdlib/nursery/sources/compare.move deleted file mode 100644 index 04238e4c2afe7..0000000000000 --- a/external-crates/move/crates/move-stdlib/nursery/sources/compare.move +++ /dev/null @@ -1,70 +0,0 @@ -/// Utilities for comparing Move values based on their representation in BCS. -module std::compare { - use std::vector; - - // Move does not have signed integers, so we cannot use the usual 0, -1, 1 convention to - // represent EQUAL, LESS_THAN, and GREATER_THAN. Instead, we fun a new convention using u8 - // constants: - const EQUAL: u8 = 0; - const LESS_THAN: u8 = 1; - const GREATER_THAN: u8 = 2; - - /// compare vectors `v1` and `v2` using (1) vector contents from right to left and then - /// (2) vector length to break ties. - /// Returns either `EQUAL` (0u8), `LESS_THAN` (1u8), or `GREATER_THAN` (2u8). - /// - /// This function is designed to compare BCS (Binary Canonical Serialization)-encoded values - /// (i.e., vectors produced by `bcs::to_bytes`). A typical client will call - /// `compare::cmp_bcs_bytes(bcs::to_bytes(&t1), bcs::to_bytes(&t2))`. The comparison provides the - /// following guarantees w.r.t the original values t1 and t2: - /// - `cmp_bcs_bytes(bcs(t1), bcs(t2)) == LESS_THAN` iff `cmp_bcs_bytes(t2, t1) == GREATER_THAN` - /// - `compare::cmp(t1, t2) == EQUAL` iff `t1 == t2` and (similarly) - /// `compare::cmp(t1, t2) != EQUAL` iff `t1 != t2`, where `==` and `!=` denote the Move - /// bytecode operations for polymorphic equality. - /// - for all primitive types `T` with `<` and `>` comparison operators exposed in Move bytecode - /// (`u8`, `u16`, `u32`, `u64`, `u128`, `u256`), we have - /// `compare_bcs_bytes(bcs(t1), bcs(t2)) == LESS_THAN` iff `t1 < t2` and (similarly) - /// `compare_bcs_bytes(bcs(t1), bcs(t2)) == LESS_THAN` iff `t1 > t2`. - /// - /// For all other types, the order is whatever the BCS encoding of the type and the comparison - /// strategy above gives you. One case where the order might be surprising is the `address` - /// type. - /// CoreAddresses are 16 byte hex values that BCS encodes with the identity function. The right - /// to left, byte-by-byte comparison means that (for example) - /// `compare_bcs_bytes(bcs(0x01), bcs(0x10)) == LESS_THAN` (as you'd expect), but - /// `compare_bcs_bytes(bcs(0x100), bcs(0x001)) == LESS_THAN` (as you probably wouldn't expect). - /// Keep this in mind when using this function to compare addresses. - public fun cmp_bcs_bytes(v1: &vector, v2: &vector): u8 { - let i1 = vector::length(v1); - let i2 = vector::length(v2); - let len_cmp = cmp_u64(i1, i2); - - // BCS uses little endian encoding for all integer types, so we choose to compare from left - // to right. Going right to left would make the behavior of compare::cmp diverge from the - // bytecode operators < and > on integer values (which would be confusing). - while (i1 > 0 && i2 > 0) { - i1 = i1 - 1; - i2 = i2 - 1; - let elem_cmp = cmp_u8(*vector::borrow(v1, i1), *vector::borrow(v2, i2)); - if (elem_cmp != 0) return elem_cmp - // else, compare next element - }; - // all compared elements equal; use length comparion to break the tie - len_cmp - } - - /// Compare two `u8`'s - fun cmp_u8(i1: u8, i2: u8): u8 { - if (i1 == i2) EQUAL - else if (i1 < i2) LESS_THAN - else GREATER_THAN - } - - /// Compare two `u64`'s - fun cmp_u64(i1: u64, i2: u64): u8 { - if (i1 == i2) EQUAL - else if (i1 < i2) LESS_THAN - else GREATER_THAN - } - -} diff --git a/external-crates/move/crates/move-stdlib/nursery/sources/debug.move b/external-crates/move/crates/move-stdlib/nursery/sources/debug.move deleted file mode 100644 index d4a506d10f5dd..0000000000000 --- a/external-crates/move/crates/move-stdlib/nursery/sources/debug.move +++ /dev/null @@ -1,18 +0,0 @@ -/// Module providing debug functionality. -module std::debug { - - /// Pretty-prints any Move value. For a Move struct, includes its field names, their types and their values. - native public fun print(x: &T); - - /// Prints the calling function's stack trace. - native public fun print_stack_trace(); - - #[test_only] - use std::string; - - #[test_only] - /// Utility function for printing a sequence of UTF8 bytes as a string (e.g., `b"Hello"`). - public fun print_string(utf8_bytes: vector) { - print(&string::utf8(utf8_bytes)); - } -} diff --git a/external-crates/move/crates/move-stdlib/nursery/tests/compare_tests.move b/external-crates/move/crates/move-stdlib/nursery/tests/compare_tests.move deleted file mode 100644 index 4af198639ffd0..0000000000000 --- a/external-crates/move/crates/move-stdlib/nursery/tests/compare_tests.move +++ /dev/null @@ -1,86 +0,0 @@ -// Tests for polymorphic comparison in Move -#[test_only] -module std::compareTests { - use std::compare; - use std::bcs; - - const EQUAL: u8 = 0; - const LESS_THAN: u8 = 1; - const GREATER_THAN: u8 = 2; - - - #[test] - fun equality_of_simple_types() { - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&true), &bcs::to_bytes(&true)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u8), &bcs::to_bytes(&1u8)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u16), &bcs::to_bytes(&1u16)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u32), &bcs::to_bytes(&1u32)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1), &bcs::to_bytes(&1)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u128), &bcs::to_bytes(&1u128)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u256), &bcs::to_bytes(&1u256)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x1), &bcs::to_bytes(&@0x1)) == EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"01"), &bcs::to_bytes(&x"01")) == EQUAL, 0); - } - - #[test] - fun inequality_of_simple_types() { - // inequality of simple types - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&true), &bcs::to_bytes(&false)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u8), &bcs::to_bytes(&0u8)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u16), &bcs::to_bytes(&0u16)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u32), &bcs::to_bytes(&0u32)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1), &bcs::to_bytes(&0)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u128), &bcs::to_bytes(&0u128)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u256), &bcs::to_bytes(&0u256)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x1), &bcs::to_bytes(&@0x0)) != EQUAL, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"01"), &bcs::to_bytes(&x"00")) != EQUAL, 0); - } - - #[test] - fun less_than_with_natural_ordering() { - // less than for types with a natural ordering exposed via bytecode operations - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&false), &bcs::to_bytes(&true)) == LESS_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&0u8), &bcs::to_bytes(&1u8)) == LESS_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&0u16), &bcs::to_bytes(&1u16)) == LESS_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&0u32), &bcs::to_bytes(&1u32)) == LESS_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&0), &bcs::to_bytes(&1)) == LESS_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&0u128), &bcs::to_bytes(&1u128)) == LESS_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&0u256), &bcs::to_bytes(&1u256)) == LESS_THAN, 0); - } - - #[test] - fun less_than_without_natural_ordering() { - // less then for types without a natural ordering exposed by bytecode operations - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x0), &bcs::to_bytes(&@0x1)) == LESS_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x01), &bcs::to_bytes(&@0x10)) == LESS_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x100), &bcs::to_bytes(&@0x001)) == LESS_THAN, 0); // potentially confusing - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"00"), &bcs::to_bytes(&x"01")) == LESS_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"01"), &bcs::to_bytes(&x"10")) == LESS_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"0000"), &bcs::to_bytes(&x"01")) == LESS_THAN, 0); // - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"0100"), &bcs::to_bytes(&x"0001")) == LESS_THAN, 0); // potentially confusing - } - - #[test] - fun greater_than_with_natural_ordering() { - // greater than for types with a natural ordering exposed by bytecode operations - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&true), &bcs::to_bytes(&false)) == GREATER_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u8), &bcs::to_bytes(&0u8)) == GREATER_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u16), &bcs::to_bytes(&0u16)) == GREATER_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u32), &bcs::to_bytes(&0u32)) == GREATER_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1), &bcs::to_bytes(&0)) == GREATER_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u128), &bcs::to_bytes(&0u128)) == GREATER_THAN, 0); - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&1u256), &bcs::to_bytes(&0u256)) == GREATER_THAN, 0); - } - - #[test] - fun greater_than_without_natural_ordering() { - // greater than for types without a natural ordering exposed by by bytecode operations - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x1), &bcs::to_bytes(&@0x0)) == GREATER_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x10), &bcs::to_bytes(&@0x01)) == GREATER_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&@0x001), &bcs::to_bytes(&@0x100)) == GREATER_THAN, 0); // potentially confusing - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"01"), &bcs::to_bytes(&x"00")) == GREATER_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"10"), &bcs::to_bytes(&x"01")) == GREATER_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"01"), &bcs::to_bytes(&x"0000")) == GREATER_THAN, 0); // sensible - assert!(compare::cmp_bcs_bytes(&bcs::to_bytes(&x"0001"), &bcs::to_bytes(&x"0100")) == GREATER_THAN, 0); // potentially confusing - } -} diff --git a/external-crates/move/crates/move-stdlib/sources/address.move b/external-crates/move/crates/move-stdlib/sources/address.move new file mode 100644 index 0000000000000..ec1416b4473bf --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/address.move @@ -0,0 +1,12 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +/// Provides a way to get address length since it's a +/// platform-specific parameter. +module std::address { + /// Should be converted to a native function. + /// Current implementation only works for Sui. + public fun length(): u64 { + 32 + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/ascii.move b/external-crates/move/crates/move-stdlib/sources/ascii.move index 95e05588b4be4..60564b49893a1 100644 --- a/external-crates/move/crates/move-stdlib/sources/ascii.move +++ b/external-crates/move/crates/move-stdlib/sources/ascii.move @@ -1,107 +1,166 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + /// The `ASCII` module defines basic string and char newtypes in Move that verify /// that characters are valid ASCII, and that strings consist of only valid ASCII characters. module std::ascii { - use std::vector; - use std::option::{Self, Option}; + // Allows calling `.to_string()` to convert an `ascii::String` into as `string::String` + public use fun std::string::from_ascii as String.to_string; /// An invalid ASCII character was encountered when creating an ASCII string. - const EINVALID_ASCII_CHARACTER: u64 = 0x10000; - - /// The `String` struct holds a vector of bytes that all represent - /// valid ASCII characters. Note that these ASCII characters may not all - /// be printable. To determine if a `String` contains only "printable" - /// characters you should use the `all_characters_printable` predicate - /// defined in this module. - struct String has copy, drop, store { - bytes: vector, - } - - /// An ASCII character. - struct Char has copy, drop, store { - byte: u8, - } + const EInvalidASCIICharacter: u64 = 0x10000; + /// An invalid index was encountered when creating a substring. + const EInvalidIndex: u64 = 0x10001; + + /// The `String` struct holds a vector of bytes that all represent + /// valid ASCII characters. Note that these ASCII characters may not all + /// be printable. To determine if a `String` contains only "printable" + /// characters you should use the `all_characters_printable` predicate + /// defined in this module. + public struct String has copy, drop, store { + bytes: vector, + } + + /// An ASCII character. + public struct Char has copy, drop, store { + byte: u8, + } /// Convert a `byte` into a `Char` that is checked to make sure it is valid ASCII. public fun char(byte: u8): Char { - assert!(is_valid_char(byte), EINVALID_ASCII_CHARACTER); + assert!(is_valid_char(byte), EInvalidASCIICharacter); Char { byte } } /// Convert a vector of bytes `bytes` into an `String`. Aborts if /// `bytes` contains non-ASCII characters. public fun string(bytes: vector): String { - let x = try_string(bytes); - assert!( - option::is_some(&x), - EINVALID_ASCII_CHARACTER - ); - option::destroy_some(x) + let x = try_string(bytes); + assert!(x.is_some(), EInvalidASCIICharacter); + x.destroy_some() } /// Convert a vector of bytes `bytes` into an `String`. Returns /// `Some()` if the `bytes` contains all valid ASCII /// characters. Otherwise returns `None`. public fun try_string(bytes: vector): Option { - let len = vector::length(&bytes); - let i = 0; - while (i < len) { - let possible_byte = *vector::borrow(&bytes, i); - if (!is_valid_char(possible_byte)) return option::none(); - i = i + 1; - }; - option::some(String { bytes }) + let is_valid = bytes.all!(|byte| is_valid_char(*byte)); + if (is_valid) option::some(String { bytes }) + else option::none() } /// Returns `true` if all characters in `string` are printable characters /// Returns `false` otherwise. Not all `String`s are printable strings. public fun all_characters_printable(string: &String): bool { - let len = vector::length(&string.bytes); - let i = 0; - while (i < len) { - let byte = *vector::borrow(&string.bytes, i); - if (!is_printable_char(byte)) return false; - i = i + 1; - }; - true + string.bytes.all!(|byte| is_printable_char(*byte)) } + /// Push a `Char` to the end of the `string`. public fun push_char(string: &mut String, char: Char) { - vector::push_back(&mut string.bytes, char.byte); + string.bytes.push_back(char.byte); } + /// Pop a `Char` from the end of the `string`. public fun pop_char(string: &mut String): Char { - Char { byte: vector::pop_back(&mut string.bytes) } + Char { byte: string.bytes.pop_back() } } + /// Returns the length of the `string` in bytes. public fun length(string: &String): u64 { - vector::length(as_bytes(string)) + string.as_bytes().length() + } + + /// Append the `other` string to the end of `string`. + public fun append(string: &mut String, other: String) { + string.bytes.append(other.into_bytes()) + } + + /// Insert the `other` string at the `at` index of `string`. + public fun insert(s: &mut String, at: u64, o: String) { + assert!(at <= s.length(), EInvalidIndex); + o.into_bytes().destroy!(|e| s.bytes.insert(e, at)); + } + + /// Copy the slice of the `string` from `i` to `j` into a new `String`. + public fun substring(string: &String, i: u64, j: u64): String { + assert!(i <= j && j <= string.length(), EInvalidIndex); + let mut bytes = vector[]; + i.range_do!(j, |i| bytes.push_back(string.bytes[i])); + String { bytes } } /// Get the inner bytes of the `string` as a reference public fun as_bytes(string: &String): &vector { - &string.bytes + &string.bytes } /// Unpack the `string` to get its backing bytes public fun into_bytes(string: String): vector { - let String { bytes } = string; - bytes + let String { bytes } = string; + bytes } - /// Unpack the `char` into its underlying byte. + /// Unpack the `char` into its underlying bytes. public fun byte(char: Char): u8 { - let Char { byte } = char; - byte + let Char { byte } = char; + byte } - /// Returns `true` if `b` is a valid ASCII character. Returns `false` otherwise. + /// Returns `true` if `b` is a valid ASCII character. + /// Returns `false` otherwise. public fun is_valid_char(b: u8): bool { - b <= 0x7F + b <= 0x7F } - /// Returns `true` if `byte` is an printable ASCII character. Returns `false` otherwise. + /// Returns `true` if `byte` is an printable ASCII character. + /// Returns `false` otherwise. public fun is_printable_char(byte: u8): bool { - byte >= 0x20 && // Disallow metacharacters - byte <= 0x7E // Don't allow DEL metacharacter + byte >= 0x20 && // Disallow metacharacters + byte <= 0x7E // Don't allow DEL metacharacter + } + + /// Returns `true` if `string` is empty. + public fun is_empty(string: &String): bool { + string.bytes.is_empty() + } + + /// Convert a `string` to its uppercase equivalent. + public fun to_uppercase(string: &String): String { + let bytes = string.as_bytes().map_ref!(|byte| char_to_uppercase(*byte)); + String { bytes } + } + + /// Convert a `string` to its lowercase equivalent. + public fun to_lowercase(string: &String): String { + let bytes = string.as_bytes().map_ref!(|byte| char_to_lowercase(*byte)); + String { bytes } + } + + /// Computes the index of the first occurrence of the `substr` in the `string`. + /// Returns the length of the `string` if the `substr` is not found. + /// Returns 0 if the `substr` is empty. + public fun index_of(string: &String, substr: &String): u64 { + let mut i = 0; + let (n, m) = (string.length(), substr.length()); + if (n < m) return n; + while (i <= n - m) { + let mut j = 0; + while (j < m && string.bytes[i + j] == substr.bytes[j]) j = j + 1; + if (j == m) return i; + i = i + 1; + }; + n + } + + /// Convert a `char` to its lowercase equivalent. + fun char_to_uppercase(byte: u8): u8 { + if (byte >= 0x61 && byte <= 0x7A) byte - 0x20 + else byte + } + + /// Convert a `char` to its lowercase equivalent. + fun char_to_lowercase(byte: u8): u8 { + if (byte >= 0x41 && byte <= 0x5A) byte + 0x20 + else byte } } diff --git a/external-crates/move/crates/move-stdlib/sources/bcs.move b/external-crates/move/crates/move-stdlib/sources/bcs.move index edac0cff2f19e..8e07273cf1ee5 100644 --- a/external-crates/move/crates/move-stdlib/sources/bcs.move +++ b/external-crates/move/crates/move-stdlib/sources/bcs.move @@ -1,3 +1,6 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + /// Utility for converting a Move value to its binary representation in BCS (Binary Canonical /// Serialization). BCS is the binary encoding for Move resources and other non-module values /// published on-chain. See https://github.com/diem/bcs#binary-canonical-serialization-bcs for more diff --git a/external-crates/move/crates/move-stdlib/sources/bit_vector.move b/external-crates/move/crates/move-stdlib/sources/bit_vector.move index ddf3b99b3fda1..354b72c492872 100644 --- a/external-crates/move/crates/move-stdlib/sources/bit_vector.move +++ b/external-crates/move/crates/move-stdlib/sources/bit_vector.move @@ -1,17 +1,18 @@ -module std::bit_vector { - use std::vector; +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 +module std::bit_vector { /// The provided index is out of bounds const EINDEX: u64 = 0x20000; /// An invalid length of bitvector was given const ELENGTH: u64 = 0x20001; - #[test_only] + #[allow(unused_const)] const WORD_SIZE: u64 = 1; /// The maximum allowed bitvector size const MAX_SIZE: u64 = 1024; - struct BitVector has copy, drop, store { + public struct BitVector has copy, drop, store { length: u64, bit_field: vector, } @@ -19,10 +20,10 @@ module std::bit_vector { public fun new(length: u64): BitVector { assert!(length > 0, ELENGTH); assert!(length < MAX_SIZE, ELENGTH); - let counter = 0; - let bit_field = vector::empty(); + let mut counter = 0; + let mut bit_field = vector::empty(); while (counter < length) { - vector::push_back(&mut bit_field, false); + bit_field.push_back(false); counter = counter + 1; }; @@ -34,15 +35,15 @@ module std::bit_vector { /// Set the bit at `bit_index` in the `bitvector` regardless of its previous state. public fun set(bitvector: &mut BitVector, bit_index: u64) { - assert!(bit_index < vector::length(&bitvector.bit_field), EINDEX); - let x = vector::borrow_mut(&mut bitvector.bit_field, bit_index); + assert!(bit_index < bitvector.bit_field.length(), EINDEX); + let x = &mut bitvector.bit_field[bit_index]; *x = true; } /// Unset the bit at `bit_index` in the `bitvector` regardless of its previous state. public fun unset(bitvector: &mut BitVector, bit_index: u64) { - assert!(bit_index < vector::length(&bitvector.bit_field), EINDEX); - let x = vector::borrow_mut(&mut bitvector.bit_field, bit_index); + assert!(bit_index < bitvector.bit_field.length(), EINDEX); + let x = &mut bitvector.bit_field[bit_index]; *x = false; } @@ -50,19 +51,19 @@ module std::bit_vector { /// bitvector's length the bitvector will be zeroed out. public fun shift_left(bitvector: &mut BitVector, amount: u64) { if (amount >= bitvector.length) { - let len = vector::length(&bitvector.bit_field); - let i = 0; + let len = bitvector.bit_field.length(); + let mut i = 0; while (i < len) { - let elem = vector::borrow_mut(&mut bitvector.bit_field, i); + let elem = &mut bitvector.bit_field[i]; *elem = false; i = i + 1; }; } else { - let i = amount; + let mut i = amount; while (i < bitvector.length) { - if (is_index_set(bitvector, i)) set(bitvector, i - amount) - else unset(bitvector, i - amount); + if (bitvector.is_index_set(i)) bitvector.set(i - amount) + else bitvector.unset(i - amount); i = i + 1; }; @@ -78,13 +79,13 @@ module std::bit_vector { /// Return the value of the bit at `bit_index` in the `bitvector`. `true` /// represents "1" and `false` represents a 0 public fun is_index_set(bitvector: &BitVector, bit_index: u64): bool { - assert!(bit_index < vector::length(&bitvector.bit_field), EINDEX); - *vector::borrow(&bitvector.bit_field, bit_index) + assert!(bit_index < bitvector.bit_field.length(), EINDEX); + bitvector.bit_field[bit_index] } /// Return the length (number of usable bits) of this bitvector public fun length(bitvector: &BitVector): u64 { - vector::length(&bitvector.bit_field) + bitvector.bit_field.length() } /// Returns the length of the longest sequence of set bits starting at (and @@ -92,11 +93,11 @@ module std::bit_vector { /// sequence, then `0` is returned. public fun longest_set_sequence_starting_at(bitvector: &BitVector, start_index: u64): u64 { assert!(start_index < bitvector.length, EINDEX); - let index = start_index; + let mut index = start_index; // Find the greatest index in the vector such that all indices less than it are set. while (index < bitvector.length) { - if (!is_index_set(bitvector, index)) break; + if (!bitvector.is_index_set(index)) break; index = index + 1; }; diff --git a/external-crates/move/crates/move-stdlib/sources/debug.move b/external-crates/move/crates/move-stdlib/sources/debug.move new file mode 100644 index 0000000000000..dc9d236a8d07d --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/debug.move @@ -0,0 +1,9 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +/// Module providing debug functionality. +module std::debug { + native public fun print(x: &T); + + native public fun print_stack_trace(); +} diff --git a/external-crates/move/crates/move-stdlib/sources/error.move b/external-crates/move/crates/move-stdlib/sources/error.move deleted file mode 100644 index 81958a6914eb4..0000000000000 --- a/external-crates/move/crates/move-stdlib/sources/error.move +++ /dev/null @@ -1,82 +0,0 @@ -/// This module defines a set of canonical error codes which are optional to use by applications for the -/// `abort` and `assert!` features. -/// -/// Canonical error codes use the 3 lowest bytes of the u64 abort code range (the upper 5 bytes are free for other use). -/// Of those, the highest byte represents the *error category* and the lower two bytes the *error reason*. -/// Given an error category `0x1` and a reason `0x3`, a canonical abort code looks as `0x10003`. -/// -/// A module can use a canonical code with a constant declaration of the following form: -/// -/// ``` -/// /// An invalid ASCII character was encountered when creating a string. -/// const EINVALID_CHARACTER: u64 = 0x010003; -/// ``` -/// -/// This code is both valid in the worlds with and without canonical errors. It can be used as a plain module local -/// error reason understand by the existing error map tooling, or as a canonical code. -/// -/// The actual canonical categories have been adopted from Google's canonical error codes, which in turn are derived -/// from Unix error codes [see here](https://cloud.google.com/apis/design/errors#handling_errors). Each code has an -/// associated HTTP error code which can be used in REST apis. The mapping from error code to http code is not 1:1; -/// error codes here are a bit richer than HTTP codes. -module std::error { - - /// Caller specified an invalid argument (http: 400) - const INVALID_ARGUMENT: u64 = 0x1; - - /// An input or result of a computation is out of range (http: 400) - const OUT_OF_RANGE: u64 = 0x2; - - /// The system is not in a state where the operation can be performed (http: 400) - const INVALID_STATE: u64 = 0x3; - - /// Request not authenticated due to missing, invalid, or expired auth token (http: 401) - const UNAUTHENTICATED: u64 = 0x4; - - /// client does not have sufficient permission (http: 403) - const PERMISSION_DENIED: u64 = 0x5; - - /// A specified resource is not found (http: 404) - const NOT_FOUND: u64 = 0x6; - - /// Concurrency conflict, such as read-modify-write conflict (http: 409) - const ABORTED: u64 = 0x7; - - /// The resource that a client tried to create already exists (http: 409) - const ALREADY_EXISTS: u64 = 0x8; - - /// Out of gas or other forms of quota (http: 429) - const RESOURCE_EXHAUSTED: u64 = 0x9; - - #[allow(unused_const)] - /// Request cancelled by the client (http: 499) - const CANCELLED: u64 = 0xA; - - /// Internal error (http: 500) - const INTERNAL: u64 = 0xB; - - /// Feature not implemented (http: 501) - const NOT_IMPLEMENTED: u64 = 0xC; - - /// The service is currently unavailable. Indicates that a retry could solve the issue (http: 503) - const UNAVAILABLE: u64 = 0xD; - - /// Construct a canonical error code from a category and a reason. - public fun canonical(category: u64, reason: u64): u64 { - (category << 16) + reason - } - - /// Functions to construct a canonical error code of the given category. - public fun invalid_argument(r: u64): u64 { canonical(INVALID_ARGUMENT, r) } - public fun out_of_range(r: u64): u64 { canonical(OUT_OF_RANGE, r) } - public fun invalid_state(r: u64): u64 { canonical(INVALID_STATE, r) } - public fun unauthenticated(r: u64): u64 { canonical(UNAUTHENTICATED, r) } - public fun permission_denied(r: u64): u64 { canonical(PERMISSION_DENIED, r) } - public fun not_found(r: u64): u64 { canonical(NOT_FOUND, r) } - public fun aborted(r: u64): u64 { canonical(ABORTED, r) } - public fun already_exists(r: u64): u64 { canonical(ALREADY_EXISTS, r) } - public fun resource_exhausted(r: u64): u64 { canonical(RESOURCE_EXHAUSTED, r) } - public fun internal(r: u64): u64 { canonical(INTERNAL, r) } - public fun not_implemented(r: u64): u64 { canonical(NOT_IMPLEMENTED, r) } - public fun unavailable(r: u64): u64 { canonical(UNAVAILABLE, r) } -} diff --git a/external-crates/move/crates/move-stdlib/sources/fixed_point32.move b/external-crates/move/crates/move-stdlib/sources/fixed_point32.move index 40cee62aeaefd..d25eb58ed3b1c 100644 --- a/external-crates/move/crates/move-stdlib/sources/fixed_point32.move +++ b/external-crates/move/crates/move-stdlib/sources/fixed_point32.move @@ -1,3 +1,6 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + /// Defines a fixed-point numeric type with a 32-bit integer part and /// a 32-bit fractional part. @@ -12,7 +15,7 @@ module std::fixed_point32 { /// floating-point has less than 16 decimal digits of precision, so /// be careful about using floating-point to convert these values to /// decimal. - struct FixedPoint32 has copy, drop, store { value: u64 } + public struct FixedPoint32 has copy, drop, store { value: u64 } ///> TODO: This is a basic constant and should be provided somewhere centrally in the framework. const MAX_U64: u128 = 18446744073709551615; @@ -35,13 +38,13 @@ module std::fixed_point32 { // The product of two 64 bit values has 128 bits, so perform the // multiplication with u128 types and keep the full 128 bit product // to avoid losing accuracy. - let unscaled_product = (val as u128) * (multiplier.value as u128); + let unscaled_product = val as u128 * (multiplier.value as u128); // The unscaled product has 32 fractional bits (from the multiplier) // so rescale it by shifting away the low bits. let product = unscaled_product >> 32; // Check whether the value is too large. assert!(product <= MAX_U64, EMULTIPLICATION); - (product as u64) + product as u64 } /// Divide a u64 integer by a fixed-point number, truncating any @@ -52,13 +55,13 @@ module std::fixed_point32 { assert!(divisor.value != 0, EDIVISION_BY_ZERO); // First convert to 128 bits and then shift left to // add 32 fractional zero bits to the dividend. - let scaled_value = (val as u128) << 32; + let scaled_value = val as u128 << 32; let quotient = scaled_value / (divisor.value as u128); // Check whether the value is too large. assert!(quotient <= MAX_U64, EDIVISION); // the value may be too large, which will cause the cast to fail // with an arithmetic error. - (quotient as u64) + quotient as u64 } /// Create a fixed-point value from a rational number specified by its @@ -76,15 +79,15 @@ module std::fixed_point32 { // Scale the numerator to have 64 fractional bits and the denominator // to have 32 fractional bits, so that the quotient will have 32 // fractional bits. - let scaled_numerator = (numerator as u128) << 64; - let scaled_denominator = (denominator as u128) << 32; + let scaled_numerator = numerator as u128 << 64; + let scaled_denominator = denominator as u128 << 32; assert!(scaled_denominator != 0, EDENOMINATOR); let quotient = scaled_numerator / scaled_denominator; assert!(quotient != 0 || numerator == 0, ERATIO_OUT_OF_RANGE); // Return the quotient as a fixed-point number. We first need to check whether the cast // can succeed. assert!(quotient <= MAX_U64, ERATIO_OUT_OF_RANGE); - FixedPoint32 { value: (quotient as u64) } + FixedPoint32 { value: quotient as u64 } } /// Create a fixedpoint value from a raw value. @@ -103,55 +106,4 @@ module std::fixed_point32 { public fun is_zero(num: FixedPoint32): bool { num.value == 0 } - - /// Returns the smaller of the two FixedPoint32 numbers. - public fun min(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 { - if (num1.value < num2.value) { - num1 - } else { - num2 - } - } - - /// Returns the larger of the two FixedPoint32 numbers. - public fun max(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 { - if (num1.value > num2.value) { - num1 - } else { - num2 - } - } - - /// Create a fixedpoint value from a u64 value. - public fun create_from_u64(val: u64): FixedPoint32 { - let value = (val as u128) << 32; - assert!(value <= MAX_U64, ERATIO_OUT_OF_RANGE); - FixedPoint32{value: (value as u64)} - } - - /// Returns the largest integer less than or equal to a given number. - public fun floor(num: FixedPoint32): u64 { - num.value >> 32 - } - - /// Rounds up the given FixedPoint32 to the next largest integer. - public fun ceil(num: FixedPoint32): u64 { - let floored_num = floor(num) << 32; - if (num.value == floored_num) { - return floored_num >> 32 - }; - let val = ((floored_num as u128) + (1 << 32)); - (val >> 32 as u64) - } - - /// Returns the value of a FixedPoint32 to the nearest integer. - public fun round(num: FixedPoint32): u64 { - let floored_num = floor(num) << 32; - let boundary = floored_num + ((1 << 32) / 2); - if (num.value < boundary) { - floored_num >> 32 - } else { - ceil(num) - } - } } diff --git a/external-crates/move/crates/move-stdlib/sources/hash.move b/external-crates/move/crates/move-stdlib/sources/hash.move index daadc4e815770..ed84f18a9a7fc 100644 --- a/external-crates/move/crates/move-stdlib/sources/hash.move +++ b/external-crates/move/crates/move-stdlib/sources/hash.move @@ -1,3 +1,6 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + /// Module which defines SHA hashes for byte vectors. /// /// The functions in this module are natively declared both in the Move runtime diff --git a/external-crates/move/crates/move-stdlib/sources/macros.move b/external-crates/move/crates/move-stdlib/sources/macros.move new file mode 100644 index 0000000000000..53416703f5c9c --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/macros.move @@ -0,0 +1,102 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +/// This module holds shared implementation of macros used in `std` +module std::macros { + public macro fun num_max($x: _, $y: _): _ { + let x = $x; + let y = $y; + if (x > y) x + else y + } + + public macro fun num_min($x: _, $y: _): _ { + let x = $x; + let y = $y; + if (x < y) x + else y + } + + public macro fun num_diff($x: _, $y: _): _ { + let x = $x; + let y = $y; + if (x > y) x - y + else y - x + } + + public macro fun num_divide_and_round_up($x: _, $y: _): _ { + let x = $x; + let y = $y; + if (x % y == 0) x / y + else x / y + 1 + } + + + public macro fun num_pow($base: _, $exponent: u8): _ { + let mut base = $base; + let mut exponent = $exponent; + let mut res = 1; + while (exponent >= 1) { + if (exponent % 2 == 0) { + base = base * base; + exponent = exponent / 2; + } else { + res = res * base; + exponent = exponent - 1; + } + }; + + res + } + + public macro fun num_sqrt<$T, $U>($x: $T, $bitsize: u8): $T { + let x = $x; + let mut bit = (1: $U) << $bitsize; + let mut res = (0: $U); + let mut x = x as $U; + + while (bit != 0) { + if (x >= res + bit) { + x = x - (res + bit); + res = (res >> 1) + bit; + } else { + res = res >> 1; + }; + bit = bit >> 2; + }; + + res as $T + } + + public macro fun range_do($start: _, $stop: _, $f: |_|) { + let mut i = $start; + let stop = $stop; + while (i < stop) { + $f(i); + i = i + 1; + } + } + + public macro fun range_do_eq($start: _, $stop: _, $f: |_|) { + let mut i = $start; + let stop = $stop; + // we check `i >= stop` inside the loop instead of `i <= stop` as `while` condition to avoid + // incrementing `i` past the MAX integer value. + // Because of this, we need to check if `i > stop` and return early--instead of letting the + // loop bound handle it, like in the `range_do` macro. + if (i > stop) return; + loop { + $f(i); + if (i >= stop) break; + i = i + 1; + } + } + + public macro fun do($stop: _, $f: |_|) { + range_do!(0, $stop, $f) + } + + public macro fun do_eq($stop: _, $f: |_|) { + range_do_eq!(0, $stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/option.move b/external-crates/move/crates/move-stdlib/sources/option.move index 1de18126613bc..b0f1862c91ba5 100644 --- a/external-crates/move/crates/move-stdlib/sources/option.move +++ b/external-crates/move/crates/move-stdlib/sources/option.move @@ -1,10 +1,11 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + /// This module defines the Option type and its methods to represent and handle an optional value. module std::option { - use std::vector; - /// Abstraction of a value that may or may not be present. Implemented with a vector of size /// zero or one because Move bytecode does not have ADTs. - struct Option has copy, drop, store { + public struct Option has copy, drop, store { vec: vector } @@ -27,33 +28,33 @@ module std::option { /// Return true if `t` does not hold a value public fun is_none(t: &Option): bool { - vector::is_empty(&t.vec) + t.vec.is_empty() } /// Return true if `t` holds a value public fun is_some(t: &Option): bool { - !vector::is_empty(&t.vec) + !t.vec.is_empty() } /// Return true if the value in `t` is equal to `e_ref` /// Always returns `false` if `t` does not hold a value public fun contains(t: &Option, e_ref: &Element): bool { - vector::contains(&t.vec, e_ref) + t.vec.contains(e_ref) } /// Return an immutable reference to the value inside `t` /// Aborts if `t` does not hold a value public fun borrow(t: &Option): &Element { - assert!(is_some(t), EOPTION_NOT_SET); - vector::borrow(&t.vec, 0) + assert!(t.is_some(), EOPTION_NOT_SET); + &t.vec[0] } /// Return a reference to the value inside `t` if it holds one /// Return `default_ref` if `t` does not hold a value public fun borrow_with_default(t: &Option, default_ref: &Element): &Element { let vec_ref = &t.vec; - if (vector::is_empty(vec_ref)) default_ref - else vector::borrow(vec_ref, 0) + if (vec_ref.is_empty()) default_ref + else &vec_ref[0] } /// Return the value inside `t` if it holds one @@ -63,39 +64,39 @@ module std::option { default: Element, ): Element { let vec_ref = &t.vec; - if (vector::is_empty(vec_ref)) default - else *vector::borrow(vec_ref, 0) + if (vec_ref.is_empty()) default + else vec_ref[0] } /// Convert the none option `t` to a some option by adding `e`. /// Aborts if `t` already holds a value public fun fill(t: &mut Option, e: Element) { let vec_ref = &mut t.vec; - if (vector::is_empty(vec_ref)) vector::push_back(vec_ref, e) + if (vec_ref.is_empty()) vec_ref.push_back(e) else abort EOPTION_IS_SET } /// Convert a `some` option to a `none` by removing and returning the value stored inside `t` /// Aborts if `t` does not hold a value public fun extract(t: &mut Option): Element { - assert!(is_some(t), EOPTION_NOT_SET); - vector::pop_back(&mut t.vec) + assert!(t.is_some(), EOPTION_NOT_SET); + t.vec.pop_back() } /// Return a mutable reference to the value inside `t` /// Aborts if `t` does not hold a value public fun borrow_mut(t: &mut Option): &mut Element { - assert!(is_some(t), EOPTION_NOT_SET); - vector::borrow_mut(&mut t.vec, 0) + assert!(t.is_some(), EOPTION_NOT_SET); + &mut t.vec[0] } /// Swap the old value inside `t` with `e` and return the old value /// Aborts if `t` does not hold a value public fun swap(t: &mut Option, e: Element): Element { - assert!(is_some(t), EOPTION_NOT_SET); + assert!(t.is_some(), EOPTION_NOT_SET); let vec_ref = &mut t.vec; - let old_value = vector::pop_back(vec_ref); - vector::push_back(vec_ref, e); + let old_value = vec_ref.pop_back(); + vec_ref.push_back(e); old_value } @@ -104,41 +105,136 @@ module std::option { /// Different from swap(), swap_or_fill() allows for `t` not holding a value. public fun swap_or_fill(t: &mut Option, e: Element): Option { let vec_ref = &mut t.vec; - let old_value = if (vector::is_empty(vec_ref)) none() - else some(vector::pop_back(vec_ref)); - vector::push_back(vec_ref, e); + let old_value = if (vec_ref.is_empty()) none() + else some(vec_ref.pop_back()); + vec_ref.push_back(e); old_value } /// Destroys `t.` If `t` holds a value, return it. Returns `default` otherwise public fun destroy_with_default(t: Option, default: Element): Element { - let Option { vec } = t; - if (vector::is_empty(&vec)) default - else vector::pop_back(&mut vec) + let Option { mut vec } = t; + if (vec.is_empty()) default + else vec.pop_back() } /// Unpack `t` and return its contents /// Aborts if `t` does not hold a value public fun destroy_some(t: Option): Element { - assert!(is_some(&t), EOPTION_NOT_SET); - let Option { vec } = t; - let elem = vector::pop_back(&mut vec); - vector::destroy_empty(vec); + assert!(t.is_some(), EOPTION_NOT_SET); + let Option { mut vec } = t; + let elem = vec.pop_back(); + vec.destroy_empty(); elem } /// Unpack `t` /// Aborts if `t` holds a value public fun destroy_none(t: Option) { - assert!(is_none(&t), EOPTION_IS_SET); + assert!(t.is_none(), EOPTION_IS_SET); let Option { vec } = t; - vector::destroy_empty(vec) + vec.destroy_empty() } - /// Convert `t` into a vector of length 1 if it is `Some`, /// and an empty vector otherwise public fun to_vec(t: Option): vector { let Option { vec } = t; vec } + + // === Macro Functions === + + /// Destroy `Option` and call the closure `f` on the value inside if it holds one. + public macro fun destroy<$T>($o: Option<$T>, $f: |$T|) { + let o = $o; + o.do!($f); + } + + /// Destroy `Option` and call the closure `f` on the value inside if it holds one. + public macro fun do<$T>($o: Option<$T>, $f: |$T|) { + let o = $o; + if (o.is_some()) { + $f(o.destroy_some()); + } + } + + /// Execute a closure on the value inside `t` if it holds one. + public macro fun do_ref<$T>($o: &Option<$T>, $f: |&$T|) { + let o = $o; + if (o.is_some()) { + $f(o.borrow()); + } + } + + /// Execute a closure on the mutable reference to the value inside `t` if it holds one. + public macro fun do_mut<$T>($o: &mut Option<$T>, $f: |&mut $T|) { + let o = $o; + if (o.is_some()) $f(o.borrow_mut()); + } + + /// Select the first `Some` value from the two options, or `None` if both are `None`. + /// Equivalent to Rust's `a.or(b)`. + public macro fun or<$T>($o: Option<$T>, $default: Option<$T>): Option<$T> { + let o = $o; + if (o.is_some()) o + else $default + } + + /// If the value is `Some`, call the closure `f` on it. Otherwise, return `None`. + /// Equivalent to Rust's `t.and_then(f)`. + public macro fun and<$T, $U>($o: Option<$T>, $f: |$T| -> Option<$U>): Option<$U> { + let o = $o; + if (o.is_some()) $f(o.extract()) + else none() + } + + /// If the value is `Some`, call the closure `f` on it. Otherwise, return `None`. + /// Equivalent to Rust's `t.and_then(f)`. + public macro fun and_ref<$T, $U>($o: &Option<$T>, $f: |&$T| -> Option<$U>): Option<$U> { + let o = $o; + if (o.is_some()) $f(o.borrow()) + else none() + } + + /// Map an `Option` to `Option` by applying a function to a contained value. + /// Equivalent to Rust's `t.map(f)`. + public macro fun map<$T, $U>($o: Option<$T>, $f: |$T| -> $U): Option<$U> { + let mut o = $o; + if (o.is_some()) some($f(o.extract())) + else none() + } + + /// Map an `Option` value to `Option` by applying a function to a contained value by reference. + /// Original `Option` is preserved. + /// Equivalent to Rust's `t.map(f)`. + public macro fun map_ref<$T, $U>($o: &Option<$T>, $f: |&$T| -> $U): Option<$U> { + let o = $o; + if (o.is_some()) some($f(o.borrow())) + else none() + } + + /// Return `None` if the value is `None`, otherwise return `Option` if the predicate `f` returns true. + public macro fun filter<$T: drop>($o: Option<$T>, $f: |&$T| -> bool): Option<$T> { + let o = $o; + if (o.is_some() && $f(o.borrow())) o + else none() + } + + /// Return `false` if the value is `None`, otherwise return the result of the predicate `f`. + public macro fun is_some_and<$T>($o: &Option<$T>, $f: |&$T| -> bool): bool { + let o = $o; + o.is_some() && $f(o.borrow()) + } + + /// Destroy `Option` and return the value inside if it holds one, or `default` otherwise. + /// Equivalent to Rust's `t.unwrap_or(default)`. + /// + /// Note: this function is a more efficient version of `destroy_with_default`, as it does not + /// evaluate the default value unless necessary. The `destroy_with_default` function should be + /// deprecated in favor of this function. + public macro fun destroy_or<$T>($o: Option<$T>, $default: $T): $T { + let o = $o; + if (o.is_some()) o.destroy_some() + else $default + } } diff --git a/external-crates/move/crates/move-stdlib/sources/signer.move b/external-crates/move/crates/move-stdlib/sources/signer.move deleted file mode 100644 index 55376dd3fff7e..0000000000000 --- a/external-crates/move/crates/move-stdlib/sources/signer.move +++ /dev/null @@ -1,15 +0,0 @@ -module std::signer { - // Borrows the address of the signer - // Conceptually, you can think of the `signer` as being a struct wrapper arround an - // address - // ``` - // struct signer has drop { addr: address } - // ``` - // `borrow_address` borrows this inner field - native public fun borrow_address(s: &signer): &address; - - // Copies the address of the signer - public fun address_of(s: &signer): address { - *borrow_address(s) - } -} diff --git a/external-crates/move/crates/move-stdlib/sources/string.move b/external-crates/move/crates/move-stdlib/sources/string.move index fa9f6b61b7967..0939b2cbe45f3 100644 --- a/external-crates/move/crates/move-stdlib/sources/string.move +++ b/external-crates/move/crates/move-stdlib/sources/string.move @@ -1,101 +1,137 @@ -/// The `string` module defines the `String` type which represents UTF8 encoded strings. +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +/// The `string` module defines the `String` type which represents UTF8 encoded +/// strings. module std::string { - use std::vector; - use std::option::{Self, Option}; + use std::ascii; /// An invalid UTF8 encoding. - const EINVALID_UTF8: u64 = 1; + const EInvalidUTF8: u64 = 1; /// Index out of range. - const EINVALID_INDEX: u64 = 2; + const EInvalidIndex: u64 = 2; - /// A `String` holds a sequence of bytes which is guaranteed to be in utf8 format. - struct String has copy, drop, store { + /// A `String` holds a sequence of bytes which is guaranteed to be in utf8 + /// format. + public struct String has copy, drop, store { bytes: vector, } - /// Creates a new string from a sequence of bytes. Aborts if the bytes do not represent valid utf8. + /// Creates a new string from a sequence of bytes. Aborts if the bytes do + /// not represent valid utf8. public fun utf8(bytes: vector): String { - assert!(internal_check_utf8(&bytes), EINVALID_UTF8); - String{bytes} + assert!(internal_check_utf8(&bytes), EInvalidUTF8); + String { bytes } + } + + /// Convert an ASCII string to a UTF8 string + public fun from_ascii(s: ascii::String): String { + String { bytes: s.into_bytes() } + } + + /// Convert an UTF8 string to an ASCII string. + /// Aborts if `s` is not valid ASCII + public fun to_ascii(s: String): ascii::String { + let String { bytes } = s; + bytes.to_ascii_string() } /// Tries to create a new string from a sequence of bytes. public fun try_utf8(bytes: vector): Option { - if (internal_check_utf8(&bytes)) { - option::some(String{bytes}) - } else { - option::none() - } + if (internal_check_utf8(&bytes)) option::some(String { bytes }) + else option::none() } /// Returns a reference to the underlying byte vector. - public fun bytes(s: &String): &vector { + public fun as_bytes(s: &String): &vector { &s.bytes } + /// Unpack the `string` to get its underlying bytes. + public fun into_bytes(s: String): vector { + let String { bytes } = s; + bytes + } + /// Checks whether this string is empty. public fun is_empty(s: &String): bool { - vector::is_empty(&s.bytes) + s.bytes.is_empty() } /// Returns the length of this string, in bytes. public fun length(s: &String): u64 { - vector::length(&s.bytes) + s.bytes.length() } /// Appends a string. public fun append(s: &mut String, r: String) { - vector::append(&mut s.bytes, r.bytes) + s.bytes.append(r.bytes) } /// Appends bytes which must be in valid utf8 format. public fun append_utf8(s: &mut String, bytes: vector) { - append(s, utf8(bytes)) + s.append(utf8(bytes)) } - /// Insert the other string at the byte index in given string. The index must be at a valid utf8 char - /// boundary. + /// Insert the other string at the byte index in given string. The index + /// must be at a valid utf8 char boundary. public fun insert(s: &mut String, at: u64, o: String) { let bytes = &s.bytes; - assert!(at <= vector::length(bytes) && internal_is_char_boundary(bytes, at), EINVALID_INDEX); - let l = length(s); - let front = sub_string(s, 0, at); - let end = sub_string(s, at, l); - append(&mut front, o); - append(&mut front, end); + assert!( + at <= bytes.length() && internal_is_char_boundary(bytes, at), + EInvalidIndex, + ); + let l = s.length(); + let mut front = s.substring(0, at); + let end = s.substring(at, l); + front.append(o); + front.append(end); *s = front; } - /// Returns a sub-string using the given byte indices, where `i` is the first byte position and `j` is the start - /// of the first byte not included (or the length of the string). The indices must be at valid utf8 char boundaries, + /// Returns a sub-string using the given byte indices, where `i` is the first + /// byte position and `j` is the start of the first byte not included (or the + /// length of the string). The indices must be at valid utf8 char boundaries, /// guaranteeing that the result is valid utf8. - public fun sub_string(s: &String, i: u64, j: u64): String { + public fun substring(s: &String, i: u64, j: u64): String { let bytes = &s.bytes; - let l = vector::length(bytes); + let l = bytes.length(); assert!( - j <= l && i <= j && internal_is_char_boundary(bytes, i) && internal_is_char_boundary(bytes, j), - EINVALID_INDEX + j <= l && + i <= j && + internal_is_char_boundary(bytes, i) && + internal_is_char_boundary(bytes, j), + EInvalidIndex, ); - String{bytes: internal_sub_string(bytes, i, j)} + String { bytes: internal_sub_string(bytes, i, j) } } - /// Computes the index of the first occurrence of a string. Returns `length(s)` if no occurrence found. + /// Computes the index of the first occurrence of a string. Returns `s.length()` + /// if no occurrence found. public fun index_of(s: &String, r: &String): u64 { internal_index_of(&s.bytes, &r.bytes) } - // Native API + native fun internal_check_utf8(v: &vector): bool; native fun internal_is_char_boundary(v: &vector, i: u64): bool; native fun internal_sub_string(v: &vector, i: u64, j: u64): vector; native fun internal_index_of(v: &vector, r: &vector): u64; - // Test only API for the native function. Don't return a value so other - // tests aren't tempted to use this function. #[test_only] - public fun internal_sub_string_for_testing(v: &vector, i: u64, j: u64) { - internal_sub_string(v, i, j); + public fun internal_sub_string_for_testing(v: &vector, i: u64, j: u64): vector { + internal_sub_string(v, i, j) + } + + // === Deprecated === + + #[deprecated(note = b"Use `std::string::as_bytes` instead.")] + public fun bytes(s: &String): &vector { s.as_bytes() } + + #[deprecated(note = b"Use `std::string::substring` instead.")] + public fun sub_string(s: &String, i: u64, j: u64): String { + s.substring(i, j) } } diff --git a/external-crates/move/crates/move-stdlib/sources/type_name.move b/external-crates/move/crates/move-stdlib/sources/type_name.move index f439a64182b01..70cc4407a8c5c 100644 --- a/external-crates/move/crates/move-stdlib/sources/type_name.move +++ b/external-crates/move/crates/move-stdlib/sources/type_name.move @@ -1,16 +1,39 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + /// Functionality for converting Move types into values. Use with care! module std::type_name { - use std::ascii::String; + use std::ascii::{Self, String}; + use std::address; + + /// ASCII Character code for the `:` (colon) symbol. + const ASCII_COLON: u8 = 58; + + /// ASCII Character code for the `v` (lowercase v) symbol. + const ASCII_V: u8 = 118; + /// ASCII Character code for the `e` (lowercase e) symbol. + const ASCII_E: u8 = 101; + /// ASCII Character code for the `c` (lowercase c) symbol. + const ASCII_C: u8 = 99; + /// ASCII Character code for the `t` (lowercase t) symbol. + const ASCII_T: u8 = 116; + /// ASCII Character code for the `o` (lowercase o) symbol. + const ASCII_O: u8 = 111; + /// ASCII Character code for the `r` (lowercase r) symbol. + const ASCII_R: u8 = 114; + + /// The type is not from a package/module. It is a primitive type. + const ENonModuleType: u64 = 0; - struct TypeName has copy, drop, store { + public struct TypeName has copy, drop, store { /// String representation of the type. All types are represented /// using their source syntax: - /// "u8", "u64", "u128", "bool", "address", "vector", "signer" for ground types. + /// "u8", "u64", "bool", "address", "vector", and so on for primitive types. /// Struct types are represented as fully qualified type names; e.g. /// `00000000000000000000000000000001::string::String` or /// `0000000000000000000000000000000a::module_name1::type_name1<0000000000000000000000000000000a::module_name2::type_name2>` /// Addresses are hex-encoded lowercase values of length ADDRESS_LENGTH (16, 20, or 32 depending on the Move platform) - name: String + name: String, } /// Return a value representation of the type `T`. Package IDs @@ -26,11 +49,77 @@ module std::type_name { /// later upgrade). public native fun get_with_original_ids(): TypeName; + /// Returns true iff the TypeName represents a primitive type, i.e. one of + /// u8, u16, u32, u64, u128, u256, bool, address, vector. + public fun is_primitive(self: &TypeName): bool { + let bytes = self.name.as_bytes(); + bytes == &b"bool" || + bytes == &b"u8" || + bytes == &b"u16" || + bytes == &b"u32" || + bytes == &b"u64" || + bytes == &b"u128" || + bytes == &b"u256" || + bytes == &b"address" || + ( + bytes.length() >= 6 && + bytes[0] == ASCII_V && + bytes[1] == ASCII_E && + bytes[2] == ASCII_C && + bytes[3] == ASCII_T && + bytes[4] == ASCII_O && + bytes[5] == ASCII_R, + ) + } + /// Get the String representation of `self` public fun borrow_string(self: &TypeName): &String { &self.name } + /// Get Address string (Base16 encoded), first part of the TypeName. + /// Aborts if given a primitive type. + public fun get_address(self: &TypeName): String { + assert!(!self.is_primitive(), ENonModuleType); + + // Base16 (string) representation of an address has 2 symbols per byte. + let len = address::length() * 2; + let str_bytes = self.name.as_bytes(); + let mut addr_bytes = vector[]; + let mut i = 0; + + // Read `len` bytes from the type name and push them to addr_bytes. + while (i < len) { + addr_bytes.push_back(str_bytes[i]); + i = i + 1; + }; + + ascii::string(addr_bytes) + } + + /// Get name of the module. + /// Aborts if given a primitive type. + public fun get_module(self: &TypeName): String { + assert!(!self.is_primitive(), ENonModuleType); + + // Starts after address and a double colon: `::` + let mut i = address::length() * 2 + 2; + let str_bytes = self.name.as_bytes(); + let mut module_name = vector[]; + let colon = ASCII_COLON; + loop { + let char = &str_bytes[i]; + if (char != &colon) { + module_name.push_back(*char); + i = i + 1; + } else { + break + } + }; + + ascii::string(module_name) + } + /// Convert `self` into its inner String public fun into_string(self: TypeName): String { self.name diff --git a/external-crates/move/crates/move-stdlib/sources/u128.move b/external-crates/move/crates/move-stdlib/sources/u128.move new file mode 100644 index 0000000000000..947c330085ca1 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/u128.move @@ -0,0 +1,79 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[defines_primitive(u128)] +module std::u128 { + /// Return the larger of `x` and `y` + public fun max(x: u128, y: u128): u128 { + std::macros::num_max!(x, y) + } + + /// Return the smaller of `x` and `y` + public fun min(x: u128, y: u128): u128 { + std::macros::num_min!(x, y) + } + + /// Return the absolute value of x - y + public fun diff(x: u128, y: u128): u128 { + std::macros::num_diff!(x, y) + } + + /// Calculate x / y, but round up the result. + public fun divide_and_round_up(x: u128, y: u128): u128 { + std::macros::num_divide_and_round_up!(x, y) + } + + /// Return the value of a base raised to a power + public fun pow(base: u128, exponent: u8): u128 { + std::macros::num_pow!(base, exponent) + } + + /// Get a nearest lower integer Square Root for `x`. Given that this + /// function can only operate with integers, it is impossible + /// to get perfect (or precise) integer square root for some numbers. + /// + /// Example: + /// ``` + /// math::sqrt(9) => 3 + /// math::sqrt(8) => 2 // the nearest lower square root is 4; + /// ``` + /// + /// In integer math, one of the possible ways to get results with more + /// precision is to use higher values or temporarily multiply the + /// value by some bigger number. Ideally if this is a square of 10 or 100. + /// + /// Example: + /// ``` + /// math::sqrt(8) => 2; + /// math::sqrt(8 * 10000) => 282; + /// // now we can use this value as if it was 2.82; + /// // but to get the actual result, this value needs + /// // to be divided by 100 (because sqrt(10000)). + /// + /// + /// math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) + /// ``` + public fun sqrt(x: u128): u128 { + std::macros::num_sqrt!(x, 128) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (exclusive) + public macro fun range_do($start: u128, $stop: u128, $f: |u128|) { + std::macros::range_do!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (inclusive) + public macro fun range_do_eq($start: u128, $stop: u128, $f: |u128|) { + std::macros::range_do_eq!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (exclusive) + public macro fun do($stop: u128, $f: |u128|) { + std::macros::do!($stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (inclusive) + public macro fun do_eq($stop: u128, $f: |u128|) { + std::macros::do_eq!($stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/u16.move b/external-crates/move/crates/move-stdlib/sources/u16.move new file mode 100644 index 0000000000000..9d051c11721dc --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/u16.move @@ -0,0 +1,79 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[defines_primitive(u16)] +module std::u16 { + /// Return the larger of `x` and `y` + public fun max(x: u16, y: u16): u16 { + std::macros::num_max!(x, y) + } + + /// Return the smaller of `x` and `y` + public fun min(x: u16, y: u16): u16 { + std::macros::num_min!(x, y) + } + + /// Return the absolute value of x - y + public fun diff(x: u16, y: u16): u16 { + std::macros::num_diff!(x, y) + } + + /// Calculate x / y, but round up the result. + public fun divide_and_round_up(x: u16, y: u16): u16 { + std::macros::num_divide_and_round_up!(x, y) + } + + /// Return the value of a base raised to a power + public fun pow(base: u16, exponent: u8): u16 { + std::macros::num_pow!(base, exponent) + } + + /// Get a nearest lower integer Square Root for `x`. Given that this + /// function can only operate with integers, it is impossible + /// to get perfect (or precise) integer square root for some numbers. + /// + /// Example: + /// ``` + /// math::sqrt(9) => 3 + /// math::sqrt(8) => 2 // the nearest lower square root is 4; + /// ``` + /// + /// In integer math, one of the possible ways to get results with more + /// precision is to use higher values or temporarily multiply the + /// value by some bigger number. Ideally if this is a square of 10 or 100. + /// + /// Example: + /// ``` + /// math::sqrt(8) => 2; + /// math::sqrt(8 * 10000) => 282; + /// // now we can use this value as if it was 2.82; + /// // but to get the actual result, this value needs + /// // to be divided by 100 (because sqrt(10000)). + /// + /// + /// math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) + /// ``` + public fun sqrt(x: u16): u16 { + std::macros::num_sqrt!(x, 16) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (exclusive) + public macro fun range_do($start: u16, $stop: u16, $f: |u16|) { + std::macros::range_do!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (inclusive) + public macro fun range_do_eq($start: u16, $stop: u16, $f: |u16|) { + std::macros::range_do_eq!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (exclusive) + public macro fun do($stop: u16, $f: |u16|) { + std::macros::do!($stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (inclusive) + public macro fun do_eq($stop: u16, $f: |u16|) { + std::macros::do_eq!($stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/u256.move b/external-crates/move/crates/move-stdlib/sources/u256.move new file mode 100644 index 0000000000000..1c1846db661d7 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/u256.move @@ -0,0 +1,50 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[defines_primitive(u256)] +module std::u256 { + /// Return the larger of `x` and `y` + public fun max(x: u256, y: u256): u256 { + std::macros::num_max!(x, y) + } + + /// Return the smaller of `x` and `y` + public fun min(x: u256, y: u256): u256 { + std::macros::num_min!(x, y) + } + + /// Return the absolute value of x - y + public fun diff(x: u256, y: u256): u256 { + std::macros::num_diff!(x, y) + } + + /// Calculate x / y, but round up the result. + public fun divide_and_round_up(x: u256, y: u256): u256 { + std::macros::num_divide_and_round_up!(x, y) + } + + /// Return the value of a base raised to a power + public fun pow(base: u256, exponent: u8): u256 { + std::macros::num_pow!(base, exponent) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (exclusive) + public macro fun range_do($start: u256, $stop: u256, $f: |u256|) { + std::macros::range_do!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (inclusive) + public macro fun range_do_eq($start: u256, $stop: u256, $f: |u256|) { + std::macros::range_do_eq!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (exclusive) + public macro fun do($stop: u256, $f: |u256|) { + std::macros::do!($stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (inclusive) + public macro fun do_eq($stop: u256, $f: |u256|) { + std::macros::do_eq!($stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/u32.move b/external-crates/move/crates/move-stdlib/sources/u32.move new file mode 100644 index 0000000000000..8ad44d722c178 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/u32.move @@ -0,0 +1,79 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[defines_primitive(u32)] +module std::u32 { + /// Return the larger of `x` and `y` + public fun max(x: u32, y: u32): u32 { + std::macros::num_max!(x, y) + } + + /// Return the smaller of `x` and `y` + public fun min(x: u32, y: u32): u32 { + std::macros::num_min!(x, y) + } + + /// Return the absolute value of x - y + public fun diff(x: u32, y: u32): u32 { + std::macros::num_diff!(x, y) + } + + /// Calculate x / y, but round up the result. + public fun divide_and_round_up(x: u32, y: u32): u32 { + std::macros::num_divide_and_round_up!(x, y) + } + + /// Return the value of a base raised to a power + public fun pow(base: u32, exponent: u8): u32 { + std::macros::num_pow!(base, exponent) + } + + /// Get a nearest lower integer Square Root for `x`. Given that this + /// function can only operate with integers, it is impossible + /// to get perfect (or precise) integer square root for some numbers. + /// + /// Example: + /// ``` + /// math::sqrt(9) => 3 + /// math::sqrt(8) => 2 // the nearest lower square root is 4; + /// ``` + /// + /// In integer math, one of the possible ways to get results with more + /// precision is to use higher values or temporarily multiply the + /// value by some bigger number. Ideally if this is a square of 10 or 100. + /// + /// Example: + /// ``` + /// math::sqrt(8) => 2; + /// math::sqrt(8 * 10000) => 282; + /// // now we can use this value as if it was 2.82; + /// // but to get the actual result, this value needs + /// // to be divided by 100 (because sqrt(10000)). + /// + /// + /// math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) + /// ``` + public fun sqrt(x: u32): u32 { + std::macros::num_sqrt!(x, 32) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (exclusive) + public macro fun range_do($start: u32, $stop: u32, $f: |u32|) { + std::macros::range_do!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (inclusive) + public macro fun range_do_eq($start: u32, $stop: u32, $f: |u32|) { + std::macros::range_do_eq!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (exclusive) + public macro fun do($stop: u32, $f: |u32|) { + std::macros::do!($stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (inclusive) + public macro fun do_eq($stop: u32, $f: |u32|) { + std::macros::do_eq!($stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/u64.move b/external-crates/move/crates/move-stdlib/sources/u64.move new file mode 100644 index 0000000000000..9963dcc1b8206 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/u64.move @@ -0,0 +1,79 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[defines_primitive(u64)] +module std::u64 { + /// Return the larger of `x` and `y` + public fun max(x: u64, y: u64): u64 { + std::macros::num_max!(x, y) + } + + /// Return the smaller of `x` and `y` + public fun min(x: u64, y: u64): u64 { + std::macros::num_min!(x, y) + } + + /// Return the absolute value of x - y + public fun diff(x: u64, y: u64): u64 { + std::macros::num_diff!(x, y) + } + + /// Calculate x / y, but round up the result. + public fun divide_and_round_up(x: u64, y: u64): u64 { + std::macros::num_divide_and_round_up!(x, y) + } + + /// Return the value of a base raised to a power + public fun pow(base: u64, exponent: u8): u64 { + std::macros::num_pow!(base, exponent) + } + + /// Get a nearest lower integer Square Root for `x`. Given that this + /// function can only operate with integers, it is impossible + /// to get perfect (or precise) integer square root for some numbers. + /// + /// Example: + /// ``` + /// math::sqrt(9) => 3 + /// math::sqrt(8) => 2 // the nearest lower square root is 4; + /// ``` + /// + /// In integer math, one of the possible ways to get results with more + /// precision is to use higher values or temporarily multiply the + /// value by some bigger number. Ideally if this is a square of 10 or 100. + /// + /// Example: + /// ``` + /// math::sqrt(8) => 2; + /// math::sqrt(8 * 10000) => 282; + /// // now we can use this value as if it was 2.82; + /// // but to get the actual result, this value needs + /// // to be divided by 100 (because sqrt(10000)). + /// + /// + /// math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) + /// ``` + public fun sqrt(x: u64): u64 { + std::macros::num_sqrt!(x, 64) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (exclusive) + public macro fun range_do($start: u64, $stop: u64, $f: |u64|) { + std::macros::range_do!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (inclusive) + public macro fun range_do_eq($start: u64, $stop: u64, $f: |u64|) { + std::macros::range_do_eq!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (exclusive) + public macro fun do($stop: u64, $f: |u64|) { + std::macros::do!($stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (inclusive) + public macro fun do_eq($stop: u64, $f: |u64|) { + std::macros::do_eq!($stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/u8.move b/external-crates/move/crates/move-stdlib/sources/u8.move new file mode 100644 index 0000000000000..4eaca05a94345 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/sources/u8.move @@ -0,0 +1,79 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[defines_primitive(u8)] +module std::u8 { + /// Return the larger of `x` and `y` + public fun max(x: u8, y: u8): u8 { + std::macros::num_max!(x, y) + } + + /// Return the smaller of `x` and `y` + public fun min(x: u8, y: u8): u8 { + std::macros::num_min!(x, y) + } + + /// Return the absolute value of x - y + public fun diff(x: u8, y: u8): u8 { + std::macros::num_diff!(x, y) + } + + /// Calculate x / y, but round up the result. + public fun divide_and_round_up(x: u8, y: u8): u8 { + std::macros::num_divide_and_round_up!(x, y) + } + + /// Return the value of a base raised to a power + public fun pow(base: u8, exponent: u8): u8 { + std::macros::num_pow!(base, exponent) + } + + /// Get a nearest lower integer Square Root for `x`. Given that this + /// function can only operate with integers, it is impossible + /// to get perfect (or precise) integer square root for some numbers. + /// + /// Example: + /// ``` + /// math::sqrt(9) => 3 + /// math::sqrt(8) => 2 // the nearest lower square root is 4; + /// ``` + /// + /// In integer math, one of the possible ways to get results with more + /// precision is to use higher values or temporarily multiply the + /// value by some bigger number. Ideally if this is a square of 10 or 100. + /// + /// Example: + /// ``` + /// math::sqrt(8) => 2; + /// math::sqrt(8 * 10000) => 282; + /// // now we can use this value as if it was 2.82; + /// // but to get the actual result, this value needs + /// // to be divided by 100 (because sqrt(10000)). + /// + /// + /// math::sqrt(8 * 1000000) => 2828; // same as above, 2828 / 1000 (2.828) + /// ``` + public fun sqrt(x: u8): u8 { + std::macros::num_sqrt!(x, 8) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (exclusive) + public macro fun range_do($start: u8, $stop: u8, $f: |u8|) { + std::macros::range_do!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `$start` to `$stop` (inclusive) + public macro fun range_do_eq($start: u8, $stop: u8, $f: |u8|) { + std::macros::range_do_eq!($start, $stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (exclusive) + public macro fun do($stop: u8, $f: |u8|) { + std::macros::do!($stop, $f) + } + + /// Loops applying `$f` to each number from `0` to `$stop` (inclusive) + public macro fun do_eq($stop: u8, $f: |u8|) { + std::macros::do_eq!($stop, $f) + } +} diff --git a/external-crates/move/crates/move-stdlib/sources/unit_test.move b/external-crates/move/crates/move-stdlib/sources/unit_test.move index 28526857c8521..1deb6a70c0529 100644 --- a/external-crates/move/crates/move-stdlib/sources/unit_test.move +++ b/external-crates/move/crates/move-stdlib/sources/unit_test.move @@ -1,3 +1,6 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] /// Module providing testing functionality. Only included for tests. module std::unit_test { @@ -9,4 +12,23 @@ module std::unit_test { /// This will cause a linking failure if an attempt is made to publish a /// test module in a VM that isn't in unit test mode. native public fun poison(); + + public macro fun assert_eq<$T: drop>($t1: $T, $t2: $T) { + let t1 = $t1; + let t2 = $t2; + assert_ref_eq!(&t1, &t2) + } + + public macro fun assert_ref_eq<$T>($t1: &$T, $t2: &$T) { + let t1 = $t1; + let t2 = $t2; + let res = t1 == t2; + if (!res) { + std::debug::print(&b"Assertion failed:"); + std::debug::print(t1); + std::debug::print(&b"!="); + std::debug::print(t2); + assert!(false); + } + } } diff --git a/external-crates/move/crates/move-stdlib/sources/vector.move b/external-crates/move/crates/move-stdlib/sources/vector.move index 1eb179ba683c1..cd98ed0ae7955 100644 --- a/external-crates/move/crates/move-stdlib/sources/vector.move +++ b/external-crates/move/crates/move-stdlib/sources/vector.move @@ -1,88 +1,106 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[defines_primitive(vector)] /// A variable-sized container that can hold any type. Indexing is 0-based, and /// vectors are growable. This module has many native functions. module std::vector { + /// Allows calling `.to_string()` on a vector of `u8` to get a utf8 `String`. + public use fun std::string::utf8 as vector.to_string; + + /// Allows calling `.try_to_string()` on a vector of `u8` to get a utf8 `String`. + /// This will return `None` if the vector is not valid utf8. + public use fun std::string::try_utf8 as vector.try_to_string; + + /// Allows calling `.to_ascii_string()` on a vector of `u8` to get an `ascii::String`. + public use fun std::ascii::string as vector.to_ascii_string; + + /// Allows calling `.try_to_ascii_string()` on a vector of `u8` to get an + /// `ascii::String`. This will return `None` if the vector is not valid ascii. + public use fun std::ascii::try_string as vector.try_to_ascii_string; /// The index into the vector is out of bounds const EINDEX_OUT_OF_BOUNDS: u64 = 0x20000; #[bytecode_instruction] /// Create an empty vector. - native public fun empty(): vector; + public native fun empty(): vector; #[bytecode_instruction] /// Return the length of the vector. - native public fun length(v: &vector): u64; + public native fun length(v: &vector): u64; + #[syntax(index)] #[bytecode_instruction] /// Acquire an immutable reference to the `i`th element of the vector `v`. /// Aborts if `i` is out of bounds. - native public fun borrow(v: &vector, i: u64): ∈ + public native fun borrow(v: &vector, i: u64): ∈ #[bytecode_instruction] /// Add element `e` to the end of the vector `v`. - native public fun push_back(v: &mut vector, e: Element); + public native fun push_back(v: &mut vector, e: Element); + #[syntax(index)] #[bytecode_instruction] /// Return a mutable reference to the `i`th element in the vector `v`. /// Aborts if `i` is out of bounds. - native public fun borrow_mut(v: &mut vector, i: u64): &mut Element; + public native fun borrow_mut(v: &mut vector, i: u64): &mut Element; #[bytecode_instruction] /// Pop an element from the end of vector `v`. /// Aborts if `v` is empty. - native public fun pop_back(v: &mut vector): Element; + public native fun pop_back(v: &mut vector): Element; #[bytecode_instruction] /// Destroy the vector `v`. /// Aborts if `v` is not empty. - native public fun destroy_empty(v: vector); + public native fun destroy_empty(v: vector); #[bytecode_instruction] /// Swaps the elements at the `i`th and `j`th indices in the vector `v`. /// Aborts if `i` or `j` is out of bounds. - native public fun swap(v: &mut vector, i: u64, j: u64); + public native fun swap(v: &mut vector, i: u64, j: u64); /// Return an vector of size one containing element `e`. public fun singleton(e: Element): vector { - let v = empty(); - push_back(&mut v, e); + let mut v = empty(); + v.push_back(e); v } /// Reverses the order of the elements in the vector `v` in place. public fun reverse(v: &mut vector) { - let len = length(v); + let len = v.length(); if (len == 0) return (); - let front_index = 0; - let back_index = len -1; + let mut front_index = 0; + let mut back_index = len - 1; while (front_index < back_index) { - swap(v, front_index, back_index); + v.swap(front_index, back_index); front_index = front_index + 1; back_index = back_index - 1; } } /// Pushes all of the elements of the `other` vector into the `lhs` vector. - public fun append(lhs: &mut vector, other: vector) { - reverse(&mut other); - while (!is_empty(&other)) push_back(lhs, pop_back(&mut other)); - destroy_empty(other); + public fun append(lhs: &mut vector, mut other: vector) { + other.reverse(); + while (!other.is_empty()) lhs.push_back(other.pop_back()); + other.destroy_empty(); } /// Return `true` if the vector `v` has no elements and `false` otherwise. public fun is_empty(v: &vector): bool { - length(v) == 0 + v.length() == 0 } /// Return true if `e` is in the vector `v`. /// Otherwise, returns false. public fun contains(v: &vector, e: &Element): bool { - let i = 0; - let len = length(v); + let mut i = 0; + let len = v.length(); while (i < len) { - if (borrow(v, i) == e) return true; + if (&v[i] == e) return true; i = i + 1; }; false @@ -91,10 +109,10 @@ module std::vector { /// Return `(true, i)` if `e` is in the vector `v` at index `i`. /// Otherwise, returns `(false, 0)`. public fun index_of(v: &vector, e: &Element): (bool, u64) { - let i = 0; - let len = length(v); + let mut i = 0; + let len = v.length(); while (i < len) { - if (borrow(v, i) == e) return (true, i); + if (&v[i] == e) return (true, i); i = i + 1; }; (false, 0) @@ -103,29 +121,29 @@ module std::vector { /// Remove the `i`th element of the vector `v`, shifting all subsequent elements. /// This is O(n) and preserves ordering of elements in the vector. /// Aborts if `i` is out of bounds. - public fun remove(v: &mut vector, i: u64): Element { - let len = length(v); + public fun remove(v: &mut vector, mut i: u64): Element { + let mut len = v.length(); // i out of bounds; abort if (i >= len) abort EINDEX_OUT_OF_BOUNDS; len = len - 1; - while (i < len) swap(v, i, { i = i + 1; i }); - pop_back(v) + while (i < len) v.swap(i, { i = i + 1; i }); + v.pop_back() } /// Insert `e` at position `i` in the vector `v`. /// If `i` is in bounds, this shifts the old `v[i]` and all subsequent elements to the right. - /// If `i == length(v)`, this adds `e` to the end of the vector. + /// If `i == v.length()`, this adds `e` to the end of the vector. /// This is O(n) and preserves ordering of elements in the vector. - /// Aborts if `i > length(v)` - public fun insert(v: &mut vector, e: Element, i: u64) { - let len = length(v); + /// Aborts if `i > v.length()` + public fun insert(v: &mut vector, e: Element, mut i: u64) { + let len = v.length(); // i too big abort if (i > len) abort EINDEX_OUT_OF_BOUNDS; - push_back(v, e); + v.push_back(e); while (i < len) { - swap(v, i, len); + v.swap(i, len); i = i + 1 } } @@ -134,9 +152,213 @@ module std::vector { /// This is O(1), but does not preserve ordering of elements in the vector. /// Aborts if `i` is out of bounds. public fun swap_remove(v: &mut vector, i: u64): Element { - assert!(!is_empty(v), EINDEX_OUT_OF_BOUNDS); - let last_idx = length(v) - 1; - swap(v, i, last_idx); - pop_back(v) + assert!(!v.is_empty(), EINDEX_OUT_OF_BOUNDS); + let last_idx = v.length() - 1; + v.swap(i, last_idx); + v.pop_back() + } + + // === Macros === + + /// Create a vector of length `n` by calling the function `f` on each index. + public macro fun tabulate<$T>($n: u64, $f: |u64| -> $T): vector<$T> { + let mut v = vector[]; + let n = $n; + n.do!(|i| v.push_back($f(i))); + v + } + + /// Destroy the vector `v` by calling `f` on each element and then destroying the vector. + /// Does not preserve the order of elements in the vector (starts from the end of the vector). + public macro fun destroy<$T>($v: vector<$T>, $f: |$T|) { + let mut v = $v; + while (!v.is_empty()) $f(v.pop_back()); + v.destroy_empty(); + } + + /// Destroy the vector `v` by calling `f` on each element and then destroying the vector. + /// Preserves the order of elements in the vector. + public macro fun do<$T>($v: vector<$T>, $f: |$T|) { + let mut v = $v; + v.reverse(); + while (!v.is_empty()) $f(v.pop_back()); + v.destroy_empty(); + } + + /// Perform an action `f` on each element of the vector `v`. The vector is not modified. + public macro fun do_ref<$T>($v: &vector<$T>, $f: |&$T|) { + let v = $v; + v.length().do!(|i| $f(&v[i])) + } + + /// Perform an action `f` on each element of the vector `v`. + /// The function `f` takes a mutable reference to the element. + public macro fun do_mut<$T>($v: &mut vector<$T>, $f: |&mut $T|) { + let v = $v; + v.length().do!(|i| $f(&mut v[i])) + } + + /// Map the vector `v` to a new vector by applying the function `f` to each element. + /// Preserves the order of elements in the vector, first is called first. + public macro fun map<$T, $U>($v: vector<$T>, $f: |$T| -> $U): vector<$U> { + let v = $v; + let mut r = vector[]; + v.do!(|e| r.push_back($f(e))); + r + } + + /// Map the vector `v` to a new vector by applying the function `f` to each element. + /// Preserves the order of elements in the vector, first is called first. + public macro fun map_ref<$T, $U>($v: &vector<$T>, $f: |&$T| -> $U): vector<$U> { + let v = $v; + let mut r = vector[]; + v.do_ref!(|e| r.push_back($f(e))); + r + } + + /// Filter the vector `v` by applying the function `f` to each element. + /// Return a new vector containing only the elements for which `f` returns `true`. + public macro fun filter<$T: drop>($v: vector<$T>, $f: |&$T| -> bool): vector<$T> { + let v = $v; + let mut r = vector[]; + v.do!(|e| if ($f(&e)) r.push_back(e)); + r + } + + /// Split the vector `v` into two vectors by applying the function `f` to each element. + /// Return a tuple containing two vectors: the first containing the elements for which `f` returns `true`, + /// and the second containing the elements for which `f` returns `false`. + public macro fun partition<$T>($v: vector<$T>, $f: |&$T| -> bool): (vector<$T>, vector<$T>) { + let v = $v; + let mut r1 = vector[]; + let mut r2 = vector[]; + v.do!(|e| if ($f(&e)) r1.push_back(e) else r2.push_back(e)); + (r1, r2) + } + + /// Finds the index of first element in the vector `v` that satisfies the predicate `f`. + /// Returns `some(index)` if such an element is found, otherwise `none()`. + public macro fun find_index<$T>($v: vector<$T>, $f: |&$T| -> bool): Option { + let v = $v; + 'find_index: { + v.length().do!(|i| if ($f(&v[i])) return 'find_index option::some(i)); + option::none() + } + } + + /// Count how many elements in the vector `v` satisfy the predicate `f`. + public macro fun count<$T>($v: &vector<$T>, $f: |&$T| -> bool): u64 { + let v = $v; + let mut count = 0; + v.do_ref!(|e| if ($f(e)) count = count + 1); + count + } + + /// Reduce the vector `v` to a single value by applying the function `f` to each element. + /// Similar to `fold_left` in Rust and `reduce` in Python and JavaScript. + public macro fun fold<$T, $Acc>($v: vector<$T>, $init: $Acc, $f: |$Acc, $T| -> $Acc): $Acc { + let v = $v; + let mut acc = $init; + v.do!(|e| acc = $f(acc, e)); + acc + } + + /// Whether any element in the vector `v` satisfies the predicate `f`. + /// If the vector is empty, returns `false`. + public macro fun any<$T>($v: &vector<$T>, $f: |&$T| -> bool): bool { + let v = $v; + 'any: { + v.do_ref!(|e| if ($f(e)) return 'any true); + false + } + } + + /// Whether all elements in the vector `v` satisfy the predicate `f`. + /// If the vector is empty, returns `true`. + public macro fun all<$T>($v: &vector<$T>, $f: |&$T| -> bool): bool { + let v = $v; + 'all: { + v.do_ref!(|e| if (!$f(e)) return 'all false); + true + } + } + + /// Destroys two vectors `v1` and `v2` by calling `f` to each pair of elements. + /// Aborts if the vectors are not of the same length. + /// The order of elements in the vectors is preserved. + public macro fun zip_do<$T1, $T2>($v1: vector<$T1>, $v2: vector<$T2>, $f: |$T1, $T2|) { + let v1 = $v1; + let mut v2 = $v2; + v2.reverse(); + let len = v1.length(); + assert!(len == v2.length()); + v1.do!(|el1| $f(el1, v2.pop_back())); + } + + /// Destroys two vectors `v1` and `v2` by calling `f` to each pair of elements. + /// Aborts if the vectors are not of the same length. + /// Starts from the end of the vectors. + public macro fun zip_do_reverse<$T1, $T2>($v1: vector<$T1>, $v2: vector<$T2>, $f: |$T1, $T2|) { + let v1 = $v1; + let mut v2 = $v2; + let len = v1.length(); + assert!(len == v2.length()); + v1.destroy!(|el1| $f(el1, v2.pop_back())); + } + + /// Iterate through `v1` and `v2` and apply the function `f` to references of each pair of + /// elements. The vectors are not modified. + /// Aborts if the vectors are not of the same length. + /// The order of elements in the vectors is preserved. + public macro fun zip_do_ref<$T1, $T2>($v1: &vector<$T1>, $v2: &vector<$T2>, $f: |&$T1, &$T2|) { + let v1 = $v1; + let v2 = $v2; + let len = v1.length(); + assert!(len == v2.length()); + len.do!(|i| $f(&v1[i], &v2[i])); + } + + /// Iterate through `v1` and `v2` and apply the function `f` to mutable references of each pair + /// of elements. The vectors may be modified. + /// Aborts if the vectors are not of the same length. + /// The order of elements in the vectors is preserved. + public macro fun zip_do_mut<$T1, $T2>( + $v1: &mut vector<$T1>, + $v2: &mut vector<$T2>, + $f: |&mut $T1, &mut $T2|, + ) { + let v1 = $v1; + let v2 = $v2; + let len = v1.length(); + assert!(len == v2.length()); + len.do!(|i| $f(&mut v1[i], &mut v2[i])); + } + + /// Destroys two vectors `v1` and `v2` by applying the function `f` to each pair of elements. + /// The returned values are collected into a new vector. + /// Aborts if the vectors are not of the same length. + /// The order of elements in the vectors is preserved. + public macro fun zip_map<$T1, $T2, $U>( + $v1: vector<$T1>, + $v2: vector<$T2>, + $f: |$T1, $T2| -> $U, + ): vector<$U> { + let mut r = vector[]; + zip_do!($v1, $v2, |el1, el2| r.push_back($f(el1, el2))); + r + } + + /// Iterate through `v1` and `v2` and apply the function `f` to references of each pair of + /// elements. The returned values are collected into a new vector. + /// Aborts if the vectors are not of the same length. + /// The order of elements in the vectors is preserved. + public macro fun zip_map_ref<$T1, $T2, $U>( + $v1: &vector<$T1>, + $v2: &vector<$T2>, + $f: |&$T1, &$T2| -> $U, + ): vector<$U> { + let mut r = vector[]; + zip_do_ref!($v1, $v2, |el1, el2| r.push_back($f(el1, el2))); + r } } diff --git a/external-crates/move/crates/move-stdlib/src/lib.rs b/external-crates/move/crates/move-stdlib/src/lib.rs index 45c5c87b8b7d2..5d714e3d3acd1 100644 --- a/external-crates/move/crates/move-stdlib/src/lib.rs +++ b/external-crates/move/crates/move-stdlib/src/lib.rs @@ -14,9 +14,7 @@ mod tests; pub mod utils; const MODULES_DIR: &str = "sources"; -const NURSERY_DIR: &str = "nursery"; const DOCS_DIR: &str = "docs"; -const NURSERY_DOCS_DIR: &str = "nursery/docs"; const REFERENCES_TEMPLATE: &str = "doc_templates/references.md"; const OVERVIEW_TEMPLATE: &str = "doc_templates/overview.md"; @@ -45,20 +43,11 @@ pub fn move_stdlib_docs_full_path() -> String { format!("{}/{}", env!("CARGO_MANIFEST_DIR"), DOCS_DIR) } -pub fn move_nursery_docs_full_path() -> String { - format!("{}/{}", env!("CARGO_MANIFEST_DIR"), NURSERY_DOCS_DIR) -} - pub fn move_stdlib_files() -> Vec { let path = path_in_crate(MODULES_DIR); find_filenames(&[path], |p| extension_equals(p, MOVE_EXTENSION)).unwrap() } -pub fn move_nursery_files() -> Vec { - let path = path_in_crate(NURSERY_DIR); - find_filenames(&[path], |p| extension_equals(p, MOVE_EXTENSION)).unwrap() -} - pub fn move_stdlib_named_addresses() -> BTreeMap { let mapping = [("std", "0x1")]; mapping @@ -116,16 +105,3 @@ pub fn build_stdlib_doc(output_path: &str) { move_stdlib_named_addresses(), ) } - -pub fn build_nursery_doc(output_path: &str) { - build_doc( - output_path, - "", - vec![], - None, - move_nursery_files().as_slice(), - vec![move_stdlib_modules_full_path()], - false, - move_stdlib_named_addresses(), - ) -} diff --git a/external-crates/move/crates/move-stdlib/src/main.rs b/external-crates/move/crates/move-stdlib/src/main.rs index 03652b782db60..500c40977c5d5 100644 --- a/external-crates/move/crates/move-stdlib/src/main.rs +++ b/external-crates/move/crates/move-stdlib/src/main.rs @@ -12,10 +12,5 @@ fn main() { //std::fs::create_dir_all(&move_stdlib::move_stdlib_docs_full_path()).unwrap(); move_stdlib::build_stdlib_doc(&move_stdlib::move_stdlib_docs_full_path()); }); - - time_it("Generating nursery documentation", || { - std::fs::remove_dir_all(move_stdlib::move_nursery_docs_full_path()).unwrap_or(()); - move_stdlib::build_nursery_doc(&move_stdlib::move_nursery_docs_full_path()); - }); } } diff --git a/external-crates/move/crates/move-stdlib/tests/ascii_tests.move b/external-crates/move/crates/move-stdlib/tests/ascii_tests.move index c455b362b62fa..ec6d4c7fdb817 100644 --- a/external-crates/move/crates/move-stdlib/tests/ascii_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/ascii_tests.move @@ -1,120 +1,222 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::ascii_tests { use std::ascii; - use std::vector; - use std::option; #[test] fun test_ascii_chars() { - let i = 0; + let mut i = 0; let end = 128; - let vec = vector::empty(); + let mut vec = vector[]; while (i < end) { - assert!(ascii::is_valid_char(i), 0); - vector::push_back(&mut vec, i); + assert!(ascii::is_valid_char(i)); + vec.push_back(i); i = i + 1; }; - let str = ascii::string(vec); - assert!(vector::length(ascii::as_bytes(&str)) == 128, 0); - assert!(!ascii::all_characters_printable(&str), 1); - assert!(vector::length(&ascii::into_bytes(str)) == 128, 2); + let str = vec.to_ascii_string(); + assert!(str.as_bytes().length() == 128); + assert!(!str.all_characters_printable()); + assert!(str.into_bytes().length() == 128); } #[test] fun test_ascii_push_chars() { - let i = 0; + let mut i = 0; let end = 128; - let str = ascii::string(vector::empty()); + let mut str = vector[].to_ascii_string(); while (i < end) { - ascii::push_char(&mut str, ascii::char(i)); + str.push_char(ascii::char(i)); i = i + 1; }; - assert!(vector::length(ascii::as_bytes(&str)) == 128, 0); - assert!(ascii::length(&str) == 128, 0); - assert!(!ascii::all_characters_printable(&str), 1); + assert!(str.as_bytes().length() == 128); + assert!(str.length() == 128); + assert!(!str.all_characters_printable()); } #[test] fun test_ascii_push_char_pop_char() { - let i = 0; + let mut i = 0; let end = 128; - let str = ascii::string(vector::empty()); + let mut str = vector[].to_ascii_string(); while (i < end) { - ascii::push_char(&mut str, ascii::char(i)); + str.push_char(ascii::char(i)); i = i + 1; }; while (i > 0) { - let char = ascii::pop_char(&mut str); - assert!(ascii::byte(char) == i - 1, 0); + let char = str.pop_char(); + assert!(ascii::byte(char) == i - 1); i = i - 1; }; - assert!(vector::length(ascii::as_bytes(&str)) == 0, 0); - assert!(ascii::length(&str) == 0, 0); - assert!(ascii::all_characters_printable(&str), 1); + assert!(str.as_bytes().length() == 0); + assert!(str.length() == 0); + assert!(str.all_characters_printable()); } #[test] fun test_printable_chars() { - let i = 0x20; + let mut i = 0x20; let end = 0x7E; - let vec = vector::empty(); + let mut vec = vector[]; while (i <= end) { - assert!(ascii::is_printable_char(i), 0); - vector::push_back(&mut vec, i); + assert!(ascii::is_printable_char(i)); + vec.push_back(i); i = i + 1; }; - let str = ascii::string(vec); - assert!(ascii::all_characters_printable(&str), 0); + let str = vec.to_ascii_string(); + assert!(str.all_characters_printable()); } #[test] fun printable_chars_dont_allow_tab() { - let str = ascii::string(vector::singleton(0x09)); - assert!(!ascii::all_characters_printable(&str), 0); + let str = vector[0x09].to_ascii_string(); + assert!(!str.all_characters_printable()); } #[test] fun printable_chars_dont_allow_newline() { - let str = ascii::string(vector::singleton(0x0A)); - assert!(!ascii::all_characters_printable(&str), 0); + let str = vector[0x0A].to_ascii_string(); + assert!(!str.all_characters_printable()); } #[test] fun test_invalid_ascii_characters() { - let i = 128u8; + let mut i = 128u8; let end = 255u8; while (i < end) { - let try_str = ascii::try_string(vector::singleton(i)); - assert!(option::is_none(&try_str), 0); + let try_str = vector[i].try_to_ascii_string(); + assert!(try_str.is_none()); i = i + 1; }; } #[test] fun test_nonvisible_chars() { - let i = 0; + let mut i = 0; let end = 0x09; while (i < end) { - let str = ascii::string(vector::singleton(i)); - assert!(!ascii::all_characters_printable(&str), 0); + let str = vector[i].to_ascii_string(); + assert!(!str.all_characters_printable()); i = i + 1; }; - let i = 0x0B; + let mut i = 0x0B; let end = 0x0F; while (i <= end) { - let str = ascii::string(vector::singleton(i)); - assert!(!ascii::all_characters_printable(&str), 0); + let str = vector[i].to_ascii_string(); + assert!(!str.all_characters_printable()); i = i + 1; }; } + + #[test] + fun test_append() { + let mut str = b"hello".to_ascii_string(); + str.append(b" world".to_ascii_string()); + + assert!(str == b"hello world".to_ascii_string()); + } + + #[test] + fun test_to_uppercase() { + let str = b"azhello_world_!".to_ascii_string(); + assert!(str.to_uppercase() == b"AZHELLO_WORLD_!".to_ascii_string()); + } + + #[test] + fun test_to_lowercase() { + let str = b"AZHELLO_WORLD_!".to_ascii_string(); + assert!(str.to_lowercase() == b"azhello_world_!".to_ascii_string()); + } + + #[test] + fun test_substring() { + let str = b"hello world".to_ascii_string(); + assert!(str.substring(0, 5) == b"hello".to_ascii_string()); + assert!(str.substring(6, 11) == b"world".to_ascii_string()); + } + + #[test] + fun test_substring_len_one() { + let str = b"hello world".to_ascii_string(); + assert!(str.substring(0, 1) == b"h".to_ascii_string()); + assert!(str.substring(6, 7) == b"w".to_ascii_string()); + } + + #[test] + fun test_substring_len_zero() { + let str = b"hello world".to_ascii_string(); + assert!(str.substring(0, 0).is_empty()); + } + + #[test] + fun test_index_of() { + let str = b"hello world orwell".to_ascii_string(); + assert!(str.index_of(&b"hello".to_ascii_string()) == 0); + assert!(str.index_of(&b"world".to_ascii_string()) == 6); + assert!(str.index_of(&b"o".to_ascii_string()) == 4); + assert!(str.index_of(&b"z".to_ascii_string()) == str.length()); + assert!(str.index_of(&b"o ".to_ascii_string()) == 4); + assert!(str.index_of(&b"or".to_ascii_string()) == 7); + assert!(str.index_of(&b"".to_ascii_string()) == 0); + assert!(str.index_of(&b"orwell".to_ascii_string()) == 12); + assert!( + b"ororwell" + .to_ascii_string() + .index_of(&b"orwell".to_ascii_string()) == 2, + ); + } + + #[test, expected_failure(abort_code = ascii::EInvalidIndex)] + fun test_substring_i_out_of_bounds_fail() { + let str = b"hello world".to_ascii_string(); + str.substring(12, 13); + } + + #[test, expected_failure(abort_code = ascii::EInvalidIndex)] + fun test_substring_j_lt_i_fail() { + let str = b"hello world".to_ascii_string(); + str.substring(9, 8); + } + + #[test, expected_failure(abort_code = ascii::EInvalidIndex)] + fun test_substring_j_out_of_bounds_fail() { + let str = b"hello world".to_ascii_string(); + str.substring(9, 13); + } + + #[test] + fun test_insert() { + let mut str = b"hello".to_ascii_string(); + str.insert(5, b" world".to_ascii_string()); + assert!(str == b"hello world".to_ascii_string()); + + str.insert(5, b" cruel".to_ascii_string()); + assert!(str == b"hello cruel world".to_ascii_string()); + } + + #[test] + fun test_insert_empty() { + let mut str = b"hello".to_ascii_string(); + str.insert(5, b"".to_ascii_string()); + assert!(str == b"hello".to_ascii_string()); + } + + #[test, expected_failure(abort_code = ascii::EInvalidIndex)] + fun test_insert_out_of_bounds_fail() { + let mut str = b"hello".to_ascii_string(); + str.insert(6, b" world".to_ascii_string()); + } } diff --git a/external-crates/move/crates/move-stdlib/tests/bcs_tests.move b/external-crates/move/crates/move-stdlib/tests/bcs_tests.move index c6ca978b397c1..308dd99920289 100644 --- a/external-crates/move/crates/move-stdlib/tests/bcs_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/bcs_tests.move @@ -1,69 +1,74 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::bcs_tests { use std::bcs; - struct Box has copy, drop, store { x: T } - struct Box3 has copy, drop, store { x: Box> } - struct Box7 has copy, drop, store { x: Box3> } - struct Box15 has copy, drop, store { x: Box7> } - struct Box31 has copy, drop, store { x: Box15> } - struct Box63 has copy, drop, store { x: Box31> } - struct Box127 has copy, drop, store { x: Box63> } + public struct Box has copy, drop, store { x: T } + public struct Box3 has copy, drop, store { x: Box> } + public struct Box7 has copy, drop, store { x: Box3> } + public struct Box15 has copy, drop, store { x: Box7> } + public struct Box31 has copy, drop, store { x: Box15> } + public struct Box63 has copy, drop, store { x: Box31> } + public struct Box127 has copy, drop, store { x: Box63> } #[test] fun bcs_address() { - let addr = @0x1234567890abcdef1234567890abcdef89b9f9d1fadc027cf9532d6f99041522; - let expected_output = x"1234567890abcdef1234567890abcdef89b9f9d1fadc027cf9532d6f99041522"; - assert!(bcs::to_bytes(&addr) == expected_output, 0); + let addr = @0x0000000000000000000000000000000089b9f9d1fadc027cf9532d6f99041522; + let expected_output = x"0000000000000000000000000000000089b9f9d1fadc027cf9532d6f99041522"; + assert!(bcs::to_bytes(&addr) == expected_output); } #[test] fun bcs_bool() { let expected_output = x"01"; - assert!(bcs::to_bytes(&true) == expected_output, 0); + assert!(bcs::to_bytes(&true) == expected_output); } #[test] fun bcs_u8() { let expected_output = x"01"; - assert!(bcs::to_bytes(&1u8) == expected_output, 0); + assert!(bcs::to_bytes(&1u8) == expected_output); } #[test] fun bcs_u16() { let expected_output = x"0100"; - assert!(bcs::to_bytes(&1u16) == expected_output, 0); + assert!(bcs::to_bytes(&1u16) == expected_output); } #[test] fun bcs_u32() { let expected_output = x"01000000"; - assert!(bcs::to_bytes(&1u32) == expected_output, 0); + assert!(bcs::to_bytes(&1u32) == expected_output); } #[test] fun bcs_u64() { let expected_output = x"0100000000000000"; - assert!(bcs::to_bytes(&1) == expected_output, 0); + assert!(bcs::to_bytes(&1) == expected_output); } #[test] fun bcs_u128() { let expected_output = x"01000000000000000000000000000000"; - assert!(bcs::to_bytes(&1u128) == expected_output, 0); + assert!(bcs::to_bytes(&1u128) == expected_output); } #[test] fun bcs_u256() { let expected_output = x"0100000000000000000000000000000000000000000000000000000000000000"; - assert!(bcs::to_bytes(&1u256) == expected_output, 0); + assert!(bcs::to_bytes(&1u256) == expected_output); } #[test] fun bcs_vec_u8() { let v = x"0f"; let expected_output = x"010f"; - assert!(bcs::to_bytes(&v) == expected_output, 0); + assert!(bcs::to_bytes(&v) == expected_output); } fun box3(x: T): Box3 { @@ -96,7 +101,8 @@ module std::bcs_tests { } #[test] - #[expected_failure] // VM_MAX_VALUE_DEPTH_REACHED + #[expected_failure] + // failes due to VM max value depth fun encode_129() { bcs::to_bytes(&Box { x: box127(true) }); } diff --git a/external-crates/move/crates/move-stdlib/tests/bit_vector_tests.move b/external-crates/move/crates/move-stdlib/tests/bit_vector_tests.move index 2dfa2e047471a..10a35c0cfa84c 100644 --- a/external-crates/move/crates/move-stdlib/tests/bit_vector_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/bit_vector_tests.move @@ -1,18 +1,23 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::bit_vector_tests { use std::bit_vector; #[test_only] fun test_bitvector_set_unset_of_size(k: u64) { - let bitvector = bit_vector::new(k); - let index = 0; + let mut bitvector = bit_vector::new(k); + let mut index = 0; while (index < k) { - bit_vector::set(&mut bitvector, index); - assert!(bit_vector::is_index_set(&bitvector, index), 0); + bitvector.set(index); + assert!(bitvector.is_index_set(index)); index = index + 1; - let index_to_right = index; + let mut index_to_right = index; while (index_to_right < k) { - assert!(!bit_vector::is_index_set(&bitvector, index_to_right), 1); + assert!(!bitvector.is_index_set(index_to_right)); index_to_right = index_to_right + 1; }; }; @@ -20,12 +25,12 @@ module std::bit_vector_tests { index = 0; while (index < k) { - bit_vector::unset(&mut bitvector, index); - assert!(!bit_vector::is_index_set(&bitvector, index), 0); + bitvector.unset(index); + assert!(!bitvector.is_index_set(index)); index = index + 1; - let index_to_right = index; + let mut index_to_right = index; while (index_to_right < k) { - assert!(bit_vector::is_index_set(&bitvector, index_to_right), 1); + assert!(bitvector.is_index_set(index_to_right)); index_to_right = index_to_right + 1; }; }; @@ -34,22 +39,22 @@ module std::bit_vector_tests { #[test] #[expected_failure(abort_code = bit_vector::EINDEX)] fun set_bit_out_of_bounds() { - let bitvector = bit_vector::new(bit_vector::word_size()); - bit_vector::set(&mut bitvector, bit_vector::word_size()); + let mut bitvector = bit_vector::new(bit_vector::word_size()); + bitvector.set(bit_vector::word_size()); } #[test] #[expected_failure(abort_code = bit_vector::EINDEX)] fun unset_bit_out_of_bounds() { - let bitvector = bit_vector::new(bit_vector::word_size()); - bit_vector::unset(&mut bitvector, bit_vector::word_size()); + let mut bitvector = bit_vector::new(bit_vector::word_size()); + bitvector.unset(bit_vector::word_size()); } #[test] #[expected_failure(abort_code = bit_vector::EINDEX)] fun index_bit_out_of_bounds() { let bitvector = bit_vector::new(bit_vector::word_size()); - bit_vector::is_index_set(&bitvector, bit_vector::word_size()); + bitvector.is_index_set(bit_vector::word_size()); } #[test] @@ -59,71 +64,71 @@ module std::bit_vector_tests { #[test] fun test_set_bit_and_index_odd_size() { - test_bitvector_set_unset_of_size(300) + test_bitvector_set_unset_of_size(140) } #[test] fun longest_sequence_no_set_zero_index() { let bitvector = bit_vector::new(100); - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 0) == 0, 0); + assert!(bitvector.longest_set_sequence_starting_at(0) == 0); } #[test] fun longest_sequence_one_set_zero_index() { - let bitvector = bit_vector::new(100); - bit_vector::set(&mut bitvector, 1); - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 0) == 0, 0); + let mut bitvector = bit_vector::new(100); + bitvector.set(1); + assert!(bitvector.longest_set_sequence_starting_at(0) == 0); } #[test] fun longest_sequence_no_set_nonzero_index() { let bitvector = bit_vector::new(100); - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 51) == 0, 0); + assert!(bitvector.longest_set_sequence_starting_at(51) == 0); } #[test] fun longest_sequence_two_set_nonzero_index() { - let bitvector = bit_vector::new(100); - bit_vector::set(&mut bitvector, 50); - bit_vector::set(&mut bitvector, 52); - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 51) == 0, 0); + let mut bitvector = bit_vector::new(100); + bitvector.set(50); + bitvector.set(52); + assert!(bitvector.longest_set_sequence_starting_at(51) == 0); } #[test] fun longest_sequence_with_break() { - let bitvector = bit_vector::new(100); - let i = 0; + let mut bitvector = bit_vector::new(100); + let mut i = 0; while (i < 20) { - bit_vector::set(&mut bitvector, i); + bitvector.set(i); i = i + 1; }; // create a break in the run i = i + 1; while (i < 100) { - bit_vector::set(&mut bitvector, i); + bitvector.set(i); i = i + 1; }; - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 0) == 20, 0); - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 20) == 0, 0); - assert!(bit_vector::longest_set_sequence_starting_at(&bitvector, 21) == 100 - 21, 0); + assert!(bitvector.longest_set_sequence_starting_at(0) == 20); + assert!(bitvector.longest_set_sequence_starting_at(20) == 0); + assert!(bitvector.longest_set_sequence_starting_at(21) == 100 - 21); } #[test] fun test_shift_left() { - let bitlen = 133; - let bitvector = bit_vector::new(bitlen); + let bitlen = 97; + let mut bitvector = bit_vector::new(bitlen); - let i = 0; + let mut i = 0; while (i < bitlen) { - bit_vector::set(&mut bitvector, i); + bitvector.set(i); i = i + 1; }; i = bitlen - 1; while (i > 0) { - assert!(bit_vector::is_index_set(&bitvector, i), 0); - bit_vector::shift_left(&mut bitvector, 1); - assert!(!bit_vector::is_index_set(&bitvector, i), 1); + assert!(bitvector.is_index_set(i)); + bitvector.shift_left(1); + assert!(!bitvector.is_index_set( i)); i = i - 1; }; } @@ -132,21 +137,21 @@ module std::bit_vector_tests { fun test_shift_left_specific_amount() { let bitlen = 300; let shift_amount = 133; - let bitvector = bit_vector::new(bitlen); + let mut bitvector = bit_vector::new(bitlen); - bit_vector::set(&mut bitvector, 201); - assert!(bit_vector::is_index_set(&bitvector, 201), 0); + bitvector.set(201); + assert!(bitvector.is_index_set(201)); - bit_vector::shift_left(&mut bitvector, shift_amount); - assert!(bit_vector::is_index_set(&bitvector, 201 - shift_amount), 1); - assert!(!bit_vector::is_index_set(&bitvector, 201), 2); + bitvector.shift_left(shift_amount); + assert!(bitvector.is_index_set(201 - shift_amount)); + assert!(!bitvector.is_index_set(201)); // Make sure this shift clears all the bits - bit_vector::shift_left(&mut bitvector, bitlen - 1); + bitvector.shift_left(bitlen - 1); - let i = 0; + let mut i = 0; while (i < bitlen) { - assert!(!bit_vector::is_index_set(&bitvector, i), 3); + assert!(!bitvector.is_index_set(i)); i = i + 1; } } @@ -156,28 +161,28 @@ module std::bit_vector_tests { let bitlen = 50; let chosen_index = 24; let shift_amount = 3; - let bitvector = bit_vector::new(bitlen); + let mut bitvector = bit_vector::new(bitlen); - let i = 0; + let mut i = 0; while (i < bitlen) { - bit_vector::set(&mut bitvector, i); + bitvector.set(i); i = i + 1; }; - bit_vector::unset(&mut bitvector, chosen_index); - assert!(!bit_vector::is_index_set(&bitvector, chosen_index), 0); + bitvector.unset(chosen_index); + assert!(!bitvector.is_index_set(chosen_index)); - bit_vector::shift_left(&mut bitvector, shift_amount); + bitvector.shift_left(shift_amount); i = 0; while (i < bitlen) { // only chosen_index - shift_amount and the remaining bits should be BitVector::unset if ((i == chosen_index - shift_amount) || (i >= bitlen - shift_amount)) { - assert!(!bit_vector::is_index_set(&bitvector, i), 1); + assert!(!bitvector.is_index_set(i)); } else { - assert!(bit_vector::is_index_set(&bitvector, i), 2); + assert!(bitvector.is_index_set(i)); }; i = i + 1; } @@ -186,18 +191,18 @@ module std::bit_vector_tests { #[test] fun shift_left_at_size() { let bitlen = 133; - let bitvector = bit_vector::new(bitlen); + let mut bitvector = bit_vector::new(bitlen); - let i = 0; + let mut i = 0; while (i < bitlen) { - bit_vector::set(&mut bitvector, i); + bitvector.set(i); i = i + 1; }; - bit_vector::shift_left(&mut bitvector, bitlen - 1); + bitvector.shift_left(bitlen - 1); i = bitlen - 1; while (i > 0) { - assert!(!bit_vector::is_index_set(&bitvector, i), 1); + assert!(!bitvector.is_index_set( i)); i = i - 1; }; } @@ -205,8 +210,8 @@ module std::bit_vector_tests { #[test] fun shift_left_more_than_size() { let bitlen = 133; - let bitvector = bit_vector::new(bitlen); - bit_vector::shift_left(&mut bitvector, bitlen); + let mut bitvector = bit_vector::new(bitlen); + bitvector.shift_left(bitlen); } #[test] @@ -218,6 +223,6 @@ module std::bit_vector_tests { #[test] fun single_bit_bitvector() { let bitvector = bit_vector::new(1); - assert!(bit_vector::length(&bitvector) == 1, 0); + assert!(bitvector.length() == 1); } } diff --git a/external-crates/move/crates/move-stdlib/tests/fixedpoint32_tests.move b/external-crates/move/crates/move-stdlib/tests/fixedpoint32_tests.move index 83513dbe0cfda..4fd5f847b4ab9 100644 --- a/external-crates/move/crates/move-stdlib/tests/fixedpoint32_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/fixedpoint32_tests.move @@ -1,3 +1,8 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::fixed_point32_tests { use std::fixed_point32; @@ -28,7 +33,7 @@ module std::fixed_point32_tests { #[test] fun create_zero() { let x = fixed_point32::create_from_rational(0, 1); - assert!(fixed_point32::is_zero(x), 0); + assert!(x.is_zero()); } #[test] @@ -75,14 +80,14 @@ module std::fixed_point32_tests { fun exact_multiply() { let f = fixed_point32::create_from_rational(3, 4); // 0.75 let nine = fixed_point32::multiply_u64(12, f); // 12 * 0.75 - assert!(nine == 9, 0); + assert!(nine == 9); } #[test] fun exact_divide() { let f = fixed_point32::create_from_rational(3, 4); // 0.75 let twelve = fixed_point32::divide_u64(9, f); // 9 / 0.75 - assert!(twelve == 12, 0); + assert!(twelve == 12); } #[test] @@ -91,98 +96,19 @@ module std::fixed_point32_tests { let not_three = fixed_point32::multiply_u64(9, copy f); // 9 * 0.333... // multiply_u64 does NOT round -- it truncates -- so values that // are not perfectly representable in binary may be off by one. - assert!(not_three == 2, 0); + assert!(not_three == 2); // Try again with a fraction slightly larger than 1/3. - let f = fixed_point32::create_from_raw_value(fixed_point32::get_raw_value(f) + 1); + let f = fixed_point32::create_from_raw_value(f.get_raw_value() + 1); let three = fixed_point32::multiply_u64(9, f); - assert!(three == 3, 1); + assert!(three == 3); } #[test] fun create_from_rational_max_numerator_denominator() { // Test creating a 1.0 fraction from the maximum u64 value. let f = fixed_point32::create_from_rational(18446744073709551615, 18446744073709551615); - let one = fixed_point32::get_raw_value(f); - assert!(one == 4294967296, 0); // 0x1.00000000 - } - - #[test] - fun min_can_return_smaller_fixed_point_number() { - let one = fixed_point32::create_from_rational(1, 1); - let two = fixed_point32::create_from_rational(2, 1); - let smaller_number1 = fixed_point32::min(one, two); - let val1 = fixed_point32::get_raw_value(smaller_number1); - assert!(val1 == 4294967296, 0); // 0x1.00000000 - let smaller_number2 = fixed_point32::min(two, one); - let val2 = fixed_point32::get_raw_value(smaller_number2); - assert!(val2 == 4294967296, 0); // 0x1.00000000 - } - - #[test] - fun max_can_return_larger_fixed_point_number() { - let one = fixed_point32::create_from_rational(1, 1); - let two = fixed_point32::create_from_rational(2, 1); - let larger_number1 = fixed_point32::max(one, two); - let larger_number2 = fixed_point32::max(two, one); - let val1 = fixed_point32::get_raw_value(larger_number1); - assert!(val1 == 8589934592, 0); // 0x2.00000000 - let val2 = fixed_point32::get_raw_value(larger_number2); - assert!(val2 == 8589934592, 0); // 0x2.00000000 - } - - #[test] - fun floor_can_return_the_correct_number_zero() { - let point_five = fixed_point32::create_from_rational(1, 2); - let val = fixed_point32::floor(point_five); - assert!(val == 0, 0); - } - - #[test] - fun create_from_u64_create_correct_fixed_point_number() { - let one = fixed_point32::create_from_u64(1); - let val = fixed_point32::get_raw_value(one); - assert!(val == 4294967296, 0); - } - - #[test] - #[expected_failure(abort_code = fixed_point32::ERATIO_OUT_OF_RANGE)] - fun create_from_u64_throw_error_when_number_too_large() { - fixed_point32::create_from_u64(4294967296); // (u64 >> 32) + 1 - } - - #[test] - fun floor_can_return_the_correct_number_one() { - let three_point_five = fixed_point32::create_from_rational(7, 2); // 3.5 - let val = fixed_point32::floor(three_point_five); - assert!(val == 3, 0); - } - - #[test] - fun ceil_can_round_up_correctly() { - let point_five = fixed_point32::create_from_rational(1, 2); // 0.5 - let val = fixed_point32::ceil(point_five); - assert!(val == 1, 0); - } - - #[test] - fun ceil_will_not_change_if_number_already_integer() { - let one = fixed_point32::create_from_rational(1, 1); // 0.5 - let val = fixed_point32::ceil(one); - assert!(val == 1, 0); - } - - #[test] - fun round_can_round_up_correctly() { - let point_five = fixed_point32::create_from_rational(1, 2); // 0.5 - let val = fixed_point32::round(point_five); - assert!(val == 1, 0); - } - - #[test] - fun round_can_round_down_correctly() { - let num = fixed_point32::create_from_rational(499, 1000); // 0.499 - let val = fixed_point32::round(num); - assert!(val == 0, 0); + let one = f.get_raw_value(); + assert!(one == 4294967296); // 0x1.00000000 } } diff --git a/external-crates/move/crates/move-stdlib/tests/hash_tests.move b/external-crates/move/crates/move-stdlib/tests/hash_tests.move index 449f7b914bae7..8b309c30e1f75 100644 --- a/external-crates/move/crates/move-stdlib/tests/hash_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/hash_tests.move @@ -1,3 +1,8 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::hash_tests { use std::hash; @@ -6,13 +11,13 @@ module std::hash_tests { fun sha2_256_expected_hash() { let input = x"616263"; let expected_output = x"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"; - assert!(hash::sha2_256(input) == expected_output, 0); + assert!(hash::sha2_256(input) == expected_output); } #[test] fun sha3_256_expected_hash() { let input = x"616263"; let expected_output = x"3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532"; - assert!(hash::sha3_256(input) == expected_output, 0); + assert!(hash::sha3_256(input) == expected_output); } } diff --git a/external-crates/move/crates/move-stdlib/tests/integer_tests.move b/external-crates/move/crates/move-stdlib/tests/integer_tests.move new file mode 100644 index 0000000000000..07d940b7a86d4 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/integer_tests.move @@ -0,0 +1,220 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// helpers for integer tests +#[test_only] +module std::integer_tests { + use std::unit_test::assert_eq; + + public(package) macro fun cases($max: _, $cases: vector<_>, $f: |_, _, _|) { + let mut cases = $cases; + let max_pred = $max - 1; + while (!cases.is_empty()) { + let case = cases.pop_back(); + let case_pred = case.max(1) - 1; + let case_succ = case.min(max_pred) + 1; + $f(case_pred, case, case_succ); + } + } + + public(package) macro fun test_max($max: _, $cases: vector<_>) { + let max = $max; + let cases = $cases; + assert_eq!(max.max(max), max); + cases!(max, cases, |case_pred, case, case_succ| { + assert_eq!(max.max(case), max); + assert_eq!(case.max(max), max); + assert_eq!(case.max(case), case); + assert_eq!(case_pred.max(case), case); + assert_eq!(case_succ.max(case), case_succ); + }) + } + + public(package) macro fun test_min($max: _, $cases: vector<_>) { + let max = $max; + let cases = $cases; + assert_eq!(max.min(max), max); + cases!(max, cases, |case_pred, case, case_succ| { + assert_eq!(max.min(case), case); + assert_eq!(case.min(max), case); + assert_eq!(case.min(case), case); + assert_eq!(case_pred.min(case), case_pred); + assert_eq!(case_succ.min(case), case); + }) + } + + public(package) macro fun test_diff($max: _, $cases: vector<_>) { + let max = $max; + let cases = $cases; + assert_eq!(max.diff(max), 0); + cases!(max, cases, |case_pred, case, case_succ| { + assert_eq!(max.diff(case), max - case); + assert_eq!(case.diff(max), max - case); + assert_eq!(case.diff(case), 0); + assert_eq!(case_pred.diff(case), case - case_pred); + assert_eq!(case.diff(case_pred), case - case_pred); + assert_eq!(case_succ.diff(case), case_succ - case); + assert_eq!(case.diff(case_succ), case_succ - case); + }) + } + + public(package) macro fun check_div_round($x: _, $y: _) { + let x = $x; + let y = $y; + if (y == 0) return; + assert_eq!(x.divide_and_round_up(y), (x / y) + (x % y).min(1)); + } + + public(package) macro fun test_divide_and_round_up($max: _, $cases: vector<_>) { + let max = $max; + let cases = $cases; + assert_eq!(max.divide_and_round_up(max), 1); + check_div_round!(max, max); + cases!(max, cases, |case_pred, case, case_succ| { + check_div_round!(max, case); + check_div_round!(case, max); + check_div_round!(case, case); + check_div_round!(case_pred, case); + check_div_round!(case, case_pred); + check_div_round!(case_succ, case); + check_div_round!(case, case_succ); + }) + } + + public(package) macro fun slow_pow($base: _, $exp: u8): _ { + let base = $base; + let mut exp = $exp; + let mut result = 1; + while (exp > 0) { + result = result * base; + exp = exp - 1; + }; + result + } + + public(package) macro fun test_pow<$T>($max: $T, $cases: vector<$T>) { + let max = $max; + let cases = $cases; + cases!(max, cases, |case_pred, case, case_succ| { + assert_eq!(case_pred.pow(0), 1); + assert_eq!(case_pred.pow(1), case_pred); + assert_eq!(case.pow(0), 1); + assert_eq!(case.pow(1), case); + assert_eq!(case_succ.pow(0), 1); + assert_eq!(case_succ.pow(1), case_succ); + }); + assert_eq!((0: $T).pow(2), 0); + assert_eq!((1: $T).pow(255), 1); + assert_eq!((2: $T).pow(7), slow_pow!((2: $T), 7)); + assert_eq!((3: $T).pow(5), slow_pow!((3: $T), 5)); + } + + public(package) macro fun test_sqrt<$T>( + $max: $T, + $bound_cases: vector<$T>, + $reflexive_cases: vector<$T>, + ) { + let max = $max; + let cases = $bound_cases; + // logical bounds cases + let max_sqrt = max.sqrt(); + cases!(max, cases, |case_pred, case, case_succ| { + let sqrt_pred = case_pred.sqrt(); + assert!(sqrt_pred * sqrt_pred <= case_pred); + let sqrt = case.sqrt(); + assert!(sqrt * sqrt <= case); + let sqrt_succ = case_succ.sqrt(); + assert!(sqrt_succ * sqrt_succ <= case_succ); + + if (sqrt_pred >= max_sqrt) return; + assert!((sqrt_pred + 1) * (sqrt_pred + 1) > case_pred); + + if (sqrt >= max_sqrt) return; + assert!((sqrt + 1) * (sqrt + 1) > case); + + if (sqrt_succ >= max_sqrt) return; + assert!((sqrt_succ + 1) * (sqrt_succ + 1) > case_succ); + }); + + // simple reflexive cases + let cases: vector<$T> = $reflexive_cases; + cases!(max, cases, |case_pred, case, case_succ| { + assert_eq!((case_pred * case_pred).sqrt(), case_pred); + assert_eq!((case * case).sqrt(), case); + assert_eq!((case_succ * case_succ).sqrt(), case_succ); + }); + + // test that the square of a non perfect square is the most recent square root perfect + // square, rounding down + let mut cases: vector<$T> = vector[2, 3, 4, 5, 6]; + while (!cases.is_empty()) { + let case = cases.pop_back(); + let prev = case - 1; + let square = case * case; + let prev_suare = prev * prev; + let mut i = prev_suare; + while (i < square) { + assert_eq!(i.sqrt(), prev); + i = i + 1; + } + } + } + + public(package) macro fun sum_range<$T>($n: $T): $T { + let n = $n; + (n * (n + 1)) / 2 + } + + public(package) macro fun test_dos_case<$T>($case: $T) { + let case = $case; + let mut sum: $T = 0; + case.do!(|i| sum = sum + i); + assert_eq!(sum, sum_range!(case - 1)); + + sum = 0; + case.do_eq!(|i| sum = sum + i); + assert_eq!(sum, sum_range!(case)); + + let half = case / 2; + + sum = 0; + half.range_do!(case, |i| sum = sum + i); + assert_eq!(sum, sum_range!(case - 1) - sum_range!(half - 1)); + + sum = 0; + half.range_do_eq!(case, |i| sum = sum + i); + assert_eq!(sum, sum_range!(case) - sum_range!(half - 1)); + } + + public(package) macro fun test_dos<$T>($max: $T, $cases: vector<$T>) { + let max = $max; + let cases = $cases; + // test bounds/invalid ranges + (0: $T).do!(|_| assert!(false)); + cases!(max, cases, |case_pred, case, case_succ| { + if (case == 0) return; + case.range_do!(0, |_| assert!(false)); + case.range_do_eq!(0, |_| assert!(false)); + + if (case == max) return; + case.range_do!(case_pred, |_| assert!(false)); + case_succ.range_do!(case, |_| assert!(false)); + case.range_do_eq!(case_pred, |_| assert!(false)); + case_succ.range_do_eq!(case, |_| assert!(false)); + }); + + // test upper bound being max + let max_pred = max - 1; + max_pred.range_do_eq!(max, |_| ()); + + // test iteration numbers + let cases: vector<$T> = vector[3, 5, 8, 11, 14]; + cases!(max, cases, |case_pred, case, case_succ| { + test_dos_case!(case_pred); + test_dos_case!(case); + test_dos_case!(case_succ); + }); + } + + +} diff --git a/external-crates/move/crates/move-stdlib/tests/move_unit_test.rs b/external-crates/move/crates/move-stdlib/tests/move_unit_test.rs deleted file mode 100644 index 538b08c3e8718..0000000000000 --- a/external-crates/move/crates/move-stdlib/tests/move_unit_test.rs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) The Diem Core Contributors -// Copyright (c) The Move Contributors -// SPDX-License-Identifier: Apache-2.0 - -use move_cli::base::test::{run_move_unit_tests, UnitTestResult}; -use move_core_types::account_address::AccountAddress; -use move_stdlib::path_in_crate; -use move_stdlib_natives::{all_natives, nursery_natives, GasParameters, NurseryGasParameters}; -use move_unit_test::UnitTestingConfig; -use tempfile::tempdir; - -fn run_tests_for_pkg(path_to_pkg: impl Into, include_nursery_natives: bool) { - let pkg_path = path_in_crate(path_to_pkg); - - let mut natives = all_natives( - AccountAddress::from_hex_literal("0x1").unwrap(), - GasParameters::zeros(), - ); - if include_nursery_natives { - natives.extend(nursery_natives( - /* silent */ false, - AccountAddress::from_hex_literal("0x1").unwrap(), - NurseryGasParameters::zeros(), - )) - } - - let result = run_move_unit_tests( - &pkg_path, - move_package::BuildConfig { - test_mode: true, - install_dir: Some(tempdir().unwrap().path().to_path_buf()), - ..Default::default() - }, - UnitTestingConfig::default_with_bound(Some(1_000_000_000)), - natives, - None, - /* compute_coverage */ false, - &mut std::io::stdout(), - ) - .unwrap(); - if result.0 != UnitTestResult::Success { - panic!("aborting because of Move unit test failures"); - } -} - -#[test] -fn move_unit_tests() { - run_tests_for_pkg(".", false); - run_tests_for_pkg("nursery", true); -} diff --git a/external-crates/move/crates/move-stdlib/tests/move_verification_test.rs b/external-crates/move/crates/move-stdlib/tests/move_verification_test.rs deleted file mode 100644 index 2a5dbffb18fa8..0000000000000 --- a/external-crates/move/crates/move-stdlib/tests/move_verification_test.rs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) The Diem Core Contributors -// Copyright (c) The Move Contributors -// SPDX-License-Identifier: Apache-2.0 - -// TODO: split this into individual tests once the package system supports this. - -#[test] -fn prove() { - // TODO re-enable when the prover works again - // use move_cli::base::prove::ProverTest; - // ProverTest::create(".").run(); - // ProverTest::create("nursery").run() -} diff --git a/external-crates/move/crates/move-stdlib/tests/option_tests.move b/external-crates/move/crates/move-stdlib/tests/option_tests.move index 950a940dc4207..a8cb8875d5495 100644 --- a/external-crates/move/crates/move-stdlib/tests/option_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/option_tests.move @@ -1,20 +1,22 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::option_tests { - use std::option; - use std::vector; - #[test] fun option_none_is_none() { let none = option::none(); - assert!(option::is_none(&none), 0); - assert!(!option::is_some(&none), 1); + assert!(none.is_none()); + assert!(!none.is_some()); } #[test] fun option_some_is_some() { let some = option::some(5); - assert!(!option::is_none(&some), 0); - assert!(option::is_some(&some), 1); + assert!(!some.is_none()); + assert!(some.is_some()); } #[test] @@ -22,149 +24,197 @@ module std::option_tests { let none = option::none(); let some = option::some(5); let some_other = option::some(6); - assert!(option::contains(&some, &5), 0); - assert!(option::contains(&some_other, &6), 1); - assert!(!option::contains(&none, &5), 2); - assert!(!option::contains(&some_other, &5), 3); + assert!(some.contains(&5)); + assert!(some_other.contains(&6)); + assert!(!none.contains(&5)); + assert!(!some_other.contains(&5)); } #[test] fun option_borrow_some() { let some = option::some(5); let some_other = option::some(6); - assert!(*option::borrow(&some) == 5, 3); - assert!(*option::borrow(&some_other) == 6, 4); + assert!(*some.borrow() == 5); + assert!(*some_other.borrow() == 6); } #[test] #[expected_failure(abort_code = option::EOPTION_NOT_SET)] fun option_borrow_none() { - option::borrow(&option::none()); + option::none().borrow(); } #[test] fun borrow_mut_some() { - let some = option::some(1); - let ref = option::borrow_mut(&mut some); + let mut some = option::some(1); + let ref = some.borrow_mut(); *ref = 10; - assert!(*option::borrow(&some) == 10, 0); + assert!(*some.borrow() == 10); } #[test] #[expected_failure(abort_code = option::EOPTION_NOT_SET)] fun borrow_mut_none() { - option::borrow_mut(&mut option::none()); + option::none().borrow_mut(); } #[test] fun borrow_with_default() { let none = option::none(); let some = option::some(5); - assert!(*option::borrow_with_default(&some, &7) == 5, 0); - assert!(*option::borrow_with_default(&none, &7) == 7, 1); + assert!(*some.borrow_with_default(&7) == 5); + assert!(*none.borrow_with_default(&7) == 7); } #[test] fun get_with_default() { let none = option::none(); let some = option::some(5); - assert!(option::get_with_default(&some, 7) == 5, 0); - assert!(option::get_with_default(&none, 7) == 7, 1); + assert!(option::get_with_default(&some, 7) == 5); + assert!(option::get_with_default(&none, 7) == 7); } #[test] fun extract_some() { - let opt = option::some(1); - assert!(option::extract(&mut opt) == 1, 0); - assert!(option::is_none(&opt), 1); + let mut opt = option::some(1); + assert!(opt.extract() == 1); + assert!(opt.is_none()); } #[test] #[expected_failure(abort_code = option::EOPTION_NOT_SET)] fun extract_none() { - option::extract(&mut option::none()); + option::none().extract(); } #[test] fun swap_some() { - let some = option::some(5); - assert!(option::swap(&mut some, 1) == 5, 0); - assert!(*option::borrow(&some) == 1, 1); + let mut some = option::some(5); + assert!(some.swap(1) == 5); + assert!(*some.borrow() == 1); } #[test] fun swap_or_fill_some() { - let some = option::some(5); - assert!(option::swap_or_fill(&mut some, 1) == option::some(5), 0); - assert!(*option::borrow(&some) == 1, 1); + let mut some = option::some(5); + assert!(some.swap_or_fill(1) == option::some(5)); + assert!(*some.borrow() == 1); } #[test] fun swap_or_fill_none() { - let none = option::none(); - assert!(option::swap_or_fill(&mut none, 1) == option::none(), 0); - assert!(*option::borrow(&none) == 1, 1); + let mut none = option::none(); + assert!(none.swap_or_fill(1) == option::none()); + assert!(*none.borrow() == 1); } #[test] #[expected_failure(abort_code = option::EOPTION_NOT_SET)] fun swap_none() { - option::swap(&mut option::none(), 1); + option::none().swap(1); } #[test] fun fill_none() { - let none = option::none(); - option::fill(&mut none, 3); - assert!(option::is_some(&none), 0); - assert!(*option::borrow(&none) == 3, 1); + let mut none = option::none(); + none.fill(3); + assert!(none.is_some()); + assert!(*none.borrow() == 3); } #[test] #[expected_failure(abort_code = option::EOPTION_IS_SET)] fun fill_some() { - option::fill(&mut option::some(3), 0); + option::some(3).fill(0); } #[test] fun destroy_with_default() { - assert!(option::destroy_with_default(option::none(), 4) == 4, 0); - assert!(option::destroy_with_default(option::some(4), 5) == 4, 1); + assert!(option::none().destroy_with_default(4) == 4); + assert!(option::some(4).destroy_with_default(5) == 4); } #[test] fun destroy_some() { - assert!(option::destroy_some(option::some(4)) == 4, 0); + assert!(option::some(4).destroy_some() == 4); } #[test] #[expected_failure(abort_code = option::EOPTION_NOT_SET)] fun destroy_some_none() { - option::destroy_some(option::none()); + option::none().destroy_some(); } #[test] fun destroy_none() { - option::destroy_none(option::none()); + option::none().destroy_none(); } #[test] #[expected_failure(abort_code = option::EOPTION_IS_SET)] fun destroy_none_some() { - option::destroy_none(option::some(0)); + option::some(0).destroy_none(); } #[test] fun into_vec_some() { - let v = option::to_vec(option::some(0)); - assert!(vector::length(&v) == 1, 0); - let x = vector::pop_back(&mut v); - assert!(x == 0, 1); + let mut v = option::some(0).to_vec(); + assert!(v.length() == 1); + let x = v.pop_back(); + assert!(x == 0); } #[test] fun into_vec_none() { - let v: vector = option::to_vec(option::none()); - assert!(vector::is_empty(&v), 0); + let v: vector = option::none().to_vec(); + assert!(v.is_empty()); + } + + // === Macros === + + #[test] + fun do_destroy() { + let mut counter = 0; + option::some(5).destroy!(|x| counter = x); + option::some(10).do!(|x| counter = counter + x); + + assert!(counter == 15); + } + + #[test] + fun do_ref_mut() { + let mut counter = 0; + let mut opt = option::some(5); + opt.do_mut!(|x| *x = 100); + opt.do_ref!(|x| counter = *x); + + assert!(counter == 100); + } + + #[test] + fun map_map_ref() { + assert!(option::some(5).map!(|x| vector[x]) == option::some(vector[5])); + assert!(option::some(5).map_ref!(|x| vector[*x]) == option::some(vector[5])); + assert!(option::none().map!(|x| vector[x]) == option::none()); + assert!(option::none().map_ref!(|x| vector[*x]) == option::none()); + } + + #[test] + fun filter() { + assert!(option::some(5).filter!(|x| *x == 5) == option::some(5)); + assert!(option::some(5).filter!(|x| *x == 6) == option::none()); + } + + #[test] + fun is_some_and() { + assert!(option::some(5).is_some_and!(|x| *x == 5)); + assert!(!option::some(5).is_some_and!(|x| *x == 6)); + assert!(!option::none().is_some_and!(|x| *x == 5)); + } + + #[test] + fun destroy_or() { + assert!(option::none().destroy_or!(10) == 10); + assert!(option::some(5).destroy_or!(10) == 5); } } diff --git a/external-crates/move/crates/move-stdlib/tests/string_tests.move b/external-crates/move/crates/move-stdlib/tests/string_tests.move index e7810a3422262..bf99e678860d0 100644 --- a/external-crates/move/crates/move-stdlib/tests/string_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/string_tests.move @@ -1,3 +1,8 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::string_tests { use std::string; @@ -5,74 +10,79 @@ module std::string_tests { #[test] fun test_valid_utf8() { let sparkle_heart = vector[240, 159, 146, 150]; - let s = string::utf8(sparkle_heart); - assert!(string::length(&s) == 4, 22); + let s = sparkle_heart.to_string(); + assert!(s.length() == 4); } #[test] - #[expected_failure(abort_code = string::EINVALID_UTF8)] + #[expected_failure(abort_code = string::EInvalidUTF8)] fun test_invalid_utf8() { let no_sparkle_heart = vector[0, 159, 146, 150]; - let s = string::utf8(no_sparkle_heart); - assert!(string::length(&s) == 1, 22); + let s = no_sparkle_heart.to_string(); + assert!(s.length() == 1); } #[test] - fun test_sub_string() { - let s = string::utf8(b"abcd"); - let sub = string::sub_string(&s, 2, 4); - assert!(sub == string::utf8(b"cd"), 22) + fun test_substring() { + let s = b"abcd".to_string(); + let sub = s.substring(2, 4); + assert!(sub == b"cd".to_string()) } #[test] - #[expected_failure(abort_code = string::EINVALID_INDEX)] - fun test_sub_string_invalid_boundary() { + #[expected_failure(abort_code = string::EInvalidIndex)] + fun test_substring_invalid_boundary() { let sparkle_heart = vector[240, 159, 146, 150]; - let s = string::utf8(sparkle_heart); - let _sub = string::sub_string(&s, 1, 4); + let s = sparkle_heart.to_string(); + let _sub = s.substring(1, 4); } #[test] - #[expected_failure(abort_code = string::EINVALID_INDEX)] - fun test_sub_string_invalid_index() { - let s = string::utf8(b"abcd"); - let _sub = string::sub_string(&s, 4, 5); + #[expected_failure(abort_code = string::EInvalidIndex)] + fun test_substring_invalid_index() { + let s = b"abcd".to_string(); + let _sub = s.substring(4, 5); } #[test] - fun test_sub_string_empty() { - let s = string::utf8(b"abcd"); - let sub = string::sub_string(&s, 4, 4); - assert!(string::is_empty(&sub), 22) + fun test_substring_empty() { + let s = b"abcd".to_string(); + let sub = s.substring(4, 4); + assert!(sub.is_empty()) } #[test] fun test_index_of() { - let s = string::utf8(b"abcd"); - let r = string::utf8(b"bc"); - let p = string::index_of(&s, &r); - assert!(p == 1, 22) + let s = b"abcd".to_string(); + let r = b"bc".to_string(); + let p = s.index_of(&r); + assert!(p == 1) } #[test] fun test_index_of_fail() { - let s = string::utf8(b"abcd"); - let r = string::utf8(b"bce"); - let p = string::index_of(&s, &r); - assert!(p == 4, 22) + let s = b"abcd".to_string(); + let r = b"bce".to_string(); + let p = s.index_of(&r); + assert!(p == 4) } #[test] fun test_append() { - let s = string::utf8(b"abcd"); - string::append(&mut s, string::utf8(b"ef")); - assert!(s == string::utf8(b"abcdef"), 22) + let mut s = b"abcd".to_string(); + s.append(b"ef".to_string()); + assert!(s == b"abcdef".to_string()) } #[test] fun test_insert() { - let s = string::utf8(b"abcd"); - string::insert(&mut s, 1, string::utf8(b"xy")); - assert!(s == string::utf8(b"axybcd"), 22) + let mut s = b"abcd".to_string(); + s.insert(1, b"xy".to_string()); + assert!(s == b"axybcd".to_string()) + } + + #[test] + fun test_into_bytes() { + assert!(b"abcd" == b"abcd".to_string().into_bytes()) } } diff --git a/external-crates/move/crates/move-stdlib/tests/type_name_tests.move b/external-crates/move/crates/move-stdlib/tests/type_name_tests.move index 48c1ba2edc1a5..256c31c901fa8 100644 --- a/external-crates/move/crates/move-stdlib/tests/type_name_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/type_name_tests.move @@ -1,47 +1,104 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + // note: intentionally using 0xa here to test non-0x1 module addresses module 0xA::type_name_tests { #[test_only] - use std::type_name::{get, into_string}; + use std::type_name::{get, into_string, is_primitive, get_address, get_module}; #[test_only] use std::ascii::string; - struct TestStruct {} + public struct TestStruct {} - struct TestGenerics { } + public struct TestGenerics { } - struct TestMultiGenerics { } + public struct TestMultiGenerics { } #[test] - fun test_ground_types() { - assert!(into_string(get()) == string(b"u8"), 0); - assert!(into_string(get()) == string(b"u64"), 0); - assert!(into_string(get()) == string(b"u128"), 0); - assert!(into_string(get
()) == string(b"address"), 0); - assert!(into_string(get()) == string(b"signer"), 0); - assert!(into_string(get>()) == string(b"vector"), 0) + fun test_primitive_types() { + assert!(into_string(get()) == string(b"u8")); + assert!(into_string(get()) == string(b"u16")); + assert!(into_string(get()) == string(b"u32")); + assert!(into_string(get()) == string(b"u64")); + assert!(into_string(get()) == string(b"u128")); + assert!(into_string(get()) == string(b"u256")); + assert!(into_string(get
()) == string(b"address")); + assert!(into_string(get>()) == string(b"vector")); + assert!(into_string(get>>()) == string(b"vector>")); + assert!(into_string(get>>()) == string(b"vector>")); } - // Note: these tests assume a 16 byte address length, and will fail on platforms where addresses are 20 or 32 bytes + #[test] + fun test_is_primitive() { + assert!(is_primitive(&get())); + assert!(is_primitive(&get())); + assert!(is_primitive(&get())); + assert!(is_primitive(&get())); + assert!(is_primitive(&get())); + assert!(is_primitive(&get())); + assert!(is_primitive(&get
())); + assert!(is_primitive(&get>())); + assert!(is_primitive(&get>>())); + assert!(is_primitive(&get>>())); + } + + // Note: these tests assume a 32 byte address length #[test] fun test_structs() { - assert!(into_string(get()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestStruct"), 0); - assert!(into_string(get()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::ascii::String"), 0); - assert!(into_string(get>()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::option::Option"), 0); - assert!(into_string(get()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::string::String"), 0); + assert!(into_string(get()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestStruct")); + assert!(into_string(get()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::ascii::String")); + assert!(into_string(get>()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::option::Option")); + assert!(into_string(get()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::string::String")); } - // Note: these tests assume a 16 byte address length, and will fail on platforms where addresses are 20 or 32 bytes + // Note: these tests assume a 32 byte address length #[test] fun test_generics() { - assert!(into_string(get>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics<0000000000000000000000000000000000000000000000000000000000000001::string::String>"), 0); - assert!(into_string(get>>()) == string(b"vector<000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics>"), 0); - assert!(into_string(get>>()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::option::Option<000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics>"), 0); + assert!(into_string(get>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics<0000000000000000000000000000000000000000000000000000000000000001::string::String>")); + assert!(into_string(get>>()) == string(b"vector<000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics>")); + assert!(into_string(get>>()) == string(b"0000000000000000000000000000000000000000000000000000000000000001::option::Option<000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics>")); } - // Note: these tests assume a 16 byte address length, and will fail on platforms where addresses are 20 or 32 bytes + // Note: these tests assume a 32 byte address length #[test] fun test_multi_generics() { - assert!(into_string(get>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestMultiGenerics"), 0); - assert!(into_string(get, TestGenerics>>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestMultiGenerics,000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics>"), 0); + assert!(into_string(get>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestMultiGenerics")); + assert!(into_string(get, TestGenerics>>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestMultiGenerics,000000000000000000000000000000000000000000000000000000000000000a::type_name_tests::TestGenerics>")); + } + + #[test] + fun test_get_address() { + assert!(get_address(&get()) == string(b"0000000000000000000000000000000000000000000000000000000000000001")); + assert!(get_address(&get()) == string(b"000000000000000000000000000000000000000000000000000000000000000a")); + assert!(get_address(&get>()) == string(b"000000000000000000000000000000000000000000000000000000000000000a")); + } + + #[test] + fun test_get_module() { + assert!(get_module(&get()) == string(b"ascii")); + assert!(get_module(&get()) == string(b"type_name_tests")); + assert!(get_module(&get>()) == string(b"type_name_tests")); + } + + #[test, expected_failure(abort_code = std::type_name::ENonModuleType)] + fun test_get_address_aborts_with_primitive() { + get_address(&get()); + } + + #[test, expected_failure(abort_code = std::type_name::ENonModuleType)] + fun test_get_module_aborts_with_primitive() { + get_module(&get()); + } + + #[test, expected_failure(abort_code = std::type_name::ENonModuleType)] + fun test_get_address_aborts_with_primitive_generic() { + get_address(&get>()); + } + + #[test, expected_failure(abort_code = std::type_name::ENonModuleType)] + fun test_get_module_aborts_with_primitive_generic() { + get_module(&get>>()); } } diff --git a/external-crates/move/crates/move-stdlib/tests/u128_tests.move b/external-crates/move/crates/move-stdlib/tests/u128_tests.move new file mode 100644 index 0000000000000..315190be0589b --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/u128_tests.move @@ -0,0 +1,78 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[test_only] +module std::u128_tests { + use std::integer_tests; + use std::unit_test::assert_eq; + + const BIT_SIZE: u8 = 128; + const MAX: u128 = 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF; + const MAX_PRED: u128 = MAX - 1; + + const CASES: vector = vector[ + 0, + 1, + 10, + 11, + 100, + 111, + 1 << (BIT_SIZE / 2 - 1), + (1 << (BIT_SIZE / 2 - 1)) + 1, + 1 << (BIT_SIZE - 1), + (1 << (BIT_SIZE - 1)) + 1, + MAX / 2, + (MAX / 2) + 1, + MAX_PRED, + MAX, + ]; + + #[test] + fun test_max() { + integer_tests::test_max!(MAX, CASES); + } + + #[test] + fun test_min() { + integer_tests::test_min!(MAX, CASES); + } + + #[test] + fun test_diff() { + integer_tests::test_diff!(MAX, CASES); + } + + #[test] + fun test_divide_and_round_up() { + integer_tests::test_divide_and_round_up!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_divide_and_round_up_error() { + 1u8.divide_and_round_up(0); + } + + #[test] + fun test_pow() { + integer_tests::test_pow!(MAX, CASES); + assert_eq!(2u128.pow(12), integer_tests::slow_pow!(2u128, 12)); + assert_eq!(3u128.pow(27), integer_tests::slow_pow!(3u128, 27)); + } + + #[test, expected_failure(arithmetic_error, location = std::u16)] + fun test_pow_overflow() { + 255u16.pow(255); + } + + #[test] + fun test_sqrt() { + let reflexive_cases = + vector[0, 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59]; + integer_tests::test_sqrt!(MAX, CASES, reflexive_cases) + } + + #[test] + fun test_dos() { + integer_tests::test_dos!(MAX, CASES); + } +} diff --git a/external-crates/move/crates/move-stdlib/tests/u16_tests.move b/external-crates/move/crates/move-stdlib/tests/u16_tests.move new file mode 100644 index 0000000000000..f872acf70f988 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/u16_tests.move @@ -0,0 +1,78 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[test_only] +module std::u16_tests { + use std::integer_tests; + use std::unit_test::assert_eq; + + const BIT_SIZE: u8 = 16; + const MAX: u16 = 0xFFFF; + const MAX_PRED: u16 = MAX - 1; + + const CASES: vector = vector[ + 0, + 1, + 10, + 11, + 100, + 111, + 1 << (BIT_SIZE / 2 - 1), + (1 << (BIT_SIZE / 2 - 1)) + 1, + 1 << (BIT_SIZE - 1), + (1 << (BIT_SIZE - 1)) + 1, + MAX / 2, + (MAX / 2) + 1, + MAX_PRED, + MAX, + ]; + + #[test] + fun test_max() { + integer_tests::test_max!(MAX, CASES); + } + + #[test] + fun test_min() { + integer_tests::test_min!(MAX, CASES); + } + + #[test] + fun test_diff() { + integer_tests::test_diff!(MAX, CASES); + } + + #[test] + fun test_divide_and_round_up() { + integer_tests::test_divide_and_round_up!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_divide_and_round_up_error() { + 1u8.divide_and_round_up(0); + } + + #[test] + fun test_pow() { + integer_tests::test_pow!(MAX, CASES); + assert_eq!(2u16.pow(12), integer_tests::slow_pow!(2u16, 12)); + assert_eq!(3u16.pow(10), integer_tests::slow_pow!(3u16, 10)); + } + + #[test, expected_failure(arithmetic_error, location = std::u16)] + fun test_pow_overflow() { + 255u16.pow(255); + } + + #[test] + fun test_sqrt() { + let reflexive_cases = + vector[0, 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59]; + integer_tests::test_sqrt!(MAX, CASES, reflexive_cases) + } + + #[test] + fun test_dos() { + integer_tests::test_dos!(MAX, CASES); + } +} diff --git a/external-crates/move/crates/move-stdlib/tests/u256_tests.move b/external-crates/move/crates/move-stdlib/tests/u256_tests.move new file mode 100644 index 0000000000000..eff171bf43fa0 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/u256_tests.move @@ -0,0 +1,72 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[test_only] +module std::u256_tests { + use std::integer_tests; + use std::unit_test::assert_eq; + + const BIT_SIZE: u8 = 255; + const MAX: u256 = + 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF; + const MAX_PRED: u256 = MAX - 1; + + const CASES: vector = vector[ + 0, + 1, + 10, + 11, + 100, + 111, + 1 << (BIT_SIZE / 2), + (1 << (BIT_SIZE / 2)) + 1, + 1 << BIT_SIZE, + (1 << BIT_SIZE) + 1, + MAX / 2, + (MAX / 2) + 1, + MAX_PRED, + MAX, + ]; + + #[test] + fun test_max() { + integer_tests::test_max!(MAX, CASES); + } + + #[test] + fun test_min() { + integer_tests::test_min!(MAX, CASES); + } + + #[test] + fun test_diff() { + integer_tests::test_diff!(MAX, CASES); + } + + #[test] + fun test_divide_and_round_up() { + integer_tests::test_divide_and_round_up!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_divide_and_round_up_error() { + 1u8.divide_and_round_up(0); + } + + #[test] + fun test_pow() { + integer_tests::test_pow!(MAX, CASES); + assert_eq!(2u256.pow(12), integer_tests::slow_pow!(2u256, 12)); + assert_eq!(3u256.pow(27), integer_tests::slow_pow!(3u256, 27)); + } + + #[test, expected_failure(arithmetic_error, location = std::u256)] + fun test_pow_overflow() { + 255u256.pow(255); + } + + #[test] + fun test_dos() { + integer_tests::test_dos!(MAX, CASES); + } +} diff --git a/external-crates/move/crates/move-stdlib/tests/u32_tests.move b/external-crates/move/crates/move-stdlib/tests/u32_tests.move new file mode 100644 index 0000000000000..c2890c1d5cff9 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/u32_tests.move @@ -0,0 +1,78 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[test_only] +module std::u32_tests { + use std::integer_tests; + use std::unit_test::assert_eq; + + const BIT_SIZE: u8 = 32; + const MAX: u32 = 0xFFFF_FFFF; + const MAX_PRED: u32 = MAX - 1; + + const CASES: vector = vector[ + 0, + 1, + 10, + 11, + 100, + 111, + 1 << (BIT_SIZE / 2 - 1), + (1 << (BIT_SIZE / 2 - 1)) + 1, + 1 << (BIT_SIZE - 1), + (1 << (BIT_SIZE - 1)) + 1, + MAX / 2, + (MAX / 2) + 1, + MAX_PRED, + MAX, + ]; + + #[test] + fun test_max() { + integer_tests::test_max!(MAX, CASES); + } + + #[test] + fun test_min() { + integer_tests::test_min!(MAX, CASES); + } + + #[test] + fun test_diff() { + integer_tests::test_diff!(MAX, CASES); + } + + #[test] + fun test_divide_and_round_up() { + integer_tests::test_divide_and_round_up!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_divide_and_round_up_error() { + 1u8.divide_and_round_up(0); + } + + #[test] + fun test_pow() { + integer_tests::test_pow!(MAX, CASES); + assert_eq!(2u32.pow(12), integer_tests::slow_pow!(2u32, 12)); + assert_eq!(3u32.pow(20), integer_tests::slow_pow!(3u32, 20)); + } + + #[test, expected_failure(arithmetic_error, location = std::u32)] + fun test_pow_overflow() { + 255u32.pow(255); + } + + #[test] + fun test_sqrt() { + let reflexive_cases = + vector[0, 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59]; + integer_tests::test_sqrt!(MAX, CASES, reflexive_cases) + } + + #[test] + fun test_dos() { + integer_tests::test_dos!(MAX, CASES); + } +} diff --git a/external-crates/move/crates/move-stdlib/tests/u64_tests.move b/external-crates/move/crates/move-stdlib/tests/u64_tests.move new file mode 100644 index 0000000000000..aee0790856f0f --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/u64_tests.move @@ -0,0 +1,79 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[test_only] +module std::u64_tests { + use std::integer_tests; + use std::unit_test::assert_eq; + + const BIT_SIZE: u8 = 64; + const MAX: u64 = 0xFFFF_FFFF_FFFF_FFFF; + const MAX_PRED: u64 = MAX - 1; + + const CASES: vector = vector[ + 0, + 1, + 10, + 11, + 100, + 111, + 1 << (BIT_SIZE / 2 - 1), + (1 << (BIT_SIZE / 2 - 1)) + 1, + 1 << (BIT_SIZE - 1), + (1 << (BIT_SIZE - 1)) + 1, + MAX / 2, + (MAX / 2) + 1, + MAX_PRED, + MAX, + ]; + + #[test] + fun test_max() { + integer_tests::test_max!(MAX, CASES); + } + + #[test] + fun test_min() { + integer_tests::test_min!(MAX, CASES); + } + + #[test] + fun test_diff() { + integer_tests::test_diff!(MAX, CASES); + } + + #[test] + fun test_divide_and_round_up() { + integer_tests::test_divide_and_round_up!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_divide_and_round_up_error() { + 1u8.divide_and_round_up(0); + } + + #[test] + fun test_pow() { + integer_tests::test_pow!(MAX, CASES); + assert_eq!(2u64.pow(12), integer_tests::slow_pow!(2u64, 12)); + assert_eq!(3u64.pow(27), integer_tests::slow_pow!(3u64, 27)); + } + + #[test, expected_failure(arithmetic_error, location = std::u64)] + fun test_pow_overflow() { + 255u64.pow(255); + } + + #[test] + fun test_sqrt() { + let reflexive_cases = + vector[0, 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59]; + integer_tests::test_sqrt!(MAX, CASES, reflexive_cases) + } + + #[test] + fun test_dos() { + integer_tests::test_dos!(MAX, CASES); + } + +} diff --git a/external-crates/move/crates/move-stdlib/tests/u8_tests.move b/external-crates/move/crates/move-stdlib/tests/u8_tests.move new file mode 100644 index 0000000000000..7aa1d6f263a00 --- /dev/null +++ b/external-crates/move/crates/move-stdlib/tests/u8_tests.move @@ -0,0 +1,77 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#[test_only] +module std::u8_tests { + use std::integer_tests; + use std::unit_test::assert_eq; + + const BIT_SIZE: u8 = 8; + const MAX: u8 = 0xFF; + const MAX_PRED: u8 = MAX - 1; + + const CASES: vector = vector[ + 0, + 1, + 10, + 11, + 100, + 111, + 1 << (BIT_SIZE / 2 - 1), + (1 << (BIT_SIZE / 2 - 1)) + 1, + 1 << (BIT_SIZE - 1), + (1 << (BIT_SIZE - 1)) + 1, + MAX / 2, + (MAX / 2) + 1, + MAX_PRED, + MAX, + ]; + + #[test] + fun test_max() { + integer_tests::test_max!(MAX, CASES); + } + + #[test] + fun test_min() { + integer_tests::test_min!(MAX, CASES); + } + + #[test] + fun test_diff() { + integer_tests::test_diff!(MAX, CASES); + } + + #[test] + fun test_divide_and_round_up() { + integer_tests::test_divide_and_round_up!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_divide_and_round_up_error() { + 1u8.divide_and_round_up(0); + } + + #[test] + fun test_pow() { + integer_tests::test_pow!(MAX, CASES); + } + + #[test, expected_failure(arithmetic_error, location = std::u8)] + fun test_pow_overflow() { + 255u8.pow(255); + } + + #[test] + fun test_sqrt() { + integer_tests::test_sqrt!(MAX, CASES, vector[0, 2, 5, 8, 11, 14]); + } + + #[test] + fun test_dos() { + let mut sum = 0u16; + 255u8.do_eq!(|i| sum = sum + (i as u16)); + assert_eq!(sum, 32640); + integer_tests::test_dos!(MAX, CASES); + } +} diff --git a/external-crates/move/crates/move-stdlib/tests/vector_tests.move b/external-crates/move/crates/move-stdlib/tests/vector_tests.move index 5480f6b685d96..2bb76d6310017 100644 --- a/external-crates/move/crates/move-stdlib/tests/vector_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/vector_tests.move @@ -1,90 +1,93 @@ +// Copyright (c) The Diem Core Contributors +// Copyright (c) The Move Contributors +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + #[test_only] module std::vector_tests { - use std::vector as V; - - struct R has store { } - struct Droppable has drop {} - struct NotDroppable {} + public struct R has store { } + public struct Droppable has drop {} + public struct NotDroppable {} #[test] fun test_singleton_contains() { - assert!(*V::borrow(&V::singleton(0), 0) == 0, 0); - assert!(*V::borrow(&V::singleton(true), 0) == true, 0); - assert!(*V::borrow(&V::singleton(@0x1), 0) == @0x1, 0); + assert!(vector[0][0] == 0); + assert!(vector[true][0] == true); + assert!(vector[@0x1][0] == @0x1); } #[test] fun test_singleton_len() { - assert!(V::length(&V::singleton(0)) == 1, 0); - assert!(V::length(&V::singleton(true)) == 1, 0); - assert!(V::length(&V::singleton(@0x1)) == 1, 0); + assert!(&vector[0].length() == 1); + assert!(&vector[true].length() == 1); + assert!(&vector[@0x1].length() == 1); } #[test] fun test_empty_is_empty() { - assert!(V::is_empty(&V::empty()), 0); + assert!(vector[].is_empty()); } #[test] fun append_empties_is_empty() { - let v1 = V::empty(); - let v2 = V::empty(); - V::append(&mut v1, v2); - assert!(V::is_empty(&v1), 0); + let mut v1 = vector[]; + let v2 = vector[]; + v1.append(v2); + assert!(v1.is_empty()); } #[test] fun append_respects_order_empty_lhs() { - let v1 = V::empty(); - let v2 = V::empty(); - V::push_back(&mut v2, 0); - V::push_back(&mut v2, 1); - V::push_back(&mut v2, 2); - V::push_back(&mut v2, 3); - V::append(&mut v1, v2); - assert!(!V::is_empty(&v1), 0); - assert!(V::length(&v1) == 4, 1); - assert!(*V::borrow(&v1, 0) == 0, 2); - assert!(*V::borrow(&v1, 1) == 1, 3); - assert!(*V::borrow(&v1, 2) == 2, 4); - assert!(*V::borrow(&v1, 3) == 3, 5); + let mut v1 = vector[]; + let mut v2 = vector[]; + v2.push_back(0); + v2.push_back(1); + v2.push_back(2); + v2.push_back(3); + v1.append(v2); + assert!(!v1.is_empty()); + assert!(v1.length() == 4); + assert!(v1[0] == 0); + assert!(v1[1] == 1); + assert!(v1[2] == 2); + assert!(v1[3] == 3); } #[test] fun append_respects_order_empty_rhs() { - let v1 = V::empty(); - let v2 = V::empty(); - V::push_back(&mut v1, 0); - V::push_back(&mut v1, 1); - V::push_back(&mut v1, 2); - V::push_back(&mut v1, 3); - V::append(&mut v1, v2); - assert!(!V::is_empty(&v1), 0); - assert!(V::length(&v1) == 4, 1); - assert!(*V::borrow(&v1, 0) == 0, 2); - assert!(*V::borrow(&v1, 1) == 1, 3); - assert!(*V::borrow(&v1, 2) == 2, 4); - assert!(*V::borrow(&v1, 3) == 3, 5); + let mut v1 = vector[]; + let v2 = vector[]; + v1.push_back(0); + v1.push_back(1); + v1.push_back(2); + v1.push_back(3); + v1.append(v2); + assert!(!v1.is_empty()); + assert!(v1.length() == 4); + assert!(v1[0] == 0); + assert!(v1[1] == 1); + assert!(v1[2] == 2); + assert!(v1[3] == 3); } #[test] fun append_respects_order_nonempty_rhs_lhs() { - let v1 = V::empty(); - let v2 = V::empty(); - V::push_back(&mut v1, 0); - V::push_back(&mut v1, 1); - V::push_back(&mut v1, 2); - V::push_back(&mut v1, 3); - V::push_back(&mut v2, 4); - V::push_back(&mut v2, 5); - V::push_back(&mut v2, 6); - V::push_back(&mut v2, 7); - V::append(&mut v1, v2); - assert!(!V::is_empty(&v1), 0); - assert!(V::length(&v1) == 8, 1); - let i = 0; + let mut v1 = vector[]; + let mut v2 = vector[]; + v1.push_back(0); + v1.push_back(1); + v1.push_back(2); + v1.push_back(3); + v2.push_back(4); + v2.push_back(5); + v2.push_back(6); + v2.push_back(7); + v1.append(v2); + assert!(!v1.is_empty()); + assert!(v1.length() == 8); + let mut i = 0; while (i < 8) { - assert!(*V::borrow(&v1, i) == i, i); + assert!(v1[i] == i, i); i = i + 1; } } @@ -92,395 +95,397 @@ module std::vector_tests { #[test] #[expected_failure(vector_error, minor_status = 1, location = Self)] fun borrow_out_of_range() { - let v = V::empty(); - V::push_back(&mut v, 7); - V::borrow(&v, 1); + let mut v = vector[]; + v.push_back(7); + &v[1]; } #[test] fun vector_contains() { - let vec = V::empty(); - assert!(!V::contains(&vec, &0), 1); + let mut vec = vector[]; + assert!(!vec.contains(&0)); - V::push_back(&mut vec, 0); - assert!(V::contains(&vec, &0), 2); - assert!(!V::contains(&vec, &1), 3); + vec.push_back(0); + assert!(vec.contains(&0)); + assert!(!vec.contains(&1)); - V::push_back(&mut vec, 1); - assert!(V::contains(&vec, &0), 4); - assert!(V::contains(&vec, &1), 5); - assert!(!V::contains(&vec, &2), 6); + vec.push_back(1); + assert!(vec.contains(&0)); + assert!(vec.contains(&1)); + assert!(!vec.contains(&2)); - V::push_back(&mut vec, 2); - assert!(V::contains(&vec, &0), 7); - assert!(V::contains(&vec, &1), 8); - assert!(V::contains(&vec, &2), 9); - assert!(!V::contains(&vec, &3), 10); + vec.push_back(2); + assert!(vec.contains(&0)); + assert!(vec.contains(&1)); + assert!(vec.contains(&2)); + assert!(!vec.contains(&3)); } #[test] fun destroy_empty() { - V::destroy_empty(V::empty()); - V::destroy_empty(V::empty()); + vector[].destroy_empty(); + vector[].destroy_empty(); + vector::empty().destroy_empty(); + vector::empty().destroy_empty(); } #[test] fun destroy_empty_with_pops() { - let v = V::empty(); - V::push_back(&mut v, 42); - V::pop_back(&mut v); - V::destroy_empty(v); + let mut v = vector[]; + v.push_back(42); + v.pop_back(); + v.destroy_empty(); } #[test] #[expected_failure(vector_error, minor_status = 3, location = Self)] fun destroy_non_empty() { - let v = V::empty(); - V::push_back(&mut v, 42); - V::destroy_empty(v); + let mut v = vector[]; + v.push_back(42); + v.destroy_empty(); } #[test] fun get_set_work() { - let vec = V::empty(); - V::push_back(&mut vec, 0); - V::push_back(&mut vec, 1); - assert!(*V::borrow(&vec, 1) == 1, 0); - assert!(*V::borrow(&vec, 0) == 0, 1); + let mut vec = vector[]; + vec.push_back(0); + vec.push_back(1); + assert!(vec[1] == 1); + assert!(vec[0] == 0); - *V::borrow_mut(&mut vec, 0) = 17; - assert!(*V::borrow(&vec, 1) == 1, 0); - assert!(*V::borrow(&vec, 0) == 17, 0); + *&mut vec[0] = 17; + assert!(vec[1] == 1); + assert!(vec[0] == 17); } #[test] #[expected_failure(vector_error, minor_status = 2, location = Self)] fun pop_out_of_range() { - let v = V::empty(); - V::pop_back(&mut v); + let mut v = vector[]; + v.pop_back(); } #[test] fun swap_different_indices() { - let vec = V::empty(); - V::push_back(&mut vec, 0); - V::push_back(&mut vec, 1); - V::push_back(&mut vec, 2); - V::push_back(&mut vec, 3); - V::swap(&mut vec, 0, 3); - V::swap(&mut vec, 1, 2); - assert!(*V::borrow(&vec, 0) == 3, 0); - assert!(*V::borrow(&vec, 1) == 2, 0); - assert!(*V::borrow(&vec, 2) == 1, 0); - assert!(*V::borrow(&vec, 3) == 0, 0); + let mut vec = vector[]; + vec.push_back(0); + vec.push_back(1); + vec.push_back(2); + vec.push_back(3); + vec.swap(0, 3); + vec.swap(1, 2); + assert!(vec[0] == 3); + assert!(vec[1] == 2); + assert!(vec[2] == 1); + assert!(vec[3] == 0); } #[test] fun swap_same_index() { - let vec = V::empty(); - V::push_back(&mut vec, 0); - V::push_back(&mut vec, 1); - V::push_back(&mut vec, 2); - V::push_back(&mut vec, 3); - V::swap(&mut vec, 1, 1); - assert!(*V::borrow(&vec, 0) == 0, 0); - assert!(*V::borrow(&vec, 1) == 1, 0); - assert!(*V::borrow(&vec, 2) == 2, 0); - assert!(*V::borrow(&vec, 3) == 3, 0); + let mut vec = vector[]; + vec.push_back(0); + vec.push_back(1); + vec.push_back(2); + vec.push_back(3); + vec.swap(1, 1); + assert!(vec[0] == 0); + assert!(vec[1] == 1); + assert!(vec[2] == 2); + assert!(vec[3] == 3); } #[test] fun remove_singleton_vector() { - let v = V::empty(); - V::push_back(&mut v, 0); - assert!(V::remove(&mut v, 0) == 0, 0); - assert!(V::length(&v) == 0, 0); + let mut v = vector[]; + v.push_back(0); + assert!(v.remove(0) == 0); + assert!(v.length() == 0); } #[test] fun remove_nonsingleton_vector() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); - V::push_back(&mut v, 3); + let mut v = vector[]; + v.push_back(0); + v.push_back(1); + v.push_back(2); + v.push_back(3); - assert!(V::remove(&mut v, 1) == 1, 0); - assert!(V::length(&v) == 3, 0); - assert!(*V::borrow(&v, 0) == 0, 0); - assert!(*V::borrow(&v, 1) == 2, 0); - assert!(*V::borrow(&v, 2) == 3, 0); + assert!(v.remove(1) == 1); + assert!(v.length() == 3); + assert!(v[0] == 0); + assert!(v[1] == 2); + assert!(v[2] == 3); } #[test] fun remove_nonsingleton_vector_last_elem() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); - V::push_back(&mut v, 3); + let mut v = vector[]; + v.push_back(0); + v.push_back(1); + v.push_back(2); + v.push_back(3); - assert!(V::remove(&mut v, 3) == 3, 0); - assert!(V::length(&v) == 3, 0); - assert!(*V::borrow(&v, 0) == 0, 0); - assert!(*V::borrow(&v, 1) == 1, 0); - assert!(*V::borrow(&v, 2) == 2, 0); + assert!(v.remove(3) == 3); + assert!(v.length() == 3); + assert!(v[0] == 0); + assert!(v[1] == 1); + assert!(v[2] == 2); } #[test] - #[expected_failure(abort_code = V::EINDEX_OUT_OF_BOUNDS)] + #[expected_failure(abort_code = vector::EINDEX_OUT_OF_BOUNDS)] fun remove_empty_vector() { - let v = V::empty(); - V::remove(&mut v, 0); + let mut v = vector[]; + v.remove(0); } #[test] - #[expected_failure(abort_code = V::EINDEX_OUT_OF_BOUNDS)] + #[expected_failure(abort_code = vector::EINDEX_OUT_OF_BOUNDS)] fun remove_out_of_bound_index() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::remove(&mut v, 1); + let mut v = vector[]; + v.push_back(0); + v.remove(1); } #[test] fun reverse_vector_empty() { - let v = V::empty(); - let is_empty = V::is_empty(&v); - V::reverse(&mut v); - assert!(is_empty == V::is_empty(&v), 0); + let mut v = vector[]; + let is_empty = v.is_empty(); + v.reverse(); + assert!(is_empty == v.is_empty()); } #[test] fun reverse_singleton_vector() { - let v = V::empty(); - V::push_back(&mut v, 0); - assert!(*V::borrow(&v, 0) == 0, 1); - V::reverse(&mut v); - assert!(*V::borrow(&v, 0) == 0, 2); + let mut v = vector[]; + v.push_back(0); + assert!(v[0] == 0); + v.reverse(); + assert!(v[0] == 0); } #[test] fun reverse_vector_nonempty_even_length() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); - V::push_back(&mut v, 3); + let mut v = vector[]; + v.push_back(0); + v.push_back(1); + v.push_back(2); + v.push_back(3); - assert!(*V::borrow(&v, 0) == 0, 1); - assert!(*V::borrow(&v, 1) == 1, 2); - assert!(*V::borrow(&v, 2) == 2, 3); - assert!(*V::borrow(&v, 3) == 3, 4); + assert!(v[0] == 0); + assert!(v[1] == 1); + assert!(v[2] == 2); + assert!(v[3] == 3); - V::reverse(&mut v); + v.reverse(); - assert!(*V::borrow(&v, 3) == 0, 5); - assert!(*V::borrow(&v, 2) == 1, 6); - assert!(*V::borrow(&v, 1) == 2, 7); - assert!(*V::borrow(&v, 0) == 3, 8); + assert!(v[3] == 0); + assert!(v[2] == 1); + assert!(v[1] == 2); + assert!(v[0] == 3); } #[test] fun reverse_vector_nonempty_odd_length_non_singleton() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); + let mut v = vector[]; + v.push_back(0); + v.push_back(1); + v.push_back(2); - assert!(*V::borrow(&v, 0) == 0, 1); - assert!(*V::borrow(&v, 1) == 1, 2); - assert!(*V::borrow(&v, 2) == 2, 3); + assert!(v[0] == 0); + assert!(v[1] == 1); + assert!(v[2] == 2); - V::reverse(&mut v); + v.reverse(); - assert!(*V::borrow(&v, 2) == 0, 4); - assert!(*V::borrow(&v, 1) == 1, 5); - assert!(*V::borrow(&v, 0) == 2, 6); + assert!(v[2] == 0); + assert!(v[1] == 1); + assert!(v[0] == 2); } #[test] #[expected_failure(vector_error, minor_status = 1, location = Self)] fun swap_empty() { - let v = V::empty(); - V::swap(&mut v, 0, 0); + let mut v = vector[]; + v.swap(0, 0); } #[test] #[expected_failure(vector_error, minor_status = 1, location = Self)] fun swap_out_of_range() { - let v = V::empty(); + let mut v = vector[]; - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); - V::push_back(&mut v, 3); + v.push_back(0); + v.push_back(1); + v.push_back(2); + v.push_back(3); - V::swap(&mut v, 1, 10); + v.swap(1, 10); } #[test] - #[expected_failure(abort_code = V::EINDEX_OUT_OF_BOUNDS)] + #[expected_failure(abort_code = std::vector::EINDEX_OUT_OF_BOUNDS)] fun swap_remove_empty() { - let v = V::empty(); - V::swap_remove(&mut v, 0); + let mut v = vector[]; + v.swap_remove(0); } #[test] fun swap_remove_singleton() { - let v = V::empty(); - V::push_back(&mut v, 0); - assert!(V::swap_remove(&mut v, 0) == 0, 0); - assert!(V::is_empty(&v), 1); + let mut v = vector[]; + v.push_back(0); + assert!(v.swap_remove(0) == 0); + assert!(v.is_empty()); } #[test] fun swap_remove_inside_vector() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); - V::push_back(&mut v, 3); + let mut v = vector[]; + v.push_back(0); + v.push_back(1); + v.push_back(2); + v.push_back(3); - assert!(*V::borrow(&v, 0) == 0, 1); - assert!(*V::borrow(&v, 1) == 1, 2); - assert!(*V::borrow(&v, 2) == 2, 3); - assert!(*V::borrow(&v, 3) == 3, 4); + assert!(v[0] == 0); + assert!(v[1] == 1); + assert!(v[2] == 2); + assert!(v[3] == 3); - assert!(V::swap_remove(&mut v, 1) == 1, 5); - assert!(V::length(&v) == 3, 6); + assert!(v.swap_remove(1) == 1); + assert!(v.length() == 3); - assert!(*V::borrow(&v, 0) == 0, 7); - assert!(*V::borrow(&v, 1) == 3, 8); - assert!(*V::borrow(&v, 2) == 2, 9); + assert!(v[0] == 0); + assert!(v[1] == 3); + assert!(v[2] == 2); } #[test] fun swap_remove_end_of_vector() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::push_back(&mut v, 1); - V::push_back(&mut v, 2); - V::push_back(&mut v, 3); + let mut v = vector[]; + v.push_back(0); + v.push_back(1); + v.push_back(2); + v.push_back(3); - assert!(*V::borrow(&v, 0) == 0, 1); - assert!(*V::borrow(&v, 1) == 1, 2); - assert!(*V::borrow(&v, 2) == 2, 3); - assert!(*V::borrow(&v, 3) == 3, 4); + assert!(v[0] == 0); + assert!(v[1] == 1); + assert!(v[2] == 2); + assert!(v[3] == 3); - assert!(V::swap_remove(&mut v, 3) == 3, 5); - assert!(V::length(&v) == 3, 6); + assert!(v.swap_remove(3) == 3); + assert!(v.length() == 3); - assert!(*V::borrow(&v, 0) == 0, 7); - assert!(*V::borrow(&v, 1) == 1, 8); - assert!(*V::borrow(&v, 2) == 2, 9); + assert!(v[0] == 0); + assert!(v[1] == 1); + assert!(v[2] == 2); } #[test] #[expected_failure(vector_error, minor_status = 1, location = std::vector)] fun swap_remove_out_of_range() { - let v = V::empty(); - V::push_back(&mut v, 0); - V::swap_remove(&mut v, 1); + let mut v = vector[]; + v.push_back(0); + v.swap_remove(1); } #[test] fun push_back_and_borrow() { - let v = V::empty(); - V::push_back(&mut v, 7); - assert!(!V::is_empty(&v), 0); - assert!(V::length(&v) == 1, 1); - assert!(*V::borrow(&v, 0) == 7, 2); + let mut v = vector[]; + v.push_back(7); + assert!(!v.is_empty()); + assert!(v.length() == 1); + assert!(v[0] == 7); - V::push_back(&mut v, 8); - assert!(V::length(&v) == 2, 3); - assert!(*V::borrow(&v, 0) == 7, 4); - assert!(*V::borrow(&v, 1) == 8, 5); + v.push_back(8); + assert!(v.length() == 2); + assert!(v[0] == 7); + assert!(v[1] == 8); } #[test] fun index_of_empty_not_has() { - let v = V::empty(); - let (has, index) = V::index_of(&v, &true); - assert!(!has, 0); - assert!(index == 0, 1); + let v = vector[]; + let (has, index) = v.index_of(&true); + assert!(!has); + assert!(index == 0); } #[test] fun index_of_nonempty_not_has() { - let v = V::empty(); - V::push_back(&mut v, false); - let (has, index) = V::index_of(&v, &true); - assert!(!has, 0); - assert!(index == 0, 1); + let mut v = vector[]; + v.push_back(false); + let (has, index) = v.index_of(&true); + assert!(!has); + assert!(index == 0); } #[test] fun index_of_nonempty_has() { - let v = V::empty(); - V::push_back(&mut v, false); - V::push_back(&mut v, true); - let (has, index) = V::index_of(&v, &true); - assert!(has, 0); - assert!(index == 1, 1); + let mut v = vector[]; + v.push_back(false); + v.push_back(true); + let (has, index) = v.index_of(&true); + assert!(has); + assert!(index == 1); } // index_of will return the index first occurence that is equal #[test] fun index_of_nonempty_has_multiple_occurences() { - let v = V::empty(); - V::push_back(&mut v, false); - V::push_back(&mut v, true); - V::push_back(&mut v, true); - let (has, index) = V::index_of(&v, &true); - assert!(has, 0); - assert!(index == 1, 1); + let mut v = vector[]; + v.push_back(false); + v.push_back(true); + v.push_back(true); + let (has, index) = v.index_of(&true); + assert!(has); + assert!(index == 1); } #[test] fun length() { - let empty = V::empty(); - assert!(V::length(&empty) == 0, 0); - let i = 0; + let mut empty = vector[]; + assert!(empty.length() == 0); + let mut i = 0; let max_len = 42; while (i < max_len) { - V::push_back(&mut empty, i); - assert!(V::length(&empty) == i + 1, i); + empty.push_back(i); + assert!(empty.length() == i + 1, i); i = i + 1; } } #[test] fun pop_push_back() { - let v = V::empty(); - let i = 0; + let mut v = vector[]; + let mut i = 0; let max_len = 42; while (i < max_len) { - V::push_back(&mut v, i); + v.push_back(i); i = i + 1; }; while (i > 0) { - assert!(V::pop_back(&mut v) == i - 1, i); + assert!(v.pop_back() == i - 1, i); i = i - 1; }; } #[test_only] - fun test_natives_with_type(x1: T, x2: T): (T, T) { - let v = V::empty(); - assert!(V::length(&v) == 0, 0); - V::push_back(&mut v, x1); - assert!(V::length(&v) == 1, 1); - V::push_back(&mut v, x2); - assert!(V::length(&v) == 2, 2); - V::swap(&mut v, 0, 1); - x1 = V::pop_back(&mut v); - assert!(V::length(&v) == 1, 3); - x2 = V::pop_back(&mut v); - assert!(V::length(&v) == 0, 4); - V::destroy_empty(v); + fun test_natives_with_type(mut x1: T, mut x2: T): (T, T) { + let mut v = vector[]; + assert!(v.length() == 0); + v.push_back(x1); + assert!(v.length() == 1); + v.push_back(x2); + assert!(v.length() == 2); + v.swap(0, 1); + x1 = v.pop_back(); + assert!(v.length() == 1); + x2 = v.pop_back(); + assert!(v.length() == 0); + v.destroy_empty(); (x1, x2) } @@ -495,7 +500,7 @@ module std::vector_tests { test_natives_with_type(true, false); test_natives_with_type
(@0x1, @0x2); - test_natives_with_type>(V::empty(), V::empty()); + test_natives_with_type>(vector[], vector[]); test_natives_with_type(Droppable{}, Droppable{}); (NotDroppable {}, NotDroppable {}) = test_natives_with_type( @@ -506,64 +511,279 @@ module std::vector_tests { #[test] fun test_insert() { - let v = vector[7]; - V::insert(&mut v, 6, 0); - assert!(v == vector[6, 7], 0); + let mut v = vector[7]; + v.insert(6, 0); + assert!(v == vector[6, 7]); - let v = vector[7, 9]; - V::insert(&mut v, 8, 1); - assert!(v == vector[7, 8, 9], 0); + let mut v = vector[7, 9]; + v.insert(8, 1); + assert!(v == vector[7, 8, 9]); - let v = vector[6, 7]; - V::insert(&mut v, 5, 0); - assert!(v == vector[5, 6, 7], 0); + let mut v = vector[6, 7]; + v.insert(5, 0); + assert!(v == vector[5, 6, 7]); - let v = vector[5, 6, 8]; - V::insert(&mut v, 7, 2); - assert!(v == vector[5, 6, 7, 8], 0); + let mut v = vector[5, 6, 8]; + v.insert(7, 2); + assert!(v == vector[5, 6, 7, 8]); } #[test] fun insert_at_end() { - let v = vector[]; - V::insert(&mut v, 6, 0); - assert!(v == vector[6], 0); + let mut v = vector[]; + v.insert(6, 0); + assert!(v == vector[6]); - V::insert(&mut v, 7, 1); - assert!(v == vector[6, 7], 0); + v.insert(7, 1); + assert!(v == vector[6, 7]); } #[test] - #[expected_failure(abort_code = V::EINDEX_OUT_OF_BOUNDS)] + #[expected_failure(abort_code = std::vector::EINDEX_OUT_OF_BOUNDS)] fun insert_out_of_range() { - let v = vector[7]; - V::insert(&mut v, 6, 2); + let mut v = vector[7]; + v.insert(6, 2); } #[test] fun size_limit_ok() { - let v = V::empty(); - let i = 0; - // Limit is currently 1024 * 1024 - let max_len = 1024 * 1024; + let mut v = vector[]; + let mut i = 0; + // Limit is currently 1024 * 54 + let max_len = 1024 * 53; while (i < max_len) { - V::push_back(&mut v, i); + v.push_back(i); i = i + 1; }; } #[test] - #[expected_failure(vector_error, minor_status = 4, location = Self)] + #[expected_failure(out_of_gas, location = Self)] fun size_limit_fail() { - let v = V::empty(); - let i = 0; - // Limit is currently 1024 * 1024 - let max_len = 1024 * 1024 + 1; + let mut v = vector[]; + let mut i = 0; + // Choose value beyond limit + let max_len = 1024 * 1024; while (i < max_len) { - V::push_back(&mut v, i); + v.push_back(i); i = i + 1; }; } + + #[test] + fun test_string_aliases() { + assert!(b"hello_world".to_string().length() == 11); + assert!(b"hello_world".try_to_string().is_some()); + + assert!(b"hello_world".to_ascii_string().length() == 11); + assert!(b"hello_world".try_to_ascii_string().is_some()); + } + + // === Macros === + + #[test] + fun test_destroy_macro() { + vector[].destroy!(|_| assert!(false)); // very funky + + let mut acc = 0; + vector[10, 20, 30, 40].destroy!(|e| acc = acc + e); + assert!(acc == 100); + } + + #[test] + fun test_count_macro() { + assert!(vector[].count!(|e| *e == 2) == 0); + assert!(vector[0, 1, 2, 3].count!(|e| *e == 2) == 1); + assert!(vector[0, 1, 2, 3].count!(|e| *e % 2 == 0) == vector[0, 2].length()); + } + + #[test] + fun test_tabulate_macro() { + let v = vector::tabulate!(10, |i| i); + assert!(v == vector[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); + + let v = vector::tabulate!(5, |i| 10 - i); + assert!(v == vector[10, 9, 8, 7, 6]); + + let v = vector::tabulate!(0, |i| i); + assert!(v == vector[]); + } + + #[test] + fun test_do_macro() { + vector[].do!(|_| assert!(false)); // should never run + vector[].do_ref!(|_| assert!(false)); + vector[].do_mut!(|_| assert!(false)); + + let mut acc = 0; + vector[10, 20, 30, 40].do!(|e| acc = acc + e); + assert!(acc == 100); + + let vec = vector[10, 20]; + vec.do!(|e| acc = acc + e); + assert!(vector[10, 20] == vec); + + let mut acc = 0; + vector[10, 20, 30, 40].do_ref!(|e| acc = acc + *e); + assert!(acc == 100); + + let mut vec = vector[10, 20, 30, 40]; + vec.do_mut!(|e| *e = *e + 1); + assert!(vec == vector[11, 21, 31, 41]); + } + + #[test] + fun test_map_macro() { + let e = vector[]; + assert!(e.map!(|e| e + 1) == vector[]); + + let r = vector[0, 1, 2, 3]; + assert!(r.map!(|e| e + 1) == vector[1, 2, 3, 4]); + + let r = vector[0, 1, 2, 3]; + assert!(r.map_ref!(|e| *e * 2) == vector[0, 2, 4, 6]); + } + + #[test] + fun filter_macro() { + let e = vector[]; + assert!(e.filter!(|e| *e % 2 == 0) == vector[]); + + let r = vector[0, 1, 2, 3]; + assert!(r.filter!(|e| *e % 2 == 0) == vector[0, 2]); + } + + #[test] + fun partition_macro() { + let e = vector[]; + let (even, odd) = e.partition!(|e| (*e % 2) == 0); + assert!(even == vector[]); + assert!(odd == vector[]); + + let r = vector[0, 1, 2, 3]; + let (even, odd) = r.partition!(|e| (*e % 2) == 0); + assert!(even == vector[0, 2]); + assert!(odd == vector[1, 3]); + } + + #[test] + fun find_index_macro() { + let e = vector[]; + assert!(e.find_index!(|e| *e == 0).is_none()); + assert!(e.find_index!(|_| true).is_none()); + + let r = vector[0, 10, 100, 1_000]; + assert!(r.find_index!(|e| *e == 100).destroy_some() == 2); + assert!(r.find_index!(|e| *e == 10_000).is_none()); + } + + #[test] + fun fold_macro() { + let e = vector[]; + assert!(e.fold!(0, |acc, e| acc + e) == 0); + + let r = vector[0, 1, 2, 3]; + assert!(r.fold!(10, |acc, e| acc + e) == 16); + } + + #[test] + fun any_all_macro() { + assert!(vector[].any!(|e| *e == 2) == false); + assert!(vector[].all!(|e| *e == 2) == true); + assert!(vector[0, 1, 2, 3].any!(|e| *e == 2)); + assert!(!vector[0, 1, 2, 3].any!(|e| *e == 4)); + assert!(vector[0, 1, 2, 3].all!(|e| *e < 4)); + assert!(!vector[0, 1, 2, 3].all!(|e| *e < 3)); + } + + #[test, expected_failure] + fun zip_do_macro_fail() { + let v1 = vector[1u64]; + let v2 = vector[4u64, 5]; + let mut res = vector[]; + v1.zip_do!(v2, |a, b| res.push_back(a + b)); + } + + #[test] + fun zip_do_macro() { + let v1 = vector[1u64, 2, 3]; + let v2 = vector[4u64, 5, 6]; + let mut res = vector[]; + v1.zip_do!(v2, |a, b| res.push_back(a + b)); + assert!(res == vector[5, 7, 9]); + } + + #[test, expected_failure] + fun zip_do_reverse_macro_fail() { + let v1 = vector[1u64]; + let v2 = vector[4u64, 5]; + let mut res = vector[]; + v2.zip_do_reverse!(v1, |a, b| res.push_back(a + b)); + } + + #[test] + fun zip_do_reverse_macro() { + let v1 = vector[1u64, 2, 3]; + let v2 = vector[4u64, 5, 6]; + let mut res = vector[]; + v2.zip_do_reverse!(v1, |a, b| res.push_back(a + b)); + assert!(res == vector[9, 7, 5]); + } + + #[test, expected_failure] + fun zip_do_ref_macro_fail() { + let v1 = vector[1u64]; + let v2 = vector[4u64, 5]; + let mut res = vector[]; + v2.zip_do_ref!(&v1, |a, b| res.push_back(*a + *b)); + } + + #[test] + fun zip_do_ref_macro() { + let v1 = vector[1u64, 2, 3]; + let v2 = vector[4u64, 5, 6]; + let mut res = vector[]; + v1.zip_do_ref!(&v2, |a, b| res.push_back(*a + *b)); + assert!(res == vector[5, 7, 9]); + } + + #[test, expected_failure] + fun zip_do_mut_macro_fail() { + let mut v1 = vector[1u64]; + let mut v2 = vector[4u64, 5]; + v1.zip_do_mut!(&mut v2, |a, b| { + let c = *a; + *a = *b; + *b = c; + }); + } + + #[test] + fun zip_do_mut_macro() { + let mut v1 = vector[1u64, 2, 3]; + let mut v2 = vector[4u64, 5, 6]; + v1.zip_do_mut!(&mut v2, |a, b| { + let c = *a; + *a = *b; + *b = c; + }); + assert!(v1 == vector[4, 5, 6]); + assert!(v2 == vector[1, 2, 3]); + } + + #[test] + fun zip_map_macro() { + let v1 = vector[1u64, 2, 3]; + let v2 = vector[4u64, 5, 6]; + assert!(v1.zip_map!(v2, |a, b| a + b) == vector[5, 7, 9]); + } + + #[test] + fun zip_map_ref_macro() { + let v1 = vector[1u64, 2, 3]; + let v2 = vector[4u64, 5, 6]; + assert!(v2.zip_map_ref!(&v1, |a, b| *a + *b) == vector[5, 7, 9]); + } } diff --git a/external-crates/move/crates/move-transactional-test-runner/src/vm_test_harness.rs b/external-crates/move/crates/move-transactional-test-runner/src/vm_test_harness.rs index 9ae5ca713a235..bfa9734d737e8 100644 --- a/external-crates/move/crates/move-transactional-test-runner/src/vm_test_harness.rs +++ b/external-crates/move/crates/move-transactional-test-runner/src/vm_test_harness.rs @@ -274,6 +274,7 @@ impl SimpleVMTestAdapter { STD_ADDR, // TODO: come up with a suitable gas schedule move_stdlib_natives::GasParameters::zeros(), + /* silent */ false, ), vm_config, ) diff --git a/external-crates/move/crates/move-unit-test/src/test_runner.rs b/external-crates/move/crates/move-unit-test/src/test_runner.rs index 186d45575fa12..9cc5b87c9ca0f 100644 --- a/external-crates/move/crates/move-unit-test/src/test_runner.rs +++ b/external-crates/move/crates/move-unit-test/src/test_runner.rs @@ -126,6 +126,7 @@ impl TestRunner { move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent */ false, ) }); Ok(Self { diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/address_args.move b/external-crates/move/crates/move-unit-test/tests/test_sources/address_args.move index 4faabd02d0ba4..bb56acb2f988e 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/address_args.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/address_args.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { const ErrorCode: u64 = 100; #[test(a = @0x42)] @@ -19,4 +18,3 @@ module M { assert!(a == @0x43, 100); } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/arithmetic_errors.move b/external-crates/move/crates/move-unit-test/tests/test_sources/arithmetic_errors.move index 74185c75d5e20..d4a9cb199d735 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/arithmetic_errors.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/arithmetic_errors.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { #[test] #[expected_failure] fun u64_sub_underflow() { @@ -24,4 +23,3 @@ module M { 4294967296 * 4294967296; } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/construct_data.move b/external-crates/move/crates/move-unit-test/tests/test_sources/construct_data.move index 7a6da03ba315f..8876a204089e9 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/construct_data.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/construct_data.move @@ -1,7 +1,6 @@ -address 0x1 { -module B { +module 0x1::B { #[test_only] - struct TestingStruct has drop { x: u64 } + public struct TestingStruct has drop { x: u64 } #[test_only] public fun construct_with_number(x: u64): TestingStruct { @@ -14,7 +13,7 @@ module B { } } -module M { +module 0x1::M { #[test_only] use 0x1::B; @@ -30,4 +29,3 @@ module M { assert!(B::get_struct_x_field(&s) != 0, 0); } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.exp b/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.exp index d2d0ae63e60c7..6e7e37be0ed86 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.exp +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.exp @@ -8,16 +8,16 @@ Failures in 0x1::B: ┌── failing_test ────── │ error[E11001]: test failure -│ ┌─ cross_module_aborts.move:5:9 +│ ┌─ cross_module_aborts.move:4:9 │ │ -│ 4 │ public fun this_aborts() { +│ 3 │ public fun this_aborts() { │ │ ----------- In this function in 0x1::M -│ 5 │ abort 0 +│ 4 │ abort 0 │ │ ^^^^^^^ Test was not expected to error, but it aborted with code 0 originating in the module 0x1::M rooted here │ │ │ stack trace -│ B::failing_test(tests/test_sources/cross_module_aborts.move:19) +│ B::failing_test(tests/test_sources/cross_module_aborts.move:18) │ └────────────────── diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.move b/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.move index 519690185ebb0..2ab099fc48c06 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/cross_module_aborts.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { #[test_only] public fun this_aborts() { abort 0 @@ -9,7 +8,7 @@ module M { fun dummy_test() { } } -module B { +module 0x1::B { #[test_only] use 0x1::M; @@ -19,4 +18,3 @@ module B { M::this_aborts() } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/do_nothing.move b/external-crates/move/crates/move-unit-test/tests/test_sources/do_nothing.move index 8aa9bb708bd51..15fe4a72923ed 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/do_nothing.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/do_nothing.move @@ -1,6 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { #[test] fun do_nothing() {} } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/expected_abort_no_abort.move b/external-crates/move/crates/move-unit-test/tests/test_sources/expected_abort_no_abort.move index e7c022e8366b3..fc94d10c56240 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/expected_abort_no_abort.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/expected_abort_no_abort.move @@ -1,9 +1,7 @@ -address 0x1 { -module M { +module 0x1::M { #[test, expected_failure] fun fail() { } #[test, expected_failure(abort_code=0, location=0x1::M)] fun fail_with_code() { } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.exp b/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.exp index ad65b7f3924c6..e62e47b3f0368 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.exp +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.exp @@ -9,11 +9,11 @@ Failures in 0x1::A: ┌── native_abort_good_wrong_code ────── │ error[E11001]: test failure -│ ┌─ native_abort.move:12:9 +│ ┌─ native_abort.move:11:9 │ │ -│ 11 │ fun native_abort_good_wrong_code() { +│ 10 │ fun native_abort_good_wrong_code() { │ │ ---------------------------- In this function in 0x1::A -│ 12 │ vector::borrow(&vector::empty(), 1); +│ 11 │ vector::borrow(&vector::empty(), 1); │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Test did not error as expected. Expected test to give a vector operation error with sub-status 0 originating in the module 0x1::A but instead it gave a vector operation error with sub-status 1 originating in the module 0x1::A rooted here │ │ @@ -22,11 +22,11 @@ Failures in 0x1::A: ┌── native_abort_unexpected_abort ────── │ error[E11001]: test failure -│ ┌─ native_abort.move:6:9 +│ ┌─ native_abort.move:5:9 │ │ -│ 5 │ fun native_abort_unexpected_abort() { +│ 4 │ fun native_abort_unexpected_abort() { │ │ ----------------------------- In this function in 0x1::A -│ 6 │ vector::borrow(&vector::empty(), 1); +│ 5 │ vector::borrow(&vector::empty(), 1); │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Test was not expected to error, but it gave a vector operation error with sub-status 1 originating in the module 0x1::A rooted here │ │ diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.move b/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.move index ca5ec24c188de..53203d68f1a84 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/native_abort.move @@ -1,5 +1,4 @@ module 0x1::A { - use std::vector; #[test] fun native_abort_unexpected_abort() { diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/non_exsistent_native.move b/external-crates/move/crates/move-unit-test/tests/test_sources/non_exsistent_native.move index 2dd99823a43b4..b623fa3170c51 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/non_exsistent_native.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/non_exsistent_native.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { native fun foo(); #[test] @@ -7,4 +6,3 @@ module M { foo() } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/proposal_test.move b/external-crates/move/crates/move-unit-test/tests/test_sources/proposal_test.move index 4c5b0c42c7444..40d74305afa16 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/proposal_test.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/proposal_test.move @@ -1,13 +1,12 @@ // This is a test based on the example in the unit testing proposal -address 0x1 { -module TestonlyModule { +module 0x1::TestonlyModule { #[test_only] public fun aborts() { abort 42 } } -module Module { +module 0x1::Module { fun a(a: u64): bool { a == 10 } @@ -26,7 +25,7 @@ module Module { // A test only struct. This will only be included in test mode. #[test_only, allow(unused_field)] - struct C has drop, key, store { x: T } + public struct C has drop, key, store { x: T } #[test] // test entry point. fun tests_a() { // an actual test that will be run @@ -47,4 +46,3 @@ module Module { TestonlyModule::aborts() } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.exp b/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.exp index 08c535f42f67e..b4f7f0f84b3f6 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.exp +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.exp @@ -17,11 +17,11 @@ Failures in 0x1::M: ┌── single_signer_fail ────── │ error[E11001]: test failure -│ ┌─ signer_args.move:9:9 +│ ┌─ signer_args.move:8:9 │ │ -│ 8 │ fun single_signer_fail(_a: signer) { +│ 7 │ fun single_signer_fail(_a: signer) { │ │ ------------------ In this function in 0x1::M -│ 9 │ abort 0 +│ 8 │ abort 0 │ │ ^^^^^^^ Test was not expected to error, but it aborted with code 0 originating in the module 0x1::M rooted here │ │ diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.move b/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.move index 7b8edcb5dd3e0..9da46ca0a99e5 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/signer_args.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { #[test(_a=@0x1)] fun single_signer_pass(_a: signer) { } @@ -20,13 +19,8 @@ module M { abort 0 } - #[test_only] - use std::signer; - #[test(a=@0x1, b=@0x2)] fun test_correct_signer_arg_addrs(a: signer, b: signer) { - assert!(signer::address_of(&a) == @0x1, 0); - assert!(signer::address_of(&b) == @0x2, 1); + assert!(a != b) } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.exp b/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.exp index 9fe952826d7eb..05c32d5cdd88e 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.exp +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.exp @@ -11,9 +11,9 @@ Failures in 0x1::M: ┌── no_timeout_fail ────── │ error[E11001]: test failure -│ ┌─ timeout.move:18:29 +│ ┌─ timeout.move:17:29 │ │ -│ 18 │ fun no_timeout_fail() { abort 0 } +│ 17 │ fun no_timeout_fail() { abort 0 } │ │ --------------- ^^^^^^^ Test was not expected to error, but it aborted with code 0 originating in the module 0x1::M rooted here │ │ │ │ │ In this function in 0x1::M diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.move b/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.move index 1c045830269af..b772e68a35d88 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/timeout.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { #[test] fun timeout_fail() { while (true) {} @@ -19,10 +18,9 @@ module M { #[test] fun no_timeout_while_loop() { - let i = 0; + let mut i = 0; while (i < 10) { i = i + 1; }; } } -} diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.exp b/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.exp index ea763695bbc0e..7aeae31d736f8 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.exp +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.exp @@ -12,11 +12,11 @@ Failures in 0x1::M: ┌── unexpected_abort ────── │ error[E11001]: test failure -│ ┌─ unexpected_abort.move:5:9 +│ ┌─ unexpected_abort.move:4:9 │ │ -│ 4 │ public fun unexpected_abort() { +│ 3 │ public fun unexpected_abort() { │ │ ---------------- In this function in 0x1::M -│ 5 │ abort 0 +│ 4 │ abort 0 │ │ ^^^^^^^ Test was not expected to error, but it aborted with code 0 originating in the module 0x1::M rooted here │ │ @@ -25,45 +25,45 @@ Failures in 0x1::M: ┌── unexpected_abort_in_native_function ────── │ error[E11001]: test failure -│ ┌─ string.move:92:16 -│ │ -│ 92 │ native fun internal_sub_string(v: &vector, i: u64, j: u64): vector; -│ │ ^^^^^^^^^^^^^^^^^^^ -│ │ │ -│ │ Test was not expected to error, but it aborted with code 1 originating in the module std::string rooted here -│ │ In this function in std::string +│ ┌─ string.move:120:16 +│ │ +│ 120 │ native fun internal_sub_string(v: &vector, i: u64, j: u64): vector; +│ │ ^^^^^^^^^^^^^^^^^^^ +│ │ │ +│ │ Test was not expected to error, but it aborted with code 1 originating in the module std::string rooted here +│ │ In this function in std::string │ │ │ stack trace -│ M::abort_in_native(tests/test_sources/unexpected_abort.move:43) -│ M::unexpected_abort_in_native_function(tests/test_sources/unexpected_abort.move:39) +│ M::abort_in_native(tests/test_sources/unexpected_abort.move:42) +│ M::unexpected_abort_in_native_function(tests/test_sources/unexpected_abort.move:38) │ └────────────────── ┌── unexpected_abort_in_other_function ────── │ error[E11001]: test failure -│ ┌─ unexpected_abort.move:28:9 +│ ┌─ unexpected_abort.move:27:9 │ │ -│ 27 │ fun abort_in_other_function() { +│ 26 │ fun abort_in_other_function() { │ │ ----------------------- In this function in 0x1::M -│ 28 │ abort 1 +│ 27 │ abort 1 │ │ ^^^^^^^ Test was not expected to error, but it aborted with code 1 originating in the module 0x1::M rooted here │ │ │ stack trace -│ M::unexpected_abort_in_other_function(tests/test_sources/unexpected_abort.move:33) +│ M::unexpected_abort_in_other_function(tests/test_sources/unexpected_abort.move:32) │ └────────────────── ┌── wrong_abort_code ────── │ error[E11001]: test failure -│ ┌─ unexpected_abort.move:11:9 +│ ┌─ unexpected_abort.move:10:9 │ │ -│ 10 │ public fun wrong_abort_code() { +│ 9 │ public fun wrong_abort_code() { │ │ ---------------- In this function in 0x1::M -│ 11 │ abort 0 +│ 10 │ abort 0 │ │ ^^^^^^^ Test did not error as expected. Expected test to abort with code 1 originating in the module 0x1::M but instead it aborted with code 0 originating in the module 0x1::M rooted here │ │ diff --git a/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.move b/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.move index 2eaa062d07abc..1b81628abfd15 100644 --- a/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.move +++ b/external-crates/move/crates/move-unit-test/tests/test_sources/unexpected_abort.move @@ -1,5 +1,4 @@ -address 0x1 { -module M { +module 0x1::M { #[test] public fun unexpected_abort() { abort 0 @@ -43,4 +42,3 @@ module M { std::string::internal_sub_string_for_testing(&vector[0], 1, 0); } } -} diff --git a/external-crates/move/crates/move-vm-integration-tests/Cargo.toml b/external-crates/move/crates/move-vm-integration-tests/Cargo.toml index 0df741d16e3dc..370d32a3e43e0 100644 --- a/external-crates/move/crates/move-vm-integration-tests/Cargo.toml +++ b/external-crates/move/crates/move-vm-integration-tests/Cargo.toml @@ -18,7 +18,7 @@ tempfile.workspace = true memory-stats = "1.0.0" move-core-types.workspace = true -move-binary-format.workspace = true +move-binary-format = { workspace = true, features = ["fuzzing"] } move-bytecode-verifier.workspace = true move-compiler.workspace = true move-vm-config.workspace = true diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/binary_format_version.rs b/external-crates/move/crates/move-vm-integration-tests/src/tests/binary_format_version.rs index 11490fe82b292..7a39280c5997e 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/binary_format_version.rs +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/binary_format_version.rs @@ -23,6 +23,7 @@ fn test_publish_module_with_custom_max_binary_format_version() { let vm = MoveVM::new(move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent debug */ true, )) .unwrap(); let mut sess = vm.new_session(&storage); @@ -55,6 +56,7 @@ fn test_publish_module_with_custom_max_binary_format_version() { move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent debug */ true, ), vm_config, ) diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/depth_tests_modules.move b/external-crates/move/crates/move-vm-integration-tests/src/tests/depth_tests_modules.move index 22f0c4c9fc5b3..639d337290280 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/depth_tests_modules.move +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/depth_tests_modules.move @@ -1,61 +1,60 @@ -address 0x2 { -module A { - struct S has copy, drop { +module 0x2::A { + public struct S has copy, drop { f1: 0x2::B::S, f2: 0x2::C::S, } - struct Box has copy, drop, store { x: T } - struct Box3 has copy, drop, store { x: Box> } - struct Box7 has copy, drop, store { x: Box3> } - struct Box15 has copy, drop, store { x: Box7> } - struct Box31 has copy, drop, store { x: Box15> } - struct Box63 has copy, drop, store { x: Box31> } - struct Box127 has copy, drop, store { x: Box63> } + public struct Box has copy, drop, store { x: T } + public struct Box3 has copy, drop, store { x: Box> } + public struct Box7 has copy, drop, store { x: Box3> } + public struct Box15 has copy, drop, store { x: Box7> } + public struct Box31 has copy, drop, store { x: Box15> } + public struct Box63 has copy, drop, store { x: Box31> } + public struct Box127 has copy, drop, store { x: Box63> } } -module B { - struct S has copy, drop { +module 0x2::B { + public struct S has copy, drop { f1: u64, f2: u128, } } -module C { - struct S has copy, drop { +module 0x2::C { + public struct S has copy, drop { f1: address, f2: bool, } } -module D { - struct S has copy, drop { +module 0x2::D { + public struct S has copy, drop { f1: 0x2::B::S, } } -module E { - struct S has copy, drop { +module 0x2::E { + public struct S has copy, drop { f1: 0x2::F::S, f2: u64, } } -module F { - struct S has copy, drop { +module 0x2::F { + public struct S has copy, drop { f1: T, f2: u64, } } -module G { - struct S has copy, drop { +module 0x2::G { + public struct S has copy, drop { f1: 0x2::H::S, f2: u64, } } -module H { - struct S has copy, drop { +module 0x2::H { + public struct S has copy, drop { f1: 0x2::F::S, f2: 0x2::E::S, f3: 0x2::E::S<0x2::F::S>, @@ -65,8 +64,8 @@ module H { } } -module I { - struct S { +module 0x2::I { + public struct S { f1: F, f2: E, f3: E>, @@ -77,37 +76,36 @@ module I { f8: u64, } - struct E { + public struct E { f1: F, f2: u64, } - struct F { + public struct F { f1: T, f2: u64, } - struct H { + public struct H { f1: T, f2: u64, } - struct G { + public struct G { f: H, } - struct L { + public struct L { g1: G, g2: H, } - struct LL { + public struct LL { g1: G, g2: H, } - struct N { + public struct N { f: u64 } } -} diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/function_arg_tests.rs b/external-crates/move/crates/move-vm-integration-tests/src/tests/function_arg_tests.rs index 1f11fa7376aef..1953109d2c136 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/function_arg_tests.rs +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/function_arg_tests.rs @@ -39,8 +39,8 @@ fn run( let code = format!( r#" module 0x{}::M {{ - struct Foo has copy, drop {{ x: u64 }} - struct Bar has copy, drop {{ x: T }} + public struct Foo has copy, drop {{ x: u64 }} + public struct Bar has copy, drop {{ x: T }} fun foo<{}>({}) {{ }} }} diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/loader_tests_modules.move b/external-crates/move/crates/move-vm-integration-tests/src/tests/loader_tests_modules.move index dcdc5a4764034..74d980a6c0e28 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/loader_tests_modules.move +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/loader_tests_modules.move @@ -1,173 +1,171 @@ -address 0x2 { - module A { - struct S has copy, drop { - f1: 0x2::B::S, - f2: 0x2::C::S, - } +module 0x2::A { + public struct S has copy, drop { + f1: 0x2::B::S, + f2: 0x2::C::S, + } - public fun new(f1: 0x2::B::S, f2: 0x2::C::S): S { - Self::S { f1, f2 } - } + public fun new(f1: 0x2::B::S, f2: 0x2::C::S): S { + Self::S { f1, f2 } + } - public fun destroy(v: S): (0x2::B::S, 0x2::C::S) { - let S { f1: v1, f2: v2 } = v; - (v1, v2) - } + public fun destroy(v: S): (0x2::B::S, 0x2::C::S) { + let S { f1: v1, f2: v2 } = v; + (v1, v2) + } - public fun entry_a() { - let i = 0; - while (i < 10) { - let b = 0x2::B::new(20, 100); - let c = 0x2::C::new(@0x42, true); - let another_b = 0x2::B::b_and_c(&b, c); - let (_, _) = 0x2::B::destroy(another_b); - let another_c = 0x2::C::new(@0x42, false); - 0x2::C::destroy(another_c); - i = i + 1; - } + public fun entry_a() { + let mut i = 0; + while (i < 10) { + let b = 0x2::B::new(20, 100); + let c = 0x2::C::new(@0x42, true); + let another_b = 0x2::B::b_and_c(&b, c); + let (_, _) = 0x2::B::destroy(another_b); + let another_c = 0x2::C::new(@0x42, false); + 0x2::C::destroy(another_c); + i = i + 1; } + } - public fun get_field_1(s: &S): 0x2::B::S { - *&s.f1 - } + public fun get_field_1(s: &S): 0x2::B::S { + *&s.f1 } +} - module B { - struct S has copy, drop { - f1: u64, - f2: u128, - } +module 0x2::B { + public struct S has copy, drop { + f1: u64, + f2: u128, + } - public fun new(v1: u64, v2: u128): S { S { f1: v1, f2: v2 } } + public fun new(v1: u64, v2: u128): S { S { f1: v1, f2: v2 } } - public fun destroy(v: S): (u64, u128) { - let S { f1: val1, f2: val2 } = v; - (val1, val2) - } + public fun destroy(v: S): (u64, u128) { + let S { f1: val1, f2: val2 } = v; + (val1, val2) + } - public fun b_and_c(b: &S, c: 0x2::C::S): S { - let _ = 0x2::C::destroy(c); - let another_b = S { - f1: 0, - f2: b.f2, - }; - another_b - } + public fun b_and_c(b: &S, c: 0x2::C::S): S { + let _ = 0x2::C::destroy(c); + let another_b = S { + f1: 0, + f2: b.f2, + }; + another_b } +} - module C { - struct S has copy, drop { - f1: address, - f2: bool, - } +module 0x2::C { + public struct S has copy, drop { + f1: address, + f2: bool, + } - public fun new(v1: address, v2: bool): S { - Self::S { - f1: v1, - f2: v2, - } + public fun new(v1: address, v2: bool): S { + Self::S { + f1: v1, + f2: v2, } + } - public fun destroy(v: S): address { - let S { f1: v1, f2: _ } = v; - v1 - } + public fun destroy(v: S): address { + let S { f1: v1, f2: _ } = v; + v1 + } - public fun just_c() { - let i = 0; - while (i < 10) { - let c = new(@0x0, false); - let S { f1: _, f2: _ } = c; - i = i + 1; - } + public fun just_c() { + let mut i = 0; + while (i < 10) { + let c = new(@0x0, false); + let S { f1: _, f2: _ } = c; + i = i + 1; } } +} - module D { - struct S has copy, drop { - f1: 0x2::B::S, - } +module 0x2::D { + public struct S has copy, drop { + f1: 0x2::B::S, + } - public fun new(): 0x2::D::S { - Self::S { - f1: 0x2::B::new(20, 100), - } + public fun new(): 0x2::D::S { + Self::S { + f1: 0x2::B::new(20, 100), } + } - public fun entry_d() { - let i = 0; - while (i < 10) { - let b = 0x2::B::new(20, 100); - let c = 0x2::C::new(@0x45, false); - let another_b = 0x2::B::b_and_c(&b, c); - let (_, _) = 0x2::B::destroy(another_b); - let another_c = 0x2::C::new(@0x46, true); - 0x2::C::destroy(another_c); - i = i + 1; - } + public fun entry_d() { + let mut i = 0; + while (i < 10) { + let b = 0x2::B::new(20, 100); + let c = 0x2::C::new(@0x45, false); + let another_b = 0x2::B::b_and_c(&b, c); + let (_, _) = 0x2::B::destroy(another_b); + let another_c = 0x2::C::new(@0x46, true); + 0x2::C::destroy(another_c); + i = i + 1; } } +} - module E { - struct S { - f1: u64, - } +module 0x2::E { + public struct S { + f1: u64, + } - public fun new(): 0x2::E::S { Self::S { f1: 20 } } - - public fun entry_e() { - let i = 0; - while (i < 10) { - let b = 0x2::B::new(20, 100); - let c = 0x2::C::new(@0x100, false); - let another_b = 0x2::B::b_and_c(&b, c); - let (_, _) = 0x2::B::destroy(another_b); - let another_c = 0x2::C::new(@0x101, true); - 0x2::C::destroy(another_c); - i = i + 1; - }; - } + public fun new(): 0x2::E::S { Self::S { f1: 20 } } + + public fun entry_e() { + let mut i = 0; + while (i < 10) { + let b = 0x2::B::new(20, 100); + let c = 0x2::C::new(@0x100, false); + let another_b = 0x2::B::b_and_c(&b, c); + let (_, _) = 0x2::B::destroy(another_b); + let another_c = 0x2::C::new(@0x101, true); + 0x2::C::destroy(another_c); + i = i + 1; + }; } +} - module F { - struct S { - f1: u64, - } +module 0x2::F { + public struct S { + f1: u64, + } - public fun new(): 0x2::F::S { Self::S { f1: 20 } } + public fun new(): 0x2::F::S { Self::S { f1: 20 } } - public fun entry_f() { - 0x2::A::entry_a(); - } + public fun entry_f() { + 0x2::A::entry_a(); } +} - module G { - struct S has copy, drop { - f1: u64, - f2: u128, - f3: u16, - f4: u32, - f5: u256 - } +module 0x2::G { + public struct S has copy, drop { + f1: u64, + f2: u128, + f3: u16, + f4: u32, + f5: u256 + } - public fun new(v1: u64, v2: u128, v3: u16, v4: u32, v5: u256): S { S { f1: v1, f2: v2, f3: v3, f4: v4, f5: v5 } } + public fun new(v1: u64, v2: u128, v3: u16, v4: u32, v5: u256): S { S { f1: v1, f2: v2, f3: v3, f4: v4, f5: v5 } } - public fun destroy(v: S): (u64, u128, u16, u32, u256) { - let S { f1: val1, f2: val2, f3: val3, f4: val4, f5: val5 } = v; - (val1, val2, val3, val4, val5) - } + public fun destroy(v: S): (u64, u128, u16, u32, u256) { + let S { f1: val1, f2: val2, f3: val3, f4: val4, f5: val5 } = v; + (val1, val2, val3, val4, val5) + } - public fun b_and_c(b: &S, c: 0x2::C::S): S { - let _ = 0x2::C::destroy(c); - let another_b = S { - f1: 0, - f2: b.f2, - f3: b.f3 + (b.f2 as u16), - f4: (b.f1 as u32), - f5: b.f5 - }; - another_b - } + public fun b_and_c(b: &S, c: 0x2::C::S): S { + let _ = 0x2::C::destroy(c); + let another_b = S { + f1: 0, + f2: b.f2, + f3: b.f3 + (b.f2 as u16), + f4: (b.f1 as u32), + f5: b.f5 + }; + another_b } } diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/nested_loop_tests.rs b/external-crates/move/crates/move-vm-integration-tests/src/tests/nested_loop_tests.rs index 633f0d4f15db6..05b5110ad5bad 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/nested_loop_tests.rs +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/nested_loop_tests.rs @@ -17,9 +17,9 @@ fn test_publish_module_with_nested_loops() { let code = r#" module {{ADDR}}::M { fun foo() { - let i = 0; + let mut i = 0; while (i < 10) { - let j = 0; + let mut j = 0; while (j < 10) { j = j + 1; }; @@ -42,6 +42,7 @@ fn test_publish_module_with_nested_loops() { move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent debug */ true, ), VMConfig { verifier: VerifierConfig { @@ -65,6 +66,7 @@ fn test_publish_module_with_nested_loops() { move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent debug */ true, ), VMConfig { verifier: VerifierConfig { diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_b_v1.move b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_b_v1.move index 2adcb5bdb6a41..bf93efa2b63d3 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_b_v1.move +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_b_v1.move @@ -1,6 +1,6 @@ /// Dependencies: [C v0+] module 0x2::b { - struct S { x: u64 } + public struct S { x: u64 } public fun b(): u64 { 0x2::c::c() * 0x2::c::d() diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v0.move b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v0.move index f099f126c4b47..6efe3748c3795 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v0.move +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v0.move @@ -1,6 +1,6 @@ /// Dependencies: [] module 0x2::c { - struct S { x: u64 } + public struct S { x: u64 } public fun c(): u64 { 42 diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v1.move b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v1.move index fecfe86940a76..b36c4e9549b78 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v1.move +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v1.move @@ -1,7 +1,7 @@ /// Dependencies: [] module 0x2::c { - struct S { x: u64 } - struct R { x: u64, y: u64 } + public struct S { x: u64 } + public struct R { x: u64, y: u64 } public fun c(): u64 { 43 diff --git a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v2.move b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v2.move index 2660fbbe6346e..ba0318bef1cfe 100644 --- a/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v2.move +++ b/external-crates/move/crates/move-vm-integration-tests/src/tests/relinking_tests_c_v2.move @@ -1,8 +1,8 @@ /// Dependencies: [] module 0x2::c { - struct S { x: u64 } - struct R { x: u64, y: u64 } - struct Q { x: u64, y: u64, z: u64 } + public struct S { x: u64 } + public struct R { x: u64, y: u64 } + public struct Q { x: u64, y: u64, z: u64 } public fun c(): u64 { 45 diff --git a/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.exp b/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.exp index 6cd67db3f6472..c23aa2b760be4 100644 --- a/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.exp +++ b/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.exp @@ -1 +1,5 @@ processed 1 task + +task 0, lines 1-8: +//# run --signers 0x1 +return values: { 0000000000000000000000000000000000000000000000000000000000000001 } diff --git a/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.mvir b/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.mvir index 3bc4def5fbcc9..d50e8c3015153 100644 --- a/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.mvir +++ b/external-crates/move/crates/move-vm-transactional-tests/tests/builtins/get_txn_sender.mvir @@ -1,14 +1,8 @@ //# run --signers 0x1 module 0x42.m { -import 0x1.signer; -entry foo(account: signer) { - let sender: address; - let addr: address; +entry foo(account: signer): signer { label b0: - sender = signer.address_of(&account); - addr = 0x1; - assert(copy(sender) == copy(addr), 42); - return; + return move(account); } } diff --git a/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.exp b/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.exp index 7dc107f50aff1..f2d3d9e9a0fdc 100644 --- a/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.exp +++ b/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.exp @@ -5,8 +5,8 @@ task 0, line 2: return values: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] task 1, line 4: -//# run std::signer::borrow_address --args @3735928559 -return values: 00000000000000000000000000000000000000000000000000000000deadbeef +//# run std::vector::borrow --type-args u64 --args vector[42] 0 +return values: 42 task 2, line 6: //# run std::type_name::get --type-args vector diff --git a/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.move b/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.move index 11de68abe0ba4..d471f44d41748 100644 --- a/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.move +++ b/external-crates/move/crates/move-vm-transactional-tests/tests/entry_points/call_native.move @@ -1,6 +1,6 @@ //# run std::bcs::to_bytes --type-args u256 --args 0u256 -//# run std::signer::borrow_address --args @3735928559 +//# run std::vector::borrow --type-args u64 --args vector[42] 0 //# run std::type_name::get --type-args vector diff --git a/external-crates/move/crates/test-generation/src/lib.rs b/external-crates/move/crates/test-generation/src/lib.rs index 0a7ee75176b71..4a4ce8449659a 100644 --- a/external-crates/move/crates/test-generation/src/lib.rs +++ b/external-crates/move/crates/test-generation/src/lib.rs @@ -135,6 +135,7 @@ fn execute_function_in_module( let vm = MoveVM::new(move_stdlib_natives::all_natives( AccountAddress::from_hex_literal("0x1").unwrap(), move_stdlib_natives::GasParameters::zeros(), + /* silent debug */ true, )) .unwrap(); diff --git a/sui-execution/latest/sui-adapter/src/execution_engine.rs b/sui-execution/latest/sui-adapter/src/execution_engine.rs index 60035e6806f60..306e2a9d25126 100644 --- a/sui-execution/latest/sui-adapter/src/execution_engine.rs +++ b/sui-execution/latest/sui-adapter/src/execution_engine.rs @@ -917,7 +917,7 @@ mod checked { if protocol_config.fresh_vm_on_framework_upgrade() { let new_vm = new_move_vm( - all_natives(/* silent */ true), + all_natives(/* silent */ true, protocol_config), protocol_config, /* enable_profiler */ None, ) diff --git a/sui-execution/latest/sui-move-natives/src/lib.rs b/sui-execution/latest/sui-move-natives/src/lib.rs index c129bf4e26539..36fb6865d69eb 100644 --- a/sui-execution/latest/sui-move-natives/src/lib.rs +++ b/sui-execution/latest/sui-move-natives/src/lib.rs @@ -51,7 +51,7 @@ use move_core_types::{ runtime_value as R, vm_status::StatusCode, }; -use move_stdlib_natives::{GasParameters, NurseryGasParameters}; +use move_stdlib_natives::{self as MSN, GasParameters}; use move_vm_runtime::native_functions::{NativeContext, NativeFunction, NativeFunctionTable}; use move_vm_types::{ loaded_data::runtime_types::Type, @@ -640,7 +640,111 @@ impl NativesCostTable { } } -pub fn all_natives(silent: bool) -> NativeFunctionTable { +pub fn make_stdlib_gas_params_for_protocol_config( + protocol_config: &ProtocolConfig, +) -> GasParameters { + macro_rules! get_gas_cost_or_default { + ($name: ident) => {{ + debug_assert!( + protocol_config.version.as_u64() < 53 || protocol_config.$name().is_some() + ); + protocol_config.$name().map(Into::into).unwrap_or(0.into()) + }}; + } + GasParameters::new( + MSN::bcs::GasParameters { + to_bytes: MSN::bcs::ToBytesGasParameters { + per_byte_serialized: get_gas_cost_or_default!( + bcs_per_byte_serialized_cost_as_option + ), + legacy_min_output_size: get_gas_cost_or_default!( + bcs_legacy_min_output_size_cost_as_option + ), + failure: get_gas_cost_or_default!(bcs_failure_cost_as_option), + }, + }, + MSN::debug::GasParameters { + print: MSN::debug::PrintGasParameters { + base_cost: get_gas_cost_or_default!(debug_print_base_cost_as_option), + }, + print_stack_trace: MSN::debug::PrintStackTraceGasParameters { + base_cost: get_gas_cost_or_default!(debug_print_stack_trace_base_cost_as_option), + }, + }, + MSN::hash::GasParameters { + sha2_256: MSN::hash::Sha2_256GasParameters { + base: get_gas_cost_or_default!(hash_sha2_256_base_cost_as_option), + per_byte: get_gas_cost_or_default!(hash_sha2_256_per_byte_cost_as_option), + legacy_min_input_len: get_gas_cost_or_default!( + hash_sha2_256_legacy_min_input_len_cost_as_option + ), + }, + sha3_256: MSN::hash::Sha3_256GasParameters { + base: get_gas_cost_or_default!(hash_sha3_256_base_cost_as_option), + per_byte: get_gas_cost_or_default!(hash_sha3_256_per_byte_cost_as_option), + legacy_min_input_len: get_gas_cost_or_default!( + hash_sha3_256_legacy_min_input_len_cost_as_option + ), + }, + }, + MSN::string::GasParameters { + check_utf8: MSN::string::CheckUtf8GasParameters { + base: get_gas_cost_or_default!(string_check_utf8_base_cost_as_option), + per_byte: get_gas_cost_or_default!(string_check_utf8_per_byte_cost_as_option), + }, + is_char_boundary: MSN::string::IsCharBoundaryGasParameters { + base: get_gas_cost_or_default!(string_is_char_boundary_base_cost_as_option), + }, + sub_string: MSN::string::SubStringGasParameters { + base: get_gas_cost_or_default!(string_sub_string_base_cost_as_option), + per_byte: get_gas_cost_or_default!(string_sub_string_per_byte_cost_as_option), + }, + index_of: MSN::string::IndexOfGasParameters { + base: get_gas_cost_or_default!(string_index_of_base_cost_as_option), + per_byte_pattern: get_gas_cost_or_default!( + string_index_of_per_byte_pattern_cost_as_option + ), + per_byte_searched: get_gas_cost_or_default!( + string_index_of_per_byte_searched_cost_as_option + ), + }, + }, + MSN::type_name::GasParameters { + get: MSN::type_name::GetGasParameters { + base: get_gas_cost_or_default!(type_name_get_base_cost_as_option), + per_byte: get_gas_cost_or_default!(type_name_get_per_byte_cost_as_option), + }, + }, + MSN::vector::GasParameters { + empty: MSN::vector::EmptyGasParameters { + base: get_gas_cost_or_default!(vector_empty_base_cost_as_option), + }, + length: MSN::vector::LengthGasParameters { + base: get_gas_cost_or_default!(vector_length_base_cost_as_option), + }, + push_back: MSN::vector::PushBackGasParameters { + base: get_gas_cost_or_default!(vector_push_back_base_cost_as_option), + legacy_per_abstract_memory_unit: get_gas_cost_or_default!( + vector_push_back_legacy_per_abstract_memory_unit_cost_as_option + ), + }, + borrow: MSN::vector::BorrowGasParameters { + base: get_gas_cost_or_default!(vector_borrow_base_cost_as_option), + }, + pop_back: MSN::vector::PopBackGasParameters { + base: get_gas_cost_or_default!(vector_pop_back_base_cost_as_option), + }, + destroy_empty: MSN::vector::DestroyEmptyGasParameters { + base: get_gas_cost_or_default!(vector_destroy_empty_base_cost_as_option), + }, + swap: MSN::vector::SwapGasParameters { + base: get_gas_cost_or_default!(vector_swap_base_cost_as_option), + }, + }, + ) +} + +pub fn all_natives(silent: bool, protocol_config: &ProtocolConfig) -> NativeFunctionTable { let sui_framework_natives: &[(&str, &str, NativeFunction)] = &[ ("address", "from_bytes", make_native!(address::from_bytes)), ("address", "to_u256", make_native!(address::to_u256)), @@ -966,14 +1070,8 @@ pub fn all_natives(silent: bool) -> NativeFunctionTable { .chain(sui_framework_natives_iter) .chain(move_stdlib_natives::all_natives( MOVE_STDLIB_ADDRESS, - // TODO: tune gas params - GasParameters::zeros(), - )) - .chain(move_stdlib_natives::nursery_natives( + make_stdlib_gas_params_for_protocol_config(protocol_config), silent, - MOVE_STDLIB_ADDRESS, - // TODO: tune gas params - NurseryGasParameters::zeros(), )) .collect() } diff --git a/sui-execution/src/latest.rs b/sui-execution/src/latest.rs index a9f165624b928..4fb142dda49b9 100644 --- a/sui-execution/src/latest.rs +++ b/sui-execution/src/latest.rs @@ -50,7 +50,7 @@ impl Executor { enable_profiler: Option, ) -> Result { Ok(Executor(Arc::new(new_move_vm( - all_natives(silent), + all_natives(silent, protocol_config), protocol_config, enable_profiler, )?))) From 8dba8d3518693ff76d1b42cae946218e1df5c0b7 Mon Sep 17 00:00:00 2001 From: Todd Nowacki Date: Mon, 29 Jul 2024 12:25:46 -0700 Subject: [PATCH 27/57] Cherry pick #18842 (#18845) ## Description - Cherry pick #18842 - Source only change, does not affect devnet/testnet or any other build ## Test plan - CI --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: --- .../sui-framework/packages/move-stdlib/sources/vector.move | 2 +- .../packages/move-stdlib/tests/vector_tests.move | 5 +++++ .../move/crates/move-analyzer/tests/dot_completion.exp | 2 +- external-crates/move/crates/move-stdlib/sources/vector.move | 2 +- .../move/crates/move-stdlib/tests/vector_tests.move | 5 +++++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/sui-framework/packages/move-stdlib/sources/vector.move b/crates/sui-framework/packages/move-stdlib/sources/vector.move index cd98ed0ae7955..55c1abac34b74 100644 --- a/crates/sui-framework/packages/move-stdlib/sources/vector.move +++ b/crates/sui-framework/packages/move-stdlib/sources/vector.move @@ -238,7 +238,7 @@ module std::vector { /// Finds the index of first element in the vector `v` that satisfies the predicate `f`. /// Returns `some(index)` if such an element is found, otherwise `none()`. - public macro fun find_index<$T>($v: vector<$T>, $f: |&$T| -> bool): Option { + public macro fun find_index<$T>($v: &vector<$T>, $f: |&$T| -> bool): Option { let v = $v; 'find_index: { v.length().do!(|i| if ($f(&v[i])) return 'find_index option::some(i)); diff --git a/crates/sui-framework/packages/move-stdlib/tests/vector_tests.move b/crates/sui-framework/packages/move-stdlib/tests/vector_tests.move index 2bb76d6310017..3aac6ef5b4e5f 100644 --- a/crates/sui-framework/packages/move-stdlib/tests/vector_tests.move +++ b/crates/sui-framework/packages/move-stdlib/tests/vector_tests.move @@ -677,6 +677,11 @@ module std::vector_tests { let r = vector[0, 10, 100, 1_000]; assert!(r.find_index!(|e| *e == 100).destroy_some() == 2); assert!(r.find_index!(|e| *e == 10_000).is_none()); + + let v = vector[Droppable{}, Droppable{}]; + let idx = v.find_index!(|e| e == Droppable{}); + assert!(idx.destroy_some() == 0); + assert!(&v[idx.destroy_some()] == Droppable{}); } #[test] diff --git a/external-crates/move/crates/move-analyzer/tests/dot_completion.exp b/external-crates/move/crates/move-analyzer/tests/dot_completion.exp index ad426b6f92568..547bc99ee900a 100644 --- a/external-crates/move/crates/move-analyzer/tests/dot_completion.exp +++ b/external-crates/move/crates/move-analyzer/tests/dot_completion.exp @@ -107,7 +107,7 @@ Method 'filter!()' Method 'find_index!()' INSERT TEXT: 'find_index!(|${1}| ${2})' TARGET : '(std::vector::find_index)' - TYPE : 'fun <$T>(vector<$T>, |&$T| -> bool): Option' + TYPE : 'fun <$T>(&vector<$T>, |&$T| -> bool): Option' Method 'fold!()' INSERT TEXT: 'fold!(${1:init}, |${2}, ${3}| ${4})' TARGET : '(std::vector::fold)' diff --git a/external-crates/move/crates/move-stdlib/sources/vector.move b/external-crates/move/crates/move-stdlib/sources/vector.move index cd98ed0ae7955..55c1abac34b74 100644 --- a/external-crates/move/crates/move-stdlib/sources/vector.move +++ b/external-crates/move/crates/move-stdlib/sources/vector.move @@ -238,7 +238,7 @@ module std::vector { /// Finds the index of first element in the vector `v` that satisfies the predicate `f`. /// Returns `some(index)` if such an element is found, otherwise `none()`. - public macro fun find_index<$T>($v: vector<$T>, $f: |&$T| -> bool): Option { + public macro fun find_index<$T>($v: &vector<$T>, $f: |&$T| -> bool): Option { let v = $v; 'find_index: { v.length().do!(|i| if ($f(&v[i])) return 'find_index option::some(i)); diff --git a/external-crates/move/crates/move-stdlib/tests/vector_tests.move b/external-crates/move/crates/move-stdlib/tests/vector_tests.move index 2bb76d6310017..3aac6ef5b4e5f 100644 --- a/external-crates/move/crates/move-stdlib/tests/vector_tests.move +++ b/external-crates/move/crates/move-stdlib/tests/vector_tests.move @@ -677,6 +677,11 @@ module std::vector_tests { let r = vector[0, 10, 100, 1_000]; assert!(r.find_index!(|e| *e == 100).destroy_some() == 2); assert!(r.find_index!(|e| *e == 10_000).is_none()); + + let v = vector[Droppable{}, Droppable{}]; + let idx = v.find_index!(|e| e == Droppable{}); + assert!(idx.destroy_some() == 0); + assert!(&v[idx.destroy_some()] == Droppable{}); } #[test] From a4185da5659d8d299d34e1bb2515ff1f7e32a20a Mon Sep 17 00:00:00 2001 From: Eugene Boguslavsky Date: Mon, 29 Jul 2024 19:42:56 +0000 Subject: [PATCH 28/57] Sui v1.30.1 version bump --- Cargo.lock | 112 +++++++++++++------------- Cargo.toml | 2 +- crates/sui-open-rpc/spec/openrpc.json | 2 +- 3 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3d2e77e5b25e9..3fccfeaa82348 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1824,7 +1824,7 @@ checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b" [[package]] name = "bin-version" -version = "1.30.0" +version = "1.30.1" dependencies = [ "const-str", "git-version", @@ -12075,7 +12075,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "sui" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anemo", "anyhow", @@ -12146,7 +12146,7 @@ dependencies = [ "sui-package-management", "sui-protocol-config", "sui-replay", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-simulator", "sui-source-validation", "sui-swarm", @@ -12290,7 +12290,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "arrow", @@ -12344,7 +12344,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer-derive" -version = "1.30.0" +version = "1.30.1" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -12353,7 +12353,7 @@ dependencies = [ [[package]] name = "sui-archival" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "byteorder", @@ -12461,7 +12461,7 @@ dependencies = [ "sui-macros", "sui-network", "sui-protocol-config", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-simulator", "sui-storage", "sui-surfer", @@ -12479,7 +12479,7 @@ dependencies = [ [[package]] name = "sui-bridge" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "arc-swap", @@ -12514,7 +12514,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-test-transaction-builder", "sui-types", "tap", @@ -12530,7 +12530,7 @@ dependencies = [ [[package]] name = "sui-bridge-cli" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "clap", @@ -12547,7 +12547,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", "telemetry-subscribers", "tokio", @@ -12576,7 +12576,7 @@ dependencies = [ "sui-config", "sui-data-ingestion-core", "sui-json-rpc-types", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-test-transaction-builder", "sui-types", "tap", @@ -12588,7 +12588,7 @@ dependencies = [ [[package]] name = "sui-cluster-test" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -12612,7 +12612,7 @@ dependencies = [ "sui-json", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-swarm", "sui-swarm-config", "sui-test-transaction-builder", @@ -12788,7 +12788,7 @@ dependencies = [ [[package]] name = "sui-data-ingestion" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -12850,7 +12850,7 @@ dependencies = [ [[package]] name = "sui-e2e-tests" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "assert_cmd", @@ -12894,7 +12894,7 @@ dependencies = [ "sui-node", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-simulator", "sui-storage", "sui-swarm", @@ -12967,7 +12967,7 @@ dependencies = [ [[package]] name = "sui-faucet" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-recursion", @@ -12987,7 +12987,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", "tap", "telemetry-subscribers", @@ -13025,7 +13025,7 @@ dependencies = [ [[package]] name = "sui-framework-snapshot" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "bcs", @@ -13087,7 +13087,7 @@ dependencies = [ [[package]] name = "sui-graphql-config" -version = "1.30.0" +version = "1.30.1" dependencies = [ "quote 1.0.35", "syn 1.0.107", @@ -13164,7 +13164,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-swarm-config", "sui-test-transaction-builder", "sui-types", @@ -13204,7 +13204,7 @@ dependencies = [ [[package]] name = "sui-indexer" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -13247,7 +13247,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-test-transaction-builder", "sui-transaction-builder", "sui-types", @@ -13380,7 +13380,7 @@ dependencies = [ "sui-open-rpc", "sui-open-rpc-macros", "sui-protocol-config", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-simulator", "sui-swarm-config", "sui-test-transaction-builder", @@ -13441,7 +13441,7 @@ dependencies = [ [[package]] name = "sui-light-client" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -13458,7 +13458,7 @@ dependencies = [ "sui-json-rpc-types", "sui-package-resolver", "sui-rest-api", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", "tokio", ] @@ -13475,7 +13475,7 @@ dependencies = [ [[package]] name = "sui-metric-checker" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "backoff", @@ -13496,7 +13496,7 @@ dependencies = [ [[package]] name = "sui-move" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "assert_cmd", @@ -13538,7 +13538,7 @@ dependencies = [ [[package]] name = "sui-move-build" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "datatest-stable", @@ -13562,7 +13562,7 @@ dependencies = [ [[package]] name = "sui-move-lsp" -version = "1.30.0" +version = "1.30.1" dependencies = [ "bin-version", "clap", @@ -13692,7 +13692,7 @@ dependencies = [ [[package]] name = "sui-node" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anemo", "anemo-tower", @@ -13743,7 +13743,7 @@ dependencies = [ [[package]] name = "sui-open-rpc" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "bcs", @@ -13779,7 +13779,7 @@ dependencies = [ [[package]] name = "sui-oracle" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "bcs", @@ -13799,7 +13799,7 @@ dependencies = [ "sui-json-rpc-types", "sui-keys", "sui-move-build", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", "tap", "telemetry-subscribers", @@ -13809,14 +13809,14 @@ dependencies = [ [[package]] name = "sui-package-management" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "move-core-types", "move-package", "move-symbol-pool", "sui-json-rpc-types", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", "tracing", ] @@ -13958,7 +13958,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-protocol-config", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-storage", "sui-transaction-checks", "sui-types", @@ -14002,7 +14002,7 @@ dependencies = [ [[package]] name = "sui-rosetta" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -14030,7 +14030,7 @@ dependencies = [ "sui-keys", "sui-move-build", "sui-node", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-swarm-config", "sui-types", "telemetry-subscribers", @@ -14044,7 +14044,7 @@ dependencies = [ [[package]] name = "sui-rpc-loadgen" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -14062,7 +14062,7 @@ dependencies = [ "sui-json-rpc", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", "telemetry-subscribers", "test-cluster", @@ -14093,7 +14093,7 @@ dependencies = [ [[package]] name = "sui-sdk" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-recursion", @@ -14129,7 +14129,7 @@ dependencies = [ [[package]] name = "sui-security-watchdog" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "arrow-array", @@ -14176,7 +14176,7 @@ dependencies = [ [[package]] name = "sui-single-node-benchmark" -version = "1.30.0" +version = "1.30.1" dependencies = [ "async-trait", "bcs", @@ -14238,7 +14238,7 @@ dependencies = [ [[package]] name = "sui-source-validation" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "colored", @@ -14255,7 +14255,7 @@ dependencies = [ "rand 0.8.5", "sui-json-rpc-types", "sui-move-build", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-test-transaction-builder", "sui-types", "tar", @@ -14291,7 +14291,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move", "sui-move-build", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-source-validation", "telemetry-subscribers", "tempfile", @@ -14363,7 +14363,7 @@ dependencies = [ [[package]] name = "sui-surfer" -version = "1.30.0" +version = "1.30.1" dependencies = [ "async-trait", "bcs", @@ -14461,13 +14461,13 @@ dependencies = [ "shared-crypto", "sui-genesis-builder", "sui-move-build", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-types", ] [[package]] name = "sui-test-validator" -version = "1.30.0" +version = "1.30.1" [[package]] name = "sui-tls" @@ -14492,7 +14492,7 @@ dependencies = [ [[package]] name = "sui-tool" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anemo", "anemo-cli", @@ -14528,7 +14528,7 @@ dependencies = [ "sui-network", "sui-protocol-config", "sui-replay", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-snapshot", "sui-storage", "sui-types", @@ -14782,7 +14782,7 @@ dependencies = [ [[package]] name = "suins-indexer" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "async-trait", @@ -15140,7 +15140,7 @@ dependencies = [ "sui-macros", "sui-node", "sui-protocol-config", - "sui-sdk 1.30.0", + "sui-sdk 1.30.1", "sui-simulator", "sui-swarm", "sui-swarm-config", @@ -16904,7 +16904,7 @@ dependencies = [ [[package]] name = "x" -version = "1.30.0" +version = "1.30.1" dependencies = [ "anyhow", "camino", diff --git a/Cargo.toml b/Cargo.toml index eae984ca47082..0f26cbc43a967 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -198,7 +198,7 @@ members = [ [workspace.package] # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates. -version = "1.30.0" +version = "1.30.1" [profile.release] # debug = 1 means line charts only, which is minimum needed for good stack traces diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index 2935b547a40cd..6a558b1f5e13c 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -12,7 +12,7 @@ "name": "Apache-2.0", "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE" }, - "version": "1.30.0" + "version": "1.30.1" }, "methods": [ { From 3e3725435661a7bfcf4d17b4b97484a64ccc06e0 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:14:45 +0200 Subject: [PATCH 29/57] comment out deps --- Cargo.lock | 4274 ++----------------------------------------- Cargo.toml | 277 +-- rust-toolchain.toml | 2 +- 3 files changed, 327 insertions(+), 4226 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37a27419ed33d..e204d9e3ac53c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -91,8 +91,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107" dependencies = [ "cfg-if", - "const-random", - "getrandom 0.2.9", "once_cell", "version_check", ] @@ -166,7 +164,7 @@ dependencies = [ "async-trait", "bincode", "bytes", - "ed25519 1.5.3", + "ed25519", "futures", "hex", "http", @@ -192,19 +190,6 @@ dependencies = [ "x509-parser", ] -[[package]] -name = "anemo-benchmark" -version = "0.0.0" -dependencies = [ - "anemo", - "anemo-build", - "clap", - "mysten-network", - "rand 0.8.5", - "telemetry-subscribers", - "tokio", -] - [[package]] name = "anemo-build" version = "0.0.0" @@ -216,22 +201,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "anemo-cli" -version = "0.0.0" -source = "git+https://github.com/mystenlabs/anemo.git?rev=26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7#26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" -dependencies = [ - "anemo", - "anemo-tower", - "bytes", - "clap", - "dashmap", - "rand 0.8.5", - "tokio", - "tower", - "tracing", -] - [[package]] name = "anemo-tower" version = "0.0.0" @@ -256,15 +225,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anstream" version = "0.6.13" @@ -542,236 +502,12 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "arrayvec" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" -[[package]] -name = "arrow" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa285343fba4d829d49985bdc541e3789cf6000ed0e84be7c039438df4a4e78c" -dependencies = [ - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-csv", - "arrow-data", - "arrow-ipc", - "arrow-json", - "arrow-ord", - "arrow-row", - "arrow-schema", - "arrow-select", - "arrow-string", -] - -[[package]] -name = "arrow-arith" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "753abd0a5290c1bcade7c6623a556f7d1659c5f4148b140b5b63ce7bd1a45705" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "chrono", - "half 2.3.1", - "num", -] - -[[package]] -name = "arrow-array" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d390feeb7f21b78ec997a4081a025baef1e2e0d6069e181939b61864c9779609" -dependencies = [ - "ahash 0.8.2", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "chrono", - "half 2.3.1", - "hashbrown 0.14.1", - "num", -] - -[[package]] -name = "arrow-buffer" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69615b061701bcdffbc62756bc7e85c827d5290b472b580c972ebbbf690f5aa4" -dependencies = [ - "bytes", - "half 2.3.1", - "num", -] - -[[package]] -name = "arrow-cast" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e448e5dd2f4113bf5b74a1f26531708f5edcacc77335b7066f9398f4bcf4cdef" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "base64 0.21.2", - "chrono", - "half 2.3.1", - "lexical-core", - "num", -] - -[[package]] -name = "arrow-csv" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46af72211f0712612f5b18325530b9ad1bfbdc87290d5fbfd32a7da128983781" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-schema", - "chrono", - "csv", - "csv-core", - "lazy_static", - "lexical-core", - "regex", -] - -[[package]] -name = "arrow-data" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67d644b91a162f3ad3135ce1184d0a31c28b816a581e08f29e8e9277a574c64e" -dependencies = [ - "arrow-buffer", - "arrow-schema", - "half 2.3.1", - "num", -] - -[[package]] -name = "arrow-ipc" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03dea5e79b48de6c2e04f03f62b0afea7105be7b77d134f6c5414868feefb80d" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-schema", - "flatbuffers", -] - -[[package]] -name = "arrow-json" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8950719280397a47d37ac01492e3506a8a724b3fb81001900b866637a829ee0f" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-schema", - "chrono", - "half 2.3.1", - "indexmap 2.2.6", - "lexical-core", - "num", - "serde", - "serde_json", -] - -[[package]] -name = "arrow-ord" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed9630979034077982d8e74a942b7ac228f33dd93a93b615b4d02ad60c260be" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "half 2.3.1", - "num", -] - -[[package]] -name = "arrow-row" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007035e17ae09c4e8993e4cb8b5b96edf0afb927cd38e2dff27189b274d83dcf" -dependencies = [ - "ahash 0.8.2", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "half 2.3.1", - "hashbrown 0.14.1", -] - -[[package]] -name = "arrow-schema" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ff3e9c01f7cd169379d269f926892d0e622a704960350d09d331be3ec9e0029" - -[[package]] -name = "arrow-select" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce20973c1912de6514348e064829e50947e35977bb9d7fb637dc99ea9ffd78c" -dependencies = [ - "ahash 0.8.2", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "num", -] - -[[package]] -name = "arrow-string" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f3b37f2aeece31a2636d1b037dabb69ef590e03bdc7eb68519b51ec86932a7" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "num", - "regex", - "regex-syntax 0.8.2", -] - -[[package]] -name = "ascii_utils" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" - [[package]] name = "asn1-rs" version = "0.5.1" @@ -839,118 +575,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "async-compression" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" -dependencies = [ - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-graphql" -version = "6.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1addb0b551c59640e15de99e7566a4e3a1186cf42269e160c485ba6d8b43fe30" -dependencies = [ - "async-graphql-derive", - "async-graphql-parser", - "async-graphql-value", - "async-stream", - "async-trait", - "base64 0.13.1", - "bytes", - "chrono", - "fast_chemail", - "fnv", - "futures-channel", - "futures-timer", - "futures-util", - "handlebars", - "http", - "indexmap 2.2.6", - "lru 0.7.8", - "mime", - "multer", - "num-traits", - "once_cell", - "opentelemetry 0.19.0", - "pin-project-lite", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "static_assertions", - "tempfile", - "thiserror", - "tracing", - "tracing-futures", -] - -[[package]] -name = "async-graphql-axum" -version = "6.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c21af134ab9419aae6658298f819a28e4737ac81f96cde8008f9d49db1802662" -dependencies = [ - "async-graphql", - "async-trait", - "axum", - "bytes", - "futures-util", - "serde_json", - "tokio", - "tokio-stream", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-service", -] - -[[package]] -name = "async-graphql-derive" -version = "6.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1121ff0be2feea705c24f6940162c4f14a077e50a217b16e091e6534a8c08a" -dependencies = [ - "Inflector", - "async-graphql-parser", - "darling 0.20.3", - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "strum 0.25.0", - "syn 2.0.48", - "thiserror", -] - -[[package]] -name = "async-graphql-parser" -version = "6.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b6713fd4ffd610b8b6f6e911bf31277cbb84b7c2a9cdeeb39d1b3eed3b88e4" -dependencies = [ - "async-graphql-value", - "pest", - "serde", - "serde_json", -] - -[[package]] -name = "async-graphql-value" -version = "6.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d74240f9daa8c1e8f73e9cfcc338d20a88d00bbeb83ded49ce8e5b4dcec0f5" -dependencies = [ - "bytes", - "indexmap 2.2.6", - "serde", - "serde_json", -] - [[package]] name = "async-lock" version = "2.6.0" @@ -1026,35 +650,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ce4f10ea3abcd6617873bae9f91d1c5332b4a778bd9ce34d0cd517474c1de82" -[[package]] -name = "asynchronous-codec" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite", -] - [[package]] name = "atomic_float" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62af46d040ba9df09edc6528dae9d8e49f5f3e82f55b7d2ec31a733c38dbc49d" -[[package]] -name = "atomicwrites" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8f2cd6962fa53c0e2a9d3f97eaa7dbd1e3cbbeeb4745403515b42ae07b3ff6" -dependencies = [ - "tempfile", - "winapi", -] - [[package]] name = "auto_impl" version = "1.1.0" @@ -1199,61 +800,35 @@ dependencies = [ ] [[package]] -name = "aws-sdk-ec2" +name = "aws-sdk-s3" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f098f12b70166afd023949291df62f7f716cb5866ac4256178cd3321d1b1b" +checksum = "1e30370b61599168d38190ad272bb91842cd81870a6ca035c05dd5726d22832c" dependencies = [ "aws-credential-types", "aws-http", "aws-runtime", + "aws-sigv4", "aws-smithy-async", + "aws-smithy-checksums", "aws-smithy-client", + "aws-smithy-eventstream", "aws-smithy-http", "aws-smithy-json", - "aws-smithy-query", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", "aws-smithy-xml", "aws-types", - "fastrand 2.0.0", + "bytes", "http", + "http-body", + "once_cell", + "percent-encoding", "regex", "tokio-stream", "tracing", -] - -[[package]] -name = "aws-sdk-s3" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e30370b61599168d38190ad272bb91842cd81870a6ca035c05dd5726d22832c" -dependencies = [ - "aws-credential-types", - "aws-http", - "aws-runtime", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-checksums", - "aws-smithy-client", - "aws-smithy-eventstream", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "bytes", - "http", - "http-body", - "once_cell", - "percent-encoding", - "regex", - "tokio-stream", - "tracing", - "url", + "url", ] [[package]] @@ -1315,7 +890,7 @@ dependencies = [ "bytes", "form_urlencoded", "hex", - "hmac 0.12.1", + "hmac", "http", "once_cell", "percent-encoding", @@ -1351,7 +926,7 @@ dependencies = [ "hex", "http", "http-body", - "md-5 0.10.5", + "md-5", "pin-project-lite", "sha1", "sha2 0.10.6", @@ -1580,25 +1155,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "axum-extra" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a320103719de37b7b4da4c8eb629d4573f6bcfd3dfe80d3208806895ccf81d" -dependencies = [ - "axum", - "bytes", - "futures-util", - "http", - "mime", - "pin-project-lite", - "tokio", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - [[package]] name = "axum-server" version = "0.5.1" @@ -1648,15 +1204,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "backtrace-ext" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" -dependencies = [ - "backtrace", -] - [[package]] name = "base-x" version = "0.2.11" @@ -1718,17 +1265,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bcrypt-pbkdf" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" -dependencies = [ - "blowfish", - "pbkdf2 0.12.1", - "sha2 0.10.6", -] - [[package]] name = "bcs" version = "0.1.6" @@ -1798,12 +1334,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "bimap" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b" - [[package]] name = "bin-version" version = "1.29.2" @@ -1849,7 +1379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b30ed1d6f8437a487a266c8293aeb95b61a23261273e3e02912cdb8b68bf798b" dependencies = [ "bs58 0.4.0", - "hmac 0.12.1", + "hmac", "k256 0.11.6", "once_cell", "pbkdf2 0.11.0", @@ -1951,7 +1481,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec", "constant_time_eq", ] @@ -1962,7 +1492,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec", "constant_time_eq", ] @@ -2000,16 +1530,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blowfish" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" -dependencies = [ - "byteorder", - "cipher", -] - [[package]] name = "blst" version = "0.3.11" @@ -2191,7 +1711,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10ca87c81aaa3a949dbbe2b5e6c2c45dbc94ba4897e45ea31ff9ec5087be3dc" dependencies = [ "cached_proc_macro_types", - "darling 0.14.2", + "darling", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", @@ -2288,33 +1808,12 @@ dependencies = [ "nom", ] -[[package]] -name = "cfg-expr" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a327683d7499ecc47369531a679fe38acdd300e09bf8c852d08b1e10558622bd" -dependencies = [ - "smallvec", - "target-lexicon", -] - [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "chrono" version = "0.4.31" @@ -2354,7 +1853,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" dependencies = [ "ciborium-io", - "half 1.8.2", + "half", ] [[package]] @@ -2419,17 +1918,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" -[[package]] -name = "clipboard-win" -version = "4.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" -dependencies = [ - "error-code", - "str-buf", - "winapi", -] - [[package]] name = "codespan" version = "0.11.1" @@ -2460,7 +1948,7 @@ dependencies = [ "bs58 0.5.0", "coins-core", "digest 0.10.7", - "hmac 0.12.1", + "hmac", "k256 0.13.1", "serde", "sha2 0.10.6", @@ -2475,7 +1963,7 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec 1.0.1", "coins-bip32", - "hmac 0.12.1", + "hmac", "once_cell", "pbkdf2 0.12.1", "rand 0.8.5", @@ -2509,33 +1997,6 @@ version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08abddbaad209601e53c7dd4308d8c04c06f17bb7df006434e586a22b83be45a" -[[package]] -name = "color-eyre" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" -dependencies = [ - "backtrace", - "color-spantrace", - "eyre", - "indenter", - "once_cell", - "owo-colors 3.5.0", - "tracing-error", -] - -[[package]] -name = "color-spantrace" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce" -dependencies = [ - "once_cell", - "owo-colors 3.5.0", - "tracing-core", - "tracing-error", -] - [[package]] name = "colorchoice" version = "1.0.0" @@ -2553,17 +2014,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "colored-diff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410208eb08c3f3ad44b95b51c4fc0d5993cbcc9dd39cfadb4214b9115a97dcb5" -dependencies = [ - "ansi_term", - "dissimilar", - "itertools 0.10.5", -] - [[package]] name = "combine" version = "4.6.6" @@ -2574,18 +2024,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "comfy-table" -version = "6.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" -dependencies = [ - "crossterm", - "strum 0.24.1", - "strum_macros 0.24.3", - "unicode-width", -] - [[package]] name = "consensus-config" version = "0.1.0" @@ -2661,7 +2099,7 @@ version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9b6515d269224923b26b5febea2ed42b2d5f2ce37284a4dd670fedd6cb8347a" dependencies = [ - "encode_unicode 0.3.6", + "encode_unicode", "lazy_static", "libc", "unicode-width", @@ -2711,26 +2149,6 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" -[[package]] -name = "const-random" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11df32a13d7892ec42d51d3d175faba5211ffe13ed25d4fb348ac9e9ce835593" -dependencies = [ - "const-random-macro", -] - -[[package]] -name = "const-random-macro" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom 0.2.9", - "once_cell", - "tiny-keccak", -] - [[package]] name = "const-str" version = "0.5.6" @@ -2743,30 +2161,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" -[[package]] -name = "containers-api" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56082e32f18a6d60f06c736b49e234deffb93b13cb87091a39e0dec053d03819" -dependencies = [ - "chrono", - "flate2", - "futures-util", - "http", - "hyper", - "hyperlocal", - "log", - "mime", - "paste", - "pin-project", - "serde", - "serde_json", - "tar", - "thiserror", - "tokio", - "url", -] - [[package]] name = "convert_case" version = "0.4.0" @@ -2901,30 +2295,6 @@ dependencies = [ "itertools 0.10.5", ] -[[package]] -name = "cron" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" -dependencies = [ - "chrono", - "nom", - "once_cell", -] - -[[package]] -name = "crossbeam" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - [[package]] name = "crossbeam-channel" version = "0.5.13" @@ -2953,15 +2323,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -3034,16 +2395,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "csv" version = "1.2.1" @@ -3084,33 +2435,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - [[package]] name = "curve25519-dalek-ng" version = "4.1.1" @@ -3168,41 +2492,21 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - [[package]] name = "darling" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" dependencies = [ - "darling_core 0.14.2", - "darling_macro 0.14.2", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", + "darling_core", + "darling_macro", ] [[package]] name = "darling_core" -version = "0.13.4" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" dependencies = [ "fnv", "ident_case", @@ -3213,71 +2517,21 @@ dependencies = [ ] [[package]] -name = "darling_core" +name = "darling_macro" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ - "fnv", - "ident_case", - "proc-macro2 1.0.78", + "darling_core", "quote 1.0.35", - "strsim 0.10.0", "syn 1.0.107", ] [[package]] -name = "darling_core" -version = "0.20.3" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2 1.0.78", - "quote 1.0.35", - "strsim 0.10.0", - "syn 2.0.48", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core 0.13.4", - "quote 1.0.35", - "syn 1.0.107", -] - -[[package]] -name = "darling_macro" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" -dependencies = [ - "darling_core 0.14.2", - "quote 1.0.35", - "syn 1.0.107", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core 0.20.3", - "quote 1.0.35", - "syn 2.0.48", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", "hashbrown 0.14.1", @@ -3322,12 +2576,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "debug-ignore" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe7ed1d93f4553003e20b629abe9085e1e81b1429520f897f8f8860bc6dfc21" - [[package]] name = "debugid" version = "0.8.0" @@ -3431,7 +2679,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ - "darling 0.14.2", + "darling", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", @@ -3460,23 +2708,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "determinator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c644b91adb5bcc66d3533607b6d3ee5c1c2d858d2d95e41dd6aae673e29e0509" -dependencies = [ - "camino", - "globset", - "guppy", - "guppy-workspace-hack", - "once_cell", - "petgraph 0.6.2", - "rayon", - "serde", - "toml 0.5.10", -] - [[package]] name = "diesel" version = "2.1.4" @@ -3558,15 +2789,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" -[[package]] -name = "diffus" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0ff24a73b51d9009c40897faf87d31b77345c90ffbf4dc3a1d2957032c5653" -dependencies = [ - "itertools 0.10.5", -] - [[package]] name = "diffy" version = "0.3.0" @@ -3603,16 +2825,7 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ - "dirs-sys 0.3.7", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", + "dirs-sys", ] [[package]] @@ -3636,18 +2849,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -3682,49 +2883,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" -[[package]] -name = "docker-api" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522a3ae33cf4fc165de192eb9c563b755bc43cda9bd6f442b2d511b84514b917" -dependencies = [ - "asynchronous-codec", - "base64 0.13.1", - "byteorder", - "bytes", - "chrono", - "containers-api", - "docker-api-stubs", - "futures-util", - "http", - "hyper", - "log", - "paste", - "serde", - "serde_json", - "tar", - "thiserror", - "url", -] - -[[package]] -name = "docker-api-stubs" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5872f5e057625a972acce1a51b461284eab32b7e594e18f8fc2f63724075da47" -dependencies = [ - "chrono", - "serde", - "serde_json", - "serde_with 2.1.0", -] - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - [[package]] name = "downcast" version = "0.11.0" @@ -3743,20 +2901,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" -[[package]] -name = "duration-str" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f94be4825ff6a563f1bfbdb786ae10c687333c7524fade954e2271170e7f7e6d" -dependencies = [ - "chrono", - "nom", - "rust_decimal", - "serde", - "thiserror", - "time", -] - [[package]] name = "dyn-clone" version = "1.0.16" @@ -3799,16 +2943,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ed25519" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" -dependencies = [ - "pkcs8 0.10.2", - "signature 2.0.0", -] - [[package]] name = "ed25519-consensus" version = "2.1.0" @@ -3824,20 +2958,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ed25519-dalek" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" -dependencies = [ - "curve25519-dalek", - "ed25519 2.2.2", - "rand_core 0.6.4", - "serde", - "sha2 0.10.6", - "zeroize", -] - [[package]] name = "either" version = "1.8.0" @@ -3892,12 +3012,6 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - [[package]] name = "encoding_rs" version = "0.8.31" @@ -3907,12 +3021,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - [[package]] name = "enr" version = "0.8.1" @@ -3935,7 +3043,7 @@ dependencies = [ name = "enum-compat-util" version = "0.1.0" dependencies = [ - "serde_yaml 0.8.26", + "serde_yaml", ] [[package]] @@ -3950,29 +3058,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "env_filter" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "humantime", - "log", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -3989,17 +3074,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - [[package]] name = "errno" version = "0.3.8" @@ -4010,16 +3084,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "error-chain" version = "0.12.4" @@ -4029,16 +3093,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "error-code" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" -dependencies = [ - "libc", - "str-buf", -] - [[package]] name = "eth-keystore" version = "0.5.0" @@ -4049,7 +3103,7 @@ dependencies = [ "ctr", "digest 0.10.7", "hex", - "hmac 0.12.1", + "hmac", "pbkdf2 0.11.0", "rand 0.8.5", "scrypt", @@ -4202,7 +3256,7 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40bf114f1017ace0f622f1652f59c2c5e1abfe7d88891cca0c43da979b351de0" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "bytes", "cargo_metadata 0.15.4", "chrono", @@ -4370,15 +3424,6 @@ dependencies = [ "rand 0.7.3", ] -[[package]] -name = "fast_chemail" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4" -dependencies = [ - "ascii_utils", -] - [[package]] name = "fastcrypto" version = "0.1.8" @@ -4417,7 +3462,7 @@ dependencies = [ "rand 0.8.5", "readonly", "rfc6979 0.4.0", - "rsa 0.8.2", + "rsa", "schemars", "secp256k1", "serde", @@ -4525,17 +3570,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" -[[package]] -name = "fd-lock" -version = "3.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb21c69b9fea5e15dbc1049e4b77145dd0ba1c84019c488102de0dc4ea4b0a27" -dependencies = [ - "cfg-if", - "rustix 0.36.6", - "windows-sys 0.42.0", -] - [[package]] name = "fdlimit" version = "0.2.1" @@ -4584,24 +3618,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "fiat-crypto" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" - -[[package]] -name = "field_names" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca4fdab1b9b7e274e7de51202e37f9cfa542b28c77f8d09b817d77a726b4807" -dependencies = [ - "darling 0.13.4", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "filetime" version = "0.2.22" @@ -4662,16 +3678,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" -[[package]] -name = "flatbuffers" -version = "23.5.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" -dependencies = [ - "bitflags 1.3.2", - "rustc_version", -] - [[package]] name = "flate2" version = "1.0.28" @@ -4872,29 +3878,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "gcp-bigquery-client" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0ce6fcbdaca0a4521a734f2bc7f2f6bd872fe40576e24f8bd0b05732c19a74f" -dependencies = [ - "async-stream", - "async-trait", - "dyn-clone", - "hyper", - "hyper-rustls 0.24.0", - "log", - "reqwest", - "serde", - "serde_json", - "thiserror", - "time", - "tokio", - "tokio-stream", - "url", - "yup-oauth2", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -5043,60 +4026,10 @@ dependencies = [ ] [[package]] -name = "guppy" -version = "0.15.2" +name = "h2" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f822a2716041492e071691606474f5a7e4fa7c2acbfd7da7b29884fb448291c7" -dependencies = [ - "camino", - "cargo_metadata 0.15.4", - "cfg-if", - "debug-ignore", - "fixedbitset 0.4.2", - "guppy-summaries", - "guppy-workspace-hack", - "indexmap 1.9.3", - "itertools 0.10.5", - "nested", - "once_cell", - "pathdiff", - "petgraph 0.6.2", - "rayon", - "semver 1.0.16", - "serde", - "serde_json", - "smallvec", - "static_assertions", - "target-spec", - "toml 0.5.10", -] - -[[package]] -name = "guppy-summaries" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd039b8f587513b48754811cfa37c2ba079df537b490b602fa641ce18f6e72a" -dependencies = [ - "camino", - "cfg-if", - "diffus", - "guppy-workspace-hack", - "semver 1.0.16", - "serde", - "toml 0.5.10", -] - -[[package]] -name = "guppy-workspace-hack" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92620684d99f750bae383ecb3be3748142d6095760afd5cbcf2261e9a279d780" - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -5111,65 +4044,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "hakari" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2c76369039f6ac178748e96def487662aebbeb26d43070d01a0eadd53964994" -dependencies = [ - "atomicwrites", - "bimap", - "camino", - "cfg-if", - "debug-ignore", - "diffy", - "guppy", - "guppy-workspace-hack", - "include_dir", - "indenter", - "itertools 0.10.5", - "owo-colors 3.5.0", - "pathdiff", - "rayon", - "serde", - "tabular", - "target-spec", - "toml 0.5.10", - "toml_edit 0.15.0", - "twox-hash", -] - [[package]] name = "half" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" -[[package]] -name = "half" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" -dependencies = [ - "cfg-if", - "crunchy", - "num-traits", -] - -[[package]] -name = "handlebars" -version = "4.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -5300,17 +4180,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac", - "digest 0.9.0", + "hmac", ] [[package]] @@ -5451,19 +4321,6 @@ dependencies = [ "tokio-io-timeout", ] -[[package]] -name = "hyperlocal" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c" -dependencies = [ - "futures-util", - "hex", - "hyper", - "pin-project", - "tokio", -] - [[package]] name = "iana-time-zone" version = "0.1.53" @@ -5590,26 +4447,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "include_dir" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" -dependencies = [ - "glob", - "include_dir_macros", -] - -[[package]] -name = "include_dir_macros" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", -] - [[package]] name = "indenter" version = "0.3.3" @@ -5680,22 +4517,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "inquire" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33e7c1ddeb15c9abcbfef6029d8e29f69b52b6d6c891031b88ed91b5065803b" -dependencies = [ - "bitflags 1.3.2", - "crossterm", - "dyn-clone", - "lazy_static", - "newline-converter", - "thiserror", - "unicode-segmentation", - "unicode-width", -] - [[package]] name = "insta" version = "1.26.0" @@ -5719,9 +4540,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] @@ -5746,15 +4564,6 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - [[package]] name = "iri-string" version = "0.4.1" @@ -5764,15 +4573,6 @@ dependencies = [ "nom", ] -[[package]] -name = "is-docker" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" -dependencies = [ - "once_cell", -] - [[package]] name = "is-terminal" version = "0.4.7" @@ -5785,22 +4585,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "is-wsl" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" -dependencies = [ - "is-docker", - "once_cell", -] - -[[package]] -name = "is_ci" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" - [[package]] name = "itertools" version = "0.10.5" @@ -5874,12 +4658,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json_comments" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" - [[package]] name = "json_to_table" version = "0.6.0" @@ -5889,17 +4667,6 @@ dependencies = [ "tabled", ] -[[package]] -name = "jsonpath_lib" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f" -dependencies = [ - "log", - "serde", - "serde_json", -] - [[package]] name = "jsonrpsee" version = "0.16.2" @@ -5940,7 +4707,7 @@ version = "0.16.2" source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcdf8f03081a9bc38bde8#b1b300784795f6a64d0fcdf8f03081a9bc38bde8" dependencies = [ "anyhow", - "arrayvec 0.7.2", + "arrayvec", "async-lock", "async-trait", "beef", @@ -6036,20 +4803,6 @@ dependencies = [ "jsonrpsee-types", ] -[[package]] -name = "jsonwebtoken" -version = "8.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" -dependencies = [ - "base64 0.21.2", - "pem", - "ring 0.16.20", - "serde", - "serde_json", - "simple_asn1", -] - [[package]] name = "k256" version = "0.11.6" @@ -6127,70 +4880,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" -[[package]] -name = "lexical-core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" -dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", -] - -[[package]] -name = "lexical-parse-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" -dependencies = [ - "lexical-parse-integer", - "lexical-util", - "static_assertions", -] - -[[package]] -name = "lexical-parse-integer" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" -dependencies = [ - "lexical-util", - "static_assertions", -] - -[[package]] -name = "lexical-util" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "lexical-write-float" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" -dependencies = [ - "lexical-util", - "lexical-write-integer", - "static_assertions", -] - -[[package]] -name = "lexical-write-integer" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" -dependencies = [ - "lexical-util", - "static_assertions", -] - [[package]] name = "libc" version = "0.2.152" @@ -6266,12 +4955,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - [[package]] name = "linux-raw-sys" version = "0.3.1" @@ -6303,15 +4986,6 @@ dependencies = [ "serde", ] -[[package]] -name = "lru" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" -dependencies = [ - "hashbrown 0.12.3", -] - [[package]] name = "lru" version = "0.10.0" @@ -6330,18 +5004,6 @@ dependencies = [ "hashbrown 0.14.1", ] -[[package]] -name = "lsp-server" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095" -dependencies = [ - "crossbeam-channel", - "log", - "serde", - "serde_json", -] - [[package]] name = "lsp-types" version = "0.95.1" @@ -6365,15 +5027,6 @@ dependencies = [ "libc", ] -[[package]] -name = "lz4_flex" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912b45c753ff5f7f5208307e8ace7d2a2e30d024e26d3509f3dce546c044ce15" -dependencies = [ - "twox-hash", -] - [[package]] name = "mach2" version = "0.4.1" @@ -6389,12 +5042,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -[[package]] -name = "markdown-gen" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034621d7f1258317ca1dfb9205e3925d27ee4aa2a46620a09c567daf0310562" - [[package]] name = "match_opt" version = "0.1.2" @@ -6422,17 +5069,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" -[[package]] -name = "md-5" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "md-5" version = "0.10.5" @@ -6442,12 +5078,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - [[package]] name = "memchr" version = "2.5.0" @@ -6464,59 +5094,20 @@ dependencies = [ ] [[package]] -name = "memoffset" -version = "0.6.5" +name = "migrations_internals" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" dependencies = [ - "autocfg", + "serde", + "toml 0.7.4", ] [[package]] -name = "miette" -version = "7.0.0" +name = "migrations_macros" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a72adfa0c7ae88ba0abcbd00047a476616c66b831d628b8ac7f1e9de0cfd67" -dependencies = [ - "backtrace", - "backtrace-ext", - "miette-derive", - "owo-colors 4.0.0", - "supports-color", - "supports-hyperlinks", - "supports-unicode", - "terminal_size", - "textwrap", - "thiserror", - "unicode-width", -] - -[[package]] -name = "miette-derive" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279def6bf114a34b3cf887489eb440d4dfcf709ab3ce9955e4a6f957ce5cce77" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - -[[package]] -name = "migrations_internals" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" -dependencies = [ - "serde", - "toml 0.7.4", -] - -[[package]] -name = "migrations_macros" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08" +checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08" dependencies = [ "migrations_internals", "proc-macro2 1.0.78", @@ -6638,34 +5229,6 @@ dependencies = [ name = "move-abstract-stack" version = "0.0.1" -[[package]] -name = "move-analyzer" -version = "1.0.0" -dependencies = [ - "anyhow", - "clap", - "codespan-reporting", - "crossbeam", - "derivative", - "dunce", - "im", - "itertools 0.10.5", - "json_comments", - "lsp-server", - "lsp-types", - "move-command-line-common", - "move-compiler", - "move-ir-types", - "move-package", - "move-symbol-pool", - "serde", - "serde_json", - "sha2 0.9.9", - "tempfile", - "url", - "vfs", -] - [[package]] name = "move-binary-format" version = "0.0.3" @@ -6817,7 +5380,7 @@ dependencies = [ "move-vm-runtime", "move-vm-test-utils", "move-vm-types", - "serde_yaml 0.8.26", + "serde_yaml", "tempfile", "toml_edit 0.14.4", "walkdir", @@ -6954,23 +5517,6 @@ dependencies = [ "serde", ] -[[package]] -name = "move-ir-compiler" -version = "0.1.0" -dependencies = [ - "anyhow", - "bcs", - "clap", - "move-abstract-interpreter", - "move-binary-format", - "move-bytecode-source-map", - "move-bytecode-verifier", - "move-command-line-common", - "move-core-types", - "move-ir-to-bytecode", - "serde_json", -] - [[package]] name = "move-ir-to-bytecode" version = "0.1.0" @@ -7057,7 +5603,7 @@ dependencies = [ "petgraph 0.5.1", "regex", "serde", - "serde_yaml 0.8.26", + "serde_yaml", "sha2 0.9.9", "tempfile", "toml 0.5.10", @@ -7200,36 +5746,6 @@ dependencies = [ "serde", ] -[[package]] -name = "move-transactional-test-runner" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "clap", - "move-binary-format", - "move-bytecode-source-map", - "move-cli", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-disassembler", - "move-ir-compiler", - "move-ir-types", - "move-stdlib", - "move-stdlib-natives", - "move-symbol-pool", - "move-vm-config", - "move-vm-runtime", - "move-vm-test-utils", - "move-vm-types", - "once_cell", - "rayon", - "regex", - "tempfile", - "tokio", -] - [[package]] name = "move-unit-test" version = "0.1.0" @@ -7411,30 +5927,12 @@ name = "msim-macros" version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=594c417e3716fc909b71a0a8ffd01ee5b25bf4b0#594c417e3716fc909b71a0a8ffd01ee5b25bf4b0" dependencies = [ - "darling 0.14.2", + "darling", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", ] -[[package]] -name = "multer" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http", - "httparse", - "log", - "memchr", - "mime", - "spin 0.9.8", - "version_check", -] - [[package]] name = "multiaddr" version = "0.17.0" @@ -7556,22 +6054,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "mysten-service" -version = "0.0.1" -dependencies = [ - "anyhow", - "axum", - "mysten-metrics", - "prometheus", - "serde", - "serde_json", - "telemetry-subscribers", - "tokio", - "tower", - "tracing", -] - [[package]] name = "mysten-util-mem" version = "0.11.0" @@ -7748,7 +6230,7 @@ dependencies = [ "rand 0.8.5", "reqwest", "serde-reflection", - "serde_yaml 0.8.26", + "serde_yaml", "sui-keys", "sui-protocol-config", "sui-types", @@ -7975,74 +6457,6 @@ dependencies = [ "trait-set", ] -[[package]] -name = "nested" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b420f638f07fe83056b55ea190bb815f609ec5a35e7017884a10f78839c9e" - -[[package]] -name = "newline-converter" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "nexlint" -version = "0.1.0" -source = "git+https://github.com/nextest-rs/nexlint.git?rev=94da5c787636dad779c340affa65219134d127f5#94da5c787636dad779c340affa65219134d127f5" -dependencies = [ - "camino", - "debug-ignore", - "determinator", - "guppy", - "hakari", - "hex", - "once_cell", - "serde", -] - -[[package]] -name = "nexlint-lints" -version = "0.1.0" -source = "git+https://github.com/nextest-rs/nexlint.git?rev=94da5c787636dad779c340affa65219134d127f5#94da5c787636dad779c340affa65219134d127f5" -dependencies = [ - "anyhow", - "camino", - "colored-diff", - "globset", - "guppy", - "nexlint", - "regex", - "serde", - "toml 0.5.10", -] - -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - -[[package]] -name = "nix" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" -dependencies = [ - "bitflags 1.3.2", - "cc", - "cfg-if", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.24.3" @@ -8107,15 +6521,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "ntapi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc51db7b362b205941f71232e56c625156eb9a929f8cf74a428fd5bc094a4afc" -dependencies = [ - "winapi", -] - [[package]] name = "ntest" version = "0.9.0" @@ -8222,17 +6627,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -8355,15 +6749,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - [[package]] name = "number_prefix" version = "0.4.0" @@ -8395,7 +6780,7 @@ dependencies = [ "itertools 0.10.5", "parking_lot 0.12.1", "percent-encoding", - "quick-xml 0.28.2", + "quick-xml", "rand 0.8.5", "reqwest", "ring 0.16.20", @@ -8409,35 +6794,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "object_store" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d139f545f64630e2e3688fd9f81c470888ab01edeb72d13b4e86c566f1130000" -dependencies = [ - "async-trait", - "base64 0.21.2", - "bytes", - "chrono", - "futures", - "humantime", - "hyper", - "itertools 0.12.0", - "parking_lot 0.12.1", - "percent-encoding", - "quick-xml 0.31.0", - "rand 0.8.5", - "reqwest", - "ring 0.17.3", - "serde", - "serde_json", - "snafu", - "tokio", - "tracing", - "url", - "walkdir", -] - [[package]] name = "oid-registry" version = "0.6.1" @@ -8465,24 +6821,13 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" -[[package]] -name = "open" -version = "5.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449f0ff855d85ddbf1edd5b646d65249ead3f5e422aaa86b7d2d0b049b103e32" -dependencies = [ - "is-wsl", - "libc", - "pathdiff", -] - [[package]] name = "open-fastrlp" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "auto_impl", "bytes", "ethereum-types", @@ -8518,24 +6863,14 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "opentelemetry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" -dependencies = [ - "opentelemetry_api 0.19.0", - "opentelemetry_sdk 0.19.0", -] - [[package]] name = "opentelemetry" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" dependencies = [ - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry_api", + "opentelemetry_sdk", ] [[package]] @@ -8549,8 +6884,8 @@ dependencies = [ "http", "opentelemetry-proto", "opentelemetry-semantic-conventions", - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry_api", + "opentelemetry_sdk", "prost 0.11.9", "thiserror", "tokio", @@ -8563,8 +6898,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1e3f814aa9f8c905d0ee4bde026afd3b2577a97c10e1699912e3e44f0c4cbeb" dependencies = [ - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry_api", + "opentelemetry_sdk", "prost 0.11.9", "tonic 0.9.2", ] @@ -8575,22 +6910,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269" dependencies = [ - "opentelemetry 0.20.0", -] - -[[package]] -name = "opentelemetry_api" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" -dependencies = [ - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", + "opentelemetry", ] [[package]] @@ -8611,9 +6931,9 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" dependencies = [ "async-trait", "crossbeam-channel", @@ -8621,26 +6941,8 @@ dependencies = [ "futures-executor", "futures-util", "once_cell", - "opentelemetry_api 0.19.0", - "percent-encoding", - "rand 0.8.5", - "thiserror", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api 0.20.0", - "ordered-float 3.9.1", + "opentelemetry_api", + "ordered-float", "percent-encoding", "rand 0.8.5", "regex", @@ -8650,21 +6952,6 @@ dependencies = [ "tokio-stream", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "3.9.1" @@ -8719,18 +7006,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "owo-colors" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" - -[[package]] -name = "owo-colors" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" - [[package]] name = "p256" version = "0.13.2" @@ -8769,7 +7044,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "bitvec 0.20.4", "byte-slice-cast", "impl-trait-for-tuples", @@ -8783,7 +7058,7 @@ version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", @@ -8869,38 +7144,6 @@ dependencies = [ "windows-targets 0.48.0", ] -[[package]] -name = "parquet" -version = "50.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "547b92ebf0c1177e3892f44c8f79757ee62e678d564a9834189725f2c5b7a750" -dependencies = [ - "ahash 0.8.2", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-ipc", - "arrow-schema", - "arrow-select", - "base64 0.21.2", - "brotli", - "bytes", - "chrono", - "flate2", - "half 2.3.1", - "hashbrown 0.14.1", - "lz4_flex", - "num", - "num-bigint 0.4.4", - "paste", - "seq-macro", - "snap", - "thrift", - "twox-hash", - "zstd 0.13.0", -] - [[package]] name = "passkey-authenticator" version = "0.2.0" @@ -8952,17 +7195,6 @@ dependencies = [ "typeshare", ] -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "pasta_curves" version = "0.5.1" @@ -8986,15 +7218,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" -dependencies = [ - "camino", -] - [[package]] name = "pbkdf2" version = "0.11.0" @@ -9002,9 +7225,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.7", - "hmac 0.12.1", - "password-hash", - "sha2 0.10.6", ] [[package]] @@ -9014,7 +7234,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" dependencies = [ "digest 0.10.7", - "hmac 0.12.1", + "hmac", ] [[package]] @@ -9216,17 +7436,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der 0.7.5", - "pkcs8 0.10.2", - "spki 0.7.1", -] - [[package]] name = "pkcs8" version = "0.9.0" @@ -9281,17 +7490,6 @@ dependencies = [ "plotters-backend", ] -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "polyval" version = "0.6.0" @@ -9327,7 +7525,7 @@ dependencies = [ "findshlibs", "libc", "log", - "nix 0.24.3", + "nix", "once_cell", "parking_lot 0.12.1", "smallvec", @@ -9413,20 +7611,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "prettytable-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a" -dependencies = [ - "csv", - "encode_unicode 1.0.0", - "is-terminal", - "lazy_static", - "term", - "unicode-width", -] - [[package]] name = "primeorder" version = "0.13.0" @@ -9544,30 +7728,6 @@ dependencies = [ "protobuf", ] -[[package]] -name = "prometheus-http-query" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7970fd6e91b5cb87e9a093657572a896d133879ced7752d2c7635beae29eaba0" -dependencies = [ - "reqwest", - "serde", - "serde_json", - "time", - "url", -] - -[[package]] -name = "prometheus-parse" -version = "0.2.3" -source = "git+https://github.com/asonnino/prometheus-parser.git?rev=75334db#75334dbe2d286edf6d4424abba92a74643333096" -dependencies = [ - "chrono", - "itertools 0.10.5", - "lazy_static", - "regex", -] - [[package]] name = "proptest" version = "1.1.0" @@ -9759,16 +7919,6 @@ dependencies = [ "serde", ] -[[package]] -name = "quick-xml" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quinn" version = "0.10.1" @@ -9858,16 +8008,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - [[package]] name = "rand" version = "0.7.3" @@ -10119,19 +8259,12 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - [[package]] name = "reqwest" version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" dependencies = [ - "async-compression 0.4.6", "base64 0.21.2", "bytes", "encoding_rs", @@ -10146,12 +8279,10 @@ dependencies = [ "js-sys", "log", "mime", - "mime_guess", "once_cell", "percent-encoding", "pin-project-lite", "rustls 0.21.12", - "rustls-native-certs", "rustls-pemfile", "serde", "serde_json", @@ -10169,55 +8300,6 @@ dependencies = [ "winreg", ] -[[package]] -name = "reqwest-middleware" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a3e86aa6053e59030e7ce2d2a3b258dd08fc2d337d52f73f6cb480f5858690" -dependencies = [ - "anyhow", - "async-trait", - "http", - "reqwest", - "serde", - "task-local-extensions", - "thiserror", -] - -[[package]] -name = "reqwest-retry" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9af20b65c2ee9746cc575acb6bd28a05ffc0d15e25c992a8f4462d8686aacb4f" -dependencies = [ - "anyhow", - "async-trait", - "chrono", - "futures", - "getrandom 0.2.9", - "http", - "hyper", - "parking_lot 0.11.2", - "reqwest", - "reqwest-middleware", - "retry-policies", - "task-local-extensions", - "tokio", - "tracing", - "wasm-timer", -] - -[[package]] -name = "retry-policies" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17dd00bff1d737c40dbcd47d4375281bf4c17933f9eef0a185fc7bacca23ecbd" -dependencies = [ - "anyhow", - "chrono", - "rand 0.8.5", -] - [[package]] name = "rfc6979" version = "0.3.1" @@ -10225,7 +8307,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint 0.4.9", - "hmac 0.12.1", + "hmac", "zeroize", ] @@ -10235,7 +8317,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac 0.12.1", + "hmac", "subtle", ] @@ -10319,17 +8401,6 @@ dependencies = [ "librocksdb-sys", ] -[[package]] -name = "ron" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" -dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", - "serde", -] - [[package]] name = "rsa" version = "0.8.2" @@ -10342,7 +8413,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "pkcs1 0.4.1", + "pkcs1", "pkcs8 0.9.0", "rand_core 0.6.4", "sha2 0.10.6", @@ -10351,27 +8422,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rsa" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f1471dbb4be5de45050e8ef7040625298ccb9efe941419ac2697088715925f" -dependencies = [ - "byteorder", - "const-oid", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-iter", - "num-traits", - "pkcs1 0.7.5", - "pkcs8 0.10.2", - "rand_core 0.6.4", - "signature 2.0.0", - "subtle", - "zeroize", -] - [[package]] name = "rstest" version = "0.16.0" @@ -10399,202 +8449,28 @@ dependencies = [ ] [[package]] -name = "rusoto_core" -version = "0.48.0" +name = "rustc-demangle" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2" -dependencies = [ - "async-trait", - "base64 0.13.1", - "bytes", - "crc32fast", - "futures", - "http", - "hyper", - "hyper-rustls 0.23.2", - "lazy_static", - "log", - "rusoto_credential", - "rusoto_signature", - "rustc_version", - "serde", - "serde_json", - "tokio", - "xml-rs", -] +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] -name = "rusoto_credential" -version = "0.48.0" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0a6c13db5aad6047b6a44ef023dbbc21a056b6dab5be3b79ce4283d5c02d05" -dependencies = [ - "async-trait", - "chrono", - "dirs-next", - "futures", - "hyper", - "serde", - "serde_json", - "shlex", - "tokio", - "zeroize", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "rusoto_kms" -version = "0.48.0" +name = "rustc-hex" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e1fc19cfcfd9f6b2f96e36d5b0dddda9004d2cbfc2d17543e3b9f10cc38fce8" -dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core", - "serde", - "serde_json", -] +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] -name = "rusoto_signature" -version = "0.48.0" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272" -dependencies = [ - "base64 0.13.1", - "bytes", - "chrono", - "digest 0.9.0", - "futures", - "hex", - "hmac 0.11.0", - "http", - "hyper", - "log", - "md-5 0.9.1", - "percent-encoding", - "pin-project-lite", - "rusoto_credential", - "rustc_version", - "serde", - "sha2 0.9.9", - "tokio", -] - -[[package]] -name = "russh" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0efcc0f4cd6c062c07e572ce4b806e3967fa029fcbfcc0aa98fb5910a37925" -dependencies = [ - "aes", - "aes-gcm", - "async-trait", - "bitflags 2.4.1", - "byteorder", - "chacha20", - "ctr", - "curve25519-dalek", - "digest 0.10.7", - "flate2", - "futures", - "generic-array", - "hex-literal 0.4.1", - "hmac 0.12.1", - "log", - "num-bigint 0.4.4", - "once_cell", - "poly1305", - "rand 0.8.5", - "russh-cryptovec", - "russh-keys", - "sha1", - "sha2 0.10.6", - "subtle", - "thiserror", - "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "russh-cryptovec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fdf036c2216b554053d19d4af45c1722d13b00ac494ea19825daf4beac034e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "russh-keys" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557ab9190022dff78116ebed5e391abbd3f424b06cd643dfe262346ab91ed8c9" -dependencies = [ - "aes", - "async-trait", - "bcrypt-pbkdf", - "bit-vec", - "block-padding 0.3.2", - "byteorder", - "cbc", - "ctr", - "data-encoding", - "dirs 5.0.1", - "ed25519-dalek", - "futures", - "hmac 0.12.1", - "inout", - "log", - "md5", - "num-bigint 0.4.4", - "num-integer", - "pbkdf2 0.11.0", - "rand 0.7.3", - "rand_core 0.6.4", - "russh-cryptovec", - "serde", - "sha2 0.10.6", - "thiserror", - "tokio", - "tokio-stream", - "yasna", -] - -[[package]] -name = "rust_decimal" -version = "1.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c321ee4e17d2b7abe12b5d20c1231db708dd36185c8a21e9de5fed6da4dbe9" -dependencies = [ - "arrayvec 0.7.2", - "num-traits", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver 1.0.16", ] @@ -10608,20 +8484,6 @@ dependencies = [ "nom", ] -[[package]] -name = "rustix" -version = "0.36.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" -dependencies = [ - "bitflags 1.3.2", - "errno 0.2.8", - "io-lifetimes", - "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", -] - [[package]] name = "rustix" version = "0.37.7" @@ -10629,7 +8491,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" dependencies = [ "bitflags 1.3.2", - "errno 0.3.8", + "errno", "io-lifetimes", "libc", "linux-raw-sys 0.3.1", @@ -10643,7 +8505,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ "bitflags 2.4.1", - "errno 0.3.8", + "errno", "libc", "linux-raw-sys 0.4.12", "windows-sys 0.52.0", @@ -10732,41 +8594,6 @@ dependencies = [ "wait-timeout", ] -[[package]] -name = "rustyline" -version = "9.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "clipboard-win", - "dirs-next", - "fd-lock", - "libc", - "log", - "memchr", - "nix 0.23.2", - "radix_trie", - "scopeguard", - "smallvec", - "unicode-segmentation", - "unicode-width", - "utf8parse", - "winapi", -] - -[[package]] -name = "rustyline-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107c3d5d7f370ac09efa62a78375f94d94b8a33c61d8c278b96683fb4dbf2d8d" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "ryu" version = "1.0.12" @@ -10876,7 +8703,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "hmac 0.12.1", + "hmac", "pbkdf2 0.11.0", "salsa20", "sha2 0.10.6", @@ -10892,12 +8719,6 @@ dependencies = [ "untrusted 0.7.1", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "sec1" version = "0.3.0" @@ -11017,12 +8838,6 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" -[[package]] -name = "seq-macro" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" - [[package]] name = "serde" version = "1.0.202" @@ -11183,7 +8998,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3452b4c0f6c1e357f73fdb87cd1efabaa12acf328c7a528e252893baeb3f4aa" dependencies = [ - "darling 0.14.2", + "darling", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", @@ -11201,19 +9016,6 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "serde_yaml" -version = "0.9.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" -dependencies = [ - "indexmap 1.9.3", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serdect" version = "0.2.0" @@ -11224,31 +9026,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serial_test" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" -dependencies = [ - "dashmap", - "futures", - "lazy_static", - "log", - "parking_lot 0.12.1", - "serial_test_derive", -] - -[[package]] -name = "serial_test_derive" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -11350,21 +9127,6 @@ dependencies = [ "serde_repr", ] -[[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - -[[package]] -name = "shellexpand" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" -dependencies = [ - "dirs 5.0.1", -] - [[package]] name = "shlex" version = "1.3.0" @@ -11427,18 +9189,6 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" -[[package]] -name = "simple_asn1" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" -dependencies = [ - "num-bigint 0.4.4", - "num-traits", - "thiserror", - "time", -] - [[package]] name = "simplelog" version = "0.9.0" @@ -11535,12 +9285,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - [[package]] name = "snafu" version = "0.7.4" @@ -11569,46 +9313,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" -[[package]] -name = "snowflake-api" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e20db2ea77690628e34db7a6f63f539557195afbbc3cd349a8cbe293e1fffc" -dependencies = [ - "arrow", - "async-trait", - "base64 0.21.2", - "bytes", - "futures", - "log", - "object_store 0.9.0", - "regex", - "reqwest", - "reqwest-middleware", - "reqwest-retry", - "serde", - "serde_json", - "snowflake-jwt", - "thiserror", - "url", - "uuid 1.2.2", -] - -[[package]] -name = "snowflake-jwt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13a6dfdd7c433e0f4bb96d777c88d900c5abe3dc4d2f26d2340fd6c7caadcc6c" -dependencies = [ - "base64 0.21.2", - "jsonwebtoken", - "rsa 0.9.1", - "serde", - "sha2 0.10.6", - "thiserror", - "time", -] - [[package]] name = "socket2" version = "0.4.9" @@ -11657,17 +9361,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "spinners" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ef947f358b9c238923f764c72a4a9d42f2d637c46e059dbd319d6e7cfb4f82" -dependencies = [ - "lazy_static", - "maplit", - "strum 0.24.1", -] - [[package]] name = "spki" version = "0.6.0" @@ -11713,21 +9406,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "str-buf" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" - -[[package]] -name = "strip-ansi-escapes" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8" -dependencies = [ - "vte", -] - [[package]] name = "strsim" version = "0.10.0" @@ -11807,105 +9485,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] -name = "sui" -version = "1.29.2" -dependencies = [ - "anemo", - "anyhow", - "assert_cmd", - "async-recursion", - "async-trait", - "axum", - "bcs", - "bin-version", - "bip32", - "camino", - "clap", - "colored", - "csv", - "datatest-stable", - "diesel", - "expect-test", - "fastcrypto", - "fastcrypto-zkp", - "fs_extra", - "futures", - "http", - "im", - "inquire", - "insta", - "jemalloc-ctl", - "json_to_table", - "miette", - "move-analyzer", - "move-binary-format", - "move-bytecode-verifier-meter", - "move-command-line-common", - "move-core-types", - "move-package", - "move-vm-config", - "move-vm-profiler", - "msim", - "num-bigint 0.4.4", - "prometheus", - "rand 0.8.5", - "regex", - "reqwest", - "rusoto_core", - "rusoto_kms", - "rustyline", - "rustyline-derive", - "serde", - "serde_json", - "serde_yaml 0.8.26", - "shared-crypto", - "shell-words", - "shlex", - "signature 1.6.4", - "sui-bridge", - "sui-cluster-test", - "sui-config", - "sui-execution", - "sui-faucet", - "sui-genesis-builder", - "sui-graphql-rpc", - "sui-indexer", - "sui-json", - "sui-json-rpc-types", - "sui-keys", - "sui-macros", - "sui-move", - "sui-move-build", - "sui-package-management", - "sui-protocol-config", - "sui-replay", - "sui-sdk 1.29.2", - "sui-simulator", - "sui-source-validation", - "sui-swarm", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-transaction-builder", - "sui-types", - "tabled", - "tap", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "thiserror", - "tokio", - "toml 0.7.4", - "tower", - "tower-http", - "tracing", - "unescape", - "url", - "uuid 1.2.2", -] - -[[package]] -name = "sui-adapter-latest" -version = "0.1.0" +name = "sui-adapter-latest" +version = "0.1.0" dependencies = [ "anyhow", "bcs", @@ -11931,14 +9512,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-adapter-transactional-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "sui-transactional-test-runner", -] - [[package]] name = "sui-adapter-v0" version = "0.1.0" @@ -12021,69 +9594,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-analytics-indexer" -version = "1.29.2" -dependencies = [ - "anyhow", - "arrow", - "arrow-array", - "async-trait", - "axum", - "bcs", - "byteorder", - "bytes", - "chrono", - "clap", - "csv", - "eyre", - "fastcrypto", - "gcp-bigquery-client", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "mysten-metrics", - "num_enum 0.6.1", - "object_store 0.7.0", - "parquet", - "prometheus", - "rocksdb", - "serde", - "serde_json", - "simulacrum", - "snowflake-api", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-analytics-indexer-derive", - "sui-config", - "sui-data-ingestion-core", - "sui-indexer", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-rest-api", - "sui-storage", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "typed-store", - "typed-store-derive", - "url", -] - -[[package]] -name = "sui-analytics-indexer-derive" -version = "1.29.2" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "sui-archival" version = "1.29.2" @@ -12100,7 +9610,7 @@ dependencies = [ "move-core-types", "move-package", "num_enum 0.6.1", - "object_store 0.7.0", + "object_store", "prometheus", "rand 0.8.5", "serde", @@ -12128,88 +9638,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-aws-orchestrator" -version = "0.0.1" -dependencies = [ - "async-trait", - "aws-config", - "aws-sdk-ec2", - "aws-smithy-http", - "aws-smithy-runtime-api", - "clap", - "color-eyre", - "crossterm", - "eyre", - "futures", - "mysten-metrics", - "narwhal-config", - "prettytable-rs", - "prometheus-parse", - "reqwest", - "russh", - "russh-keys", - "serde", - "serde_json", - "sui-config", - "sui-swarm-config", - "sui-types", - "tempfile", - "thiserror", - "tokio", -] - -[[package]] -name = "sui-benchmark" -version = "0.0.0" -dependencies = [ - "anyhow", - "async-trait", - "bcs", - "clap", - "comfy-table", - "duration-str", - "fastcrypto-zkp", - "futures", - "hdrhistogram", - "indicatif", - "itertools 0.10.5", - "move-core-types", - "mysten-metrics", - "narwhal-node", - "prometheus", - "rand 0.8.5", - "regex", - "roaring", - "serde", - "serde_json", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-config", - "sui-core", - "sui-framework", - "sui-framework-snapshot", - "sui-json-rpc-types", - "sui-keys", - "sui-macros", - "sui-network", - "sui-protocol-config", - "sui-sdk 1.29.2", - "sui-simulator", - "sui-storage", - "sui-surfer", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "sysinfo", - "telemetry-subscribers", - "test-cluster", - "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tracing", - "typed-store", -] - [[package]] name = "sui-bridge" version = "1.29.2" @@ -12262,153 +9690,56 @@ dependencies = [ ] [[package]] -name = "sui-bridge-cli" -version = "1.29.2" +name = "sui-common" +version = "0.1.0" +dependencies = [ + "futures", + "mysten-metrics", + "sui-types", + "tokio", + "tracing", +] + +[[package]] +name = "sui-config" +version = "0.0.0" dependencies = [ + "anemo", "anyhow", + "bcs", "clap", - "ethers", + "csv", + "dirs", "fastcrypto", - "futures", - "move-core-types", + "insta", + "narwhal-config", + "object_store", + "once_cell", + "prometheus", + "rand 0.8.5", "reqwest", "serde", - "serde_json", "serde_with 2.1.0", - "shared-crypto", - "sui-bridge", - "sui-config", - "sui-json-rpc-types", + "serde_yaml", "sui-keys", - "sui-sdk 1.29.2", + "sui-protocol-config", "sui-types", - "telemetry-subscribers", - "tokio", + "tempfile", "tracing", ] [[package]] -name = "sui-bridge-indexer" +name = "sui-core" version = "0.1.0" dependencies = [ + "anemo", "anyhow", + "arc-swap", "async-trait", - "backoff", + "axum", "bcs", - "bin-version", - "clap", - "diesel", - "ethers", - "futures", - "hex-literal 0.3.4", - "mysten-metrics", - "prometheus", - "serde", - "serde_yaml 0.8.26", - "sui-bridge", - "sui-config", - "sui-data-ingestion-core", - "sui-json-rpc-types", - "sui-sdk 1.29.2", - "sui-test-transaction-builder", - "sui-types", - "tap", - "telemetry-subscribers", - "test-cluster", - "tokio", - "tracing", -] - -[[package]] -name = "sui-cluster-test" -version = "1.29.2" -dependencies = [ - "anyhow", - "async-trait", - "clap", - "derivative", - "diesel", - "fastcrypto", - "futures", - "jsonrpsee", - "move-core-types", - "prometheus", - "regex", - "reqwest", - "serde_json", - "shared-crypto", - "sui-config", - "sui-core", - "sui-faucet", - "sui-graphql-rpc", - "sui-indexer", - "sui-json", - "sui-json-rpc-types", - "sui-keys", - "sui-sdk 1.29.2", - "sui-swarm", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "tokio", - "tracing", - "uuid 1.2.2", -] - -[[package]] -name = "sui-common" -version = "0.1.0" -dependencies = [ - "futures", - "mysten-metrics", - "sui-types", - "tokio", - "tracing", -] - -[[package]] -name = "sui-config" -version = "0.0.0" -dependencies = [ - "anemo", - "anyhow", - "bcs", - "clap", - "csv", - "dirs 4.0.0", - "fastcrypto", - "insta", - "narwhal-config", - "object_store 0.7.0", - "once_cell", - "prometheus", - "rand 0.8.5", - "reqwest", - "serde", - "serde_with 2.1.0", - "serde_yaml 0.8.26", - "sui-keys", - "sui-protocol-config", - "sui-types", - "tempfile", - "tracing", -] - -[[package]] -name = "sui-core" -version = "0.1.0" -dependencies = [ - "anemo", - "anyhow", - "arc-swap", - "async-trait", - "axum", - "bcs", - "bytes", - "chrono", + "bytes", + "chrono", "clap", "consensus-config", "consensus-core", @@ -12452,7 +9783,7 @@ dependencies = [ "nonempty", "num-bigint 0.4.4", "num_cpus", - "object_store 0.7.0", + "object_store", "once_cell", "parking_lot 0.12.1", "pprof", @@ -12469,7 +9800,7 @@ dependencies = [ "serde-reflection", "serde_json", "serde_with 2.1.0", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "signature 1.6.4", "static_assertions", @@ -12507,28 +9838,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "sui-cost" -version = "0.1.0" -dependencies = [ - "anyhow", - "bcs", - "insta", - "move-cli", - "move-disassembler", - "serde", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-config", - "sui-json-rpc-types", - "sui-move-build", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "test-cluster", - "tokio", -] - [[package]] name = "sui-data-ingestion" version = "1.29.2" @@ -12546,12 +9855,12 @@ dependencies = [ "futures", "mysten-metrics", "notify", - "object_store 0.7.0", + "object_store", "prometheus", "rand 0.8.5", "serde", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sui-archival", "sui-data-ingestion-core", "sui-storage", @@ -12574,7 +9883,7 @@ dependencies = [ "futures", "mysten-metrics", "notify", - "object_store 0.7.0", + "object_store", "prometheus", "rand 0.8.5", "serde", @@ -12591,73 +9900,11 @@ dependencies = [ "url", ] -[[package]] -name = "sui-e2e-tests" -version = "1.29.2" -dependencies = [ - "anyhow", - "assert_cmd", - "async-trait", - "bcs", - "clap", - "coset", - "expect-test", - "fastcrypto", - "fastcrypto-zkp", - "fs_extra", - "futures", - "indexmap 2.2.6", - "insta", - "jsonrpsee", - "move-binary-format", - "move-core-types", - "move-package", - "mysten-metrics", - "p256", - "passkey-authenticator", - "passkey-client", - "passkey-types", - "prometheus", - "rand 0.8.5", - "serde", - "serde_json", - "shared-crypto", - "sui", - "sui-bridge", - "sui-config", - "sui-core", - "sui-framework", - "sui-json-rpc", - "sui-json-rpc-api", - "sui-json-rpc-types", - "sui-keys", - "sui-macros", - "sui-move-build", - "sui-network", - "sui-node", - "sui-protocol-config", - "sui-rest-api", - "sui-sdk 1.29.2", - "sui-simulator", - "sui-storage", - "sui-swarm", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-tool", - "sui-types", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "tokio", - "tracing", - "url", -] - [[package]] name = "sui-enum-compat-util" version = "0.1.0" dependencies = [ - "serde_yaml 0.8.26", + "serde_yaml", ] [[package]] @@ -12695,58 +9942,6 @@ dependencies = [ "sui-verifier-v2", ] -[[package]] -name = "sui-execution-cut" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "expect-test", - "tempfile", - "thiserror", - "toml 0.7.4", - "toml_edit 0.19.10", -] - -[[package]] -name = "sui-faucet" -version = "1.29.2" -dependencies = [ - "anyhow", - "async-recursion", - "async-trait", - "axum", - "clap", - "eyre", - "futures", - "http", - "mysten-metrics", - "parking_lot 0.12.1", - "prometheus", - "rocksdb", - "scopeguard", - "serde", - "shared-crypto", - "sui-config", - "sui-json-rpc-types", - "sui-keys", - "sui-sdk 1.29.2", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "thiserror", - "tokio", - "tower", - "tower-http", - "tracing", - "ttl_cache", - "typed-store", - "typed-store-derive", - "uuid 1.2.2", -] - [[package]] name = "sui-framework" version = "0.1.0" @@ -12781,25 +9976,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "sui-framework-tests" -version = "0.1.0" -dependencies = [ - "move-bytecode-verifier", - "move-bytecode-verifier-meter", - "move-cli", - "move-package", - "move-unit-test", - "prometheus", - "sui-adapter-latest", - "sui-framework", - "sui-move", - "sui-move-build", - "sui-protocol-config", - "sui-types", - "sui-verifier-latest", -] - [[package]] name = "sui-genesis-builder" version = "0.0.0" @@ -12815,7 +9991,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with 2.1.0", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "sui-config", "sui-execution", @@ -12829,124 +10005,7 @@ dependencies = [ ] [[package]] -name = "sui-graphql-config" -version = "1.29.2" -dependencies = [ - "quote 1.0.35", - "syn 1.0.107", -] - -[[package]] -name = "sui-graphql-e2e-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "msim", - "sui-graphql-rpc", - "sui-transactional-test-runner", - "tokio", -] - -[[package]] -name = "sui-graphql-rpc" -version = "2024.7.0" -dependencies = [ - "anyhow", - "async-graphql", - "async-graphql-axum", - "async-graphql-value", - "async-trait", - "axum", - "bcs", - "bin-version", - "chrono", - "clap", - "const-str", - "diesel", - "downcast", - "either", - "expect-test", - "fastcrypto", - "fastcrypto-zkp", - "futures", - "hex", - "http", - "hyper", - "im", - "insta", - "itertools 0.10.5", - "lru 0.10.0", - "markdown-gen", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "move-disassembler", - "move-ir-types", - "mysten-metrics", - "mysten-network", - "once_cell", - "prometheus", - "rand 0.8.5", - "regex", - "reqwest", - "serde", - "serde_json", - "serde_with 2.1.0", - "serde_yaml 0.8.26", - "serial_test", - "shared-crypto", - "similar", - "simulacrum", - "sui-framework", - "sui-graphql-config", - "sui-graphql-rpc-client", - "sui-graphql-rpc-headers", - "sui-indexer", - "sui-json-rpc", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-protocol-config", - "sui-rest-api", - "sui-sdk 1.29.2", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "thiserror", - "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.7.4", - "tower", - "tower-http", - "tracing", - "uuid 1.2.2", -] - -[[package]] -name = "sui-graphql-rpc-client" -version = "0.1.0" -dependencies = [ - "async-graphql", - "axum", - "hyper", - "reqwest", - "serde_json", - "sui-graphql-rpc-headers", - "thiserror", -] - -[[package]] -name = "sui-graphql-rpc-headers" -version = "0.1.0" -dependencies = [ - "axum", -] - -[[package]] -name = "sui-indexer" +name = "sui-indexer" version = "1.29.2" dependencies = [ "anyhow", @@ -13097,43 +10156,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-json-rpc-tests" -version = "0.0.0" -dependencies = [ - "anyhow", - "async-trait", - "bcs", - "hyper", - "jsonrpsee", - "move-core-types", - "move-package", - "prometheus", - "rand 0.8.5", - "reqwest", - "sui-config", - "sui-core", - "sui-json", - "sui-json-rpc", - "sui-json-rpc-api", - "sui-json-rpc-types", - "sui-keys", - "sui-macros", - "sui-move-build", - "sui-open-rpc", - "sui-open-rpc-macros", - "sui-protocol-config", - "sui-sdk 1.29.2", - "sui-simulator", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "telemetry-subscribers", - "test-cluster", - "tokio", - "tracing", -] - [[package]] name = "sui-json-rpc-types" version = "0.0.0" @@ -13182,30 +10204,6 @@ dependencies = [ "tiny-bip39", ] -[[package]] -name = "sui-light-client" -version = "1.29.2" -dependencies = [ - "anyhow", - "async-trait", - "bcs", - "bytes", - "clap", - "move-binary-format", - "move-core-types", - "serde", - "serde_json", - "serde_yaml 0.8.26", - "sui-config", - "sui-json", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-rest-api", - "sui-sdk 1.29.2", - "sui-types", - "tokio", -] - [[package]] name = "sui-macros" version = "0.7.0" @@ -13216,27 +10214,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-metric-checker" -version = "1.29.2" -dependencies = [ - "anyhow", - "backoff", - "base64 0.21.2", - "chrono", - "clap", - "humantime", - "once_cell", - "prometheus-http-query", - "reqwest", - "serde", - "serde_yaml 0.9.21", - "strum_macros 0.24.3", - "telemetry-subscribers", - "tokio", - "tracing", -] - [[package]] name = "sui-move" version = "1.29.2" @@ -13264,7 +10241,7 @@ dependencies = [ "prometheus", "rand 0.8.5", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sui-core", "sui-macros", "sui-move-build", @@ -13303,16 +10280,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "sui-move-lsp" -version = "1.29.2" -dependencies = [ - "bin-version", - "clap", - "move-analyzer", - "tokio", -] - [[package]] name = "sui-move-natives-latest" version = "0.1.0" @@ -13518,36 +10485,6 @@ dependencies = [ "unescape", ] -[[package]] -name = "sui-oracle" -version = "1.29.2" -dependencies = [ - "anyhow", - "bcs", - "chrono", - "clap", - "dirs 4.0.0", - "jsonpath_lib", - "mysten-metrics", - "once_cell", - "prometheus", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "shared-crypto", - "sui-config", - "sui-json-rpc-types", - "sui-keys", - "sui-move-build", - "sui-sdk 1.29.2", - "sui-types", - "tap", - "telemetry-subscribers", - "tokio", - "tracing", -] - [[package]] name = "sui-package-management" version = "1.29.2" @@ -13620,96 +10557,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "sui-proxy" -version = "0.0.2" -dependencies = [ - "anyhow", - "axum", - "axum-server", - "bin-version", - "bytes", - "clap", - "const-str", - "fastcrypto", - "hex", - "http-body", - "hyper", - "ipnetwork", - "itertools 0.10.5", - "mime", - "multiaddr", - "mysten-metrics", - "once_cell", - "prometheus", - "prost 0.12.3", - "prost-build", - "protobuf", - "rand 0.8.5", - "reqwest", - "rustls 0.21.12", - "rustls-pemfile", - "serde", - "serde_json", - "serde_with 2.1.0", - "serde_yaml 0.8.26", - "snap", - "sui-tls", - "sui-types", - "telemetry-subscribers", - "tokio", - "tower", - "tower-http", - "tracing", -] - -[[package]] -name = "sui-replay" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-recursion", - "async-trait", - "bcs", - "clap", - "futures", - "http", - "jsonrpsee", - "lru 0.10.0", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "move-vm-config", - "parking_lot 0.12.1", - "prometheus", - "rand 0.8.5", - "serde", - "serde_json", - "serde_with 2.1.0", - "serde_yaml 0.8.26", - "shared-crypto", - "shellexpand", - "similar", - "sui-config", - "sui-core", - "sui-execution", - "sui-framework", - "sui-json-rpc", - "sui-json-rpc-api", - "sui-json-rpc-types", - "sui-protocol-config", - "sui-sdk 1.29.2", - "sui-storage", - "sui-transaction-checks", - "sui-types", - "tabled", - "tempfile", - "thiserror", - "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tracing", -] - [[package]] name = "sui-rest-api" version = "0.1.0" @@ -13731,7 +10578,7 @@ dependencies = [ "serde", "serde_json", "serde_with 2.1.0", - "serde_yaml 0.8.26", + "serde_yaml", "sui-protocol-config", "sui-sdk 0.0.0", "sui-types", @@ -13740,77 +10587,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "sui-rosetta" -version = "1.29.2" -dependencies = [ - "anyhow", - "async-trait", - "axum", - "axum-extra", - "bcs", - "clap", - "eyre", - "fastcrypto", - "futures", - "hyper", - "move-core-types", - "mysten-metrics", - "once_cell", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "shared-crypto", - "signature 1.6.4", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-config", - "sui-json-rpc-types", - "sui-keys", - "sui-move-build", - "sui-node", - "sui-sdk 1.29.2", - "sui-swarm-config", - "sui-types", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "thiserror", - "tokio", - "tracing", - "typed-store", -] - -[[package]] -name = "sui-rpc-loadgen" -version = "1.29.2" -dependencies = [ - "anyhow", - "async-trait", - "clap", - "dashmap", - "dirs 4.0.0", - "futures", - "itertools 0.10.5", - "serde", - "serde_json", - "shared-crypto", - "shellexpand", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-json-rpc", - "sui-json-rpc-types", - "sui-keys", - "sui-sdk 1.29.2", - "sui-types", - "telemetry-subscribers", - "test-cluster", - "tokio", - "tonic 0.11.0", - "tracing", -] - [[package]] name = "sui-sdk" version = "0.0.0" @@ -13841,7 +10617,7 @@ dependencies = [ "bcs", "clap", "colored", - "dirs 4.0.0", + "dirs", "fastcrypto", "futures", "futures-core", @@ -13866,30 +10642,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-security-watchdog" -version = "1.29.2" -dependencies = [ - "anyhow", - "arrow-array", - "async-trait", - "chrono", - "clap", - "env_logger", - "lexical-util", - "mysten-metrics", - "prometheus", - "reqwest", - "serde", - "serde_json", - "snowflake-api", - "telemetry-subscribers", - "tokio", - "tokio-cron-scheduler", - "tracing", - "uuid 1.2.2", -] - [[package]] name = "sui-simulator" version = "0.7.0" @@ -13903,144 +10655,42 @@ dependencies = [ "msim", "narwhal-network", "rand 0.8.5", - "serde", - "sui-framework", - "sui-move-build", - "sui-types", - "telemetry-subscribers", - "tempfile", - "tower", - "tracing", -] - -[[package]] -name = "sui-single-node-benchmark" -version = "1.29.2" -dependencies = [ - "async-trait", - "bcs", - "clap", - "fs_extra", - "futures", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "move-package", - "once_cell", - "prometheus", - "serde", - "serde_json", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-config", - "sui-core", - "sui-macros", - "sui-move-build", - "sui-protocol-config", - "sui-simulator", - "sui-storage", - "sui-test-transaction-builder", - "sui-transaction-checks", - "sui-types", - "telemetry-subscribers", - "tokio", - "tracing", -] - -[[package]] -name = "sui-snapshot" -version = "0.1.0" -dependencies = [ - "anyhow", - "bcs", - "byteorder", - "bytes", - "fastcrypto", - "futures", - "indicatif", - "integer-encoding", - "num_enum 0.6.1", - "object_store 0.7.0", - "prometheus", - "serde", - "serde_json", - "sui-config", - "sui-core", - "sui-protocol-config", - "sui-storage", - "sui-types", - "tempfile", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "sui-source-validation" -version = "1.29.2" -dependencies = [ - "anyhow", - "colored", - "expect-test", - "flate2", - "futures", - "move-binary-format", - "move-bytecode-source-map", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-package", - "move-symbol-pool", - "rand 0.8.5", - "sui-json-rpc-types", + "serde", + "sui-framework", "sui-move-build", - "sui-sdk 1.29.2", - "sui-test-transaction-builder", "sui-types", - "tar", + "telemetry-subscribers", "tempfile", - "test-cluster", - "thiserror", - "tokio", + "tower", "tracing", - "ureq", ] [[package]] -name = "sui-source-validation-service" +name = "sui-snapshot" version = "0.1.0" dependencies = [ "anyhow", - "axum", - "bin-version", - "clap", - "expect-test", - "fs_extra", - "hyper", - "jsonrpsee", - "move-compiler", - "move-core-types", - "move-package", - "move-symbol-pool", - "mysten-metrics", + "bcs", + "byteorder", + "bytes", + "fastcrypto", + "futures", + "indicatif", + "integer-encoding", + "num_enum 0.6.1", + "object_store", "prometheus", - "reqwest", "serde", - "sui", - "sui-json-rpc-types", - "sui-move", - "sui-move-build", - "sui-sdk 1.29.2", - "sui-source-validation", - "telemetry-subscribers", + "serde_json", + "sui-config", + "sui-core", + "sui-protocol-config", + "sui-storage", + "sui-types", "tempfile", - "test-cluster", "tokio", - "toml 0.7.4", - "tower", - "tower-http", + "tokio-stream", "tracing", - "url", ] [[package]] @@ -14072,7 +10722,7 @@ dependencies = [ "mysten-metrics", "num_cpus", "num_enum 0.6.1", - "object_store 0.7.0", + "object_store", "once_cell", "parking_lot 0.12.1", "percent-encoding", @@ -14097,35 +10747,7 @@ dependencies = [ "typed-store", "typed-store-derive", "url", - "zstd 0.12.3+zstd.1.5.2", -] - -[[package]] -name = "sui-surfer" -version = "1.29.2" -dependencies = [ - "async-trait", - "bcs", - "clap", - "futures", - "indexmap 2.2.6", - "move-binary-format", - "move-core-types", - "move-package", - "prometheus", - "rand 0.8.5", - "sui-core", - "sui-json-rpc-types", - "sui-macros", - "sui-move-build", - "sui-protocol-config", - "sui-simulator", - "sui-swarm-config", - "sui-types", - "telemetry-subscribers", - "test-cluster", - "tokio", - "tracing", + "zstd", ] [[package]] @@ -14168,7 +10790,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with 2.1.0", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "sui-config", "sui-execution", @@ -14204,10 +10826,6 @@ dependencies = [ "sui-types", ] -[[package]] -name = "sui-test-validator" -version = "1.29.2" - [[package]] name = "sui-tls" version = "0.0.0" @@ -14215,7 +10833,7 @@ dependencies = [ "anyhow", "axum", "axum-server", - "ed25519 1.5.3", + "ed25519", "fastcrypto", "pkcs8 0.9.0", "rand 0.8.5", @@ -14229,55 +10847,6 @@ dependencies = [ "x509-parser", ] -[[package]] -name = "sui-tool" -version = "1.29.2" -dependencies = [ - "anemo", - "anemo-cli", - "anyhow", - "bcs", - "bin-version", - "clap", - "colored", - "comfy-table", - "diesel", - "eyre", - "fastcrypto", - "futures", - "hex", - "indicatif", - "itertools 0.10.5", - "move-core-types", - "narwhal-storage", - "narwhal-types", - "num_cpus", - "object_store 0.7.0", - "prometheus", - "rocksdb", - "ron", - "serde", - "serde_json", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-archival", - "sui-config", - "sui-core", - "sui-indexer", - "sui-network", - "sui-protocol-config", - "sui-replay", - "sui-sdk 1.29.2", - "sui-snapshot", - "sui-storage", - "sui-types", - "telemetry-subscribers", - "tempfile", - "tokio", - "tracing", - "typed-store", -] - [[package]] name = "sui-transaction-builder" version = "0.0.0" @@ -14308,55 +10877,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-transactional-test-runner" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bcs", - "bimap", - "clap", - "criterion", - "eyre", - "fastcrypto", - "futures", - "move-binary-format", - "move-bytecode-utils", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-stdlib", - "move-symbol-pool", - "move-transactional-test-runner", - "move-vm-runtime", - "msim", - "once_cell", - "rand 0.8.5", - "regex", - "rocksdb", - "serde_json", - "simulacrum", - "sui-config", - "sui-core", - "sui-framework", - "sui-framework-snapshot", - "sui-graphql-rpc", - "sui-json-rpc", - "sui-json-rpc-api", - "sui-json-rpc-types", - "sui-protocol-config", - "sui-rest-api", - "sui-storage", - "sui-swarm-config", - "sui-types", - "telemetry-subscribers", - "tempfile", - "tokio", - "typed-store", - "typed-store-derive", -] - [[package]] name = "sui-types" version = "0.1.0" @@ -14418,7 +10938,7 @@ dependencies = [ "serde-name", "serde_json", "serde_with 2.1.0", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "signature 1.6.4", "static_assertions", @@ -14437,20 +10957,6 @@ dependencies = [ "url", ] -[[package]] -name = "sui-upgrade-compatibility-transactional-tests" -version = "0.1.0" -dependencies = [ - "anyhow", - "datatest-stable", - "insta", - "move-binary-format", - "move-command-line-common", - "move-compiler", - "move-package", - "sui-move-build", -] - [[package]] name = "sui-verifier-latest" version = "0.1.0" @@ -14467,14 +10973,6 @@ dependencies = [ "sui-types", ] -[[package]] -name = "sui-verifier-transactional-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "sui-transactional-test-runner", -] - [[package]] name = "sui-verifier-v0" version = "0.1.0" @@ -14499,116 +10997,26 @@ dependencies = [ "move-bytecode-utils", "move-bytecode-verifier-meter", "move-bytecode-verifier-v1", - "move-core-types", - "move-vm-config", - "sui-types", -] - -[[package]] -name = "sui-verifier-v2" -version = "0.1.0" -dependencies = [ - "move-abstract-stack", - "move-binary-format", - "move-bytecode-utils", - "move-bytecode-verifier-meter", - "move-bytecode-verifier-v2", - "move-core-types", - "move-vm-config", - "sui-protocol-config", - "sui-types", -] - -[[package]] -name = "suins-indexer" -version = "1.29.2" -dependencies = [ - "anyhow", - "async-trait", - "backoff", - "base64-url", - "bcs", - "bytes", - "diesel", - "dotenvy", - "futures", - "move-core-types", - "mysten-metrics", - "mysten-service", - "notify", - "object_store 0.7.0", - "prometheus", - "rand 0.8.5", - "serde", - "serde_json", - "serde_yaml 0.8.26", - "sui-data-ingestion-core", - "sui-json-rpc", - "sui-storage", - "sui-types", - "telemetry-subscribers", - "tempfile", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "suiop-cli" -version = "0.2.5" -dependencies = [ - "anyhow", - "axum", - "base64 0.21.2", - "chrono", - "clap", - "colored", - "dirs 4.0.0", - "docker-api", - "field_names", - "include_dir", - "inquire", - "open", - "prettytable-rs", - "rand 0.8.5", - "regex", - "reqwest", - "semver 1.0.16", - "serde", - "serde_json", - "serde_yaml 0.8.26", - "sha2 0.10.6", - "spinners", - "strum 0.24.1", - "tabled", - "tempfile", - "tokio", - "toml_edit 0.19.10", - "tracing", - "tracing-subscriber", + "move-core-types", + "move-vm-config", + "sui-types", ] [[package]] -name = "supports-color" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9829b314621dfc575df4e409e79f9d6a66a3bd707ab73f23cb4aa3a854ac854f" +name = "sui-verifier-v2" +version = "0.1.0" dependencies = [ - "is_ci", + "move-abstract-stack", + "move-binary-format", + "move-bytecode-utils", + "move-bytecode-verifier-meter", + "move-bytecode-verifier-v2", + "move-core-types", + "move-vm-config", + "sui-protocol-config", + "sui-types", ] -[[package]] -name = "supports-hyperlinks" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0a1e5168041f5f3ff68ff7d95dcb9c8749df29f6e7e89ada40dd4c9de404ee" - -[[package]] -name = "supports-unicode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" - [[package]] name = "symbolic-common" version = "10.2.1" @@ -14683,21 +11091,6 @@ dependencies = [ "unicode-xid 0.2.4", ] -[[package]] -name = "sysinfo" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975fe381e0ecba475d4acff52466906d95b153a40324956552e027b2a9eaa89e" -dependencies = [ - "cfg-if", - "core-foundation-sys", - "libc", - "ntapi", - "once_cell", - "rayon", - "winapi", -] - [[package]] name = "tabled" version = "0.12.2" @@ -14722,16 +11115,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "tabular" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a2882c514780a1973df90de9d68adcd8871bacc9a6331c3f28e6d2ff91a3d1" -dependencies = [ - "strip-ansi-escapes", - "unicode-width", -] - [[package]] name = "tagptr" version = "0.2.0" @@ -14744,44 +11127,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "tar" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "target-lexicon" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" - -[[package]] -name = "target-spec" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb0303f2cecb4171c439135b28c33fe9da7b9fd7816fe674761834da70c9778" -dependencies = [ - "cfg-expr", - "guppy-workspace-hack", - "serde", - "target-lexicon", -] - -[[package]] -name = "task-local-extensions" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" -dependencies = [ - "pin-utils", -] - [[package]] name = "telemetry-subscribers" version = "0.2.0" @@ -14795,10 +11140,10 @@ dependencies = [ "crossterm", "futures", "once_cell", - "opentelemetry 0.20.0", + "opentelemetry", "opentelemetry-otlp", "opentelemetry-proto", - "opentelemetry_api 0.20.0", + "opentelemetry_api", "prometheus", "prost 0.11.9", "tokio", @@ -14822,17 +11167,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "term" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" -dependencies = [ - "dirs-next", - "rustversion", - "winapi", -] - [[package]] name = "termcolor" version = "1.1.3" @@ -14923,7 +11257,7 @@ version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d187b450bfb5b7939f82f9747dc1ebb15a7a9c4a93cd304a41aece7149608b" dependencies = [ - "darling 0.14.2", + "darling", "if_chain", "lazy_static", "proc-macro2 1.0.78", @@ -14949,17 +11283,6 @@ dependencies = [ "test-fuzz-internal", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" -dependencies = [ - "smawk", - "unicode-linebreak", - "unicode-width", -] - [[package]] name = "thiserror" version = "1.0.56" @@ -14998,17 +11321,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "ordered-float 2.10.1", -] - [[package]] name = "time" version = "0.3.31" @@ -15017,8 +11329,6 @@ checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", - "libc", - "num_threads", "powerfmt", "serde", "time-core", @@ -15047,7 +11357,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" dependencies = [ "anyhow", - "hmac 0.12.1", + "hmac", "once_cell", "pbkdf2 0.11.0", "rand 0.8.5", @@ -15113,21 +11423,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "tokio-cron-scheduler" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1215c91d6f74868e18a65bda99853e012cfb2a0e42f3438382e318277da76a0" -dependencies = [ - "chrono", - "cron", - "num-derive", - "num-traits", - "tokio", - "tracing", - "uuid 1.2.2", -] - [[package]] name = "tokio-io-timeout" version = "1.2.0" @@ -15255,7 +11550,6 @@ version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" dependencies = [ - "indexmap 1.9.3", "serde", ] @@ -15265,19 +11559,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec" dependencies = [ - "indexmap 1.9.3", "serde", "serde_spanned", - "toml_datetime 0.6.2", + "toml_datetime", "toml_edit 0.19.10", ] -[[package]] -name = "toml_datetime" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" - [[package]] name = "toml_datetime" version = "0.6.2" @@ -15299,18 +11586,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1541ba70885967e662f69d31ab3aeca7b1aaecfcd58679590b893e9239c3646" -dependencies = [ - "combine", - "indexmap 1.9.3", - "itertools 0.10.5", - "toml_datetime 0.5.1", -] - [[package]] name = "toml_edit" version = "0.19.10" @@ -15320,7 +11595,7 @@ dependencies = [ "indexmap 1.9.3", "serde", "serde_spanned", - "toml_datetime 0.6.2", + "toml_datetime", "winnow 0.4.6", ] @@ -15472,7 +11747,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "async-compression 0.3.15", + "async-compression", "base64 0.13.1", "bitflags 1.3.2", "bytes", @@ -15552,24 +11827,12 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-error" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" -dependencies = [ - "tracing", - "tracing-subscriber", -] - [[package]] name = "tracing-futures" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "futures", - "futures-task", "pin-project", "tracing", ] @@ -15592,8 +11855,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8" dependencies = [ "once_cell", - "opentelemetry 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry", + "opentelemetry_sdk", "smallvec", "tracing", "tracing-core", @@ -15644,23 +11907,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "transaction-fuzzer" -version = "0.1.0" -dependencies = [ - "move-core-types", - "once_cell", - "proptest", - "proptest-derive", - "rand 0.8.5", - "sui-core", - "sui-move-build", - "sui-protocol-config", - "sui-types", - "tokio", - "tracing", -] - [[package]] name = "treeline" version = "0.1.0" @@ -15679,15 +11925,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" -[[package]] -name = "ttl_cache" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4189890526f0168710b6ee65ceaedf1460c48a14318ceec933cb26baa492096a" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "tui" version = "0.19.0" @@ -15867,12 +12104,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - [[package]] name = "unicode-normalization" version = "0.1.22" @@ -15916,12 +12147,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "unsafe-libyaml" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" - [[package]] name = "unsigned-varint" version = "0.7.1" @@ -15951,22 +12176,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "ureq" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" -dependencies = [ - "base64 0.21.2", - "flate2", - "log", - "once_cell", - "rustls 0.21.12", - "rustls-webpki 0.101.7", - "url", - "webpki-roots 0.25.2", -] - [[package]] name = "url" version = "2.3.1" @@ -16067,27 +12276,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" -[[package]] -name = "vte" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983" -dependencies = [ - "arrayvec 0.5.2", - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", -] - [[package]] name = "wait-timeout" version = "0.2.0" @@ -16221,21 +12409,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.60" @@ -16614,17 +12787,6 @@ dependencies = [ "tap", ] -[[package]] -name = "x" -version = "1.29.2" -dependencies = [ - "anyhow", - "camino", - "clap", - "nexlint", - "nexlint-lints", -] - [[package]] name = "x509-parser" version = "0.14.0" @@ -16643,23 +12805,6 @@ dependencies = [ "time", ] -[[package]] -name = "xattr" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914566e6413e7fa959cc394fb30e563ba80f3541fbd40816d4c05a0fc3f2a0f1" -dependencies = [ - "libc", - "linux-raw-sys 0.4.12", - "rustix 0.38.28", -] - -[[package]] -name = "xml-rs" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "699d0104bcdd7e7af6d093d6c6e2d0c479b8a129ee0d1023b31d2e0c71bfdda2" - [[package]] name = "xmlparser" version = "0.13.5" @@ -16687,36 +12832,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" dependencies = [ - "bit-vec", - "num-bigint 0.4.4", - "time", -] - -[[package]] -name = "yup-oauth2" -version = "8.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24bea7df5a9a74a9a0de92f22e5ab3fb9505dd960c7f1f00de5b7231d9d97206" -dependencies = [ - "anyhow", - "async-trait", - "base64 0.13.1", - "futures", - "http", - "hyper", - "hyper-rustls 0.24.0", - "itertools 0.10.5", - "log", - "percent-encoding", - "rustls 0.21.12", - "rustls-pemfile", - "seahash", - "serde", - "serde_json", "time", - "tokio", - "tower-service", - "url", ] [[package]] @@ -16746,16 +12862,7 @@ version = "0.12.3+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", -] - -[[package]] -name = "zstd" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" -dependencies = [ - "zstd-safe 7.0.0", + "zstd-safe", ] [[package]] @@ -16768,15 +12875,6 @@ dependencies = [ "zstd-sys", ] -[[package]] -name = "zstd-safe" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" -dependencies = [ - "zstd-sys", -] - [[package]] name = "zstd-sys" version = "2.0.8+zstd.1.5.5" diff --git a/Cargo.toml b/Cargo.toml index 70724e6aa829d..95c5cf8727683 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,16 +2,15 @@ resolver = "2" exclude = [ - "examples/tic-tac-toe/cli", - "external-crates/move/crates/bytecode-interpreter-crypto", - "external-crates/move/crates/bytecode-verifier-libfuzzer", - "external-crates/move/crates/bytecode-verifier-tests", - "external-crates/move/crates/bytecode-verifier-prop-tests", - "external-crates/move/crates/bytecode-verifier-transactional-tests", - "external-crates/move/crates/enum-compat-util", - "external-crates/move/crates/invalid-mutations", - "external-crates/move/crates/language-benchmarks", - "external-crates/move/crates/module-generation", + # "external-crates/move/crates/bytecode-interpreter-crypto", + # "external-crates/move/crates/bytecode-verifier-libfuzzer", + # "external-crates/move/crates/bytecode-verifier-tests", + # "external-crates/move/crates/bytecode-verifier-prop-tests", + # "external-crates/move/crates/bytecode-verifier-transactional-tests", + # "external-crates/move/crates/enum-compat-util", + # "external-crates/move/crates/invalid-mutations", + # "external-crates/move/crates/language-benchmarks", + # "external-crates/move/crates/module-generation", "external-crates/move/crates/move-abstract-interpreter", "external-crates/move/crates/move-abstract-stack", "external-crates/move/crates/move-analyzer", @@ -21,25 +20,25 @@ exclude = [ "external-crates/move/crates/move-bytecode-utils", "external-crates/move/crates/move-bytecode-verifier", "external-crates/move/crates/move-bytecode-verifier-meter", - "external-crates/move/crates/move-bytecode-viewer", + # "external-crates/move/crates/move-bytecode-viewer", "external-crates/move/crates/move-cli", "external-crates/move/crates/move-command-line-common", "external-crates/move/crates/move-compiler", - "external-crates/move/crates/move-compiler-transactional-tests", + # "external-crates/move/crates/move-compiler-transactional-tests", "external-crates/move/crates/move-core-types", - "external-crates/move/crates/move-coverage", + # "external-crates/move/crates/move-coverage", "external-crates/move/crates/move-disassembler", - "external-crates/move/crates/move-docgen", - "external-crates/move/crates/move-ir-compiler", - "external-crates/move/crates/move-ir-compiler-transactional-tests", - "external-crates/move/crates/move-ir-to-bytecode", - "external-crates/move/crates/move-ir-to-bytecode-syntax", + # "external-crates/move/crates/move-docgen", + # "external-crates/move/crates/move-ir-compiler", + # "external-crates/move/crates/move-ir-compiler-transactional-tests", + # "external-crates/move/crates/move-ir-to-bytecode", + # "external-crates/move/crates/move-ir-to-bytecode-syntax", "external-crates/move/crates/move-ir-types", "external-crates/move/crates/move-model", "external-crates/move/crates/move-package", - "external-crates/move/crates/move-proc-macros", + # "external-crates/move/crates/move-proc-macros", "external-crates/move/crates/move-prover", - "external-crates/move/crates/move-prover-test-utils", + # "external-crates/move/crates/move-prover-test-utils", "external-crates/move/crates/move-stackless-bytecode", "external-crates/move/crates/move-stdlib", "external-crates/move/crates/move-stdlib-natives", @@ -47,14 +46,14 @@ exclude = [ "external-crates/move/crates/move-transactional-test-runner", "external-crates/move/crates/move-unit-test", "external-crates/move/crates/move-vm-config", - "external-crates/move/crates/move-vm-integration-tests", + # "external-crates/move/crates/move-vm-integration-tests", "external-crates/move/crates/move-vm-profiler", "external-crates/move/crates/move-vm-runtime", "external-crates/move/crates/move-vm-test-utils", - "external-crates/move/crates/move-vm-transactional-tests", + # "external-crates/move/crates/move-vm-transactional-tests", "external-crates/move/crates/move-vm-types", - "external-crates/move/crates/serializer-tests", - "external-crates/move/crates/test-generation", + # "external-crates/move/crates/serializer-tests", + # "external-crates/move/crates/test-generation", "external-crates/move/move-execution/v0/crates/move-bytecode-verifier", "external-crates/move/move-execution/v0/crates/move-stdlib-natives", "external-crates/move/move-execution/v0/crates/move-vm-runtime", @@ -65,136 +64,136 @@ exclude = [ "external-crates/move/move-execution/v2/crates/move-bytecode-verifier", "external-crates/move/move-execution/v2/crates/move-stdlib-natives", "external-crates/move/move-execution/v2/crates/move-vm-runtime", - "sdk/move-bytecode-template", + # "sdk/move-bytecode-template", ] members = [ - "consensus/config", - "consensus/core", - "crates/anemo-benchmark", + # "consensus/config", + # "consensus/core", + # "crates/anemo-benchmark", "crates/bin-version", "crates/mysten-common", "crates/mysten-metrics", "crates/mysten-network", - "crates/mysten-service", + # "crates/mysten-service", "crates/mysten-util-mem", "crates/mysten-util-mem-derive", "crates/prometheus-closure-metric", "crates/shared-crypto", "crates/simulacrum", - "crates/sui", - "crates/sui-adapter-transactional-tests", - "crates/sui-analytics-indexer", - "crates/sui-analytics-indexer-derive", + # "crates/sui", + # "crates/sui-adapter-transactional-tests", + # "crates/sui-analytics-indexer", + # "crates/sui-analytics-indexer-derive", "crates/sui-archival", "crates/sui-authority-aggregation", - "crates/sui-aws-orchestrator", - "crates/sui-benchmark", + # "crates/sui-aws-orchestrator", + # "crates/sui-benchmark", "crates/sui-bridge", - "crates/sui-bridge-cli", - "crates/sui-bridge-indexer", - "crates/sui-cluster-test", + # "crates/sui-bridge-cli", + # "crates/sui-bridge-indexer", + # "crates/sui-cluster-test", "crates/sui-common", "crates/sui-config", "crates/sui-core", - "crates/sui-cost", + # "crates/sui-cost", "crates/sui-data-ingestion", "crates/sui-data-ingestion-core", - "crates/sui-e2e-tests", + # "crates/sui-e2e-tests", "crates/sui-enum-compat-util", - "crates/sui-faucet", + # "crates/sui-faucet", "crates/sui-framework", "crates/sui-framework-snapshot", - "crates/sui-framework-tests", + # "crates/sui-framework-tests", "crates/sui-genesis-builder", - "crates/sui-graphql-config", - "crates/sui-graphql-e2e-tests", - "crates/sui-graphql-rpc", - "crates/sui-graphql-rpc-client", - "crates/sui-graphql-rpc-headers", + # "crates/sui-graphql-config",sui-indexer + # "crates/sui-graphql-e2e-tests", + # "crates/sui-graphql-rpc", + # "crates/sui-graphql-rpc-client", + # "crates/sui-graphql-rpc-headers", "crates/sui-indexer", "crates/sui-json", - "crates/sui-json-rpc", - "crates/sui-json-rpc-api", - "crates/sui-json-rpc-tests", - "crates/sui-json-rpc-types", + # "crates/sui-json-rpc", + # "crates/sui-json-rpc-api", + # "crates/sui-json-rpc-tests", + # "crates/sui-json-rpc-types", "crates/sui-keys", - "crates/sui-light-client", + # "crates/sui-light-client", "crates/sui-macros", - "crates/sui-metric-checker", + # "crates/sui-metric-checker", "crates/sui-move", "crates/sui-move-build", - "crates/sui-move-lsp", + # "crates/sui-move-lsp", "crates/sui-network", "crates/sui-node", "crates/sui-open-rpc", "crates/sui-open-rpc-macros", - "crates/sui-oracle", - "crates/sui-package-management", + # "crates/sui-oracle", + # "crates/sui-package-management", "crates/sui-package-resolver", "crates/sui-proc-macros", "crates/sui-protocol-config", "crates/sui-protocol-config-macros", - "crates/sui-proxy", - "crates/sui-replay", + # "crates/sui-proxy", + # "crates/sui-replay", "crates/sui-rest-api", - "crates/sui-rosetta", - "crates/sui-rpc-loadgen", + # "crates/sui-rosetta", + # "crates/sui-rpc-loadgen", "crates/sui-sdk", - "crates/sui-security-watchdog", + # "crates/sui-security-watchdog", "crates/sui-simulator", - "crates/sui-single-node-benchmark", + # "crates/sui-single-node-benchmark", "crates/sui-snapshot", - "crates/sui-source-validation", - "crates/sui-source-validation-service", - "crates/sui-storage", - "crates/sui-surfer", + # "crates/sui-source-validation", + # "crates/sui-source-validation-service", + # "crates/sui-storage", + # "crates/sui-surfer", "crates/sui-swarm", "crates/sui-swarm-config", "crates/sui-telemetry", "crates/sui-test-transaction-builder", - "crates/sui-test-validator", + # "crates/sui-test-validator", "crates/sui-tls", - "crates/sui-tool", + # "crates/sui-tool", "crates/sui-transaction-builder", "crates/sui-transaction-checks", - "crates/sui-transactional-test-runner", - "crates/sui-types", - "crates/sui-upgrade-compatibility-transactional-tests", - "crates/sui-verifier-transactional-tests", - "crates/suins-indexer", - "crates/suiop-cli", + # "crates/sui-transactional-test-runner", + # "crates/sui-types", + # "crates/sui-upgrade-compatibility-transactional-tests", + # "crates/sui-verifier-transactional-tests", + # "crates/suins-indexer", + # "crates/suiop-cli", "crates/telemetry-subscribers", - "crates/test-cluster", - "crates/transaction-fuzzer", + # "crates/test-cluster", + # "crates/transaction-fuzzer", "crates/typed-store", "crates/typed-store-derive", "crates/typed-store-error", - "crates/x", - "narwhal/config", - "narwhal/crypto", - "narwhal/executor", - "narwhal/network", - "narwhal/node", - "narwhal/primary", - "narwhal/storage", - "narwhal/test-utils", - "narwhal/types", - "narwhal/worker", + # "crates/x", + # "narwhal/config", + # "narwhal/crypto", + # "narwhal/executor", + # "narwhal/network", + # "narwhal/node", + # "narwhal/primary", + # "narwhal/storage", + # "narwhal/test-utils", + # "narwhal/types", + # "narwhal/worker", "sui-execution", - "sui-execution/cut", - "sui-execution/latest/sui-adapter", - "sui-execution/latest/sui-move-natives", - "sui-execution/latest/sui-verifier", - "sui-execution/v0/sui-adapter", - "sui-execution/v0/sui-move-natives", - "sui-execution/v0/sui-verifier", - "sui-execution/v1/sui-adapter", - "sui-execution/v1/sui-move-natives", - "sui-execution/v1/sui-verifier", - "sui-execution/v2/sui-adapter", - "sui-execution/v2/sui-move-natives", - "sui-execution/v2/sui-verifier", + # "sui-execution/cut", + # "sui-execution/latest/sui-adapter", + # "sui-execution/latest/sui-move-natives", + # "sui-execution/latest/sui-verifier", + # "sui-execution/v0/sui-adapter", + # "sui-execution/v0/sui-move-natives", + # "sui-execution/v0/sui-verifier", + # "sui-execution/v1/sui-adapter", + # "sui-execution/v1/sui-move-natives", + # "sui-execution/v1/sui-verifier", + # "sui-execution/v2/sui-adapter", + # "sui-execution/v2/sui-move-natives", + # "sui-execution/v2/sui-verifier", ] [workspace.package] @@ -340,7 +339,7 @@ hashbrown = "0.12" hdrhistogram = "7.5.1" hex = "0.4.3" hex-literal = "0.3.4" -highlight = "all" +# highlight = "all" http = "0.2.8" http-body = "0.4.5" humantime = "2.1.0" @@ -538,14 +537,13 @@ webpki = { version = "0.101.0", package = "rustls-webpki", features = [ x509-parser = "0.14.0" zeroize = "1.6.0" zstd = "0.12.3" - # Move dependencies move-abstract-interpreter = { path = "external-crates/move/crates/move-abstract-interpreter" } move-abstract-stack = { path = "external-crates/move/crates/move-abstract-stack" } move-analyzer = { path = "external-crates/move/crates/move-analyzer" } move-binary-format = { path = "external-crates/move/crates/move-binary-format" } -move-bytecode-source-map = { path = "external-crates/move/crates/move-bytecode-source-map" } move-bytecode-utils = { path = "external-crates/move/crates/move-bytecode-utils" } +# move-bytecode-source-map = { path = "external-crates/move/crates/move-bytecode-source-map" } move-bytecode-verifier-meter = { path = "external-crates/move/crates/move-bytecode-verifier-meter" } move-cli = { path = "external-crates/move/crates/move-cli" } move-command-line-common = { path = "external-crates/move/crates/move-command-line-common" } @@ -565,7 +563,9 @@ move-vm-test-utils = { path = "external-crates/move/crates/move-vm-test-utils/", "tiered-gas", ] } move-vm-types = { path = "external-crates/move/crates/move-vm-types" } - +# move-transactional-test-runner = { path = "external-crates/move/crates/move-transactional-test-runner" } +# move-stackless-bytecode = { path = "external-crates/move/crates/move-stackless-bytecode" } +# move-analyzer = { path = "external-crates/move/crates/move-analyzer" } fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538" } fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538" } fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "55e7e568842939e01c8545a71d72e2402ad74538", package = "fastcrypto-zkp" } @@ -578,10 +578,10 @@ passkey-authenticator = { version = "0.2.0" } coset = "0.3" p256 = { version = "0.13.2", features = ["ecdsa"] } -# anemo dependencies +# # anemo dependencies anemo = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" } anemo-build = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" } -anemo-cli = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" } +# anemo-cli = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" } anemo-tower = { git = "https://github.com/mystenlabs/anemo.git", rev = "26d415eb9aa6a2417be3c03c57d6e93c30bd1ad7" } # core-types with json format for REST api @@ -591,42 +591,45 @@ sui-sdk2 = { package = "sui-sdk", git = "https://github.com/mystenlabs/sui-rust- ] } ### Workspace Members ### -anemo-benchmark = { path = "crates/anemo-benchmark" } +# anemo-benchmark = { path = "crates/anemo-benchmark" } bin-version = { path = "crates/bin-version" } mysten-common = { path = "crates/mysten-common" } mysten-metrics = { path = "crates/mysten-metrics" } mysten-network = { path = "crates/mysten-network" } -mysten-service = { path = "crates/mysten-service" } +# mysten-service = { path = "crates/mysten-service" } mysten-util-mem = { path = "crates/mysten-util-mem" } mysten-util-mem-derive = { path = "crates/mysten-util-mem-derive" } prometheus-closure-metric = { path = "crates/prometheus-closure-metric" } shared-crypto = { path = "crates/shared-crypto" } simulacrum = { path = "crates/simulacrum" } -sui = { path = "crates/sui" } -sui-adapter-transactional-tests = { path = "crates/sui-adapter-transactional-tests" } -sui-analytics-indexer = { path = "crates/sui-analytics-indexer" } -sui-analytics-indexer-derive = { path = "crates/sui-analytics-indexer-derive" } +# sui = { path = "crates/sui" } +# sui-adapter-transactional-tests = { path = "crates/sui-adapter-transactional-tests" } +# sui-analytics-indexer = { path = "crates/sui-analytics-indexer" } +# sui-analytics-indexer-derive = { path = "crates/sui-analytics-indexer-derive" } sui-archival = { path = "crates/sui-archival" } sui-authority-aggregation = { path = "crates/sui-authority-aggregation" } -sui-benchmark = { path = "crates/sui-benchmark" } +# sui-benchmark = { path = "crates/sui-benchmark" } sui-bridge = { path = "crates/sui-bridge" } -sui-cluster-test = { path = "crates/sui-cluster-test" } +# sui-cluster-test = { path = "crates/sui-cluster-test" } sui-common = { path = "crates/sui-common" } sui-config = { path = "crates/sui-config" } sui-core = { path = "crates/sui-core" } -sui-cost = { path = "crates/sui-cost" } -sui-data-ingestion = { path = "crates/sui-data-ingestion" } +# sui-cost = { path = "crates/sui-cost" } +# sui-data-ingestion = { path = "crates/sui-data-ingestion" } sui-data-ingestion-core = { path = "crates/sui-data-ingestion-core" } -sui-e2e-tests = { path = "crates/sui-e2e-tests" } sui-enum-compat-util = { path = "crates/sui-enum-compat-util" } -sui-faucet = { path = "crates/sui-faucet" } +# sui-faucet = { path = "crates/sui-faucet" } sui-framework = { path = "crates/sui-framework" } sui-framework-snapshot = { path = "crates/sui-framework-snapshot" } -sui-framework-tests = { path = "crates/sui-framework-tests" } sui-graphql-config = { path = "crates/sui-graphql-config" } sui-graphql-rpc = { path = "crates/sui-graphql-rpc" } sui-graphql-rpc-client = { path = "crates/sui-graphql-rpc-client" } sui-graphql-rpc-headers = { path = "crates/sui-graphql-rpc-headers" } +# sui-framework-tests = { path = "crates/sui-framework-tests" } +# sui-graphql-config = { path = "crates/sui-graphql-config" } +# sui-graphql-rpc = { path = "crates/sui-graphql-rpc" } +# sui-graphql-rpc-client = { path = "crates/sui-graphql-rpc-client" } +# sui-graphql-rpc-headers = { path = "crates/sui-graphql-rpc-headers" } sui-genesis-builder = { path = "crates/sui-genesis-builder" } sui-indexer = { path = "crates/sui-indexer" } sui-json = { path = "crates/sui-json" } @@ -635,10 +638,10 @@ sui-json-rpc-api = { path = "crates/sui-json-rpc-api" } sui-json-rpc-types = { path = "crates/sui-json-rpc-types" } sui-keys = { path = "crates/sui-keys" } sui-macros = { path = "crates/sui-macros" } -sui-metric-checker = { path = "crates/sui-metric-checker" } +# sui-metric-checker = { path = "crates/sui-metric-checker" } sui-move = { path = "crates/sui-move" } sui-move-build = { path = "crates/sui-move-build" } -sui-move-lsp = { path = "crates/sui-move-lsp" } +# sui-move-lsp = { path = "crates/sui-move-lsp" } sui-network = { path = "crates/sui-network" } sui-node = { path = "crates/sui-node" } sui-open-rpc = { path = "crates/sui-open-rpc" } @@ -648,38 +651,38 @@ sui-package-resolver = { path = "crates/sui-package-resolver" } sui-proc-macros = { path = "crates/sui-proc-macros" } sui-protocol-config = { path = "crates/sui-protocol-config" } sui-protocol-config-macros = { path = "crates/sui-protocol-config-macros" } -sui-proxy = { path = "crates/sui-proxy" } -sui-replay = { path = "crates/sui-replay" } -sui-rosetta = { path = "crates/sui-rosetta" } -sui-rpc-loadgen = { path = "crates/sui-rpc-loadgen" } +# sui-proxy = { path = "crates/sui-proxy" } +# sui-replay = { path = "crates/sui-replay" } +# sui-rosetta = { path = "crates/sui-rosetta" } +# sui-rpc-loadgen = { path = "crates/sui-rpc-loadgen" } sui-sdk = { path = "crates/sui-sdk" } sui-simulator = { path = "crates/sui-simulator" } sui-snapshot = { path = "crates/sui-snapshot" } -sui-source-validation = { path = "crates/sui-source-validation" } -sui-source-validation-service = { path = "crates/sui-source-validation-service" } +# sui-source-validation = { path = "crates/sui-source-validation" } +# sui-source-validation-service = { path = "crates/sui-source-validation-service" } sui-storage = { path = "crates/sui-storage" } -sui-surfer = { path = "crates/sui-surfer" } +# sui-surfer = { path = "crates/sui-surfer" } sui-swarm = { path = "crates/sui-swarm" } sui-swarm-config = { path = "crates/sui-swarm-config" } sui-telemetry = { path = "crates/sui-telemetry" } sui-test-transaction-builder = { path = "crates/sui-test-transaction-builder" } -sui-test-validator = { path = "crates/sui-test-validator" } +# sui-test-validator = { path = "crates/sui-test-validator" } sui-tls = { path = "crates/sui-tls" } sui-rest-api = { path = "crates/sui-rest-api" } -sui-tool = { path = "crates/sui-tool" } +# sui-tool = { path = "crates/sui-tool" } sui-transaction-builder = { path = "crates/sui-transaction-builder" } sui-transaction-checks = { path = "crates/sui-transaction-checks" } -sui-transactional-test-runner = { path = "crates/sui-transactional-test-runner" } +# sui-transactional-test-runner = { path = "crates/sui-transactional-test-runner" } sui-types = { path = "crates/sui-types" } -sui-upgrade-compatibility-transactional-tests = { path = "crates/sui-upgrade-compatibility-transactional-tests" } -sui-verifier-transactional-tests = { path = "crates/sui-verifier-transactional-tests" } +# sui-upgrade-compatibility-transactional-tests = { path = "crates/sui-upgrade-compatibility-transactional-tests" } +# sui-verifier-transactional-tests = { path = "crates/sui-verifier-transactional-tests" } telemetry-subscribers = { path = "crates/telemetry-subscribers" } test-cluster = { path = "crates/test-cluster" } -transaction-fuzzer = { path = "crates/transaction-fuzzer" } +# transaction-fuzzer = { path = "crates/transaction-fuzzer" } typed-store = { path = "crates/typed-store" } typed-store-derive = { path = "crates/typed-store-derive" } typed-store-error = { path = "crates/typed-store-error" } -x = { path = "crates/x" } +# x = { path = "crates/x" } consensus-config = { path = "consensus/config" } consensus-core = { path = "consensus/core" } @@ -689,8 +692,8 @@ narwhal-crypto = { path = "narwhal/crypto" } narwhal-executor = { path = "narwhal/executor" } narwhal-network = { path = "narwhal/network" } narwhal-node = { path = "narwhal/node" } -narwhal-primary = { path = "narwhal/primary" } -narwhal-storage = { path = "narwhal/storage" } +# narwhal-primary = { path = "narwhal/primary" } +# narwhal-storage = { path = "narwhal/storage" } narwhal-test-utils = { path = "narwhal/test-utils" } narwhal-types = { path = "narwhal/types" } narwhal-worker = { path = "narwhal/worker" } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 6d833ff50699a..c6e4d7d5031fa 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.75" +channel = "1.79" From 6a094110326d26b6a8218dbb54aab109252815b0 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Tue, 30 Jul 2024 14:42:47 +0200 Subject: [PATCH 30/57] inject odin dependency into sui indexer --- .cargo/config | 3 + Cargo.lock | 394 +++++++++++++++++++++++++++++++--- Cargo.toml | 3 + crates/sui-indexer/Cargo.toml | 16 +- 4 files changed, 384 insertions(+), 32 deletions(-) diff --git a/.cargo/config b/.cargo/config index b6879bf01e5f0..77ddee744f4d2 100644 --- a/.cargo/config +++ b/.cargo/config @@ -42,3 +42,6 @@ mysql-clippy = [ [build] rustflags = ["-C", "force-frame-pointers=yes", "-C", "force-unwind-tables=yes"] + +[net] +git-fetch-with-cli = true \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index e204d9e3ac53c..cce829020e67a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -164,7 +164,7 @@ dependencies = [ "async-trait", "bincode", "bytes", - "ed25519", + "ed25519 1.5.3", "futures", "hex", "http", @@ -585,6 +585,39 @@ dependencies = [ "futures-lite", ] +[[package]] +name = "async-nats" +version = "0.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8df97cb8fc4a884af29ab383e9292ea0939cfcdd7d2a17179086dc6c427e7f" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "memchr", + "nkeys", + "nuid", + "once_cell", + "portable-atomic 1.7.0", + "rand 0.8.5", + "regex", + "ring 0.17.8", + "rustls-native-certs 0.7.1", + "rustls-pemfile 2.1.2", + "rustls-webpki 0.102.6", + "serde", + "serde_json", + "serde_nanos", + "serde_repr", + "thiserror", + "time", + "tokio", + "tokio-rustls 0.26.0", + "tracing", + "tryhard", + "url", +] + [[package]] name = "async-recursion" version = "1.0.4" @@ -1169,7 +1202,7 @@ dependencies = [ "hyper", "pin-project-lite", "rustls 0.21.12", - "rustls-pemfile", + "rustls-pemfile 1.0.2", "tokio", "tokio-rustls 0.24.0", "tower-service", @@ -1405,6 +1438,27 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bitcode" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48bc1c27654127a24c476d40198746860ef56475f41a601bfa5c4d0f832968f0" +dependencies = [ + "bitcode_derive", + "bytemuck", +] + +[[package]] +name = "bitcode_derive" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "bitcoin-private" version = "0.1.0" @@ -1612,7 +1666,7 @@ checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" dependencies = [ "memchr", "once_cell", - "regex-automata", + "regex-automata 0.1.10", "serde", ] @@ -1711,7 +1765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10ca87c81aaa3a949dbbe2b5e6c2c45dbc94ba4897e45ea31ff9ec5087be3dc" dependencies = [ "cached_proc_macro_types", - "darling", + "darling 0.14.2", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", @@ -2435,6 +2489,32 @@ dependencies = [ "cipher", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "curve25519-dalek-ng" version = "4.1.1" @@ -2498,8 +2578,18 @@ version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.14.2", + "darling_macro 0.14.2", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -2516,17 +2606,42 @@ dependencies = [ "syn 1.0.107", ] +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.78", + "quote 1.0.35", + "strsim 0.11.1", + "syn 2.0.48", +] + [[package]] name = "darling_macro" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ - "darling_core", + "darling_core 0.14.2", "quote 1.0.35", "syn 1.0.107", ] +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -2679,7 +2794,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ - "darling", + "darling 0.14.2", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", @@ -2883,6 +2998,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "downcast" version = "0.11.0" @@ -2943,6 +3064,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "signature 2.0.0", +] + [[package]] name = "ed25519-consensus" version = "2.1.0" @@ -2958,6 +3088,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519 2.2.3", + "sha2 0.10.6", + "signature 2.0.0", + "subtle", +] + [[package]] name = "either" version = "1.8.0" @@ -3618,6 +3761,12 @@ dependencies = [ "syn 1.0.107", ] +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "filetime" version = "0.2.22" @@ -4287,7 +4436,7 @@ dependencies = [ "hyper", "log", "rustls 0.20.7", - "rustls-native-certs", + "rustls-native-certs 0.6.2", "tokio", "tokio-rustls 0.23.4", "webpki-roots 0.22.6", @@ -4303,7 +4452,7 @@ dependencies = [ "hyper", "log", "rustls 0.21.12", - "rustls-native-certs", + "rustls-native-certs 0.6.2", "tokio", "tokio-rustls 0.24.0", "webpki-roots 0.23.1", @@ -4483,7 +4632,7 @@ checksum = "4295cbb7573c16d310e99e713cf9e75101eb190ab31fccd35f2d2691b4352b19" dependencies = [ "console", "number_prefix", - "portable-atomic", + "portable-atomic 0.3.19", "unicode-width", ] @@ -4691,7 +4840,7 @@ dependencies = [ "jsonrpsee-core", "jsonrpsee-types", "pin-project", - "rustls-native-certs", + "rustls-native-certs 0.6.2", "soketto", "thiserror", "tokio", @@ -5054,7 +5203,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -5927,7 +6076,7 @@ name = "msim-macros" version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=594c417e3716fc909b71a0a8ffd01ee5b25bf4b0#594c417e3716fc909b71a0a8ffd01ee5b25bf4b0" dependencies = [ - "darling", + "darling 0.14.2", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", @@ -6468,6 +6617,21 @@ dependencies = [ "libc", ] +[[package]] +name = "nkeys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2de02c883c178998da8d0c9816a88ef7ef5c58314dd1585c97a4a5679f3ab337" +dependencies = [ + "data-encoding", + "ed25519 2.2.3", + "ed25519-dalek", + "getrandom 0.2.15", + "log", + "rand 0.8.5", + "signatory", +] + [[package]] name = "no-std-compat" version = "0.4.1" @@ -6564,6 +6728,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nuid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc895af95856f929163a0aa20c26a78d26bfdc839f51b9d5aa7a5b79e52b7e83" +dependencies = [ + "rand 0.8.5", +] + [[package]] name = "num" version = "0.4.1" @@ -6784,7 +6957,7 @@ dependencies = [ "rand 0.8.5", "reqwest", "ring 0.16.20", - "rustls-pemfile", + "rustls-pemfile 1.0.2", "serde", "serde_json", "snafu", @@ -6794,6 +6967,23 @@ dependencies = [ "walkdir", ] +[[package]] +name = "odin" +version = "0.1.0" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=dependencies#a96959bb1d0656ed796a013518e5f799601ef176" +dependencies = [ + "async-nats", + "bitcode", + "futures", + "serde", + "serde_json", + "serde_with 3.8.1", + "structs", + "tokio", + "tracing", + "typeshare", +] + [[package]] name = "oid-registry" version = "0.6.1" @@ -7508,6 +7698,12 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + [[package]] name = "powerfmt" version = "0.2.0" @@ -8229,13 +8425,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.4" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" dependencies = [ "aho-corasick 1.0.2", "memchr", - "regex-syntax 0.7.2", + "regex-automata 0.3.7", + "regex-syntax 0.7.5", ] [[package]] @@ -8247,6 +8444,17 @@ dependencies = [ "regex-syntax 0.6.28", ] +[[package]] +name = "regex-automata" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +dependencies = [ + "aho-corasick 1.0.2", + "memchr", + "regex-syntax 0.7.5", +] + [[package]] name = "regex-syntax" version = "0.6.28" @@ -8255,9 +8463,9 @@ checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "reqwest" @@ -8283,7 +8491,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls 0.21.12", - "rustls-pemfile", + "rustls-pemfile 1.0.2", "serde", "serde_json", "serde_urlencoded", @@ -8535,6 +8743,20 @@ dependencies = [ "sct", ] +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.6", + "subtle", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.6.2" @@ -8542,7 +8764,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pemfile 1.0.2", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.2", + "rustls-pki-types", "schannel", "security-framework", ] @@ -8556,6 +8791,22 @@ dependencies = [ "base64 0.21.2", ] +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + [[package]] name = "rustls-webpki" version = "0.100.3" @@ -8576,6 +8827,17 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + [[package]] name = "rustversion" version = "1.0.11" @@ -8911,6 +9173,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_nanos" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a93142f0367a4cc53ae0fead1bcda39e85beccfad3dcd717656cacab94b12985" +dependencies = [ + "serde", +] + [[package]] name = "serde_path_to_error" version = "0.1.9" @@ -8922,13 +9193,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.10" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", - "syn 1.0.107", + "syn 2.0.48", ] [[package]] @@ -8973,7 +9244,7 @@ dependencies = [ "indexmap 1.9.3", "serde", "serde_json", - "serde_with_macros", + "serde_with_macros 2.1.0", "time", ] @@ -8986,9 +9257,12 @@ dependencies = [ "base64 0.22.1", "chrono", "hex", + "indexmap 1.9.3", + "indexmap 2.1.0", "serde", "serde_derive", "serde_json", + "serde_with_macros 3.8.1", "time", ] @@ -8998,12 +9272,24 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3452b4c0f6c1e357f73fdb87cd1efabaa12acf328c7a528e252893baeb3f4aa" dependencies = [ - "darling", + "darling 0.14.2", "proc-macro2 1.0.78", "quote 1.0.35", "syn 1.0.107", ] +[[package]] +name = "serde_with_macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +dependencies = [ + "darling 0.20.10", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "serde_yaml" version = "0.8.26" @@ -9163,6 +9449,18 @@ dependencies = [ "libc", ] +[[package]] +name = "signatory" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31" +dependencies = [ + "pkcs8 0.10.2", + "rand_core 0.6.4", + "signature 2.0.0", + "zeroize", +] + [[package]] name = "signature" version = "1.6.4" @@ -9418,6 +9716,21 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +[[package]] +name = "structs" +version = "0.1.0" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=dependencies#a96959bb1d0656ed796a013518e5f799601ef176" +dependencies = [ + "bitcode", + "dotenvy", + "once_cell", + "rayon", + "serde", + "serde_json", + "serde_with 3.8.1", + "typeshare", +] + [[package]] name = "strum" version = "0.24.1" @@ -10030,6 +10343,7 @@ dependencies = [ "move-core-types", "mysten-metrics", "ntest", + "odin", "prometheus", "rayon", "regex", @@ -10833,7 +11147,7 @@ dependencies = [ "anyhow", "axum", "axum-server", - "ed25519", + "ed25519 1.5.3", "fastcrypto", "pkcs8 0.9.0", "rand 0.8.5", @@ -11257,7 +11571,7 @@ version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d187b450bfb5b7939f82f9747dc1ebb15a7a9c4a93cd304a41aece7149608b" dependencies = [ - "darling", + "darling 0.14.2", "if_chain", "lazy_static", "proc-macro2 1.0.78", @@ -11486,6 +11800,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.12", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.14" @@ -11925,6 +12250,17 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "tryhard" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9f0a709784e86923586cff0d872dba54cd2d2e116b3bc57587d15737cfce9d" +dependencies = [ + "futures", + "pin-project-lite", + "tokio", +] + [[package]] name = "tui" version = "0.19.0" diff --git a/Cargo.toml b/Cargo.toml index 95c5cf8727683..bc66ce2fa4499 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -706,6 +706,9 @@ sui-execution = { path = "sui-execution" } # move-vm-runtime = { path = "external-crates/move/move-vm/runtime" } # move-bytecode-verifier = { path = "external-crates/move/move-bytecode-verifier" } + +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", branch = "dependencies", package = "odin" } + # suiop dependencies docker-api = "0.12.2" field_names = "0.2.0" diff --git a/crates/sui-indexer/Cargo.toml b/crates/sui-indexer/Cargo.toml index 5bfd59fcbc4de..721e457c6d466 100644 --- a/crates/sui-indexer/Cargo.toml +++ b/crates/sui-indexer/Cargo.toml @@ -7,6 +7,8 @@ publish = false edition = "2021" [dependencies] +odin = { workspace = true, version = "0.1.0" } + anyhow.workspace = true async-trait.workspace = true axum.workspace = true @@ -25,7 +27,7 @@ prometheus.workspace = true serde.workspace = true serde_json.workspace = true rayon.workspace = true -regex.workspace = true +regex = "1.9.1" tempfile.workspace = true thiserror.workspace = true tracing.workspace = true @@ -61,8 +63,16 @@ downcast = "0.11.0" [features] pg_integration = [] default = ["postgres-feature"] -postgres-feature = ["diesel/postgres", "diesel/postgres_backend", "diesel-derive-enum/postgres"] -mysql-feature = ["diesel/mysql", "diesel/mysql_backend", "diesel-derive-enum/mysql"] +postgres-feature = [ + "diesel/postgres", + "diesel/postgres_backend", + "diesel-derive-enum/postgres", +] +mysql-feature = [ + "diesel/mysql", + "diesel/mysql_backend", + "diesel-derive-enum/mysql", +] [dev-dependencies] sui-keys.workspace = true From a5a3bd85167dd452652053931e45631cac198c0b Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Wed, 31 Jul 2024 09:40:31 +0200 Subject: [PATCH 31/57] inject nats queue sender into a worker --- Cargo.lock | 32 +++---- Cargo.toml | 4 +- crates/sui-data-ingestion-core/Cargo.toml | 2 + .../sui-data-ingestion-core/src/executor.rs | 1 + crates/sui-indexer/src/db.rs | 3 + .../src/handlers/checkpoint_handler.rs | 6 ++ crates/sui-indexer/src/indexer.rs | 37 +++++--- crates/sui-indexer/src/main.rs | 11 ++- crates/sui-indexer/src/test_utils.rs | 5 ++ crates/sui-types/Cargo.toml | 3 + crates/sui-types/src/lib.rs | 1 + crates/sui-types/src/nats_queue.rs | 86 +++++++++++++++++++ 12 files changed, 160 insertions(+), 31 deletions(-) create mode 100644 crates/sui-types/src/nats_queue.rs diff --git a/Cargo.lock b/Cargo.lock index cce829020e67a..5eb26ecd87934 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -601,7 +601,7 @@ dependencies = [ "portable-atomic 1.7.0", "rand 0.8.5", "regex", - "ring 0.17.8", + "ring 0.17.3", "rustls-native-certs 0.7.1", "rustls-pemfile 2.1.2", "rustls-webpki 0.102.6", @@ -1950,7 +1950,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.0", + "strsim 0.11.1", "terminal_size", ] @@ -6626,7 +6626,7 @@ dependencies = [ "data-encoding", "ed25519 2.2.3", "ed25519-dalek", - "getrandom 0.2.15", + "getrandom 0.2.9", "log", "rand 0.8.5", "signatory", @@ -6970,7 +6970,7 @@ dependencies = [ [[package]] name = "odin" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=dependencies#a96959bb1d0656ed796a013518e5f799601ef176" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=sui-indexer-nats-update#6be6c61597198176244fd364110a77661e0ceb64" dependencies = [ "async-nats", "bitcode", @@ -8304,9 +8304,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.6.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -8314,14 +8314,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -8750,7 +8748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "once_cell", - "ring 0.17.8", + "ring 0.17.3", "rustls-pki-types", "rustls-webpki 0.102.6", "subtle", @@ -8833,7 +8831,7 @@ version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ - "ring 0.17.8", + "ring 0.17.3", "rustls-pki-types", "untrusted 0.9.0", ] @@ -9258,7 +9256,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.1.0", + "indexmap 2.2.6", "serde", "serde_derive", "serde_json", @@ -9712,14 +9710,14 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strsim" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structs" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=dependencies#a96959bb1d0656ed796a013518e5f799601ef176" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=sui-indexer-nats-update#6be6c61597198176244fd364110a77661e0ceb64" dependencies = [ "bitcode", "dotenvy", @@ -10197,6 +10195,7 @@ dependencies = [ "mysten-metrics", "notify", "object_store", + "odin", "prometheus", "rand 0.8.5", "serde", @@ -11236,6 +11235,7 @@ dependencies = [ "num-bigint 0.4.4", "num-traits", "num_enum 0.6.1", + "odin", "once_cell", "p256", "parking_lot 0.12.1", diff --git a/Cargo.toml b/Cargo.toml index bc66ce2fa4499..61032218b8b71 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -411,7 +411,7 @@ protobuf-src = "1.1.0" quinn-proto = "^0.10.5" quote = "1.0.23" rand = "0.8.5" -rayon = "1.5.3" +rayon = "1.10.0" rcgen = "0.9.2" regex = "1.7.1" reqwest = { version = "0.11.20", default_features = false, features = [ @@ -707,7 +707,7 @@ sui-execution = { path = "sui-execution" } # move-bytecode-verifier = { path = "external-crates/move/move-bytecode-verifier" } -odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", branch = "dependencies", package = "odin" } +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", branch = "sui-indexer-nats-update", package = "odin" } # suiop dependencies docker-api = "0.12.2" diff --git a/crates/sui-data-ingestion-core/Cargo.toml b/crates/sui-data-ingestion-core/Cargo.toml index 2c14170d76f4a..6b9aa4474f9af 100644 --- a/crates/sui-data-ingestion-core/Cargo.toml +++ b/crates/sui-data-ingestion-core/Cargo.toml @@ -7,6 +7,8 @@ edition = "2021" version = "0.1.0" [dependencies] +odin = { workspace = true, version = "0.1.0" } + anyhow.workspace = true async-trait.workspace = true backoff.workspace = true diff --git a/crates/sui-data-ingestion-core/src/executor.rs b/crates/sui-data-ingestion-core/src/executor.rs index 92bfda006852a..b27be2c68f10d 100644 --- a/crates/sui-data-ingestion-core/src/executor.rs +++ b/crates/sui-data-ingestion-core/src/executor.rs @@ -16,6 +16,7 @@ use std::path::PathBuf; use std::pin::Pin; use sui_types::full_checkpoint_content::CheckpointData; use sui_types::messages_checkpoint::CheckpointSequenceNumber; +use sui_types::nats_queue::NatsQueueSender; use tokio::sync::mpsc; use tokio::sync::oneshot; diff --git a/crates/sui-indexer/src/db.rs b/crates/sui-indexer/src/db.rs index 99b6df729463b..4dfc178df8b13 100644 --- a/crates/sui-indexer/src/db.rs +++ b/crates/sui-indexer/src/db.rs @@ -204,6 +204,7 @@ pub mod setup_postgres { use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; use prometheus::Registry; use secrecy::ExposeSecret; + use sui_types::nats_queue::NatsQueueSender; use tracing::{error, info}; const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations/pg"); @@ -257,6 +258,7 @@ pub mod setup_postgres { pub async fn setup( indexer_config: IndexerConfig, registry: Registry, + queue_sender: NatsQueueSender, ) -> Result<(), IndexerError> { let db_url_secret = indexer_config.get_db_url().map_err(|e| { IndexerError::PgPoolConnectionError(format!( @@ -318,6 +320,7 @@ pub mod setup_postgres { &indexer_config, store, indexer_metrics, + queue_sender, ) .await; } else if indexer_config.rpc_server_worker { diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index b3897f2fe8935..73835975eb2c7 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -20,6 +20,7 @@ use sui_types::dynamic_field::DynamicFieldType; use sui_types::messages_checkpoint::{ CertifiedCheckpointSummary, CheckpointContents, CheckpointSequenceNumber, }; +use sui_types::nats_queue::NatsQueueSender; use sui_types::object::Object; use tokio_util::sync::CancellationToken; @@ -66,6 +67,7 @@ pub async fn new_handlers( metrics: IndexerMetrics, next_checkpoint_sequence_number: CheckpointSequenceNumber, cancel: CancellationToken, + queue_sender: NatsQueueSender, ) -> Result, IndexerError> where S: IndexerStore + Clone + Sync + Send + 'static, @@ -100,6 +102,7 @@ where metrics, indexed_checkpoint_sender, package_tx, + queue_sender, )) } @@ -111,6 +114,7 @@ pub struct CheckpointHandler { // they will be periodically GCed to avoid OOM. package_buffer: Arc>, package_resolver: Arc>>>, + nats_queue: NatsQueueSender, } #[async_trait] @@ -171,6 +175,7 @@ where metrics: IndexerMetrics, indexed_checkpoint_sender: mysten_metrics::metered_channel::Sender, package_tx: watch::Receiver>, + queue_sender: NatsQueueSender, ) -> Self { let package_buffer = IndexingPackageBuffer::start(package_tx); let pg_blocking_cp = Self::pg_blocking_cp(state.clone()).unwrap(); @@ -188,6 +193,7 @@ where indexed_checkpoint_sender, package_buffer, package_resolver, + nats_queue: queue_sender, } } diff --git a/crates/sui-indexer/src/indexer.rs b/crates/sui-indexer/src/indexer.rs index 6fede882c949f..cca450b3ff474 100644 --- a/crates/sui-indexer/src/indexer.rs +++ b/crates/sui-indexer/src/indexer.rs @@ -1,23 +1,16 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 -use std::collections::HashMap; -use std::env; - use anyhow::Result; use diesel::r2d2::R2D2Connection; use prometheus::Registry; +use std::collections::HashMap; +use std::env; +use sui_types::nats_queue::NatsQueueSender; use tokio::sync::oneshot; use tokio_util::sync::CancellationToken; use tracing::info; -use async_trait::async_trait; -use mysten_metrics::spawn_monitored_task; -use sui_data_ingestion_core::{ - DataIngestionMetrics, IndexerExecutor, ProgressStore, ReaderOptions, WorkerPool, -}; -use sui_types::messages_checkpoint::CheckpointSequenceNumber; - use crate::build_json_rpc_server; use crate::errors::IndexerError; use crate::handlers::checkpoint_handler::new_handlers; @@ -28,6 +21,12 @@ use crate::indexer_reader::IndexerReader; use crate::metrics::IndexerMetrics; use crate::store::IndexerStore; use crate::IndexerConfig; +use async_trait::async_trait; +use mysten_metrics::spawn_monitored_task; +use sui_data_ingestion_core::{ + DataIngestionMetrics, IndexerExecutor, ProgressStore, ReaderOptions, WorkerPool, +}; +use sui_types::messages_checkpoint::CheckpointSequenceNumber; pub(crate) const DOWNLOAD_QUEUE_SIZE: usize = 200; const INGESTION_READER_TIMEOUT_SECS: u64 = 20; @@ -46,6 +45,7 @@ impl Indexer { config: &IndexerConfig, store: S, metrics: IndexerMetrics, + queue_sender: NatsQueueSender, ) -> Result<(), IndexerError> { let snapshot_config = SnapshotLagConfig::default(); Indexer::start_writer_with_config::( @@ -54,6 +54,7 @@ impl Indexer { metrics, snapshot_config, CancellationToken::new(), + queue_sender, ) .await } @@ -67,6 +68,7 @@ impl Indexer { metrics: IndexerMetrics, snapshot_config: SnapshotLagConfig, cancel: CancellationToken, + mut queue_sender: NatsQueueSender, ) -> Result<(), IndexerError> { info!( "Sui Indexer Writer (version {:?}) started...", @@ -124,8 +126,19 @@ impl Indexer { 1, DataIngestionMetrics::new(&Registry::new()), ); - let worker = - new_handlers::(store, metrics, primary_watermark, cancel.clone()).await?; + + // Set init checkpoint for primary worker to the latest checkpoint sequence number. + queue_sender.init_checkpoint = primary_watermark; + queue_sender.run().await; + + let worker = new_handlers::( + store, + metrics, + primary_watermark, + cancel.clone(), + queue_sender, + ) + .await?; let worker_pool = WorkerPool::new(worker, "primary".to_string(), download_queue_size); executor.register(worker_pool).await?; diff --git a/crates/sui-indexer/src/main.rs b/crates/sui-indexer/src/main.rs index 02a92f7a507b2..99b03257a0ee2 100644 --- a/crates/sui-indexer/src/main.rs +++ b/crates/sui-indexer/src/main.rs @@ -1,7 +1,11 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 +use std::sync::Arc; + use clap::Parser; +use odin::{get_odin, Odin}; +use sui_types::nats_queue::nats_queue; use tracing::info; use sui_indexer::errors::IndexerError; @@ -34,8 +38,13 @@ async fn main() -> Result<(), IndexerError> { .unwrap(), indexer_config.rpc_client_url.as_str(), )?; + + let odin_connection: Arc = Arc::new(get_odin().await); + let queue_sender = nats_queue(odin_connection.clone()); + #[cfg(feature = "postgres-feature")] - sui_indexer::db::setup_postgres::setup(indexer_config.clone(), registry.clone()).await?; + sui_indexer::db::setup_postgres::setup(indexer_config.clone(), registry.clone(), queue_sender) + .await?; #[cfg(feature = "mysql-feature")] #[cfg(not(feature = "postgres-feature"))] diff --git a/crates/sui-indexer/src/test_utils.rs b/crates/sui-indexer/src/test_utils.rs index 421039555ca9c..995217d06c616 100644 --- a/crates/sui-indexer/src/test_utils.rs +++ b/crates/sui-indexer/src/test_utils.rs @@ -4,6 +4,7 @@ use diesel::connection::SimpleConnection; use mysten_metrics::init_metrics; use secrecy::ExposeSecret; +use sui_types::nats_queue::NatsQueueSender; use tokio::task::JoinHandle; use tokio_util::sync::CancellationToken; @@ -45,6 +46,7 @@ pub async fn start_test_indexer( rpc_url: String, reader_writer_config: ReaderWriterConfig, data_ingestion_path: PathBuf, + queue_sender: NatsQueueSender, ) -> (PgIndexerStore, JoinHandle>) { start_test_indexer_impl( db_url, @@ -53,6 +55,7 @@ pub async fn start_test_indexer( None, Some(data_ingestion_path), CancellationToken::new(), + queue_sender, ) .await } @@ -64,6 +67,7 @@ pub async fn start_test_indexer_impl( new_database: Option, data_ingestion_path: Option, cancel: CancellationToken, + queue_sender: NatsQueueSender, ) -> (PgIndexerStore, JoinHandle>) { // Reduce the connection pool size to 10 for testing // to prevent maxing out @@ -155,6 +159,7 @@ pub async fn start_test_indexer_impl( indexer_metrics, snapshot_config, cancel, + queue_sender, ) .await }) diff --git a/crates/sui-types/Cargo.toml b/crates/sui-types/Cargo.toml index 5d2f6876ab28b..cba80cf40ea6c 100644 --- a/crates/sui-types/Cargo.toml +++ b/crates/sui-types/Cargo.toml @@ -7,6 +7,9 @@ publish = false edition = "2021" [dependencies] +odin = { workspace = true, version = "0.1.0" } +tokio.workspace = true + anemo.workspace = true anyhow.workspace = true bincode.workspace = true diff --git a/crates/sui-types/src/lib.rs b/crates/sui-types/src/lib.rs index c5116aebe10ba..ad2c983b47177 100644 --- a/crates/sui-types/src/lib.rs +++ b/crates/sui-types/src/lib.rs @@ -68,6 +68,7 @@ pub mod mock_checkpoint_builder; pub mod move_package; pub mod multisig; pub mod multisig_legacy; +pub mod nats_queue; pub mod object; pub mod passkey_authenticator; pub mod programmable_transaction_builder; diff --git a/crates/sui-types/src/nats_queue.rs b/crates/sui-types/src/nats_queue.rs new file mode 100644 index 0000000000000..baff629cf7978 --- /dev/null +++ b/crates/sui-types/src/nats_queue.rs @@ -0,0 +1,86 @@ +// We want to make sure we send msg about block in correct order +// This task is responsible for gathering all the messages and sending them in correct order +// We will use a priority queue to store the messages and send them in correct order + +use odin::{sui_ws::SuiWsApiMsg, Odin}; +use std::{collections::BTreeMap, sync::Arc}; +use tokio::sync::{ + mpsc::{channel, Receiver, Sender}, + Mutex, +}; +use tracing::info; + +pub struct NatsQueueSender { + pub init_checkpoint: u64, + pub sender: Arc>, + pub receiver: Arc>>, + odin: Arc, +} + +pub fn nats_queue(odin: Arc) -> NatsQueueSender { + // Create sender and receiver + let (tx, rx) = channel::<(u64, SuiWsApiMsg)>(10_000); // 10k + + NatsQueueSender { + init_checkpoint: u64::MAX, + sender: Arc::new(tx), + receiver: Arc::new(Mutex::new(rx)), + odin, + } +} + +impl NatsQueueSender { + pub async fn run(&mut self) { + // Spawn task that will order the messages + let odin = self.odin.clone(); + let receiver = self.receiver.clone(); + let init_checkpoint = self.init_checkpoint; + + tokio::spawn(async move { + let mut next_index: u64 = init_checkpoint; // MAX means we have not received any message yet + + let mut receiver_lock = receiver.lock().await; + + // Log init checkpoint + info!("Nats queue init checkpoint: {}", init_checkpoint); + + //Cache if we get a message with a block number that is not in order + let mut bmap_checkpoints: BTreeMap> = BTreeMap::new(); + while let Some((checkpoint_seq_number, ws_update)) = receiver_lock.recv().await { + // Check if we have not received any message yet + if next_index == u64::MAX { + next_index = checkpoint_seq_number; + } + // Check if correct order + if checkpoint_seq_number == next_index { + // Send message + odin.publish_sui_ws_update(&ws_update).await; + + // Update next index + next_index = next_index + 1; + // Check if we have any cached messages + while let Some(next_checkpoint) = bmap_checkpoints.remove(&next_index) { + info!("Sending cached message with seq number {}", next_index); + + for ws_update in next_checkpoint.iter() { + odin.publish_sui_ws_update(&ws_update).await; + } + + // Update next index + next_index = next_index + 1; + } + } else { + info!( + "Received checkpoint with seq number {} but expected {}", + checkpoint_seq_number, next_index + ); + // Cache message + bmap_checkpoints + .entry(checkpoint_seq_number) + .or_insert(vec![]) + .push(ws_update); + } + } + }); + } +} From b2ef2b8976f647185a5fff567d339894d8eae8b2 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Wed, 31 Jul 2024 14:10:40 +0200 Subject: [PATCH 32/57] balance changes --- Cargo.lock | 6 +- Cargo.toml | 2 +- .../src/handlers/checkpoint_handler.rs | 175 +++++++++++++++-- crates/sui-indexer/src/handlers/mod.rs | 33 +++- .../sui-indexer/src/handlers/tx_processor.rs | 48 +++++ crates/sui-indexer/src/types.rs | 33 ++++ .../sui-json-rpc-types/src/balance_changes.rs | 76 ++++++++ crates/sui-json-rpc/src/balance_changes.rs | 184 +++++++++++++++++- crates/sui-types/src/nats_queue.rs | 28 ++- 9 files changed, 557 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5eb26ecd87934..b6e8732c7cb85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6970,7 +6970,7 @@ dependencies = [ [[package]] name = "odin" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=sui-indexer-nats-update#6be6c61597198176244fd364110a77661e0ceb64" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ad438b1#ad438b1576469d76f9b2e7428a58fb27dfe1c561" dependencies = [ "async-nats", "bitcode", @@ -9717,7 +9717,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structs" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?branch=sui-indexer-nats-update#6be6c61597198176244fd364110a77661e0ceb64" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ad438b1#ad438b1576469d76f9b2e7428a58fb27dfe1c561" dependencies = [ "bitcode", "dotenvy", @@ -12300,7 +12300,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "rand 0.8.5", + "rand 0.7.3", "static_assertions", ] diff --git a/Cargo.toml b/Cargo.toml index 61032218b8b71..352043aaa5131 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -707,7 +707,7 @@ sui-execution = { path = "sui-execution" } # move-bytecode-verifier = { path = "external-crates/move/move-bytecode-verifier" } -odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", branch = "sui-indexer-nats-update", package = "odin" } +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "ad438b1", package = "odin" } # suiop dependencies docker-api = "0.12.2" diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 73835975eb2c7..8c2ba76853c5d 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -3,12 +3,15 @@ use crate::handlers::committer::start_tx_checkpoint_commit_task; use crate::handlers::tx_processor::IndexingPackageBuffer; +use crate::handlers::CustomCheckpointDataToCommit; use crate::models::display::StoredDisplay; use async_trait::async_trait; use itertools::Itertools; use move_core_types::annotated_value::{MoveStructLayout, MoveTypeLayout}; use move_core_types::language_storage::{StructTag, TypeTag}; use mysten_metrics::{get_metrics, spawn_monitored_task}; +use odin::sui_ws::{CoinCreated, CoinMutated, CoinObjectUpdateStatus}; +use odin::sui_ws::{SuiWsApiMsg, TokenBalanceUpdate, TokenUpdate}; use std::collections::{BTreeMap, HashMap}; use std::sync::{Arc, Mutex}; use sui_package_resolver::{PackageStore, PackageStoreWithLruCache, Resolver}; @@ -20,17 +23,16 @@ use sui_types::dynamic_field::DynamicFieldType; use sui_types::messages_checkpoint::{ CertifiedCheckpointSummary, CheckpointContents, CheckpointSequenceNumber, }; -use sui_types::nats_queue::NatsQueueSender; +use sui_types::nats_queue::{NatsQueueSender, WsPayload}; use sui_types::object::Object; -use tokio_util::sync::CancellationToken; - use tokio::sync::watch; +use tokio_util::sync::CancellationToken; use diesel::r2d2::R2D2Connection; use std::collections::hash_map::Entry; use std::collections::HashSet; use sui_data_ingestion_core::Worker; -use sui_json_rpc_types::SuiMoveValue; +use sui_json_rpc_types::{ObjectStatus, SuiMoveValue}; use sui_types::base_types::SequenceNumber; use sui_types::effects::{TransactionEffects, TransactionEffectsAPI}; use sui_types::event::SystemEpochInfoEvent; @@ -50,8 +52,8 @@ use crate::db::ConnectionPool; use crate::store::package_resolver::{IndexerStorePackageResolver, InterimPackageResolver}; use crate::store::{IndexerStore, PgIndexerStore}; use crate::types::{ - IndexedCheckpoint, IndexedDeletedObject, IndexedEpochInfo, IndexedEvent, IndexedObject, - IndexedPackage, IndexedTransaction, IndexerResult, TransactionKind, TxIndex, + CustomIndexedTransaction, IndexedCheckpoint, IndexedDeletedObject, IndexedEpochInfo, + IndexedEvent, IndexedObject, IndexedPackage, IndexerResult, TransactionKind, TxIndex, }; use super::tx_processor::EpochEndIndexingObjectStore; @@ -151,7 +153,15 @@ where self.package_resolver.clone(), ) .await?; - self.indexed_checkpoint_sender.send(checkpoint_data).await?; + + // Send ws updates via nats + let nats_ws_payload = generate_ws_updates_from_checkpoint_data(&checkpoint_data); + self.nats_queue.sender.send(nats_ws_payload).await?; + + // Convert custom checkpoint data into original type + self.indexed_checkpoint_sender + .send(checkpoint_data.into()) + .await?; Ok(()) } @@ -280,7 +290,7 @@ where metrics: Arc, packages: Vec, package_resolver: Arc>, - ) -> Result { + ) -> Result { let checkpoint_seq = data.checkpoint_summary.sequence_number; info!(checkpoint_seq, "Indexing checkpoint data blob"); @@ -336,7 +346,7 @@ where checkpoint.sequence_number, time_now_ms, checkpoint.timestamp_ms ); - Ok(CheckpointDataToCommit { + Ok(CustomCheckpointDataToCommit { checkpoint, transactions: db_transactions, events: db_events, @@ -355,7 +365,7 @@ where checkpoint_contents: &CheckpointContents, metrics: &IndexerMetrics, ) -> IndexerResult<( - Vec, + Vec, Vec, Vec, BTreeMap, @@ -380,14 +390,14 @@ where let mut db_displays = BTreeMap::new(); let mut db_indices = Vec::new(); - for tx in transactions { + for checkpoint_tx in transactions { let CheckpointTransaction { transaction: sender_signed_data, effects: fx, events, input_objects, output_objects, - } = tx; + } = checkpoint_tx; // Unwrap safe - we checked they have equal length above let (tx_digest, tx_sequence_number) = tx_seq_num_iter.next().unwrap(); if tx_digest != *sender_signed_data.digest() { @@ -431,12 +441,30 @@ where .chain(output_objects.iter()) .collect::>(); + // Add out custom maps + let status_map = get_object_status_map(&fx); + let input_objects_to_owner = input_objects + .iter() + .map(|input_object| (input_object.id(), input_object.owner().clone())) + .collect::>(); + let output_objects_to_owner = output_objects + .iter() + .map(|output_object| (output_object.id(), output_object.owner().clone())) + .collect::>(); + let (balance_change, object_changes) = TxChangesProcessor::new(&objects, metrics.clone()) - .get_changes(tx, &fx, &tx_digest) + .custom_get_changes( + tx, + &fx, + &tx_digest, + status_map, + &input_objects_to_owner, + &output_objects_to_owner, + ) .await?; - let db_txn = IndexedTransaction { + let db_txn = CustomIndexedTransaction { tx_sequence_number, tx_digest, checkpoint_sequence_number: *checkpoint_summary.sequence_number(), @@ -720,6 +748,54 @@ where } } +pub fn get_object_status_map(effects: &TransactionEffects) -> HashMap { + let mut object_to_status: HashMap = HashMap::new(); + // Fill object_to_status objects + { + // Fill mutated objects + effects + .mutated() + .into_iter() + .map(|((id, _, _), _)| (id, ObjectStatus::Mutated)) + .collect::>() + .iter() + .for_each(|(k, v)| { + object_to_status.insert(*k, v.clone()); + }); + // Fill deleted objects + effects + .all_tombstones() + .into_iter() + .map(|(id, _)| (id, ObjectStatus::Deleted)) + .collect::>() + .iter() + .for_each(|(k, v)| { + object_to_status.insert(*k, v.clone()); + }); + // Fill created objects + effects + .created() + .into_iter() + .map(|((id, _, _), _)| (id, ObjectStatus::Created)) + .collect::>() + .iter() + .for_each(|(k, v)| { + object_to_status.insert(*k, v.clone()); + }); + // Fill created objects + effects + .unwrapped() + .into_iter() + .map(|((id, _, _), _)| (id, ObjectStatus::Created)) + .collect::>() + .iter() + .for_each(|(k, v)| { + object_to_status.insert(*k, v.clone()); + }); + } + object_to_status +} + async fn get_move_struct_layout_map( objects: &[Object], package_resolver: Arc>, @@ -881,3 +957,74 @@ fn try_create_dynamic_field_info( }, })) } + +pub fn generate_ws_updates_from_checkpoint_data( + checkpoint_data: &CustomCheckpointDataToCommit, +) -> WsPayload { + let block_number = checkpoint_data.checkpoint.sequence_number; + + let mut ws_balance_changes: HashMap = HashMap::new(); + + // transaction balance changes + for transaction in checkpoint_data.transactions.iter() { + for change in transaction.balance_change.iter() { + let user_address = match &change.owner.get_owner_address() { + Ok(address) => address.to_string(), + Err(_) => continue, + }; + let coin_type = change.coin_type.to_canonical_string(true); + + // Prepare ws update + let ws_update = ws_balance_changes + .entry(user_address.clone()) + .or_insert(TokenBalanceUpdate { + sui_address: user_address.clone(), + sequence_number: block_number, + changed_balances: HashMap::new(), + timestamp_ms: chrono::Utc::now().timestamp_millis() as u64, + }) + .changed_balances + .entry(coin_type.clone()) + .or_insert(TokenUpdate { + coin_type, + object_changes: HashMap::new(), + }); + match change.status { + // New coin is created + ObjectStatus::Created => { + // Update ws update + ws_update + .object_changes + .entry(change.object_id.clone()) + .or_insert(CoinObjectUpdateStatus::Created(CoinCreated { + amount: change.amount, + })); + } + ObjectStatus::Mutated => { + // Update ws update + ws_update + .object_changes + .entry(change.object_id.clone()) + .or_insert(CoinObjectUpdateStatus::Mutated(CoinMutated { + change: change.amount, + })); + } + ObjectStatus::Deleted => { + // Update ws update + ws_update + .object_changes + .entry(change.object_id.clone()) + .or_insert(CoinObjectUpdateStatus::Deleted); + } + } + } + } + + return ( + checkpoint_data.checkpoint.sequence_number, + ws_balance_changes + .into_values() + .map(|v| SuiWsApiMsg::TokenBalanceUpdate(v)) + .collect(), + ); +} diff --git a/crates/sui-indexer/src/handlers/mod.rs b/crates/sui-indexer/src/handlers/mod.rs index 587a13f22bb95..d5b570f813047 100644 --- a/crates/sui-indexer/src/handlers/mod.rs +++ b/crates/sui-indexer/src/handlers/mod.rs @@ -6,8 +6,8 @@ use std::collections::BTreeMap; use crate::{ models::display::StoredDisplay, types::{ - IndexedCheckpoint, IndexedDeletedObject, IndexedEpochInfo, IndexedEvent, IndexedObject, - IndexedPackage, IndexedTransaction, TxIndex, + CustomIndexedTransaction, IndexedCheckpoint, IndexedDeletedObject, IndexedEpochInfo, + IndexedEvent, IndexedObject, IndexedPackage, IndexedTransaction, TxIndex, }, }; @@ -29,6 +29,35 @@ pub struct CheckpointDataToCommit { pub epoch: Option, } +#[derive(Debug)] +pub struct CustomCheckpointDataToCommit { + pub checkpoint: IndexedCheckpoint, + pub transactions: Vec, + pub events: Vec, + pub tx_indices: Vec, + pub display_updates: BTreeMap, + pub object_changes: TransactionObjectChangesToCommit, + pub object_history_changes: TransactionObjectChangesToCommit, + pub packages: Vec, + pub epoch: Option, +} + +impl From for CheckpointDataToCommit { + fn from(data: CustomCheckpointDataToCommit) -> Self { + Self { + checkpoint: data.checkpoint, + transactions: data.transactions.into_iter().map(Into::into).collect(), + events: data.events, + tx_indices: data.tx_indices, + display_updates: data.display_updates, + object_changes: data.object_changes, + object_history_changes: data.object_history_changes, + packages: data.packages, + epoch: data.epoch, + } + } +} + #[derive(Clone, Debug)] pub struct TransactionObjectChangesToCommit { pub changed_objects: Vec, diff --git a/crates/sui-indexer/src/handlers/tx_processor.rs b/crates/sui-indexer/src/handlers/tx_processor.rs index 04d96d6eafd04..64f1278caf454 100644 --- a/crates/sui-indexer/src/handlers/tx_processor.rs +++ b/crates/sui-indexer/src/handlers/tx_processor.rs @@ -7,7 +7,10 @@ use async_trait::async_trait; use mysten_metrics::monitored_scope; use mysten_metrics::spawn_monitored_task; +use sui_json_rpc::get_balance_changes_with_status_from_effect; +use sui_json_rpc_types::ObjectStatus; use sui_rest_api::CheckpointData; +use sui_types::object::Owner; use tokio::sync::watch; use std::collections::HashMap; @@ -211,6 +214,51 @@ impl TxChangesProcessor { .await?; Ok((balance_change, object_change)) } + + pub(crate) async fn custom_get_changes( + &self, + tx: &TransactionData, + effects: &TransactionEffects, + tx_digest: &TransactionDigest, + status_map: HashMap, + input_objects_to_owner: &HashMap, + output_objects_to_owner: &HashMap, + ) -> IndexerResult<( + Vec, + Vec, + )> { + let _timer = self + .metrics + .indexing_tx_object_changes_latency + .start_timer(); + let object_change: Vec<_> = get_object_changes( + self, + tx.sender(), + effects.modified_at_versions(), + effects.all_changed_objects(), + effects.all_removed_objects(), + ) + .await? + .into_iter() + .map(IndexedObjectChange::from) + .collect(); + let balance_change = get_balance_changes_with_status_from_effect( + self, + effects, + tx.input_objects().unwrap_or_else(|e| { + panic!( + "Checkpointed tx {:?} has inavlid input objects: {e}", + tx_digest, + ) + }), + None, + status_map, + input_objects_to_owner, + output_objects_to_owner, + ) + .await?; + Ok((balance_change, object_change)) + } } #[async_trait] diff --git a/crates/sui-indexer/src/types.rs b/crates/sui-indexer/src/types.rs index c29bbd6c626b8..5f83fcbd6057e 100644 --- a/crates/sui-indexer/src/types.rs +++ b/crates/sui-indexer/src/types.rs @@ -353,6 +353,39 @@ pub struct IndexedTransaction { pub successful_tx_num: u64, } +#[derive(Debug, Clone)] +pub struct CustomIndexedTransaction { + pub tx_sequence_number: u64, + pub tx_digest: TransactionDigest, + pub sender_signed_data: SenderSignedData, + pub effects: TransactionEffects, + pub checkpoint_sequence_number: u64, + pub timestamp_ms: u64, + pub object_changes: Vec, + pub balance_change: Vec, + pub events: Vec, + pub transaction_kind: TransactionKind, + pub successful_tx_num: u64, +} + +impl From for IndexedTransaction { + fn from(tx: CustomIndexedTransaction) -> Self { + Self { + tx_sequence_number: tx.tx_sequence_number, + tx_digest: tx.tx_digest, + sender_signed_data: tx.sender_signed_data, + effects: tx.effects, + checkpoint_sequence_number: tx.checkpoint_sequence_number, + timestamp_ms: tx.timestamp_ms, + object_changes: tx.object_changes, + balance_change: tx.balance_change.into_iter().map(|bc| bc.into()).collect(), + events: tx.events, + transaction_kind: tx.transaction_kind, + successful_tx_num: tx.successful_tx_num, + } + } +} + #[derive(Debug, Clone)] pub struct TxIndex { pub tx_sequence_number: u64, diff --git a/crates/sui-json-rpc-types/src/balance_changes.rs b/crates/sui-json-rpc-types/src/balance_changes.rs index 83b659f75b0b5..0368ba0170107 100644 --- a/crates/sui-json-rpc-types/src/balance_changes.rs +++ b/crates/sui-json-rpc-types/src/balance_changes.rs @@ -6,6 +6,7 @@ use serde::{Deserialize, Serialize}; use serde_with::serde_as; use serde_with::DisplayFromStr; use std::fmt::{Display, Formatter, Result}; +use sui_types::base_types::ObjectID; use sui_types::object::Owner; use sui_types::sui_serde::SuiTypeTag; @@ -34,3 +35,78 @@ impl Display for BalanceChange { ) } } + +#[serde_as] +#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct BalanceChangeWithStatus { + /// Owner of the balance change + pub owner: Owner, + #[schemars(with = "String")] + #[serde_as(as = "SuiTypeTag")] + pub coin_type: TypeTag, + /// The amount indicate the balance value changes, + /// negative amount means spending coin value and positive means receiving coin value. + #[schemars(with = "String")] + #[serde_as(as = "DisplayFromStr")] + pub amount: i128, + /// Our additional fields + pub object_id: String, + pub status: ObjectStatus, +} + +impl From for BalanceChange { + fn from(balance_change: BalanceChangeWithStatus) -> Self { + BalanceChange { + owner: balance_change.owner, + coin_type: balance_change.coin_type, + amount: balance_change.amount, + } + } +} + +impl Display for BalanceChangeWithStatus { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + write!( + f, + " ┌──\n │ Owner: {} \n │ CoinType: {} \n │ Amount: {}\n └──", + self.owner, self.coin_type, self.amount + ) + } +} + +#[derive(Debug, Clone, Deserialize, JsonSchema, Serialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub enum ObjectStatus { + Created, + Mutated, + Deleted, +} + +#[serde_as] +#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct CustomBalanceChange { + /// Owner of the balance change + pub owner: Owner, + #[schemars(with = "String")] + #[serde_as(as = "SuiTypeTag")] + pub coin_type: TypeTag, + /// The amount indicate the balance value changes, + /// negative amount means spending coin value and positive means receiving coin value. + #[schemars(with = "String")] + #[serde_as(as = "DisplayFromStr")] + pub amount: i128, + /// Our additional fields + pub object_id: ObjectID, +} + +impl Display for CustomBalanceChange { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + write!( + f, + " ┌──\n │ Owner: {} \n │ CoinType: {} \n | ObjectId: {} \n │ Amount: {}\n └──", + self.owner, self.coin_type, self.object_id, self.amount + ) + } +} diff --git a/crates/sui-json-rpc/src/balance_changes.rs b/crates/sui-json-rpc/src/balance_changes.rs index 91b4b3011edaf..c7abc73a6f40b 100644 --- a/crates/sui-json-rpc/src/balance_changes.rs +++ b/crates/sui-json-rpc/src/balance_changes.rs @@ -8,7 +8,9 @@ use async_trait::async_trait; use move_core_types::language_storage::TypeTag; use tokio::sync::RwLock; -use sui_json_rpc_types::BalanceChange; +use sui_json_rpc_types::{ + BalanceChange, BalanceChangeWithStatus, CustomBalanceChange, ObjectStatus, +}; use sui_types::base_types::{ObjectID, ObjectRef, SequenceNumber}; use sui_types::coin::Coin; use sui_types::digests::ObjectDigest; @@ -152,6 +154,186 @@ async fn fetch_coins, E>( Ok(all_mutated_coins) } +////////////////////////////////////////////////////// Custom Methods ////////////////////////////////////////////////////// +// Out own version as the function is called via different methods in the original code which i don't want to fix +pub async fn get_balance_changes_with_status_from_effect, E>( + object_provider: &P, + effects: &TransactionEffects, + input_objs: Vec, + mocked_coin: Option, + status_map: HashMap, + input_objects_to_owner: &HashMap, + output_objects_to_owner: &HashMap, +) -> Result, E> { + let ((object_id, _, _), gas_owner) = effects.gas_object(); + + // Only charge gas when tx fails, skip all object parsing + if effects.status() != &ExecutionStatus::Success { + return Ok(vec![BalanceChangeWithStatus { + owner: gas_owner, + coin_type: GAS::type_tag(), + amount: effects.gas_cost_summary().net_gas_usage().neg() as i128, + object_id: object_id.to_canonical_string(true), + status: ObjectStatus::Mutated, + }]); + } + + let all_mutated = effects + .all_changed_objects() + .into_iter() + .filter_map(|((id, version, digest), _, _)| { + if matches!(mocked_coin, Some(coin) if id == coin) { + return None; + } + Some((id, version, Some(digest))) + }) + .collect::>(); + + let input_objs_to_digest = input_objs + .iter() + .filter_map(|k| match k { + InputObjectKind::ImmOrOwnedMoveObject(o) => Some((o.0, o.2)), + InputObjectKind::MovePackage(_) | InputObjectKind::SharedMoveObject { .. } => None, + }) + .collect::>(); + let unwrapped_then_deleted = effects + .unwrapped_then_deleted() + .iter() + .map(|e| e.0) + .collect::>(); + let all_balance_changes = custom_get_balance_changes( + object_provider, + &effects + .modified_at_versions() + .into_iter() + .filter_map(|(id, version)| { + if matches!(mocked_coin, Some(coin) if id == coin) { + return None; + } + // We won't be able to get dynamic object from object provider today + if unwrapped_then_deleted.contains(&id) { + return None; + } + Some((id, version, input_objs_to_digest.get(&id).cloned())) + }) + .collect::>(), + &all_mutated, + ) + .await?; + + // merge duplicated balance changes on same object + let mut all_balance_changes_with_status = vec![]; + all_balance_changes.into_iter().for_each(|bc| { + let old_owner = input_objects_to_owner.get(&bc.object_id); + // Check if input owner changed + if old_owner.is_some() && old_owner != Some(&bc.owner) { + all_balance_changes_with_status.push(BalanceChangeWithStatus { + object_id: bc.object_id.to_canonical_string(true), + owner: bc.owner, + coin_type: bc.coin_type, + amount: bc.amount, + status: ObjectStatus::Created, + }); + return; + } + let old_owner = output_objects_to_owner.get(&bc.object_id); + // Check if output owner changed + if old_owner.is_some() && old_owner != Some(&bc.owner) { + all_balance_changes_with_status.push(BalanceChangeWithStatus { + object_id: bc.object_id.to_canonical_string(true), + owner: bc.owner, + coin_type: bc.coin_type, + amount: bc.amount, + status: ObjectStatus::Deleted, + }); + return; + } + all_balance_changes_with_status.push(BalanceChangeWithStatus { + object_id: bc.object_id.to_canonical_string(true), + owner: bc.owner, + coin_type: bc.coin_type, + amount: bc.amount, + status: status_map + .get(&bc.object_id) + .cloned() + .expect("Use of object not in transaction effects"), + }); + }); + + return Ok(all_balance_changes_with_status); +} + +pub async fn custom_get_balance_changes, E>( + object_provider: &P, + modified_at_version: &[(ObjectID, SequenceNumber, Option)], + all_mutated: &[(ObjectID, SequenceNumber, Option)], +) -> Result, E> { + // 1. subtract all input coins + let balances = custom_fetch_coins(object_provider, modified_at_version) + .await? + .into_iter() + .fold( + BTreeMap::<_, i128>::new(), + |mut acc, (owner, type_, object_id, amount)| { + *acc.entry((owner, type_, object_id)).or_default() -= amount as i128; + acc + }, + ); + // 2. add all mutated coins + let balances = custom_fetch_coins(object_provider, all_mutated) + .await? + .into_iter() + .fold(balances, |mut acc, (owner, type_, object_id, amount)| { + *acc.entry((owner, type_, object_id)).or_default() += amount as i128; + acc + }); + + Ok(balances + .into_iter() + .filter_map(|((owner, coin_type, object_id), amount)| { + Some(CustomBalanceChange { + object_id, + owner, + coin_type, + amount, + }) + }) + .collect()) +} + +async fn custom_fetch_coins, E>( + object_provider: &P, + objects: &[(ObjectID, SequenceNumber, Option)], +) -> Result, E> { + let mut all_mutated_coins = vec![]; + for (id, version, digest_opt) in objects { + // TODO: use multi get object + let o = object_provider.get_object(id, version).await?; + if let Some(type_) = o.type_() { + if type_.is_coin() { + if let Some(digest) = digest_opt { + assert_eq!( + *digest, + o.digest(), + "Object digest mismatch--got bad data from object_provider?" + ) + } + let [coin_type]: [TypeTag; 1] = + type_.clone().into_type_params().try_into().unwrap(); + all_mutated_coins.push(( + o.owner, + coin_type, + o.id(), + // // we know this is a coin, safe to unwrap + // HW // NB: THIS IS FUCKING MYSTEN LABS CODE IF THIS CRASHES FUCK EM + Coin::extract_balance_if_coin(&o).unwrap().unwrap(), + )) + } + } + } + Ok(all_mutated_coins) +} + #[async_trait] pub trait ObjectProvider { type Error; diff --git a/crates/sui-types/src/nats_queue.rs b/crates/sui-types/src/nats_queue.rs index baff629cf7978..4854c08387c5f 100644 --- a/crates/sui-types/src/nats_queue.rs +++ b/crates/sui-types/src/nats_queue.rs @@ -10,16 +10,18 @@ use tokio::sync::{ }; use tracing::info; +pub type WsPayload = (u64, Vec); + pub struct NatsQueueSender { pub init_checkpoint: u64, - pub sender: Arc>, - pub receiver: Arc>>, + pub sender: Arc>, + pub receiver: Arc>>, odin: Arc, } pub fn nats_queue(odin: Arc) -> NatsQueueSender { // Create sender and receiver - let (tx, rx) = channel::<(u64, SuiWsApiMsg)>(10_000); // 10k + let (tx, rx) = channel::(10_000); // 10k NatsQueueSender { init_checkpoint: u64::MAX, @@ -46,7 +48,7 @@ impl NatsQueueSender { //Cache if we get a message with a block number that is not in order let mut bmap_checkpoints: BTreeMap> = BTreeMap::new(); - while let Some((checkpoint_seq_number, ws_update)) = receiver_lock.recv().await { + while let Some((checkpoint_seq_number, ws_updates)) = receiver_lock.recv().await { // Check if we have not received any message yet if next_index == u64::MAX { next_index = checkpoint_seq_number; @@ -54,13 +56,25 @@ impl NatsQueueSender { // Check if correct order if checkpoint_seq_number == next_index { // Send message - odin.publish_sui_ws_update(&ws_update).await; + + info!( + "Sending: {} ws updates with seq number {}", + ws_updates.len(), + checkpoint_seq_number + ); + for ws_update in ws_updates.iter() { + odin.publish_sui_ws_update(&ws_update).await; + } // Update next index next_index = next_index + 1; // Check if we have any cached messages while let Some(next_checkpoint) = bmap_checkpoints.remove(&next_index) { - info!("Sending cached message with seq number {}", next_index); + info!( + "Sending: {} cached ws updates with seq number {}", + next_checkpoint.len(), + next_index + ); for ws_update in next_checkpoint.iter() { odin.publish_sui_ws_update(&ws_update).await; @@ -78,7 +92,7 @@ impl NatsQueueSender { bmap_checkpoints .entry(checkpoint_seq_number) .or_insert(vec![]) - .push(ws_update); + .extend(ws_updates); } } }); From e8837f30edf068bcef09ad955b500e2f99c7e3fb Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Thu, 1 Aug 2024 13:08:51 +0200 Subject: [PATCH 33/57] objects update --- Cargo.lock | 1 + .../src/handlers/checkpoint_handler.rs | 62 +++- .../sui-indexer/src/handlers/tx_processor.rs | 59 ++- crates/sui-indexer/src/types.rs | 2 + crates/sui-json-rpc/Cargo.toml | 2 + crates/sui-json-rpc/src/object_changes.rs | 351 +++++++++++++++++- 6 files changed, 439 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b6e8732c7cb85..68693a35b9713 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10421,6 +10421,7 @@ dependencies = [ "move-core-types", "move-package", "mysten-metrics", + "odin", "once_cell", "prometheus", "serde", diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 8c2ba76853c5d..98dc4b70d2baa 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -10,7 +10,9 @@ use itertools::Itertools; use move_core_types::annotated_value::{MoveStructLayout, MoveTypeLayout}; use move_core_types::language_storage::{StructTag, TypeTag}; use mysten_metrics::{get_metrics, spawn_monitored_task}; -use odin::sui_ws::{CoinCreated, CoinMutated, CoinObjectUpdateStatus}; +use odin::sui_ws::{ + AccountObjectsUpdate, CoinCreated, CoinMutated, CoinObjectUpdateStatus, ObjectChangeUpdate, +}; use odin::sui_ws::{SuiWsApiMsg, TokenBalanceUpdate, TokenUpdate}; use std::collections::{BTreeMap, HashMap}; use std::sync::{Arc, Mutex}; @@ -443,24 +445,16 @@ where // Add out custom maps let status_map = get_object_status_map(&fx); - let input_objects_to_owner = input_objects - .iter() - .map(|input_object| (input_object.id(), input_object.owner().clone())) - .collect::>(); - let output_objects_to_owner = output_objects - .iter() - .map(|output_object| (output_object.id(), output_object.owner().clone())) - .collect::>(); - let (balance_change, object_changes) = + let (balance_change, object_changes, custom_object_changes) = TxChangesProcessor::new(&objects, metrics.clone()) .custom_get_changes( tx, &fx, &tx_digest, status_map, - &input_objects_to_owner, - &output_objects_to_owner, + &input_objects, + &output_objects, ) .await?; @@ -473,6 +467,7 @@ where effects: fx.clone(), object_changes, balance_change, + custom_object_changes, events, transaction_kind, successful_tx_num: if fx.status().is_ok() { @@ -964,6 +959,8 @@ pub fn generate_ws_updates_from_checkpoint_data( let block_number = checkpoint_data.checkpoint.sequence_number; let mut ws_balance_changes: HashMap = HashMap::new(); + let mut account_object_changes: HashMap = HashMap::new(); // account address -> account object changes + let mut objects_changes: Vec = Vec::new(); // transaction balance changes for transaction in checkpoint_data.transactions.iter() { @@ -1018,13 +1015,40 @@ pub fn generate_ws_updates_from_checkpoint_data( } } } + + for (change_owner, object_change) in transaction.custom_object_changes.iter() { + if let Some(owner) = change_owner { + account_object_changes + .entry(owner.to_string()) + .or_insert(AccountObjectsUpdate { + sui_address: owner.to_string(), + sequence_number: block_number, + object_changes: HashMap::new(), + timestamp_ms: chrono::Utc::now().timestamp_millis() as u64, + }) + .object_changes + .entry(object_change.object_id.clone()) + .or_insert(object_change.clone()); + } + + objects_changes.push(object_change.clone()); + } } - return ( - checkpoint_data.checkpoint.sequence_number, - ws_balance_changes - .into_values() - .map(|v| SuiWsApiMsg::TokenBalanceUpdate(v)) - .collect(), - ); + let updates: Vec = ws_balance_changes + .into_values() + .map(|v| SuiWsApiMsg::TokenBalanceUpdate(v)) + .chain( + account_object_changes + .into_values() + .map(|v| SuiWsApiMsg::AccountObjectsUpdate(v)), + ) + .chain( + objects_changes + .into_iter() + .map(|v| SuiWsApiMsg::ObjectUpdate(v)), + ) + .collect(); + + return (checkpoint_data.checkpoint.sequence_number, updates); } diff --git a/crates/sui-indexer/src/handlers/tx_processor.rs b/crates/sui-indexer/src/handlers/tx_processor.rs index 64f1278caf454..8bb36521182f7 100644 --- a/crates/sui-indexer/src/handlers/tx_processor.rs +++ b/crates/sui-indexer/src/handlers/tx_processor.rs @@ -7,9 +7,14 @@ use async_trait::async_trait; use mysten_metrics::monitored_scope; use mysten_metrics::spawn_monitored_task; +use odin::sui_ws::ObjectChangeUpdate; +use sui_json_rpc::custom_get_object_changes; use sui_json_rpc::get_balance_changes_with_status_from_effect; use sui_json_rpc_types::ObjectStatus; +use sui_package_resolver::PackageStore; +use sui_package_resolver::Resolver; use sui_rest_api::CheckpointData; +use sui_types::base_types::SuiAddress; use sui_types::object::Owner; use tokio::sync::watch; @@ -221,27 +226,45 @@ impl TxChangesProcessor { effects: &TransactionEffects, tx_digest: &TransactionDigest, status_map: HashMap, - input_objects_to_owner: &HashMap, - output_objects_to_owner: &HashMap, + input_objects: &Vec, + output_objects: &Vec, ) -> IndexerResult<( Vec, Vec, + Vec<(Option, ObjectChangeUpdate)>, )> { let _timer = self .metrics .indexing_tx_object_changes_latency .start_timer(); - let object_change: Vec<_> = get_object_changes( - self, - tx.sender(), - effects.modified_at_versions(), - effects.all_changed_objects(), - effects.all_removed_objects(), - ) - .await? - .into_iter() - .map(IndexedObjectChange::from) - .collect(); + let (original_object_change, custom_object_change): (Vec<_>, Vec<_>) = + custom_get_object_changes( + self, + tx.sender(), + effects.modified_at_versions(), + effects.all_changed_objects(), + effects.all_removed_objects(), + &input_objects, + &output_objects, + ) + .await?; + + let indexed_objects_changes = original_object_change + .into_iter() + .map(IndexedObjectChange::from) + .collect::>(); + + ///////////////////////////////////////////////// Moved here from the parent function index_transactions + let input_objects_to_owner = input_objects + .iter() + .map(|input_object| (input_object.id(), input_object.owner().clone())) + .collect::>(); + let output_objects_to_owner = output_objects + .iter() + .map(|output_object| (output_object.id(), output_object.owner().clone())) + .collect::>(); + ///////////////////////////////////////////////// + let balance_change = get_balance_changes_with_status_from_effect( self, effects, @@ -253,11 +276,15 @@ impl TxChangesProcessor { }), None, status_map, - input_objects_to_owner, - output_objects_to_owner, + &input_objects_to_owner, + &output_objects_to_owner, ) .await?; - Ok((balance_change, object_change)) + Ok(( + balance_change, + indexed_objects_changes, + custom_object_change, + )) } } diff --git a/crates/sui-indexer/src/types.rs b/crates/sui-indexer/src/types.rs index 5f83fcbd6057e..7dd8750a2fe91 100644 --- a/crates/sui-indexer/src/types.rs +++ b/crates/sui-indexer/src/types.rs @@ -3,6 +3,7 @@ use crate::errors::IndexerError; use move_core_types::language_storage::StructTag; +use odin::sui_ws::ObjectChangeUpdate; use serde::{Deserialize, Serialize}; use serde_with::serde_as; use sui_json_rpc_types::{ @@ -363,6 +364,7 @@ pub struct CustomIndexedTransaction { pub timestamp_ms: u64, pub object_changes: Vec, pub balance_change: Vec, + pub custom_object_changes: Vec<(Option, ObjectChangeUpdate)>, pub events: Vec, pub transaction_kind: TransactionKind, pub successful_tx_num: u64, diff --git a/crates/sui-json-rpc/Cargo.toml b/crates/sui-json-rpc/Cargo.toml index e03790cecfaa4..de2f6f9f9e957 100644 --- a/crates/sui-json-rpc/Cargo.toml +++ b/crates/sui-json-rpc/Cargo.toml @@ -7,6 +7,8 @@ publish = false edition = "2021" [dependencies] +odin = { workspace = true, version = "0.1.0" } + arc-swap.workspace = true chrono.workspace = true fastcrypto.workspace = true diff --git a/crates/sui-json-rpc/src/object_changes.rs b/crates/sui-json-rpc/src/object_changes.rs index c3fbdf26ad67b..5627c47a82068 100644 --- a/crates/sui-json-rpc/src/object_changes.rs +++ b/crates/sui-json-rpc/src/object_changes.rs @@ -1,13 +1,15 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 -use std::collections::BTreeMap; - +use move_core_types::language_storage::StructTag; +use odin::sui_ws::{ObjectChangeUpdate, ObjectUpdateStatus, Received, Sent}; +use std::collections::{BTreeMap, HashMap}; use sui_json_rpc_types::ObjectChange; use sui_types::base_types::{ObjectID, ObjectRef, SequenceNumber, SuiAddress}; use sui_types::effects::ObjectRemoveKind; -use sui_types::object::Owner; +use sui_types::object::{Object, Owner}; use sui_types::storage::WriteKind; +use tracing::warn; use crate::ObjectProvider; @@ -90,3 +92,346 @@ pub async fn get_object_changes, E>( Ok(object_changes) } + +pub async fn custom_get_object_changes, E>( + object_provider: &P, + sender: SuiAddress, + modified_at_versions: Vec<(ObjectID, SequenceNumber)>, + all_changed_objects: Vec<(ObjectRef, Owner, WriteKind)>, + all_removed_objects: Vec<(ObjectRef, ObjectRemoveKind)>, + input_objects: &Vec, + output_objects: &Vec, +) -> Result<(Vec, Vec<(Option, ObjectChangeUpdate)>), E> { + let mut object_changes = vec![]; + let mut custom_object_changes: Vec<(Option, ObjectChangeUpdate)> = vec![]; + + // Input objects ownership map + let input_ownership_map = input_objects + .iter() + .map(|o| { + ( + o.id().to_string(), + match o.owner.get_owner_address() { + Ok(owner) => Some(owner.to_string()), + Err(_) => None, + }, + ) + }) + .collect::>(); + // Output objects ownership map is needed to check if object ownership changed + let output_ownership_map = output_objects + .iter() + .map(|o| { + ( + o.id().to_string(), + match o.owner.get_owner_address() { + Ok(owner) => Some(owner.to_string()), + Err(_) => None, + }, + ) + }) + .collect::>(); + + let modify_at_version = modified_at_versions.into_iter().collect::>(); + + for ((object_id, version, digest), owner, kind) in all_changed_objects { + let o = object_provider.get_object(&object_id, &version).await?; + if let Some(type_) = o.type_() { + let object_type: StructTag = type_.clone().into(); + + let address_owner = match o.owner.get_owner_address() { + Ok(owner) => Some(owner.to_string()), + Err(_) => None, + }; + + let data = match o.data.try_as_move() { + Some(data) => Some(data.clone().into_contents()), + None => None, + }; + + match kind { + WriteKind::Mutate => { + object_changes.push(ObjectChange::Mutated { + sender, + owner, + object_type: object_type.clone(), + object_id, + version, + // modify_at_version should always be available for mutated object + previous_version: modify_at_version + .get(&object_id) + .cloned() + .unwrap_or_default(), + digest, + }); + + // Check if ownership change occurred, object should have existed in transaction input + let object_owner = match input_ownership_map.get(&object_id.to_string()) { + Some(old_owner) => old_owner.clone(), + None => { + // Should never happen + warn!( + "Object ownership change occurred but object not found in input objects, object_id: {}", object_id + ); + continue; + } + }; + + // Check change + match (object_owner, address_owner) { + (Some(old_owner), Some(new_owner)) => { + // Check if owner changed + if old_owner != new_owner { + // Receiver + custom_object_changes.push(( + Some(new_owner.clone()), + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some( + object_type.to_canonical_string(true), + ), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Received(Received { + sender_address: old_owner.to_string(), + receiver_address: new_owner, + }), + }, + )); + } + } + (Some(_), None) | (None, None) => { + custom_object_changes.push(( + None, + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Mutated, + }, + )); + } + (None, Some(new_owner)) => { + // Object did not have owner before, now has owner + custom_object_changes.push(( + Some(new_owner), + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Mutated, + }, + )); + } + } + } + WriteKind::Create => { + object_changes.push(ObjectChange::Created { + sender, + owner, + object_type: object_type.clone(), + object_id, + version, + digest, + }); + + // Check if object had previous owner + let object_existed = input_ownership_map.get(&object_id.to_string()); + + // 1. (Some(), Some()) Object existed and still has owner + // 2. (Some(), None) Object existed but no longer has owner + // 3. (None, Some()) Object did not exist and now does and has an owner + // 4. (None, None) Object did not exist and but now it does and it does not have an owner + match (object_existed, address_owner) { + // (Option, Option) + (Some(old_owner), Some(new_owner)) => { + // Check if object had owner before and now has a different owner + match old_owner { + Some(old_owner) => { + // object existed and had owner before, check if owner changed + if old_owner != &new_owner { + // Receiver + custom_object_changes.push(( + Some(new_owner.clone()), + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some( + object_type.to_canonical_string(true), + ), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Received(Received { + sender_address: old_owner.to_string(), + receiver_address: new_owner, + }), + }, + )); + } + } + None => { + // Object did not have owner before, now has owner + custom_object_changes.push(( + Some(new_owner), + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some( + object_type.to_canonical_string(true), + ), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Mutated, + }, + )); + } + } + } + (Some(_), None) | (None, None) => { + custom_object_changes.push(( + None, + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Created, + }, + )); + } + // Object did not exist before, now it does and has an owner + (None, Some(new_owner)) => { + custom_object_changes.push(( + Some(new_owner), + ObjectChangeUpdate { + object_id: object_id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: data, + object_metadata: None, + status: ObjectUpdateStatus::Created, + }, + )); + } + } + } + _ => {} + } + } else if let Some(p) = o.data.try_as_package() { + if kind == WriteKind::Create { + object_changes.push(ObjectChange::Published { + package_id: p.id(), + version: p.version(), + digest, + modules: p.serialized_module_map().keys().cloned().collect(), + }) + } + }; + } + + for ((id, version, _), kind) in all_removed_objects { + let o = object_provider + .find_object_lt_or_eq_version(&id, &version) + .await?; + if let Some(o) = o { + if let Some(type_) = o.type_() { + let object_type: StructTag = type_.clone().into(); + match kind { + ObjectRemoveKind::Delete => object_changes.push(ObjectChange::Deleted { + sender, + object_type: object_type.clone(), + object_id: id, + version, + }), + ObjectRemoveKind::Wrap => object_changes.push(ObjectChange::Wrapped { + sender, + object_type: object_type.clone(), + object_id: id, + version, + }), + } + + let data = match o.data.try_as_move() { + Some(data) => data.clone().into_contents(), + None => continue, + }; + + let address_owner = match o.owner.get_owner_address() { + Ok(owner) => Some(owner.to_string()), + Err(_) => None, + }; + + // Check if object has changed ownership + match output_ownership_map.get(&id.to_string()) { + // object still exists aka has changed ownership + Some(new_owner) => { + if let Some(new_owner) = new_owner { + // Sender + + // just in case get old owner from out map + let old_owner = match input_ownership_map.get(&id.to_string()) { + Some(old_owner) => old_owner, + None => { + // Should never happen + warn!( + "Object ownership change occurred but object not found in input objects, object_id: {}", id + ); + continue; + } + }; + custom_object_changes.push(( + old_owner.clone(), + ObjectChangeUpdate { + object_id: id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: Some(data), + object_metadata: None, + status: ObjectUpdateStatus::Sent(Sent { + sender_address: new_owner.clone(), + receiver_address: new_owner.clone(), + }), + }, + )); + } else { + // Object was transferred exists but no longer has owner + custom_object_changes.push(( + None, + ObjectChangeUpdate { + object_id: id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: Some(data), + object_metadata: None, + status: ObjectUpdateStatus::Deleted, + }, + )); + } + } + None => { + // Object was simply deleted + custom_object_changes.push(( + address_owner, + ObjectChangeUpdate { + object_id: id.to_string(), + object_type_tag: Some(object_type.to_canonical_string(true)), + object_version: Some(version.into()), + object_bcs: Some(data), + object_metadata: None, + status: ObjectUpdateStatus::Deleted, + }, + )); + } + } + } + }; + } + + Ok((object_changes, custom_object_changes)) +} From 4f6a44837a255d9f23f0477680e8f1ca169d2c7a Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Thu, 1 Aug 2024 13:12:45 +0200 Subject: [PATCH 34/57] fix --- crates/sui-json-rpc/src/object_changes.rs | 28 +++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/sui-json-rpc/src/object_changes.rs b/crates/sui-json-rpc/src/object_changes.rs index 5627c47a82068..04e9e1b8ed15a 100644 --- a/crates/sui-json-rpc/src/object_changes.rs +++ b/crates/sui-json-rpc/src/object_changes.rs @@ -371,20 +371,20 @@ pub async fn custom_get_object_changes, E>( match output_ownership_map.get(&id.to_string()) { // object still exists aka has changed ownership Some(new_owner) => { + // just in case get old owner from out map + let old_owner = match input_ownership_map.get(&id.to_string()) { + Some(old_owner) => old_owner, + None => { + // Should never happen + warn!( + "Object ownership change occurred but object not found in input objects, object_id: {}", id + ); + continue; + } + }; + if let Some(new_owner) = new_owner { // Sender - - // just in case get old owner from out map - let old_owner = match input_ownership_map.get(&id.to_string()) { - Some(old_owner) => old_owner, - None => { - // Should never happen - warn!( - "Object ownership change occurred but object not found in input objects, object_id: {}", id - ); - continue; - } - }; custom_object_changes.push(( old_owner.clone(), ObjectChangeUpdate { @@ -400,9 +400,9 @@ pub async fn custom_get_object_changes, E>( }, )); } else { - // Object was transferred exists but no longer has owner + // Object was transferred, exists but no longer has owner custom_object_changes.push(( - None, + old_owner.clone(), ObjectChangeUpdate { object_id: id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), From a25470f7077d292bf4df551eb413dbd665486e11 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:40:06 +0200 Subject: [PATCH 35/57] fix nats --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- crates/sui-indexer/src/main.rs | 16 ++++++++++++++-- crates/sui-json-rpc/src/object_changes.rs | 21 +-------------------- 4 files changed, 18 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 68693a35b9713..249b7ad5120b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6970,7 +6970,7 @@ dependencies = [ [[package]] name = "odin" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ad438b1#ad438b1576469d76f9b2e7428a58fb27dfe1c561" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ce64446#ce64446d5ebe07fa36ab586ab169f50d65f607d1" dependencies = [ "async-nats", "bitcode", @@ -9717,7 +9717,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structs" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ad438b1#ad438b1576469d76f9b2e7428a58fb27dfe1c561" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ce64446#ce64446d5ebe07fa36ab586ab169f50d65f607d1" dependencies = [ "bitcode", "dotenvy", diff --git a/Cargo.toml b/Cargo.toml index 352043aaa5131..7c7614af05af3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -707,7 +707,7 @@ sui-execution = { path = "sui-execution" } # move-bytecode-verifier = { path = "external-crates/move/move-bytecode-verifier" } -odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "ad438b1", package = "odin" } +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "ce64446", package = "odin" } # suiop dependencies docker-api = "0.12.2" diff --git a/crates/sui-indexer/src/main.rs b/crates/sui-indexer/src/main.rs index 99b03257a0ee2..1e9c691f8cb71 100644 --- a/crates/sui-indexer/src/main.rs +++ b/crates/sui-indexer/src/main.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use clap::Parser; -use odin::{get_odin, Odin}; +use odin::{get_odin, ConnectOptions, Odin}; use sui_types::nats_queue::nats_queue; use tracing::info; @@ -39,7 +39,19 @@ async fn main() -> Result<(), IndexerError> { indexer_config.rpc_client_url.as_str(), )?; - let odin_connection: Arc = Arc::new(get_odin().await); + // TODO update on launch + let odin = Odin::connect( + Some(vec![ + "nats://localhost:4228".to_string(), + "nats://localhost:4229".to_string(), + ]), + Some(ConnectOptions::with_user_and_password( + "alexandria".to_string(), + "alexandria".to_string(), + )), + ) + .await; + let odin_connection: Arc = Arc::new(odin); let queue_sender = nats_queue(odin_connection.clone()); #[cfg(feature = "postgres-feature")] diff --git a/crates/sui-json-rpc/src/object_changes.rs b/crates/sui-json-rpc/src/object_changes.rs index 04e9e1b8ed15a..8eee707f07dbc 100644 --- a/crates/sui-json-rpc/src/object_changes.rs +++ b/crates/sui-json-rpc/src/object_changes.rs @@ -144,11 +144,6 @@ pub async fn custom_get_object_changes, E>( Err(_) => None, }; - let data = match o.data.try_as_move() { - Some(data) => Some(data.clone().into_contents()), - None => None, - }; - match kind { WriteKind::Mutate => { object_changes.push(ObjectChange::Mutated { @@ -191,7 +186,6 @@ pub async fn custom_get_object_changes, E>( object_type.to_canonical_string(true), ), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Received(Received { sender_address: old_owner.to_string(), @@ -208,7 +202,6 @@ pub async fn custom_get_object_changes, E>( object_id: object_id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Mutated, }, @@ -222,7 +215,6 @@ pub async fn custom_get_object_changes, E>( object_id: object_id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Mutated, }, @@ -264,7 +256,6 @@ pub async fn custom_get_object_changes, E>( object_type.to_canonical_string(true), ), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Received(Received { sender_address: old_owner.to_string(), @@ -284,7 +275,6 @@ pub async fn custom_get_object_changes, E>( object_type.to_canonical_string(true), ), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Mutated, }, @@ -299,7 +289,6 @@ pub async fn custom_get_object_changes, E>( object_id: object_id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Created, }, @@ -313,7 +302,6 @@ pub async fn custom_get_object_changes, E>( object_id: object_id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: data, object_metadata: None, status: ObjectUpdateStatus::Created, }, @@ -357,11 +345,6 @@ pub async fn custom_get_object_changes, E>( }), } - let data = match o.data.try_as_move() { - Some(data) => data.clone().into_contents(), - None => continue, - }; - let address_owner = match o.owner.get_owner_address() { Ok(owner) => Some(owner.to_string()), Err(_) => None, @@ -391,7 +374,7 @@ pub async fn custom_get_object_changes, E>( object_id: id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: Some(data), + object_metadata: None, status: ObjectUpdateStatus::Sent(Sent { sender_address: new_owner.clone(), @@ -407,7 +390,6 @@ pub async fn custom_get_object_changes, E>( object_id: id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: Some(data), object_metadata: None, status: ObjectUpdateStatus::Deleted, }, @@ -422,7 +404,6 @@ pub async fn custom_get_object_changes, E>( object_id: id.to_string(), object_type_tag: Some(object_type.to_canonical_string(true)), object_version: Some(version.into()), - object_bcs: Some(data), object_metadata: None, status: ObjectUpdateStatus::Deleted, }, From 20a447119d3eb7afe853a5c61301036b54a871de Mon Sep 17 00:00:00 2001 From: NB Date: Mon, 12 Aug 2024 13:23:47 +0200 Subject: [PATCH 36/57] fix --- Cargo.lock | 862 +----------------- Cargo.toml | 48 +- binary-build-list.json | 1 - crates/sui-cluster-test/Cargo.toml | 1 + crates/sui-cluster-test/src/cluster.rs | 33 + .../sui-config/src/object_storage_config.rs | 66 +- crates/sui-data-ingestion-core/src/util.rs | 12 +- crates/sui-graphql-rpc/Cargo.toml | 10 +- .../sui-graphql-rpc/src/test_infra/cluster.rs | 33 + crates/sui-metric-checker/src/query.rs | 4 +- crates/sui/Cargo.toml | 11 +- 11 files changed, 167 insertions(+), 914 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e6d01d2a3dc4e..0ea4e18f5bccc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -769,12 +769,6 @@ dependencies = [ "regex-syntax 0.8.4", ] -[[package]] -name = "ascii_utils" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" - [[package]] name = "asn1-rs" version = "0.5.1" @@ -834,7 +828,7 @@ version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" dependencies = [ - "brotli 3.3.4", + "brotli", "flate2", "futures-core", "memchr", @@ -855,105 +849,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "async-graphql" -version = "6.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298a5d587d6e6fdb271bf56af2dc325a80eb291fd0fc979146584b9a05494a8c" -dependencies = [ - "async-graphql-derive", - "async-graphql-parser", - "async-graphql-value", - "async-stream", - "async-trait", - "base64 0.13.1", - "bytes", - "chrono", - "fast_chemail", - "fnv", - "futures-channel", - "futures-timer", - "futures-util", - "handlebars", - "http 0.2.9", - "indexmap 2.2.6", - "lru 0.7.8", - "mime", - "multer", - "num-traits", - "once_cell", - "opentelemetry 0.21.0", - "pin-project-lite", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "static_assertions", - "tempfile", - "thiserror", - "tracing", - "tracing-futures", -] - -[[package]] -name = "async-graphql-axum" -version = "6.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a1c20a2059bffbc95130715b23435a05168c518fba9709c81fa2a38eed990c" -dependencies = [ - "async-graphql", - "async-trait", - "axum", - "bytes", - "futures-util", - "serde_json", - "tokio", - "tokio-stream", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-service", -] - -[[package]] -name = "async-graphql-derive" -version = "6.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f329c7eb9b646a72f70c9c4b516c70867d356ec46cb00dcac8ad343fd006b0" -dependencies = [ - "Inflector", - "async-graphql-parser", - "darling 0.20.10", - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "strum 0.25.0", - "syn 2.0.48", - "thiserror", -] - -[[package]] -name = "async-graphql-parser" -version = "6.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6139181845757fd6a73fbb8839f3d036d7150b798db0e9bb3c6e83cdd65bd53b" -dependencies = [ - "async-graphql-value", - "pest", - "serde", - "serde_json", -] - -[[package]] -name = "async-graphql-value" -version = "6.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323a5143f5bdd2030f45e3f2e0c821c9b1d36e79cf382129c64299c50a7f3750" -dependencies = [ - "bytes", - "indexmap 2.2.6", - "serde", - "serde_json", -] - [[package]] name = "async-lock" version = "2.6.0" @@ -2127,18 +2022,7 @@ checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", - "brotli-decompressor 2.3.2", -] - -[[package]] -name = "brotli" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor 4.0.1", + "brotli-decompressor", ] [[package]] @@ -2151,16 +2035,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "brotli-decompressor" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - [[package]] name = "bs58" version = "0.4.0" @@ -4045,23 +3919,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "enum-as-inner" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" -dependencies = [ - "heck 0.4.1", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - [[package]] name = "enum-compat-util" version = "0.1.0" dependencies = [ - "serde_yaml 0.8.26", + "serde_yaml", ] [[package]] @@ -4475,15 +4337,6 @@ dependencies = [ "rand 0.7.3", ] -[[package]] -name = "fast_chemail" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4" -dependencies = [ - "ascii_utils", -] - [[package]] name = "fastcrypto" version = "0.1.8" @@ -4977,29 +4830,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "gcp-bigquery-client" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7fe3895eb99784b8ad2776688b41e068e918d18ebb736dafb1a321bce46c749" -dependencies = [ - "async-stream", - "async-trait", - "dyn-clone", - "hyper 0.14.26", - "hyper-rustls 0.25.0", - "log", - "reqwest 0.12.4", - "serde", - "serde_json", - "thiserror", - "time", - "tokio", - "tokio-stream", - "url", - "yup-oauth2", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -5280,20 +5110,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "handlebars" -version = "4.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -5617,23 +5433,6 @@ dependencies = [ "webpki-roots 0.23.1", ] -[[package]] -name = "hyper-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c78f9338483cb7e630c8474b07268983c6bd5acee012e4211f9f7bb21b070" -dependencies = [ - "futures-util", - "http 0.2.9", - "hyper 0.14.26", - "log", - "rustls 0.22.4", - "rustls-native-certs 0.7.1", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", -] - [[package]] name = "hyper-rustls" version = "0.26.0" @@ -6539,15 +6338,6 @@ dependencies = [ "serde", ] -[[package]] -name = "lru" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" -dependencies = [ - "hashbrown 0.12.3", -] - [[package]] name = "lru" version = "0.10.0" @@ -6601,15 +6391,6 @@ dependencies = [ "libc", ] -[[package]] -name = "lz4_flex" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" -dependencies = [ - "twox-hash", -] - [[package]] name = "mach2" version = "0.4.1" @@ -6625,12 +6406,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -[[package]] -name = "markdown-gen" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034621d7f1258317ca1dfb9205e3925d27ee4aa2a46620a09c567daf0310562" - [[package]] name = "match_opt" version = "0.1.2" @@ -7055,7 +6830,7 @@ dependencies = [ "move-vm-runtime", "move-vm-test-utils", "move-vm-types", - "serde_yaml 0.8.26", + "serde_yaml", "tempfile", "toml_edit 0.14.4", "walkdir", @@ -7192,23 +6967,6 @@ dependencies = [ "serde", ] -[[package]] -name = "move-ir-compiler" -version = "0.1.0" -dependencies = [ - "anyhow", - "bcs", - "clap", - "move-abstract-interpreter", - "move-binary-format", - "move-bytecode-source-map", - "move-bytecode-verifier", - "move-command-line-common", - "move-core-types", - "move-ir-to-bytecode", - "serde_json", -] - [[package]] name = "move-ir-to-bytecode" version = "0.1.0" @@ -7295,7 +7053,7 @@ dependencies = [ "petgraph 0.5.1", "regex", "serde", - "serde_yaml 0.8.26", + "serde_yaml", "sha2 0.9.9", "tempfile", "toml 0.5.11", @@ -7438,36 +7196,6 @@ dependencies = [ "serde", ] -[[package]] -name = "move-transactional-test-runner" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "clap", - "move-binary-format", - "move-bytecode-source-map", - "move-cli", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-disassembler", - "move-ir-compiler", - "move-ir-types", - "move-stdlib", - "move-stdlib-natives", - "move-symbol-pool", - "move-vm-config", - "move-vm-runtime", - "move-vm-test-utils", - "move-vm-types", - "once_cell", - "rayon", - "regex", - "tempfile", - "tokio", -] - [[package]] name = "move-unit-test" version = "0.1.0" @@ -7655,24 +7383,6 @@ dependencies = [ "syn 1.0.107", ] -[[package]] -name = "multer" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 0.2.9", - "httparse", - "log", - "memchr", - "mime", - "spin 0.9.8", - "version_check", -] - [[package]] name = "multiaddr" version = "0.17.0" @@ -7986,7 +7696,7 @@ dependencies = [ "rand 0.8.5", "reqwest 0.12.4", "serde-reflection", - "serde_yaml 0.8.26", + "serde_yaml", "sui-keys", "sui-protocol-config", "sui-types", @@ -8626,15 +8336,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - [[package]] name = "number_prefix" version = "0.4.0" @@ -8671,7 +8372,6 @@ dependencies = [ "rand 0.8.5", "reqwest 0.12.4", "ring 0.17.8", - "rustls-pemfile 2.1.2", "serde", "serde_json", "snafu", @@ -8788,22 +8488,6 @@ dependencies = [ "opentelemetry_sdk", ] -[[package]] -name = "opentelemetry" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" -dependencies = [ - "futures-core", - "futures-sink", - "indexmap 2.2.6", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", -] - [[package]] name = "opentelemetry-otlp" version = "0.13.0" @@ -8841,7 +8525,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269" dependencies = [ - "opentelemetry 0.20.0", + "opentelemetry", ] [[package]] @@ -8873,7 +8557,7 @@ dependencies = [ "futures-util", "once_cell", "opentelemetry_api", - "ordered-float 3.9.1", + "ordered-float", "percent-encoding", "rand 0.8.5", "regex", @@ -8889,15 +8573,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "3.9.1" @@ -9102,39 +8777,6 @@ dependencies = [ "windows-targets 0.48.0", ] -[[package]] -name = "parquet" -version = "52.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e977b9066b4d3b03555c22bdc442f3fadebd96a39111249113087d0edb2691cd" -dependencies = [ - "ahash 0.8.11", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-ipc", - "arrow-schema", - "arrow-select", - "base64 0.22.1", - "brotli 6.0.0", - "bytes", - "chrono", - "flate2", - "half 2.4.1", - "hashbrown 0.14.5", - "lz4_flex", - "num", - "num-bigint 0.4.4", - "paste", - "seq-macro", - "snap", - "thrift", - "twox-hash", - "zstd 0.13.2", - "zstd-sys", -] - [[package]] name = "passkey-authenticator" version = "0.2.0" @@ -9795,20 +9437,6 @@ dependencies = [ "protobuf", ] -[[package]] -name = "prometheus-http-query" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0de773a6ba25c9164ed9d86d653a92fac759a6f0e683fd141d56bb96e80fd8b" -dependencies = [ - "enum-as-inner", - "mime", - "reqwest 0.11.20", - "serde", - "time", - "url", -] - [[package]] name = "prometheus-parse" version = "0.2.3" @@ -10405,7 +10033,6 @@ dependencies = [ "http 0.2.9", "http-body 0.4.5", "hyper 0.14.26", - "hyper-rustls 0.24.0", "ipnet", "js-sys", "log", @@ -10413,19 +10040,15 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.2", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-rustls 0.24.0", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.25.2", "winreg 0.50.0", ] @@ -11261,12 +10884,6 @@ dependencies = [ "untrusted 0.7.1", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "sec1" version = "0.3.0" @@ -11386,12 +11003,6 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" -[[package]] -name = "seq-macro" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" - [[package]] name = "serde" version = "1.0.202" @@ -11594,19 +11205,6 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.2.6", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serdect" version = "0.2.0" @@ -11617,31 +11215,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serial_test" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" -dependencies = [ - "dashmap", - "futures", - "lazy_static", - "log", - "parking_lot 0.12.1", - "serial_test_derive", -] - -[[package]] -name = "serial_test_derive" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -12279,18 +11852,16 @@ dependencies = [ "rustyline-derive", "serde", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "shell-words", "shlex", "signature 1.6.4", "sui-bridge", - "sui-cluster-test", "sui-config", "sui-execution", "sui-faucet", "sui-genesis-builder", - "sui-graphql-rpc", "sui-indexer", "sui-json", "sui-json-rpc-types", @@ -12353,14 +11924,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-adapter-transactional-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "sui-transactional-test-runner", -] - [[package]] name = "sui-adapter-v0" version = "0.1.0" @@ -12443,69 +12006,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-analytics-indexer" -version = "1.30.1" -dependencies = [ - "anyhow", - "arrow", - "arrow-array", - "async-trait", - "axum", - "bcs", - "byteorder", - "bytes", - "chrono", - "clap", - "csv", - "eyre", - "fastcrypto", - "gcp-bigquery-client", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "mysten-metrics", - "num_enum 0.6.1", - "object_store", - "parquet", - "prometheus", - "rocksdb", - "serde", - "serde_json", - "simulacrum", - "snowflake-api", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-analytics-indexer-derive", - "sui-config", - "sui-data-ingestion-core", - "sui-indexer", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-rest-api", - "sui-storage", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "typed-store", - "typed-store-derive", - "url", -] - -[[package]] -name = "sui-analytics-indexer-derive" -version = "1.30.1" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "sui-archival" version = "1.30.1" @@ -12726,7 +12226,7 @@ dependencies = [ "mysten-metrics", "prometheus", "serde", - "serde_yaml 0.8.26", + "serde_yaml", "sui-bridge", "sui-config", "sui-data-ingestion-core", @@ -12741,45 +12241,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-cluster-test" -version = "1.30.1" -dependencies = [ - "anyhow", - "async-trait", - "clap", - "derivative", - "diesel", - "fastcrypto", - "futures", - "jsonrpsee", - "move-core-types", - "prometheus", - "regex", - "reqwest 0.12.4", - "serde_json", - "shared-crypto", - "sui-config", - "sui-core", - "sui-faucet", - "sui-graphql-rpc", - "sui-indexer", - "sui-json", - "sui-json-rpc-types", - "sui-keys", - "sui-sdk 1.30.1", - "sui-swarm", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "tokio", - "tracing", - "uuid 1.2.2", -] - [[package]] name = "sui-config" version = "0.0.0" @@ -12801,7 +12262,7 @@ dependencies = [ "reqwest 0.12.4", "serde", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "sui-keys", "sui-protocol-config", "sui-types", @@ -12881,7 +12342,7 @@ dependencies = [ "serde-reflection", "serde_json", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "signature 1.6.4", "static_assertions", @@ -12963,7 +12424,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sui-archival", "sui-data-ingestion-core", "sui-storage", @@ -13070,7 +12531,7 @@ dependencies = [ name = "sui-enum-compat-util" version = "0.1.0" dependencies = [ - "serde_yaml 0.8.26", + "serde_yaml", ] [[package]] @@ -13228,7 +12689,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "sui-config", "sui-execution", @@ -13241,123 +12702,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-graphql-config" -version = "1.30.1" -dependencies = [ - "quote 1.0.35", - "syn 1.0.107", -] - -[[package]] -name = "sui-graphql-e2e-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "msim", - "sui-graphql-rpc", - "sui-transactional-test-runner", - "tokio", -] - -[[package]] -name = "sui-graphql-rpc" -version = "2024.7.0" -dependencies = [ - "anyhow", - "async-graphql", - "async-graphql-axum", - "async-graphql-value", - "async-trait", - "axum", - "bcs", - "bin-version", - "chrono", - "clap", - "const-str", - "diesel", - "downcast", - "either", - "expect-test", - "fastcrypto", - "fastcrypto-zkp", - "futures", - "hex", - "http 0.2.9", - "hyper 0.14.26", - "im", - "insta", - "itertools 0.10.5", - "lru 0.10.0", - "markdown-gen", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "move-disassembler", - "move-ir-types", - "mysten-metrics", - "mysten-network", - "once_cell", - "prometheus", - "rand 0.8.5", - "regex", - "reqwest 0.12.4", - "serde", - "serde_json", - "serde_with 3.8.1", - "serde_yaml 0.8.26", - "serial_test", - "shared-crypto", - "similar", - "simulacrum", - "sui-framework", - "sui-graphql-config", - "sui-graphql-rpc-client", - "sui-graphql-rpc-headers", - "sui-indexer", - "sui-json-rpc", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-protocol-config", - "sui-rest-api", - "sui-sdk 1.30.1", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "thiserror", - "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.7.4", - "tower", - "tower-http", - "tracing", - "uuid 1.2.2", -] - -[[package]] -name = "sui-graphql-rpc-client" -version = "0.1.0" -dependencies = [ - "async-graphql", - "axum", - "hyper 0.14.26", - "reqwest 0.12.4", - "serde_json", - "sui-graphql-rpc-headers", - "thiserror", -] - -[[package]] -name = "sui-graphql-rpc-headers" -version = "0.1.0" -dependencies = [ - "axum", -] - [[package]] name = "sui-indexer" version = "1.30.1" @@ -13610,7 +12954,7 @@ dependencies = [ "move-core-types", "serde", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sui-config", "sui-json", "sui-json-rpc-types", @@ -13631,27 +12975,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-metric-checker" -version = "1.30.1" -dependencies = [ - "anyhow", - "backoff", - "base64 0.21.2", - "chrono", - "clap", - "humantime", - "once_cell", - "prometheus-http-query", - "reqwest 0.12.4", - "serde", - "serde_yaml 0.9.34+deprecated", - "strum_macros 0.24.3", - "telemetry-subscribers", - "tokio", - "tracing", -] - [[package]] name = "sui-move" version = "1.30.1" @@ -13679,7 +13002,7 @@ dependencies = [ "prometheus", "rand 0.8.5", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sui-core", "sui-macros", "sui-move-build", @@ -14069,7 +13392,7 @@ dependencies = [ "serde", "serde_json", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "snap", "sui-tls", "sui-types", @@ -14104,7 +13427,7 @@ dependencies = [ "serde", "serde_json", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "shellexpand", "similar", @@ -14149,7 +13472,7 @@ dependencies = [ "serde", "serde_json", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "sui-protocol-config", "sui-sdk 0.0.0", "sui-types", @@ -14516,7 +13839,7 @@ dependencies = [ "typed-store", "typed-store-derive", "url", - "zstd 0.12.3+zstd.1.5.2", + "zstd", ] [[package]] @@ -14587,7 +13910,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "sui-config", "sui-execution", @@ -14727,55 +14050,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "sui-transactional-test-runner" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bcs", - "bimap", - "clap", - "criterion", - "eyre", - "fastcrypto", - "futures", - "move-binary-format", - "move-bytecode-utils", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-stdlib", - "move-symbol-pool", - "move-transactional-test-runner", - "move-vm-runtime", - "msim", - "once_cell", - "rand 0.8.5", - "regex", - "rocksdb", - "serde_json", - "simulacrum", - "sui-config", - "sui-core", - "sui-framework", - "sui-framework-snapshot", - "sui-graphql-rpc", - "sui-json-rpc", - "sui-json-rpc-api", - "sui-json-rpc-types", - "sui-protocol-config", - "sui-rest-api", - "sui-storage", - "sui-swarm-config", - "sui-types", - "telemetry-subscribers", - "tempfile", - "tokio", - "typed-store", - "typed-store-derive", -] - [[package]] name = "sui-types" version = "0.1.0" @@ -14838,7 +14112,7 @@ dependencies = [ "serde-name", "serde_json", "serde_with 3.8.1", - "serde_yaml 0.8.26", + "serde_yaml", "shared-crypto", "signature 1.6.4", "static_assertions", @@ -14887,14 +14161,6 @@ dependencies = [ "sui-types", ] -[[package]] -name = "sui-verifier-transactional-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "sui-transactional-test-runner", -] - [[package]] name = "sui-verifier-v0" version = "0.1.0" @@ -14961,7 +14227,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sui-data-ingestion-core", "sui-json-rpc", "sui-storage", @@ -14996,7 +14262,7 @@ dependencies = [ "semver 1.0.16", "serde", "serde_json", - "serde_yaml 0.8.26", + "serde_yaml", "sha2 0.10.6", "spinners", "strum 0.24.1", @@ -15206,7 +14472,7 @@ dependencies = [ "crossterm 0.25.0", "futures", "once_cell", - "opentelemetry 0.20.0", + "opentelemetry", "opentelemetry-otlp", "opentelemetry-proto", "opentelemetry_api", @@ -15409,17 +14675,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "ordered-float 2.10.1", -] - [[package]] name = "time" version = "0.3.31" @@ -15428,8 +14683,6 @@ checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", - "libc", - "num_threads", "powerfmt", "serde", "time-core", @@ -16001,8 +15254,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "futures", - "futures-task", "pin-project", "tracing", ] @@ -16025,7 +15276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8" dependencies = [ "once_cell", - "opentelemetry 0.20.0", + "opentelemetry", "opentelemetry_sdk", "smallvec", "tracing", @@ -16360,12 +15611,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "unsigned-varint" version = "0.7.1" @@ -16718,12 +15963,6 @@ dependencies = [ "rustls-webpki 0.100.3", ] -[[package]] -name = "webpki-roots" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" - [[package]] name = "webpki-roots" version = "0.26.3" @@ -17155,33 +16394,6 @@ dependencies = [ "time", ] -[[package]] -name = "yup-oauth2" -version = "8.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b61da40aeb0907a65f7fb5c1de83c5a224d6a9ebb83bf918588a2bb744d636b8" -dependencies = [ - "anyhow", - "async-trait", - "base64 0.21.2", - "futures", - "http 0.2.9", - "hyper 0.14.26", - "hyper-rustls 0.24.0", - "itertools 0.12.0", - "log", - "percent-encoding", - "rustls 0.22.4", - "rustls-pemfile 1.0.2", - "seahash", - "serde", - "serde_json", - "time", - "tokio", - "tower-service", - "url", -] - [[package]] name = "zerocopy" version = "0.7.35" @@ -17229,16 +16441,7 @@ version = "0.12.3+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", -] - -[[package]] -name = "zstd" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" -dependencies = [ - "zstd-safe 7.2.1", + "zstd-safe", ] [[package]] @@ -17251,15 +16454,6 @@ dependencies = [ "zstd-sys", ] -[[package]] -name = "zstd-safe" -version = "7.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" -dependencies = [ - "zstd-sys", -] - [[package]] name = "zstd-sys" version = "2.0.12+zstd.1.5.6" diff --git a/Cargo.toml b/Cargo.toml index 694f60f670cab..0e1a8a1fa8e1a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -83,9 +83,9 @@ members = [ "crates/shared-crypto", "crates/simulacrum", "crates/sui", - "crates/sui-adapter-transactional-tests", - "crates/sui-analytics-indexer", - "crates/sui-analytics-indexer-derive", + # "crates/sui-adapter-transactional-tests", + # "crates/sui-analytics-indexer", + # "crates/sui-analytics-indexer-derive", "crates/sui-archival", "crates/sui-authority-aggregation", "crates/sui-aws-orchestrator", @@ -93,7 +93,7 @@ members = [ "crates/sui-bridge", "crates/sui-bridge-cli", "crates/sui-bridge-indexer", - "crates/sui-cluster-test", + # "crates/sui-cluster-test", "crates/sui-config", "crates/sui-core", "crates/sui-cost", @@ -106,11 +106,11 @@ members = [ "crates/sui-framework-snapshot", "crates/sui-framework-tests", "crates/sui-genesis-builder", - "crates/sui-graphql-config", - "crates/sui-graphql-e2e-tests", - "crates/sui-graphql-rpc", - "crates/sui-graphql-rpc-client", - "crates/sui-graphql-rpc-headers", + # "crates/sui-graphql-config", + # "crates/sui-graphql-e2e-tests", + # "crates/sui-graphql-rpc", + # "crates/sui-graphql-rpc-client", + # "crates/sui-graphql-rpc-headers", "crates/sui-indexer", "crates/sui-json", "crates/sui-json-rpc", @@ -120,7 +120,7 @@ members = [ "crates/sui-keys", "crates/sui-light-client", "crates/sui-macros", - "crates/sui-metric-checker", + # "crates/sui-metric-checker", "crates/sui-move", "crates/sui-move-build", "crates/sui-move-lsp", @@ -157,10 +157,10 @@ members = [ "crates/sui-tool", "crates/sui-transaction-builder", "crates/sui-transaction-checks", - "crates/sui-transactional-test-runner", + # "crates/sui-transactional-test-runner", "crates/sui-types", "crates/sui-upgrade-compatibility-transactional-tests", - "crates/sui-verifier-transactional-tests", + # "crates/sui-verifier-transactional-tests", "crates/suins-indexer", "crates/suiop-cli", "crates/telemetry-subscribers", @@ -388,7 +388,7 @@ ntest = "0.9.0" num-bigint = "0.4.4" num_cpus = "1.15.0" num_enum = "0.6.1" -object_store = { version = "0.10", features = ["aws", "gcp", "azure", "http"] } +object_store = { version = "0.10", features = ["aws", "azure", "http"] } once_cell = "1.18.0" ouroboros = "0.17" parking_lot = "0.12.1" @@ -604,14 +604,14 @@ prometheus-closure-metric = { path = "crates/prometheus-closure-metric" } shared-crypto = { path = "crates/shared-crypto" } simulacrum = { path = "crates/simulacrum" } sui = { path = "crates/sui" } -sui-adapter-transactional-tests = { path = "crates/sui-adapter-transactional-tests" } -sui-analytics-indexer = { path = "crates/sui-analytics-indexer" } -sui-analytics-indexer-derive = { path = "crates/sui-analytics-indexer-derive" } +# sui-adapter-transactional-tests = { path = "crates/sui-adapter-transactional-tests" } +# sui-analytics-indexer = { path = "crates/sui-analytics-indexer" } +# sui-analytics-indexer-derive = { path = "crates/sui-analytics-indexer-derive" } sui-archival = { path = "crates/sui-archival" } sui-authority-aggregation = { path = "crates/sui-authority-aggregation" } sui-benchmark = { path = "crates/sui-benchmark" } sui-bridge = { path = "crates/sui-bridge" } -sui-cluster-test = { path = "crates/sui-cluster-test" } +# sui-cluster-test = { path = "crates/sui-cluster-test" } sui-config = { path = "crates/sui-config" } sui-core = { path = "crates/sui-core" } sui-cost = { path = "crates/sui-cost" } @@ -623,10 +623,10 @@ sui-faucet = { path = "crates/sui-faucet" } sui-framework = { path = "crates/sui-framework" } sui-framework-snapshot = { path = "crates/sui-framework-snapshot" } sui-framework-tests = { path = "crates/sui-framework-tests" } -sui-graphql-config = { path = "crates/sui-graphql-config" } -sui-graphql-rpc = { path = "crates/sui-graphql-rpc" } -sui-graphql-rpc-client = { path = "crates/sui-graphql-rpc-client" } -sui-graphql-rpc-headers = { path = "crates/sui-graphql-rpc-headers" } +# sui-graphql-config = { path = "crates/sui-graphql-config" } +# sui-graphql-rpc = { path = "crates/sui-graphql-rpc" } +# sui-graphql-rpc-client = { path = "crates/sui-graphql-rpc-client" } +# sui-graphql-rpc-headers = { path = "crates/sui-graphql-rpc-headers" } sui-genesis-builder = { path = "crates/sui-genesis-builder" } sui-indexer = { path = "crates/sui-indexer" } sui-json = { path = "crates/sui-json" } @@ -635,7 +635,7 @@ sui-json-rpc-api = { path = "crates/sui-json-rpc-api" } sui-json-rpc-types = { path = "crates/sui-json-rpc-types" } sui-keys = { path = "crates/sui-keys" } sui-macros = { path = "crates/sui-macros" } -sui-metric-checker = { path = "crates/sui-metric-checker" } +# sui-metric-checker = { path = "crates/sui-metric-checker" } sui-move = { path = "crates/sui-move" } sui-move-build = { path = "crates/sui-move-build" } sui-move-lsp = { path = "crates/sui-move-lsp" } @@ -669,10 +669,10 @@ sui-rest-api = { path = "crates/sui-rest-api" } sui-tool = { path = "crates/sui-tool" } sui-transaction-builder = { path = "crates/sui-transaction-builder" } sui-transaction-checks = { path = "crates/sui-transaction-checks" } -sui-transactional-test-runner = { path = "crates/sui-transactional-test-runner" } +# sui-transactional-test-runner = { path = "crates/sui-transactional-test-runner" } sui-types = { path = "crates/sui-types" } sui-upgrade-compatibility-transactional-tests = { path = "crates/sui-upgrade-compatibility-transactional-tests" } -sui-verifier-transactional-tests = { path = "crates/sui-verifier-transactional-tests" } +# sui-verifier-transactional-tests = { path = "crates/sui-verifier-transactional-tests" } telemetry-subscribers = { path = "crates/telemetry-subscribers" } test-cluster = { path = "crates/test-cluster" } transaction-fuzzer = { path = "crates/transaction-fuzzer" } diff --git a/binary-build-list.json b/binary-build-list.json index 4855c1b2a220b..344be336436a8 100644 --- a/binary-build-list.json +++ b/binary-build-list.json @@ -7,7 +7,6 @@ "sui-data-ingestion", "sui-bridge", "sui-bridge-cli", - "sui-graphql-rpc", "sui-test-validator", "move-analyzer" ], diff --git a/crates/sui-cluster-test/Cargo.toml b/crates/sui-cluster-test/Cargo.toml index a6477761d408b..9186b9ea56db2 100644 --- a/crates/sui-cluster-test/Cargo.toml +++ b/crates/sui-cluster-test/Cargo.toml @@ -7,6 +7,7 @@ publish = false edition = "2021" [dependencies] +odin = { workspace = true, version = "0.1.0" } futures.workspace = true serde_json.workspace = true tempfile.workspace = true diff --git a/crates/sui-cluster-test/src/cluster.rs b/crates/sui-cluster-test/src/cluster.rs index 80cfa27153024..244d288063141 100644 --- a/crates/sui-cluster-test/src/cluster.rs +++ b/crates/sui-cluster-test/src/cluster.rs @@ -3,8 +3,10 @@ use super::config::{ClusterTestOpt, Env}; use async_trait::async_trait; +use odin::{ConnectOptions, Odin}; use std::net::SocketAddr; use std::path::Path; +use std::sync::Arc; use sui_config::Config; use sui_config::{PersistedConfig, SUI_KEYSTORE_FILENAME, SUI_NETWORK_CONFIG}; use sui_graphql_rpc::config::ConnectionConfig; @@ -20,6 +22,7 @@ use sui_types::base_types::SuiAddress; use sui_types::crypto::KeypairTraits; use sui_types::crypto::SuiKeyPair; use sui_types::crypto::{get_key_pair, AccountKeyPair}; +use sui_types::nats_queue::nats_queue; use tempfile::tempdir; use test_cluster::{TestCluster, TestClusterBuilder}; use tracing::info; @@ -226,14 +229,43 @@ impl Cluster for LocalNewCluster { if let (Some(pg_address), Some(indexer_address)) = (options.pg_address.clone(), indexer_address) { + let odin = Odin::connect( + Some(vec![ + "nats://localhost:4228".to_string(), + "nats://localhost:4229".to_string(), + ]), + Some(ConnectOptions::with_user_and_password( + "alexandria".to_string(), + "alexandria".to_string(), + )), + ) + .await; + let odin_connection: Arc = Arc::new(odin); + let queue_sender = nats_queue(odin_connection.clone()); + // Start in writer mode start_test_indexer::( Some(pg_address.clone()), fullnode_url.clone(), ReaderWriterConfig::writer_mode(None), data_ingestion_path.clone(), + queue_sender, + ) + .await; + + let odin = Odin::connect( + Some(vec![ + "nats://localhost:4228".to_string(), + "nats://localhost:4229".to_string(), + ]), + Some(ConnectOptions::with_user_and_password( + "alexandria".to_string(), + "alexandria".to_string(), + )), ) .await; + let odin_connection: Arc = Arc::new(odin); + let queue_sender = nats_queue(odin_connection.clone()); // Start in reader mode start_test_indexer::( @@ -241,6 +273,7 @@ impl Cluster for LocalNewCluster { fullnode_url.clone(), ReaderWriterConfig::reader_mode(indexer_address.to_string()), data_ingestion_path, + queue_sender, ) .await; } diff --git a/crates/sui-config/src/object_storage_config.rs b/crates/sui-config/src/object_storage_config.rs index 7bdf75defe4e3..3ded9ffbc2e3f 100644 --- a/crates/sui-config/src/object_storage_config.rs +++ b/crates/sui-config/src/object_storage_config.rs @@ -1,7 +1,7 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 -use anyhow::{anyhow, Context, Result}; +use anyhow::{anyhow, bail, Context, Result}; use clap::*; use object_store::aws::AmazonS3Builder; @@ -168,37 +168,37 @@ impl ObjectStoreConfig { self.object_store_connection_limit, ))) } - fn new_gcs(&self) -> Result, anyhow::Error> { - use object_store::gcp::GoogleCloudStorageBuilder; - use object_store::limit::LimitStore; - - info!(bucket=?self.bucket, object_store_type="GCS", "Object Store"); - - let mut builder = GoogleCloudStorageBuilder::new(); - - if let Some(bucket) = &self.bucket { - builder = builder.with_bucket_name(bucket); - } - if let Some(account) = &self.google_service_account { - builder = builder.with_service_account_path(account); - } - if let Some(google_project_id) = &self.google_project_id { - let x_project_header = HeaderName::from_static("x-goog-user-project"); - let iam_req_header = HeaderName::from_static("userproject"); - - let mut headers = HeaderMap::new(); - headers.insert(x_project_header, HeaderValue::from_str(google_project_id)?); - headers.insert(iam_req_header, HeaderValue::from_str(google_project_id)?); - - builder = - builder.with_client_options(ClientOptions::new().with_default_headers(headers)); - } - - Ok(Arc::new(LimitStore::new( - builder.build().context("Invalid gcs config")?, - self.object_store_connection_limit, - ))) - } + // fn new_gcs(&self) -> Result, anyhow::Error> { + // use object_store::gcp::GoogleCloudStorageBuilder; + // use object_store::limit::LimitStore; + + // info!(bucket=?self.bucket, object_store_type="GCS", "Object Store"); + + // let mut builder = GoogleCloudStorageBuilder::new(); + + // if let Some(bucket) = &self.bucket { + // builder = builder.with_bucket_name(bucket); + // } + // if let Some(account) = &self.google_service_account { + // builder = builder.with_service_account_path(account); + // } + // if let Some(google_project_id) = &self.google_project_id { + // let x_project_header = HeaderName::from_static("x-goog-user-project"); + // let iam_req_header = HeaderName::from_static("userproject"); + + // let mut headers = HeaderMap::new(); + // headers.insert(x_project_header, HeaderValue::from_str(google_project_id)?); + // headers.insert(iam_req_header, HeaderValue::from_str(google_project_id)?); + + // builder = + // builder.with_client_options(ClientOptions::new().with_default_headers(headers)); + // } + + // Ok(Arc::new(LimitStore::new( + // builder.build().context("Invalid gcs config")?, + // self.object_store_connection_limit, + // ))) + // } fn new_azure(&self) -> Result, anyhow::Error> { use object_store::azure::MicrosoftAzureBuilder; use object_store::limit::LimitStore; @@ -227,7 +227,7 @@ impl ObjectStoreConfig { match &self.object_store { Some(ObjectStoreType::File) => self.new_local_fs(), Some(ObjectStoreType::S3) => self.new_s3(), - Some(ObjectStoreType::GCS) => self.new_gcs(), + Some(ObjectStoreType::GCS) => bail!("not implemented"), Some(ObjectStoreType::Azure) => self.new_azure(), _ => Err(anyhow!("At least one storage backend should be provided")), } diff --git a/crates/sui-data-ingestion-core/src/util.rs b/crates/sui-data-ingestion-core/src/util.rs index 0ff279fe6c867..57dd3838369af 100644 --- a/crates/sui-data-ingestion-core/src/util.rs +++ b/crates/sui-data-ingestion-core/src/util.rs @@ -3,7 +3,7 @@ use anyhow::Result; use object_store::aws::AmazonS3ConfigKey; -use object_store::gcp::GoogleConfigKey; +// use object_store::gcp::GoogleConfigKey; use object_store::{ClientOptions, ObjectStore, RetryConfig}; use std::str::FromStr; use std::time::Duration; @@ -29,16 +29,6 @@ pub fn create_remote_store_client( .with_retry(retry_config) .build()?; Ok(Box::new(http_store)) - } else if Url::parse(&url)?.scheme() == "gs" { - let url = Url::parse(&url)?; - let mut builder = object_store::gcp::GoogleCloudStorageBuilder::new() - .with_url(url.as_str()) - .with_retry(retry_config) - .with_client_options(client_options); - for (key, value) in remote_store_options { - builder = builder.with_config(GoogleConfigKey::from_str(&key)?, value); - } - Ok(Box::new(builder.build()?)) } else { let url = Url::parse(&url)?; let mut builder = object_store::aws::AmazonS3Builder::new() diff --git a/crates/sui-graphql-rpc/Cargo.toml b/crates/sui-graphql-rpc/Cargo.toml index aa58529dab532..54dfb33052d1b 100644 --- a/crates/sui-graphql-rpc/Cargo.toml +++ b/crates/sui-graphql-rpc/Cargo.toml @@ -8,8 +8,14 @@ edition = "2021" [dependencies] +odin = { workspace = true, version = "0.1.0" } anyhow.workspace = true -async-graphql = {workspace = true, features = ["dataloader", "apollo_tracing", "tracing", "opentelemetry"] } +async-graphql = { workspace = true, features = [ + "dataloader", + "apollo_tracing", + "tracing", + "opentelemetry", +] } async-graphql-axum.workspace = true async-graphql-value.workspace = true async-trait.workspace = true @@ -71,7 +77,7 @@ sui-graphql-rpc-client.workspace = true # TODO: put these behind feature flag to prevent leakage # Used for dummy data bcs.workspace = true -simulacrum.workspace = true # todo: cleanup test only deps +simulacrum.workspace = true # todo: cleanup test only deps sui-json-rpc.workspace = true sui-json-rpc-types.workspace = true sui-indexer = { workspace = true, default-features = true } diff --git a/crates/sui-graphql-rpc/src/test_infra/cluster.rs b/crates/sui-graphql-rpc/src/test_infra/cluster.rs index 4036e3d2985c2..a17bcbdc83996 100644 --- a/crates/sui-graphql-rpc/src/test_infra/cluster.rs +++ b/crates/sui-graphql-rpc/src/test_infra/cluster.rs @@ -6,6 +6,8 @@ use crate::config::ServerConfig; use crate::config::ServiceConfig; use crate::config::Version; use crate::server::graphiql_server::start_graphiql_server; +use odin::ConnectOptions; +use odin::Odin; use std::net::SocketAddr; use std::path::PathBuf; use std::sync::Arc; @@ -20,6 +22,7 @@ use sui_indexer::test_utils::start_test_indexer; use sui_indexer::test_utils::start_test_indexer_impl; use sui_indexer::test_utils::ReaderWriterConfig; use sui_swarm_config::genesis_config::{AccountConfig, DEFAULT_GAS_AMOUNT}; +use sui_types::nats_queue::nats_queue; use sui_types::storage::RestStateReader; use test_cluster::TestCluster; use test_cluster::TestClusterBuilder; @@ -67,12 +70,27 @@ pub async fn start_cluster( start_validator_with_fullnode(internal_data_source_rpc_port, data_ingestion_path.clone()) .await; + let odin = Odin::connect( + Some(vec![ + "nats://localhost:4228".to_string(), + "nats://localhost:4229".to_string(), + ]), + Some(ConnectOptions::with_user_and_password( + "alexandria".to_string(), + "alexandria".to_string(), + )), + ) + .await; + let odin_connection: Arc = Arc::new(odin); + let queue_sender = nats_queue(odin_connection.clone()); + // Starts indexer let (pg_store, pg_handle) = start_test_indexer( Some(db_url), val_fn.rpc_url().to_string(), ReaderWriterConfig::writer_mode(None), data_ingestion_path, + queue_sender, ) .await; @@ -127,6 +145,20 @@ pub async fn serve_executor( .await; }); + let odin = Odin::connect( + Some(vec![ + "nats://localhost:4228".to_string(), + "nats://localhost:4229".to_string(), + ]), + Some(ConnectOptions::with_user_and_password( + "alexandria".to_string(), + "alexandria".to_string(), + )), + ) + .await; + let odin_connection: Arc = Arc::new(odin); + let queue_sender = nats_queue(odin_connection.clone()); + let (pg_store, pg_handle) = start_test_indexer_impl( Some(db_url), format!("http://{}", executor_server_url), @@ -134,6 +166,7 @@ pub async fn serve_executor( Some(graphql_connection_config.db_name()), Some(data_ingestion_path), cancellation_token.clone(), + queue_sender, ) .await; diff --git a/crates/sui-metric-checker/src/query.rs b/crates/sui-metric-checker/src/query.rs index f07972002ce69..f4c16b75b0e18 100644 --- a/crates/sui-metric-checker/src/query.rs +++ b/crates/sui-metric-checker/src/query.rs @@ -16,7 +16,7 @@ pub async fn instant_query( let response = client .query(query) .header( - AUTHORIZATION, + AUTHORIZATION.as_str(), HeaderValue::from_str(&format!( "Basic {}", general_purpose::STANDARD.encode(auth_header) @@ -55,7 +55,7 @@ pub async fn range_query( let response = client .query_range(query, start, end, step) .header( - AUTHORIZATION, + AUTHORIZATION.as_str(), HeaderValue::from_str(&format!( "Basic {}", general_purpose::STANDARD.encode(auth_header) diff --git a/crates/sui/Cargo.toml b/crates/sui/Cargo.toml index 9c06cb2893505..0c2872feefab4 100644 --- a/crates/sui/Cargo.toml +++ b/crates/sui/Cargo.toml @@ -50,11 +50,11 @@ url.workspace = true sui-config.workspace = true sui-bridge.workspace = true -sui-cluster-test.workspace = true +# sui-cluster-test.workspace = true sui-execution = { path = "../../sui-execution" } sui-faucet.workspace = true sui-swarm-config.workspace = true -sui-graphql-rpc = {workspace = true, optional = true} +# sui-graphql-rpc = { workspace = true, optional = true } sui-indexer = { workspace = true, optional = true } sui-genesis-builder.workspace = true sui-types.workspace = true @@ -127,8 +127,5 @@ name = "ptb_files_tests" harness = false [features] -gas-profiler = [ - "sui-types/gas-profiler", - "sui-execution/gas-profiler", -] -indexer = ["dep:sui-indexer", "dep:sui-graphql-rpc"] +gas-profiler = ["sui-types/gas-profiler", "sui-execution/gas-profiler"] +# indexer = ["dep:sui-indexer", "dep:sui-graphql-rpc"] From 500cd81c33a823df7ddc76bfe5fab13515755b69 Mon Sep 17 00:00:00 2001 From: NB Date: Mon, 12 Aug 2024 14:57:09 +0200 Subject: [PATCH 37/57] maybe this will help with speed --- .cargo/config | 5 ++++- Cargo.toml | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.cargo/config b/.cargo/config index 77ddee744f4d2..004789605a37f 100644 --- a/.cargo/config +++ b/.cargo/config @@ -44,4 +44,7 @@ mysql-clippy = [ rustflags = ["-C", "force-frame-pointers=yes", "-C", "force-unwind-tables=yes"] [net] -git-fetch-with-cli = true \ No newline at end of file +git-fetch-with-cli = true + +[target.x86_64-unknown-linux-gnu] +rustflags = ["-C", "link-arg=-fuse-ld=lld", "-C", "target-cpu=native"] \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 0e1a8a1fa8e1a..9d6d4fb066496 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -209,6 +209,11 @@ split-debuginfo = 'packed' strip = 'debuginfo' # Exit process with SIGABRT when any thread panics panic = 'abort' +# custom +opt-level = 3 +lto = true +incremental = false +codegen-units = 1 # Same as release, but build binary with debug symbols (binary size will be ~ 1GB). [profile.release-dbgsym] @@ -216,6 +221,7 @@ inherits = "release" split-debuginfo = 'off' strip = 'none' + # Inherits from the release profile above. [profile.bench] # For convenience. From 2426bbaae8097477ebf2bb6c0f125ec7d77b0344 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Fri, 2 Aug 2024 11:14:00 +0200 Subject: [PATCH 38/57] coins_metadata rust --- crates/sui-indexer/src/apis/coin_api.rs | 11 ++++++ crates/sui-indexer/src/indexer_reader.rs | 50 ++++++++++++++++++++++++ crates/sui-json-rpc-api/src/coin.rs | 8 ++++ crates/sui-json-rpc/src/coin_api.rs | 18 +++++++++ 4 files changed, 87 insertions(+) diff --git a/crates/sui-indexer/src/apis/coin_api.rs b/crates/sui-indexer/src/apis/coin_api.rs index da3f2e5fd6f79..00c3d51d9b14f 100644 --- a/crates/sui-indexer/src/apis/coin_api.rs +++ b/crates/sui-indexer/src/apis/coin_api.rs @@ -128,6 +128,17 @@ impl CoinReadApiServer for CoinReadApi { .map_err(Into::into) } + async fn get_coins_metadata(&self, coin_types: Vec) -> RpcResult> { + let coin_structs = coin_types + .iter() + .map(|coin_type| parse_to_struct_tag(coin_type)) + .collect::, _>>()?; + self.inner + .get_coins_metadata_in_blocking_task(coin_structs) + .await + .map_err(Into::into) + } + async fn get_total_supply(&self, coin_type: String) -> RpcResult { let coin_struct = parse_to_struct_tag(&coin_type)?; if GAS::is_gas(&coin_struct) { diff --git a/crates/sui-indexer/src/indexer_reader.rs b/crates/sui-indexer/src/indexer_reader.rs index 00408945140bd..a7b8ab8fd63b5 100644 --- a/crates/sui-indexer/src/indexer_reader.rs +++ b/crates/sui-indexer/src/indexer_reader.rs @@ -1514,6 +1514,56 @@ impl IndexerReader { } } + pub async fn get_coins_metadata_in_blocking_task( + &self, + coin_structs: Vec, + ) -> Result, IndexerError> { + self.spawn_blocking(move |this| this.get_coins_metadata(coin_structs)) + .await + } + + fn get_coins_metadata( + &self, + coin_structs: Vec, + ) -> Result, IndexerError> { + let request_data = coin_structs + .iter() + .map(|s| { + ( + s.address.into(), + CoinMetadata::type_(s.clone()).to_canonical_string(true), + ) + }) + .collect::>(); + + let mut coin_metadata_store = self.package_obj_type_cache.lock().unwrap(); + + let coin_metadata = request_data + .iter() + .filter_map(|(package_id, coin_metadata_type)| { + let coin_metadata_obj_id = coin_metadata_store.cache_get_or_set_with( + format!("{}{}", package_id, coin_metadata_type), + || { + get_single_obj_id_from_package_publish( + self, + *package_id, + coin_metadata_type.clone(), + ) + .unwrap() + }, + ); + coin_metadata_obj_id.and_then(|id| { + self.get_object(&id, None) + .ok() + .flatten() + .and_then(|metadata| SuiCoinMetadata::try_from(metadata).ok()) + }) + }) + .collect(); + + Ok(coin_metadata) + } + pub async fn get_total_supply_in_blocking_task( &self, coin_struct: StructTag, diff --git a/crates/sui-json-rpc-api/src/coin.rs b/crates/sui-json-rpc-api/src/coin.rs index b9f7405912c48..d86a295d936b1 100644 --- a/crates/sui-json-rpc-api/src/coin.rs +++ b/crates/sui-json-rpc-api/src/coin.rs @@ -63,6 +63,14 @@ pub trait CoinReadApi { coin_type: String, ) -> RpcResult>; + /// Return metadata(e.g., symbol, decimals) for a all provided coin types + #[method(name = "getCoinsMetadata")] + async fn get_coins_metadata( + &self, + /// type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) + coin_types: Vec, + ) -> RpcResult>; + /// Return total supply for a coin #[method(name = "getTotalSupply")] async fn get_total_supply( diff --git a/crates/sui-json-rpc/src/coin_api.rs b/crates/sui-json-rpc/src/coin_api.rs index fafb06d4bfd89..2c0ac5877d430 100644 --- a/crates/sui-json-rpc/src/coin_api.rs +++ b/crates/sui-json-rpc/src/coin_api.rs @@ -7,6 +7,7 @@ use std::sync::Arc; use async_trait::async_trait; use cached::proc_macro::cached; use cached::SizedCache; +use futures::future::join_all; use jsonrpsee::core::RpcResult; use jsonrpsee::RpcModule; use move_core_types::language_storage::{StructTag, TypeTag}; @@ -214,6 +215,23 @@ impl CoinReadApiServer for CoinReadApi { }) } + #[instrument(skip(self))] + async fn get_coins_metadata(&self, coin_types: Vec) -> RpcResult> { + with_tracing!(async move { + let coin_tasks = coin_types + .into_iter() + .map(|coin_type| async move { self.get_coin_metadata(coin_type).await }); + + let metadata: Vec = join_all(coin_tasks) + .await + .into_iter() + .filter_map(|result| result.ok().flatten()) + .collect(); + + Ok(metadata) + }) + } + #[instrument(skip(self))] async fn get_total_supply(&self, coin_type: String) -> RpcResult { with_tracing!(async move { From e389e3639241e2e0ff3b0688fb9864e25a2e36a2 Mon Sep 17 00:00:00 2001 From: NB Date: Thu, 8 Aug 2024 13:58:25 +0200 Subject: [PATCH 39/57] bump --- crates/sui-open-rpc/spec/openrpc.json | 46 +++++++++++++++++++++++++++ crates/sui-open-rpc/src/examples.rs | 24 ++++++++++++++ crates/sui-sdk/src/apis.rs | 7 ++++ 3 files changed, 77 insertions(+) diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index 11ee2bce7d76d..41e11a820c73a 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -3225,6 +3225,52 @@ } ] }, + { + "name": "suix_getCoinsMetadata", + "tags": [ + { + "name": "Coin Query API" + } + ], + "description": "Return metadata(e.g., symbol, decimals) for all coins", + "params": [ + { + "name": "coin_types", + "description": "type name for the coins (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC)", + "required": true, + "schema": { + "type": "string" + } + } + ], + "result": { + "name": "Vec", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SuiCoinMetadata" + } + } + }, + "examples": [ + { + "name": "Gets the metadata for all coins.", + "result": { + "name": "Result", + "value": [ + { + "decimals": 9, + "name": "Usdc", + "symbol": "USDC", + "description": "Stable coin.", + "iconUrl": null, + "id": "0x6d907beaa3a49db57bdfdb3557e6d405cbf01c293a53e01457d65e92b5d8dd68" + } + ] + } + } + ] + }, { "name": "suix_getCoins", "tags": [ diff --git a/crates/sui-open-rpc/src/examples.rs b/crates/sui-open-rpc/src/examples.rs index ed8c038571073..70805b5ae12d9 100644 --- a/crates/sui-open-rpc/src/examples.rs +++ b/crates/sui-open-rpc/src/examples.rs @@ -115,6 +115,7 @@ impl RpcExampleProvider { self.suix_get_all_coins(), self.suix_get_balance(), self.suix_get_coin_metadata(), + self.suix_get_coins_metadata(), self.sui_get_latest_checkpoint_sequence_number(), self.suix_get_coins(), self.suix_get_total_supply(), @@ -933,6 +934,29 @@ impl RpcExampleProvider { ) } + fn suix_get_coins_metadata(&mut self) -> Examples { + let result = vec![SuiCoinMetadata { + decimals: 9, + name: "Usdc".to_string(), + symbol: "USDC".to_string(), + description: "Stable coin.".to_string(), + icon_url: None, + id: Some(ObjectID::new(self.rng.gen())), + }]; + + Examples::new( + "suix_getCoinMetadata", + vec![ExamplePairing::new( + "Gets the metadata for the coin types in the request.", + vec![( + "coin_type", + json!("0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC".to_string()), + )], + json!(result), + )], + ) + } + fn sui_get_latest_checkpoint_sequence_number(&mut self) -> Examples { let result = "507021"; Examples::new( diff --git a/crates/sui-sdk/src/apis.rs b/crates/sui-sdk/src/apis.rs index 61c4cd5e81ee0..7dcb31cb55aa5 100644 --- a/crates/sui-sdk/src/apis.rs +++ b/crates/sui-sdk/src/apis.rs @@ -976,6 +976,13 @@ impl CoinReadApi { Ok(self.api.http.get_coin_metadata(coin_type).await?) } + pub async fn get_coins_metadata( + &self, + coin_types: Vec, + ) -> SuiRpcResult> { + Ok(self.api.http.get_coins_metadata(coin_types).await?) + } + /// Return the total supply for a given coin type, or an error upon failure. /// /// # Examples From ba19314d295c80be6a0302815f0c75bcebefefc0 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Thu, 8 Aug 2024 15:52:10 +0200 Subject: [PATCH 40/57] test hashmap return --- crates/sui-indexer/src/apis/coin_api.rs | 9 ++++ crates/sui-json-rpc-api/src/coin.rs | 9 ++++ crates/sui-json-rpc/src/axum_router.rs | 4 ++ crates/sui-json-rpc/src/coin_api.rs | 60 +++++++++++++++++++++++++ crates/sui-sdk/src/apis.rs | 8 ++++ 5 files changed, 90 insertions(+) diff --git a/crates/sui-indexer/src/apis/coin_api.rs b/crates/sui-indexer/src/apis/coin_api.rs index 00c3d51d9b14f..23b7bec80d8db 100644 --- a/crates/sui-indexer/src/apis/coin_api.rs +++ b/crates/sui-indexer/src/apis/coin_api.rs @@ -1,6 +1,8 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 +use std::collections::HashMap; + use crate::indexer_reader::IndexerReader; use async_trait::async_trait; use diesel::r2d2::R2D2Connection; @@ -139,6 +141,13 @@ impl CoinReadApiServer for CoinReadApi { .map_err(Into::into) } + async fn get_coins_metadata2( + &self, + coin_types: Vec, + ) -> RpcResult> { + return Ok(HashMap::new()); + } + async fn get_total_supply(&self, coin_type: String) -> RpcResult { let coin_struct = parse_to_struct_tag(&coin_type)?; if GAS::is_gas(&coin_struct) { diff --git a/crates/sui-json-rpc-api/src/coin.rs b/crates/sui-json-rpc-api/src/coin.rs index d86a295d936b1..e091630ee3688 100644 --- a/crates/sui-json-rpc-api/src/coin.rs +++ b/crates/sui-json-rpc-api/src/coin.rs @@ -1,6 +1,8 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 +use std::collections::HashMap; + use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; use sui_json_rpc_types::{Balance, CoinPage, SuiCoinMetadata}; @@ -71,6 +73,13 @@ pub trait CoinReadApi { coin_types: Vec, ) -> RpcResult>; + #[method(name = "getCoinsMetadata2")] + async fn get_coins_metadata2( + &self, + /// type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) + coin_types: Vec, + ) -> RpcResult>; + /// Return total supply for a coin #[method(name = "getTotalSupply")] async fn get_total_supply( diff --git a/crates/sui-json-rpc/src/axum_router.rs b/crates/sui-json-rpc/src/axum_router.rs index c46cc04a74494..04bf0af63b3e7 100644 --- a/crates/sui-json-rpc/src/axum_router.rs +++ b/crates/sui-json-rpc/src/axum_router.rs @@ -301,6 +301,10 @@ async fn process_request( let id = req.id; + println!("name: {}", name); + println!("params: {:?}", params); + println!("id: {:?}", id); + let response = match methods.method_with_name(name) { None => { logger.on_call( diff --git a/crates/sui-json-rpc/src/coin_api.rs b/crates/sui-json-rpc/src/coin_api.rs index 2c0ac5877d430..e13dddbbd75e4 100644 --- a/crates/sui-json-rpc/src/coin_api.rs +++ b/crates/sui-json-rpc/src/coin_api.rs @@ -232,6 +232,66 @@ impl CoinReadApiServer for CoinReadApi { }) } + #[instrument(skip(self))] + async fn get_coins_metadata2( + &self, + coin_types: Vec, + ) -> RpcResult> { + with_tracing!(async move { + let coin_tasks = coin_types.into_iter().map(|coin_type| async move { + // Code from get_coin_metadata but slightly changed for a different return type, + // #[instrument(skip(self))] + // async fn get_coin_metadata(&self, coin_type: String) -> RpcResult> { + // with_tracing!(async move { + // let coin_struct = parse_to_struct_tag(&coin_type)?; + // let metadata_object = self + // .internal + // .find_package_object( + // &coin_struct.address.into(), + // CoinMetadata::type_(coin_struct), + // ) + // .await + // .ok(); + // Ok(metadata_object.and_then(|v: Object| v.try_into().ok())) + // }) + // } + + // original: RpcResult> + // new: RpcResult<(String, Option)> + + match parse_to_struct_tag(&coin_type) { + Ok(coin_struct) => { + let metadata_object = self + .internal + .find_package_object( + &coin_struct.address.into(), + CoinMetadata::type_(coin_struct), + ) + .await + .ok(); + + Some(( + coin_type, + metadata_object.and_then(|v: Object| v.try_into().ok()), + )) + } + Err(_) => None, + } + }); + + let metadata: HashMap = join_all(coin_tasks) + .await + .into_iter() + .filter_map(|result| match result { + Some((coin_type, Some(metadata))) => Some((coin_type, metadata)), + _ => None, + }) + .collect(); + + Ok(metadata) + }) + } + #[instrument(skip(self))] async fn get_total_supply(&self, coin_type: String) -> RpcResult { with_tracing!(async move { diff --git a/crates/sui-sdk/src/apis.rs b/crates/sui-sdk/src/apis.rs index 7dcb31cb55aa5..272783da0ea01 100644 --- a/crates/sui-sdk/src/apis.rs +++ b/crates/sui-sdk/src/apis.rs @@ -7,6 +7,7 @@ use futures::StreamExt; use futures_core::Stream; use jsonrpsee::core::client::Subscription; use std::collections::BTreeMap; +use std::collections::HashMap; use std::future; use std::sync::Arc; use std::time::Instant; @@ -983,6 +984,13 @@ impl CoinReadApi { Ok(self.api.http.get_coins_metadata(coin_types).await?) } + pub async fn get_coins_metadata2( + &self, + coin_types: Vec, + ) -> SuiRpcResult> { + Ok(self.api.http.get_coins_metadata2(coin_types).await?) + } + /// Return the total supply for a given coin type, or an error upon failure. /// /// # Examples From 260be0964332b1f958ce97b025ceeb0937550bb1 Mon Sep 17 00:00:00 2001 From: NB Date: Wed, 14 Aug 2024 07:24:18 +0200 Subject: [PATCH 41/57] coins metadata endpoints once again --- crates/sui-indexer/src/apis/coin_api.rs | 19 +- crates/sui-indexer/src/indexer_reader.rs | 20 +- crates/sui-json-rpc-api/src/coin.rs | 8 - crates/sui-json-rpc/src/axum_router.rs | 4 - crates/sui-json-rpc/src/coin_api.rs | 19 +- crates/sui-open-rpc/spec/openrpc.json | 493 +++++++++++------------ crates/sui-sdk/src/apis.rs | 9 +- 7 files changed, 262 insertions(+), 310 deletions(-) diff --git a/crates/sui-indexer/src/apis/coin_api.rs b/crates/sui-indexer/src/apis/coin_api.rs index 23b7bec80d8db..c5d607a85d1d3 100644 --- a/crates/sui-indexer/src/apis/coin_api.rs +++ b/crates/sui-indexer/src/apis/coin_api.rs @@ -8,6 +8,7 @@ use async_trait::async_trait; use diesel::r2d2::R2D2Connection; use jsonrpsee::core::RpcResult; use jsonrpsee::RpcModule; +use move_core_types::language_storage::StructTag; use sui_json_rpc::coin_api::{parse_to_struct_tag, parse_to_type_tag}; use sui_json_rpc::SuiRpcModule; use sui_json_rpc_api::{cap_page_limit, CoinReadApiServer}; @@ -130,24 +131,22 @@ impl CoinReadApiServer for CoinReadApi { .map_err(Into::into) } - async fn get_coins_metadata(&self, coin_types: Vec) -> RpcResult> { + async fn get_coins_metadata( + &self, + coin_types: Vec, + ) -> RpcResult> { let coin_structs = coin_types .iter() - .map(|coin_type| parse_to_struct_tag(coin_type)) - .collect::, _>>()?; + .map(|coin_type| { + parse_to_struct_tag(coin_type).map(|struct_tag| (coin_type.clone(), struct_tag)) + }) + .collect::, _>>()?; self.inner .get_coins_metadata_in_blocking_task(coin_structs) .await .map_err(Into::into) } - async fn get_coins_metadata2( - &self, - coin_types: Vec, - ) -> RpcResult> { - return Ok(HashMap::new()); - } - async fn get_total_supply(&self, coin_type: String) -> RpcResult { let coin_struct = parse_to_struct_tag(&coin_type)?; if GAS::is_gas(&coin_struct) { diff --git a/crates/sui-indexer/src/indexer_reader.rs b/crates/sui-indexer/src/indexer_reader.rs index a7b8ab8fd63b5..0363cd522b86c 100644 --- a/crates/sui-indexer/src/indexer_reader.rs +++ b/crates/sui-indexer/src/indexer_reader.rs @@ -1516,31 +1516,32 @@ impl IndexerReader { pub async fn get_coins_metadata_in_blocking_task( &self, - coin_structs: Vec, - ) -> Result, IndexerError> { + coin_structs: Vec<(String, StructTag)>, + ) -> Result, IndexerError> { self.spawn_blocking(move |this| this.get_coins_metadata(coin_structs)) .await } fn get_coins_metadata( &self, - coin_structs: Vec, - ) -> Result, IndexerError> { + coin_structs: Vec<(String, StructTag)>, + ) -> Result, IndexerError> { let request_data = coin_structs .iter() - .map(|s| { + .map(|(coin_type, tag)| { ( - s.address.into(), - CoinMetadata::type_(s.clone()).to_canonical_string(true), + coin_type.clone(), + tag.address.into(), + CoinMetadata::type_(tag.clone()).to_canonical_string(true), ) }) - .collect::>(); + .collect::>(); let mut coin_metadata_store = self.package_obj_type_cache.lock().unwrap(); let coin_metadata = request_data .iter() - .filter_map(|(package_id, coin_metadata_type)| { + .filter_map(|(coin_type, package_id, coin_metadata_type)| { let coin_metadata_obj_id = coin_metadata_store.cache_get_or_set_with( format!("{}{}", package_id, coin_metadata_type), || { @@ -1557,6 +1558,7 @@ impl IndexerReader { .ok() .flatten() .and_then(|metadata| SuiCoinMetadata::try_from(metadata).ok()) + .map(|metadata| (coin_type.clone(), metadata)) }) }) .collect(); diff --git a/crates/sui-json-rpc-api/src/coin.rs b/crates/sui-json-rpc-api/src/coin.rs index e091630ee3688..1dd4748f5b0aa 100644 --- a/crates/sui-json-rpc-api/src/coin.rs +++ b/crates/sui-json-rpc-api/src/coin.rs @@ -65,19 +65,11 @@ pub trait CoinReadApi { coin_type: String, ) -> RpcResult>; - /// Return metadata(e.g., symbol, decimals) for a all provided coin types #[method(name = "getCoinsMetadata")] async fn get_coins_metadata( &self, /// type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) coin_types: Vec, - ) -> RpcResult>; - - #[method(name = "getCoinsMetadata2")] - async fn get_coins_metadata2( - &self, - /// type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) - coin_types: Vec, ) -> RpcResult>; /// Return total supply for a coin diff --git a/crates/sui-json-rpc/src/axum_router.rs b/crates/sui-json-rpc/src/axum_router.rs index 04bf0af63b3e7..c46cc04a74494 100644 --- a/crates/sui-json-rpc/src/axum_router.rs +++ b/crates/sui-json-rpc/src/axum_router.rs @@ -301,10 +301,6 @@ async fn process_request( let id = req.id; - println!("name: {}", name); - println!("params: {:?}", params); - println!("id: {:?}", id); - let response = match methods.method_with_name(name) { None => { logger.on_call( diff --git a/crates/sui-json-rpc/src/coin_api.rs b/crates/sui-json-rpc/src/coin_api.rs index e13dddbbd75e4..e78ff0b8680d5 100644 --- a/crates/sui-json-rpc/src/coin_api.rs +++ b/crates/sui-json-rpc/src/coin_api.rs @@ -216,24 +216,7 @@ impl CoinReadApiServer for CoinReadApi { } #[instrument(skip(self))] - async fn get_coins_metadata(&self, coin_types: Vec) -> RpcResult> { - with_tracing!(async move { - let coin_tasks = coin_types - .into_iter() - .map(|coin_type| async move { self.get_coin_metadata(coin_type).await }); - - let metadata: Vec = join_all(coin_tasks) - .await - .into_iter() - .filter_map(|result| result.ok().flatten()) - .collect(); - - Ok(metadata) - }) - } - - #[instrument(skip(self))] - async fn get_coins_metadata2( + async fn get_coins_metadata( &self, coin_types: Vec, ) -> RpcResult> { diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index 41e11a820c73a..49fefa68258ef 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -879,7 +879,7 @@ "params": [ { "name": "package", - "value": "0x9c4eb6769ca8b6a23efeb7298cf0a8d0b837b78749c2cfc711c42036cc6b7621" + "value": "0x1639f3606a53f61f3a566963b3eac49fe3bb57d304a454ed2f4859b44f4e4918" }, { "name": "module", @@ -959,7 +959,7 @@ "params": [ { "name": "package", - "value": "0x1639f3606a53f61f3a566963b3eac49fe3bb57d304a454ed2f4859b44f4e4918" + "value": "0x0047d5fa0a823e7d0ff4d55c32b09995a0ae1eedfee9c7b1354e805ed10ee3d0" }, { "name": "module_name", @@ -1031,7 +1031,7 @@ "params": [ { "name": "package", - "value": "0x800105867da4655eca6d9eb1258bfd1ad92af329a07781ee71e60065e00f2de9" + "value": "0x61630d3505f8905a0f4d42c6ff39a78a6ba2b28f68a3299ec3417bbabc6717dc" }, { "name": "module_name", @@ -1042,7 +1042,7 @@ "name": "Result", "value": { "fileFormatVersion": 6, - "address": "0x0047d5fa0a823e7d0ff4d55c32b09995a0ae1eedfee9c7b1354e805ed10ee3d0", + "address": "0x800105867da4655eca6d9eb1258bfd1ad92af329a07781ee71e60065e00f2de9", "name": "module", "friends": [], "structs": {}, @@ -1085,14 +1085,14 @@ "params": [ { "name": "package", - "value": "0xc95b9e341bc3aba1654bdbad707dcd773bd6309363447ef3fe58a960de92aa93" + "value": "0x77b3482580ee8d5bdc5b824808df54bfec4fc817622e5add0e48f749f01def98" } ], "result": { "name": "Result", "value": { "fileFormatVersion": 6, - "address": "0x61630d3505f8905a0f4d42c6ff39a78a6ba2b28f68a3299ec3417bbabc6717dc", + "address": "0xc95b9e341bc3aba1654bdbad707dcd773bd6309363447ef3fe58a960de92aa93", "name": "module", "friends": [], "structs": {}, @@ -1146,7 +1146,7 @@ "params": [ { "name": "package", - "value": "0x77b3482580ee8d5bdc5b824808df54bfec4fc817622e5add0e48f749f01def98" + "value": "0x504d411325e3c7f89d412044fe99007efb0f94f1e64d2e8090c619a39299d87e" }, { "name": "module_name", @@ -2187,11 +2187,11 @@ { "name": "object_ids", "value": [ - "0x504d411325e3c7f89d412044fe99007efb0f94f1e64d2e8090c619a39299d87e", - "0x23618df6438d21a48040e6bb568cafc13246bd847c60448160e0358cac4a1134", - "0x8b95b4eaa9fd3b22b43f6b2c8e92090bd6d16522a6fd4fa83ec70a5f197ad656", - "0x3fbbd3ebef7dbcc7b02346cdf05674452cc61f316af5d5d7c02b94b023242685", - "0x9b5cd5df0df2a168259b7115a41ccc0a372b6fd0026e0c63043492ce4d0c19a6" + "0xe8070b5f56bb10bafa0e2261d819b2582f82ab308bf9c96dfb22ec7345db1b5f", + "0x5594d02890c986dbf328d28d21acece356d10d89e75f565b0934851ba8d5bc59", + "0xda104dde1de9880be827a1a753e502ebcdfec53f33e745e3f021366b7bc47c2b", + "0x00a65bf5fdccb50582333b61721e6963a25f25ac8ead5916a83f49a7b372eae7", + "0x3e7f360c51d035a6470f09c8d23716e4085025b89d176840d61dde92a452a72f" ] }, { @@ -2212,14 +2212,14 @@ "value": [ { "data": { - "objectId": "0x504d411325e3c7f89d412044fe99007efb0f94f1e64d2e8090c619a39299d87e", + "objectId": "0xe8070b5f56bb10bafa0e2261d819b2582f82ab308bf9c96dfb22ec7345db1b5f", "version": "1", - "digest": "AibMqH69gKT5t7rVTsDZFy2X5iHtoNDobKaZ62mg3FCU", + "digest": "3P7YjccZXWC3fDHoWxdUaq4MxfjxVzRWKo8ynE5NgNew", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0xe8070b5f56bb10bafa0e2261d819b2582f82ab308bf9c96dfb22ec7345db1b5f" + "AddressOwner": "0x14fdb2b9538efb160d31842e3a1743cc4c24010dafad05b12619b275649741cc" }, - "previousTransaction": "2QwXW3qzMEZPAyyP9VHtXbC2tp7iomypQc5XnkyPsu5d", + "previousTransaction": "AibMqH69gKT5t7rVTsDZFy2X5iHtoNDobKaZ62mg3FCU", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2228,7 +2228,7 @@ "fields": { "balance": "100000000", "id": { - "id": "0x504d411325e3c7f89d412044fe99007efb0f94f1e64d2e8090c619a39299d87e" + "id": "0xe8070b5f56bb10bafa0e2261d819b2582f82ab308bf9c96dfb22ec7345db1b5f" } } } @@ -2236,14 +2236,14 @@ }, { "data": { - "objectId": "0x23618df6438d21a48040e6bb568cafc13246bd847c60448160e0358cac4a1134", + "objectId": "0x5594d02890c986dbf328d28d21acece356d10d89e75f565b0934851ba8d5bc59", "version": "1", - "digest": "D5W76mT1A3tqCmE1Z5MdV5obNzesMXLfLKpRDHSp1fyz", + "digest": "APt593rHwpQw3VrYV3fKoi4JxaKgGkddUftMmQbC5Q4V", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x5594d02890c986dbf328d28d21acece356d10d89e75f565b0934851ba8d5bc59" + "AddressOwner": "0x462a46078b90f1f508a1e4fd4eed46c25c211cb35c05d801c769b78770474957" }, - "previousTransaction": "5itvhMFvtJcV6fY2VY4x7F9Ex18q2N4Rr5WU4FXTJsFU", + "previousTransaction": "D5W76mT1A3tqCmE1Z5MdV5obNzesMXLfLKpRDHSp1fyz", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2252,7 +2252,7 @@ "fields": { "balance": "100000000", "id": { - "id": "0x23618df6438d21a48040e6bb568cafc13246bd847c60448160e0358cac4a1134" + "id": "0x5594d02890c986dbf328d28d21acece356d10d89e75f565b0934851ba8d5bc59" } } } @@ -2260,14 +2260,14 @@ }, { "data": { - "objectId": "0x8b95b4eaa9fd3b22b43f6b2c8e92090bd6d16522a6fd4fa83ec70a5f197ad656", + "objectId": "0xda104dde1de9880be827a1a753e502ebcdfec53f33e745e3f021366b7bc47c2b", "version": "1", - "digest": "H2o2pWgceQgTtYrMacR4xnCi4vqGiuozDA6k2rBc4m3q", + "digest": "5HnoT1M284iwsivoUd9qsCwkS2qdvMPWtN4KJMVdKcM2", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0xda104dde1de9880be827a1a753e502ebcdfec53f33e745e3f021366b7bc47c2b" + "AddressOwner": "0x74c8518085c0cd42bc93edc281664d5eee2947fb72348a18cb3ef2cf65d77dad" }, - "previousTransaction": "8rsTRNPs13DZvD2xneZEtf2nAAipep6uHXPXWVXfzDBr", + "previousTransaction": "H2o2pWgceQgTtYrMacR4xnCi4vqGiuozDA6k2rBc4m3q", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2276,7 +2276,7 @@ "fields": { "balance": "100000000", "id": { - "id": "0x8b95b4eaa9fd3b22b43f6b2c8e92090bd6d16522a6fd4fa83ec70a5f197ad656" + "id": "0xda104dde1de9880be827a1a753e502ebcdfec53f33e745e3f021366b7bc47c2b" } } } @@ -2284,14 +2284,14 @@ }, { "data": { - "objectId": "0x3fbbd3ebef7dbcc7b02346cdf05674452cc61f316af5d5d7c02b94b023242685", + "objectId": "0x00a65bf5fdccb50582333b61721e6963a25f25ac8ead5916a83f49a7b372eae7", "version": "1", - "digest": "3ovR1s3bZt6AN1AQ7QhGUfX9BSwgjJPvL6XaczgeSKXU", + "digest": "BTUJF4KAFVXR8hQ6ZR4SvSBB4FkG4DUaoybqGN8sufz5", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x00a65bf5fdccb50582333b61721e6963a25f25ac8ead5916a83f49a7b372eae7" + "AddressOwner": "0x2b930d184aa19d818dec4987f302f0c9325929e99901bde436856c9d7f939830" }, - "previousTransaction": "3w6ars2tmgBST4ozGxPWzSpEGyn4AdxMBv3K9sdkCWfR", + "previousTransaction": "3ovR1s3bZt6AN1AQ7QhGUfX9BSwgjJPvL6XaczgeSKXU", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2300,7 +2300,7 @@ "fields": { "balance": "100000000", "id": { - "id": "0x3fbbd3ebef7dbcc7b02346cdf05674452cc61f316af5d5d7c02b94b023242685" + "id": "0x00a65bf5fdccb50582333b61721e6963a25f25ac8ead5916a83f49a7b372eae7" } } } @@ -2308,14 +2308,14 @@ }, { "data": { - "objectId": "0x9b5cd5df0df2a168259b7115a41ccc0a372b6fd0026e0c63043492ce4d0c19a6", + "objectId": "0x3e7f360c51d035a6470f09c8d23716e4085025b89d176840d61dde92a452a72f", "version": "1", - "digest": "25QdFqrh9FgxhGQyAxZsNEakYmHezqmU3FMPud7JGRB5", + "digest": "AuviHUvwR53AJnGtxic7iXXDTr9a4SyEYJ2YeXi1fFAx", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x3e7f360c51d035a6470f09c8d23716e4085025b89d176840d61dde92a452a72f" + "AddressOwner": "0x97f2c5fe80c8a5aaff86d354dff95b9484ea0d169d9d901f2cc13d4ec3e7fce5" }, - "previousTransaction": "BE9GoMd7Mr8fGte3EdsXxUMwYjcErW71n6Gsm4iPvDmv", + "previousTransaction": "25QdFqrh9FgxhGQyAxZsNEakYmHezqmU3FMPud7JGRB5", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2324,7 +2324,7 @@ "fields": { "balance": "100000000", "id": { - "id": "0x9b5cd5df0df2a168259b7115a41ccc0a372b6fd0026e0c63043492ce4d0c19a6" + "id": "0x3e7f360c51d035a6470f09c8d23716e4085025b89d176840d61dde92a452a72f" } } } @@ -2380,9 +2380,9 @@ { "name": "digests", "value": [ - "CKzxe1mN72xVrq5BadAzVu1Lk61AYzuRSEQ3zWK2zbGs", - "2jinTmZQ8aModigpcbYcKELwRrTcqosbMmqsiEopvMy9", - "BCyCzV64UgrX5vr2kdtzhrojLwaZ9gasnhVV8TQeY1EA" + "HwyMMuu4xqsYHpRKULKQQ3JRywR6VPQSzNBnSkbvw4JJ", + "BfjNF7Nuiiyp9kiTWTc6rYvqGrbUPPHJsWHkq7xoPAgm", + "HwARpWXVRjCyfw37cqFhUcFoW7Dk56v1mcVLtpN8MuD5" ] }, { @@ -2402,7 +2402,7 @@ "name": "Result", "value": [ { - "digest": "CKzxe1mN72xVrq5BadAzVu1Lk61AYzuRSEQ3zWK2zbGs", + "digest": "HwyMMuu4xqsYHpRKULKQQ3JRywR6VPQSzNBnSkbvw4JJ", "transaction": { "data": { "messageVersion": "v1", @@ -2412,14 +2412,14 @@ { "type": "pure", "valueType": "address", - "value": "0x7a8e9a0d074f90fddb42cd928f74b986c6f539a734f3d7c9a75a9cb227ec3157" + "value": "0x24962ee4193c8c0d2fb28bbe0eb4ba5fc87a2c6d1a7c12c9454872c5ea06d5e1" }, { "type": "object", "objectType": "immOrOwnedObject", - "objectId": "0x24962ee4193c8c0d2fb28bbe0eb4ba5fc87a2c6d1a7c12c9454872c5ea06d5e1", + "objectId": "0x9585d5591521bfd12dec3a372efd539108ba807a0dabed6e5da0f174efc3f58e", "version": "2", - "digest": "3gmeyj5oEdE8A4PvjWsDSHchC6tb6YQj18gnD7xnDqGz" + "digest": "J4k64LwycebB7TQhKrPaZ954yCK64rwbDJMSrSUW4Ba4" } ], "transactions": [ @@ -2437,25 +2437,25 @@ } ] }, - "sender": "0x576f8e1fdc514e8cf2e0453a0b29ade149b33004c56deab5428239942aef9ec2", + "sender": "0x806efafdf721a9afeffa8bb3d85b99605a4ba24715d518a0a7d7197c4aeb9ead", "gasData": { "payment": [ { - "objectId": "0x9585d5591521bfd12dec3a372efd539108ba807a0dabed6e5da0f174efc3f58e", + "objectId": "0xff119e92f57ae74d1b250d5df2cb5170782a8a438fbf681eded4d1e0a2cd7dfb", "version": 2, - "digest": "JAgYeYMPm5VLzBYcYxxQUEatfG9gHdFqSNwmBBS41Bri" + "digest": "3gmeyj5oEdE8A4PvjWsDSHchC6tb6YQj18gnD7xnDqGz" } ], - "owner": "0x576f8e1fdc514e8cf2e0453a0b29ade149b33004c56deab5428239942aef9ec2", + "owner": "0x806efafdf721a9afeffa8bb3d85b99605a4ba24715d518a0a7d7197c4aeb9ead", "price": "10", "budget": "100000" } }, "txSignatures": [ - "AAjABbK1jtt2/3ixW3D0YWrDscRT5oevWGf1yJD4KNqudiehykWXtHx7aipTKNx+5dbpTtEwPLI2dTB0CyORlg+nSicGHWn+0mf3oSb/LUa5i+dDAEb1qsgy7LkQ8hbr+w==" + "AE68pXd6CCJD8+DyOfD4WN06JvoqpNkoit4CRTglta3Vkgwj+CTAfuFQJvj5sSKyxnVXOujoF2zBpnQa0BtKWgVHtlNvgkibYetMBeQtQsVx500W5YJFC5Qc8BhVApD7bQ==" ] }, - "rawTransaction": "AQAAAAAAAgAgeo6aDQdPkP3bQs2Sj3S5hsb1Oac089fJp1qcsifsMVcBACSWLuQZPIwNL7KLvg60ul/IeixtGnwSyUVIcsXqBtXhAgAAAAAAAAAgJ+eEST+x3M3niTo6xcZ80sTidUC1LugoCWsqpf5Qp+8BAQEBAQABAABXb44f3FFOjPLgRToLKa3hSbMwBMVt6rVCgjmUKu+ewgGVhdVZFSG/0S3sOjcu/VORCLqAeg2r7W5doPF078P1jgIAAAAAAAAAIP8RnpL1eudNGyUNXfLLUXB4KopDj79oHt7U0eCizX37V2+OH9xRTozy4EU6Cymt4UmzMATFbeq1QoI5lCrvnsIKAAAAAAAAAKCGAQAAAAAAAAFhAAjABbK1jtt2/3ixW3D0YWrDscRT5oevWGf1yJD4KNqudiehykWXtHx7aipTKNx+5dbpTtEwPLI2dTB0CyORlg+nSicGHWn+0mf3oSb/LUa5i+dDAEb1qsgy7LkQ8hbr+w==", + "rawTransaction": "AQAAAAAAAgAgJJYu5Bk8jA0vsou+DrS6X8h6LG0afBLJRUhyxeoG1eEBAJWF1VkVIb/RLew6Ny79U5EIuoB6Davtbl2g8XTvw/WOAgAAAAAAAAAg/Ywjl2FHKnvVWEg6GvxNdDakSFT3kTJuy4KrQXFfv80BAQEBAQABAACAbvr99yGpr+/6i7PYW5lgWkuiRxXVGKCn1xl8SuuerQH/EZ6S9XrnTRslDV3yy1FweCqKQ4+/aB7e1NHgos19+wIAAAAAAAAAICfnhEk/sdzN54k6OsXGfNLE4nVAtS7oKAlrKqX+UKfvgG76/fchqa/v+ouz2FuZYFpLokcV1Rigp9cZfErrnq0KAAAAAAAAAKCGAQAAAAAAAAFhAE68pXd6CCJD8+DyOfD4WN06JvoqpNkoit4CRTglta3Vkgwj+CTAfuFQJvj5sSKyxnVXOujoF2zBpnQa0BtKWgVHtlNvgkibYetMBeQtQsVx500W5YJFC5Qc8BhVApD7bQ==", "effects": { "messageVersion": "v1", "status": { @@ -2468,57 +2468,57 @@ "storageRebate": "10", "nonRefundableStorageFee": "0" }, - "transactionDigest": "2SY11dmdTQv6JLD2wqcsMiJNqXbXUkn87Rzw5NHib8Mf", + "transactionDigest": "DkaTtjSfULiQ7FT48kzuS7yKj2JUAWGgjDBXddqn1z9o", "mutated": [ { "owner": { - "AddressOwner": "0x576f8e1fdc514e8cf2e0453a0b29ade149b33004c56deab5428239942aef9ec2" + "AddressOwner": "0x806efafdf721a9afeffa8bb3d85b99605a4ba24715d518a0a7d7197c4aeb9ead" }, "reference": { - "objectId": "0x9585d5591521bfd12dec3a372efd539108ba807a0dabed6e5da0f174efc3f58e", + "objectId": "0xff119e92f57ae74d1b250d5df2cb5170782a8a438fbf681eded4d1e0a2cd7dfb", "version": 2, - "digest": "JAgYeYMPm5VLzBYcYxxQUEatfG9gHdFqSNwmBBS41Bri" + "digest": "3gmeyj5oEdE8A4PvjWsDSHchC6tb6YQj18gnD7xnDqGz" } }, { "owner": { - "AddressOwner": "0x7a8e9a0d074f90fddb42cd928f74b986c6f539a734f3d7c9a75a9cb227ec3157" + "AddressOwner": "0x24962ee4193c8c0d2fb28bbe0eb4ba5fc87a2c6d1a7c12c9454872c5ea06d5e1" }, "reference": { - "objectId": "0x24962ee4193c8c0d2fb28bbe0eb4ba5fc87a2c6d1a7c12c9454872c5ea06d5e1", + "objectId": "0x9585d5591521bfd12dec3a372efd539108ba807a0dabed6e5da0f174efc3f58e", "version": 2, - "digest": "3gmeyj5oEdE8A4PvjWsDSHchC6tb6YQj18gnD7xnDqGz" + "digest": "J4k64LwycebB7TQhKrPaZ954yCK64rwbDJMSrSUW4Ba4" } } ], "gasObject": { "owner": { - "ObjectOwner": "0x576f8e1fdc514e8cf2e0453a0b29ade149b33004c56deab5428239942aef9ec2" + "ObjectOwner": "0x806efafdf721a9afeffa8bb3d85b99605a4ba24715d518a0a7d7197c4aeb9ead" }, "reference": { - "objectId": "0x9585d5591521bfd12dec3a372efd539108ba807a0dabed6e5da0f174efc3f58e", + "objectId": "0xff119e92f57ae74d1b250d5df2cb5170782a8a438fbf681eded4d1e0a2cd7dfb", "version": 2, - "digest": "JAgYeYMPm5VLzBYcYxxQUEatfG9gHdFqSNwmBBS41Bri" + "digest": "3gmeyj5oEdE8A4PvjWsDSHchC6tb6YQj18gnD7xnDqGz" } }, - "eventsDigest": "DkaTtjSfULiQ7FT48kzuS7yKj2JUAWGgjDBXddqn1z9o" + "eventsDigest": "Hzm9VAHN3fBsfMgkgzJrRtrZoX1bHUEg11f2PTSCUY1G" }, "objectChanges": [ { "type": "transferred", - "sender": "0x576f8e1fdc514e8cf2e0453a0b29ade149b33004c56deab5428239942aef9ec2", + "sender": "0x806efafdf721a9afeffa8bb3d85b99605a4ba24715d518a0a7d7197c4aeb9ead", "recipient": { - "AddressOwner": "0x7a8e9a0d074f90fddb42cd928f74b986c6f539a734f3d7c9a75a9cb227ec3157" + "AddressOwner": "0x24962ee4193c8c0d2fb28bbe0eb4ba5fc87a2c6d1a7c12c9454872c5ea06d5e1" }, "objectType": "0x2::example::Object", - "objectId": "0x24962ee4193c8c0d2fb28bbe0eb4ba5fc87a2c6d1a7c12c9454872c5ea06d5e1", + "objectId": "0x9585d5591521bfd12dec3a372efd539108ba807a0dabed6e5da0f174efc3f58e", "version": "2", - "digest": "J4k64LwycebB7TQhKrPaZ954yCK64rwbDJMSrSUW4Ba4" + "digest": "2SY11dmdTQv6JLD2wqcsMiJNqXbXUkn87Rzw5NHib8Mf" } ] }, { - "digest": "2jinTmZQ8aModigpcbYcKELwRrTcqosbMmqsiEopvMy9", + "digest": "BfjNF7Nuiiyp9kiTWTc6rYvqGrbUPPHJsWHkq7xoPAgm", "transaction": { "data": { "messageVersion": "v1", @@ -2528,14 +2528,14 @@ { "type": "pure", "valueType": "address", - "value": "0xc3e4f846a282754946e181e00f4341a53b5e895ef8ec3c73d2378a0a11825e23" + "value": "0x2fac1a70e20e146fb1303bd60eb4bea9bd453e50690b423241f0e2e9beabd601" }, { "type": "object", "objectType": "immOrOwnedObject", - "objectId": "0x2fac1a70e20e146fb1303bd60eb4bea9bd453e50690b423241f0e2e9beabd601", + "objectId": "0xbbdabf2828ee9ca7e4227a61cff851fef9fb6a08ae444c96f9810275d6af973c", "version": "2", - "digest": "HyJbrm9Th6ox4oU9vrrRzgZSaCu1n3omMJ1fAcHswvvo" + "digest": "CHia3BiES8mt5kqMYhzBpjAeLRpjcsMNDMFakBAdcVAg" } ], "transactions": [ @@ -2553,25 +2553,25 @@ } ] }, - "sender": "0x994b906032a82b0d9f48030d74c092647d92266b13a63049e6027468c199666e", + "sender": "0xeeb0de9e733a271ceb3e263ffe9bbdbc34789478ff69e98ac1e4b79813896a34", "gasData": { "payment": [ { - "objectId": "0xbbdabf2828ee9ca7e4227a61cff851fef9fb6a08ae444c96f9810275d6af973c", + "objectId": "0x0d022db9e21a0f09bcb890773d11c1abd71767b1f67a8040267788203f397722", "version": 2, - "digest": "snEA8RNnDvsYjKJx2NMUP49TMjoAuQXx3LJgwe4qo9B" + "digest": "HyJbrm9Th6ox4oU9vrrRzgZSaCu1n3omMJ1fAcHswvvo" } ], - "owner": "0x994b906032a82b0d9f48030d74c092647d92266b13a63049e6027468c199666e", + "owner": "0xeeb0de9e733a271ceb3e263ffe9bbdbc34789478ff69e98ac1e4b79813896a34", "price": "10", "budget": "100000" } }, "txSignatures": [ - "AFumlgf6FRg/Hav9rJrEtmSzVW1iHCGixLA/lxj4ojn5ati0aXW8NnOwYe97d68oG1vjFfmid20XrO69XUh6eQULoJG5hufQ9rzjXn1UVSbD7HyPVZykOZAICGCiqQMgGw==" + "AGcvOIZ68rcbbWtjafV4ASS1rR+vOZ2bos9SZNmFYv76c4QCD7/yeV23/ZGKy9EdVaAVLt7RQIIauk1bR+VgIATHQMkY6GWconS+qjZytt3q0vH1C6GU9V+/DEq4UHVu5w==" ] }, - "rawTransaction": "AQAAAAAAAgAgw+T4RqKCdUlG4YHgD0NBpTteiV747Dxz0jeKChGCXiMBAC+sGnDiDhRvsTA71g60vqm9RT5QaQtCMkHw4um+q9YBAgAAAAAAAAAg/Cdq6qc8DsEltgkKJ7uvql/DLnVzYS0husigmreRU3QBAQEBAQABAACZS5BgMqgrDZ9IAw10wJJkfZImaxOmMEnmAnRowZlmbgG72r8oKO6cp+QiemHP+FH++ftqCK5ETJb5gQJ11q+XPAIAAAAAAAAAIA0CLbniGg8JvLiQdz0RwavXF2ex9nqAQCZ3iCA/OXcimUuQYDKoKw2fSAMNdMCSZH2SJmsTpjBJ5gJ0aMGZZm4KAAAAAAAAAKCGAQAAAAAAAAFhAFumlgf6FRg/Hav9rJrEtmSzVW1iHCGixLA/lxj4ojn5ati0aXW8NnOwYe97d68oG1vjFfmid20XrO69XUh6eQULoJG5hufQ9rzjXn1UVSbD7HyPVZykOZAICGCiqQMgGw==", + "rawTransaction": "AQAAAAAAAgAgL6wacOIOFG+xMDvWDrS+qb1FPlBpC0IyQfDi6b6r1gEBALvavygo7pyn5CJ6Yc/4Uf75+2oIrkRMlvmBAnXWr5c8AgAAAAAAAAAgp7jaH9prqrNI/gisA58z+HUvQDNuXS/iaS80pHt97XkBAQEBAQABAADusN6eczonHOs+Jj/+m728NHiUeP9p6YrB5LeYE4lqNAENAi254hoPCby4kHc9EcGr1xdnsfZ6gEAmd4ggPzl3IgIAAAAAAAAAIPwnauqnPA7BJbYJCie7r6pfwy51c2EtIbrIoJq3kVN07rDennM6JxzrPiY//pu9vDR4lHj/aemKweS3mBOJajQKAAAAAAAAAKCGAQAAAAAAAAFhAGcvOIZ68rcbbWtjafV4ASS1rR+vOZ2bos9SZNmFYv76c4QCD7/yeV23/ZGKy9EdVaAVLt7RQIIauk1bR+VgIATHQMkY6GWconS+qjZytt3q0vH1C6GU9V+/DEq4UHVu5w==", "effects": { "messageVersion": "v1", "status": { @@ -2584,57 +2584,57 @@ "storageRebate": "10", "nonRefundableStorageFee": "0" }, - "transactionDigest": "69bh3Q9RhRgMFKwmQn8LYE8vYujFTpYyUSVBht3oYkm6", + "transactionDigest": "4Vh6HmG6PwdbZbMiMwj9YnKvsMnP3gfhLmAd288eujv4", "mutated": [ { "owner": { - "AddressOwner": "0x994b906032a82b0d9f48030d74c092647d92266b13a63049e6027468c199666e" + "AddressOwner": "0xeeb0de9e733a271ceb3e263ffe9bbdbc34789478ff69e98ac1e4b79813896a34" }, "reference": { - "objectId": "0xbbdabf2828ee9ca7e4227a61cff851fef9fb6a08ae444c96f9810275d6af973c", + "objectId": "0x0d022db9e21a0f09bcb890773d11c1abd71767b1f67a8040267788203f397722", "version": 2, - "digest": "snEA8RNnDvsYjKJx2NMUP49TMjoAuQXx3LJgwe4qo9B" + "digest": "HyJbrm9Th6ox4oU9vrrRzgZSaCu1n3omMJ1fAcHswvvo" } }, { "owner": { - "AddressOwner": "0xc3e4f846a282754946e181e00f4341a53b5e895ef8ec3c73d2378a0a11825e23" + "AddressOwner": "0x2fac1a70e20e146fb1303bd60eb4bea9bd453e50690b423241f0e2e9beabd601" }, "reference": { - "objectId": "0x2fac1a70e20e146fb1303bd60eb4bea9bd453e50690b423241f0e2e9beabd601", + "objectId": "0xbbdabf2828ee9ca7e4227a61cff851fef9fb6a08ae444c96f9810275d6af973c", "version": 2, - "digest": "HyJbrm9Th6ox4oU9vrrRzgZSaCu1n3omMJ1fAcHswvvo" + "digest": "CHia3BiES8mt5kqMYhzBpjAeLRpjcsMNDMFakBAdcVAg" } } ], "gasObject": { "owner": { - "ObjectOwner": "0x994b906032a82b0d9f48030d74c092647d92266b13a63049e6027468c199666e" + "ObjectOwner": "0xeeb0de9e733a271ceb3e263ffe9bbdbc34789478ff69e98ac1e4b79813896a34" }, "reference": { - "objectId": "0xbbdabf2828ee9ca7e4227a61cff851fef9fb6a08ae444c96f9810275d6af973c", + "objectId": "0x0d022db9e21a0f09bcb890773d11c1abd71767b1f67a8040267788203f397722", "version": 2, - "digest": "snEA8RNnDvsYjKJx2NMUP49TMjoAuQXx3LJgwe4qo9B" + "digest": "HyJbrm9Th6ox4oU9vrrRzgZSaCu1n3omMJ1fAcHswvvo" } }, - "eventsDigest": "4Vh6HmG6PwdbZbMiMwj9YnKvsMnP3gfhLmAd288eujv4" + "eventsDigest": "HYMPEPM13GseBdLKbbZwos5k2nuJYv5dYfpQCdUZx9PJ" }, "objectChanges": [ { "type": "transferred", - "sender": "0x994b906032a82b0d9f48030d74c092647d92266b13a63049e6027468c199666e", + "sender": "0xeeb0de9e733a271ceb3e263ffe9bbdbc34789478ff69e98ac1e4b79813896a34", "recipient": { - "AddressOwner": "0xc3e4f846a282754946e181e00f4341a53b5e895ef8ec3c73d2378a0a11825e23" + "AddressOwner": "0x2fac1a70e20e146fb1303bd60eb4bea9bd453e50690b423241f0e2e9beabd601" }, "objectType": "0x2::example::Object", - "objectId": "0x2fac1a70e20e146fb1303bd60eb4bea9bd453e50690b423241f0e2e9beabd601", + "objectId": "0xbbdabf2828ee9ca7e4227a61cff851fef9fb6a08ae444c96f9810275d6af973c", "version": "2", - "digest": "CHia3BiES8mt5kqMYhzBpjAeLRpjcsMNDMFakBAdcVAg" + "digest": "69bh3Q9RhRgMFKwmQn8LYE8vYujFTpYyUSVBht3oYkm6" } ] }, { - "digest": "BCyCzV64UgrX5vr2kdtzhrojLwaZ9gasnhVV8TQeY1EA", + "digest": "HwARpWXVRjCyfw37cqFhUcFoW7Dk56v1mcVLtpN8MuD5", "transaction": { "data": { "messageVersion": "v1", @@ -2644,14 +2644,14 @@ { "type": "pure", "valueType": "address", - "value": "0x0388c28ddd5977a58e206acd19639c875a4fbecf3342b825c8384300ac7e3bad" + "value": "0xc820a75b574224b920aa9b005093b820df24ef8b43715499f4fff4e056c0cd5c" }, { "type": "object", "objectType": "immOrOwnedObject", - "objectId": "0xc820a75b574224b920aa9b005093b820df24ef8b43715499f4fff4e056c0cd5c", + "objectId": "0xd8024b4b39a7fed27134b073da8638454111396519379e888c83abaf0e600504", "version": "2", - "digest": "6jsxetsBSZJ5ozgZuDmHXJzn9ZBp8emivfYHe6tnHg7C" + "digest": "HaFQHEJugXDGh95A9Ye1tp7GikbuAQNiEanrQuVLvpfz" } ], "transactions": [ @@ -2669,25 +2669,25 @@ } ] }, - "sender": "0xb6c36d992a3b50f3acf8e3c9a0fb909eacbfc249eaf66616ad6712409d2ee563", + "sender": "0x09609d43bb468e13ee3597457f764c579fb944657c98bf737cc1d53377e37fae", "gasData": { "payment": [ { - "objectId": "0xd8024b4b39a7fed27134b073da8638454111396519379e888c83abaf0e600504", + "objectId": "0x79e456ff013f5653dabb6d6c95ddd7d35a42d31f3a9bebbb683db66e8a067068", "version": 2, - "digest": "9CpH2aW4XPVxaZBGHRwHueXEQUvN3Pf7JQpASHiEsNCw" + "digest": "6jsxetsBSZJ5ozgZuDmHXJzn9ZBp8emivfYHe6tnHg7C" } ], - "owner": "0xb6c36d992a3b50f3acf8e3c9a0fb909eacbfc249eaf66616ad6712409d2ee563", + "owner": "0x09609d43bb468e13ee3597457f764c579fb944657c98bf737cc1d53377e37fae", "price": "10", "budget": "100000" } }, "txSignatures": [ - "ALp3VT1YKzOOGLARJCrDqBbMScEPcFq2vWNJ68Zzr3+v5sEK+44cfPlQfMY0UZWyhA86viiG8yd4eLWmnzzU2gXBLYrHKlE7PwRVuJjmBwbiSpqS0m/j+PFnALfPM5bN1Q==" + "ALqlpRuFxmC/qzJFv0bk75hEf4cVBCUpq9FuZ2LDNTj5QxXFIrLWvS1PhLILwmUoSuvMtuiGj5v2js+Yjq54egJfquU6LHCr3h52rYFDifLWVV0cw6dweDAZp0zil8Zc2w==" ] }, - "rawTransaction": "AQAAAAAAAgAgA4jCjd1Zd6WOIGrNGWOch1pPvs8zQrglyDhDAKx+O60BAMggp1tXQiS5IKqbAFCTuCDfJO+LQ3FUmfT/9OBWwM1cAgAAAAAAAAAgVUZy4Te1Cxp8iyTYMxDI9sRo5v6QbaCnpymsaNySaNMBAQEBAQABAAC2w22ZKjtQ86z448mg+5CerL/CSer2ZhatZxJAnS7lYwHYAktLOaf+0nE0sHPahjhFQRE5ZRk3noiMg6uvDmAFBAIAAAAAAAAAIHnkVv8BP1ZT2rttbJXd19NaQtMfOpvru2g9tm6KBnBotsNtmSo7UPOs+OPJoPuQnqy/wknq9mYWrWcSQJ0u5WMKAAAAAAAAAKCGAQAAAAAAAAFhALp3VT1YKzOOGLARJCrDqBbMScEPcFq2vWNJ68Zzr3+v5sEK+44cfPlQfMY0UZWyhA86viiG8yd4eLWmnzzU2gXBLYrHKlE7PwRVuJjmBwbiSpqS0m/j+PFnALfPM5bN1Q==", + "rawTransaction": "AQAAAAAAAgAgyCCnW1dCJLkgqpsAUJO4IN8k74tDcVSZ9P/04FbAzVwBANgCS0s5p/7ScTSwc9qGOEVBETllGTeeiIyDq68OYAUEAgAAAAAAAAAg9j9w8xPlVFKyFNMOURv9WsBVCh/Xs5R8zM/4jvxnZ+kBAQEBAQABAAAJYJ1Du0aOE+41l0V/dkxXn7lEZXyYv3N8wdUzd+N/rgF55Fb/AT9WU9q7bWyV3dfTWkLTHzqb67toPbZuigZwaAIAAAAAAAAAIFVGcuE3tQsafIsk2DMQyPbEaOb+kG2gp6cprGjckmjTCWCdQ7tGjhPuNZdFf3ZMV5+5RGV8mL9zfMHVM3fjf64KAAAAAAAAAKCGAQAAAAAAAAFhALqlpRuFxmC/qzJFv0bk75hEf4cVBCUpq9FuZ2LDNTj5QxXFIrLWvS1PhLILwmUoSuvMtuiGj5v2js+Yjq54egJfquU6LHCr3h52rYFDifLWVV0cw6dweDAZp0zil8Zc2w==", "effects": { "messageVersion": "v1", "status": { @@ -2700,52 +2700,52 @@ "storageRebate": "10", "nonRefundableStorageFee": "0" }, - "transactionDigest": "DzJWHtFNHttaBdpECZGDMF7tcx5NYZfNfCk5NsaaRgmn", + "transactionDigest": "Bbh3U8fCxVzdX6uZUNWRzZrUktcUfWcydhWCMyWJSPpt", "mutated": [ { "owner": { - "AddressOwner": "0xb6c36d992a3b50f3acf8e3c9a0fb909eacbfc249eaf66616ad6712409d2ee563" + "AddressOwner": "0x09609d43bb468e13ee3597457f764c579fb944657c98bf737cc1d53377e37fae" }, "reference": { - "objectId": "0xd8024b4b39a7fed27134b073da8638454111396519379e888c83abaf0e600504", + "objectId": "0x79e456ff013f5653dabb6d6c95ddd7d35a42d31f3a9bebbb683db66e8a067068", "version": 2, - "digest": "9CpH2aW4XPVxaZBGHRwHueXEQUvN3Pf7JQpASHiEsNCw" + "digest": "6jsxetsBSZJ5ozgZuDmHXJzn9ZBp8emivfYHe6tnHg7C" } }, { "owner": { - "AddressOwner": "0x0388c28ddd5977a58e206acd19639c875a4fbecf3342b825c8384300ac7e3bad" + "AddressOwner": "0xc820a75b574224b920aa9b005093b820df24ef8b43715499f4fff4e056c0cd5c" }, "reference": { - "objectId": "0xc820a75b574224b920aa9b005093b820df24ef8b43715499f4fff4e056c0cd5c", + "objectId": "0xd8024b4b39a7fed27134b073da8638454111396519379e888c83abaf0e600504", "version": 2, - "digest": "6jsxetsBSZJ5ozgZuDmHXJzn9ZBp8emivfYHe6tnHg7C" + "digest": "HaFQHEJugXDGh95A9Ye1tp7GikbuAQNiEanrQuVLvpfz" } } ], "gasObject": { "owner": { - "ObjectOwner": "0xb6c36d992a3b50f3acf8e3c9a0fb909eacbfc249eaf66616ad6712409d2ee563" + "ObjectOwner": "0x09609d43bb468e13ee3597457f764c579fb944657c98bf737cc1d53377e37fae" }, "reference": { - "objectId": "0xd8024b4b39a7fed27134b073da8638454111396519379e888c83abaf0e600504", + "objectId": "0x79e456ff013f5653dabb6d6c95ddd7d35a42d31f3a9bebbb683db66e8a067068", "version": 2, - "digest": "9CpH2aW4XPVxaZBGHRwHueXEQUvN3Pf7JQpASHiEsNCw" + "digest": "6jsxetsBSZJ5ozgZuDmHXJzn9ZBp8emivfYHe6tnHg7C" } }, - "eventsDigest": "Bbh3U8fCxVzdX6uZUNWRzZrUktcUfWcydhWCMyWJSPpt" + "eventsDigest": "3fFEnCTn5anb3teBPr5YDDziEojuKa4skFgvLaZ6e9yU" }, "objectChanges": [ { "type": "transferred", - "sender": "0xb6c36d992a3b50f3acf8e3c9a0fb909eacbfc249eaf66616ad6712409d2ee563", + "sender": "0x09609d43bb468e13ee3597457f764c579fb944657c98bf737cc1d53377e37fae", "recipient": { - "AddressOwner": "0x0388c28ddd5977a58e206acd19639c875a4fbecf3342b825c8384300ac7e3bad" + "AddressOwner": "0xc820a75b574224b920aa9b005093b820df24ef8b43715499f4fff4e056c0cd5c" }, "objectType": "0x2::example::Object", - "objectId": "0xc820a75b574224b920aa9b005093b820df24ef8b43715499f4fff4e056c0cd5c", + "objectId": "0xd8024b4b39a7fed27134b073da8638454111396519379e888c83abaf0e600504", "version": "2", - "digest": "HaFQHEJugXDGh95A9Ye1tp7GikbuAQNiEanrQuVLvpfz" + "digest": "DzJWHtFNHttaBdpECZGDMF7tcx5NYZfNfCk5NsaaRgmn" } ] } @@ -2896,11 +2896,11 @@ "name": "past_objects", "value": [ { - "objectId": "0xceaf9ee4582d3a233101e322a22cb2a5bea2e681ea5af4e59bd1abb0bb4fcb27", + "objectId": "0x47866ff92885a3c21a7703f564721c198308aa0c71b771ada6b96c16fc9c0fa7", "version": "4" }, { - "objectId": "0x47866ff92885a3c21a7703f564721c198308aa0c71b771ada6b96c16fc9c0fa7", + "objectId": "0x54b3c61936f77fcfdaa213c2f7b4fb1b51ef9f3ed66000c0e45697dbee095479", "version": "12" } ] @@ -2924,14 +2924,14 @@ { "status": "VersionFound", "details": { - "objectId": "0xceaf9ee4582d3a233101e322a22cb2a5bea2e681ea5af4e59bd1abb0bb4fcb27", + "objectId": "0x47866ff92885a3c21a7703f564721c198308aa0c71b771ada6b96c16fc9c0fa7", "version": "4", - "digest": "CE9bNT96Sa2BxQQH2id4PRxTgW5TW7zm6VVhDeRNBegW", + "digest": "BLN2oUCHmwmaAXXCxbojTcozUqZYfvXx4Bkgi7xcgyVc", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x54b3c61936f77fcfdaa213c2f7b4fb1b51ef9f3ed66000c0e45697dbee095479" + "AddressOwner": "0x0a7b5c15ad7354f23b968be8bb0603d47b901cb7b3177a791cd29bb5304037fe" }, - "previousTransaction": "hvBGBXvKVhC7XYgVPujuiLjxASR6UGAkSFrCRtVxX1F", + "previousTransaction": "CE9bNT96Sa2BxQQH2id4PRxTgW5TW7zm6VVhDeRNBegW", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2940,7 +2940,7 @@ "fields": { "balance": "10000", "id": { - "id": "0xceaf9ee4582d3a233101e322a22cb2a5bea2e681ea5af4e59bd1abb0bb4fcb27" + "id": "0x47866ff92885a3c21a7703f564721c198308aa0c71b771ada6b96c16fc9c0fa7" } } } @@ -2949,14 +2949,14 @@ { "status": "VersionFound", "details": { - "objectId": "0x47866ff92885a3c21a7703f564721c198308aa0c71b771ada6b96c16fc9c0fa7", + "objectId": "0x54b3c61936f77fcfdaa213c2f7b4fb1b51ef9f3ed66000c0e45697dbee095479", "version": "12", - "digest": "3pRSYsCdrDkfMDwecvKZ1zgSEpwUo52VcLE95iK9ap1N", + "digest": "12YmEABZdUi1B6ufoKyVQ8y6eubDHS7PTXhQuNjhXKSv", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x998aaf3d11da24c49e014d4ccb1d7d0cd09d3cc1679290f1df2803b32b76ba03" + "AddressOwner": "0x95dbb635e3fb7390f04e6567f739b01f2f3f227a90090e6777f19aa10fd9e64e" }, - "previousTransaction": "B5z4YkAgTi78fdxMbxG3fv2V4YBkhpc8PRCPz8MzLtbf", + "previousTransaction": "3pRSYsCdrDkfMDwecvKZ1zgSEpwUo52VcLE95iK9ap1N", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -2965,7 +2965,7 @@ "fields": { "balance": "20000", "id": { - "id": "0xceaf9ee4582d3a233101e322a22cb2a5bea2e681ea5af4e59bd1abb0bb4fcb27" + "id": "0x47866ff92885a3c21a7703f564721c198308aa0c71b771ada6b96c16fc9c0fa7" } } } @@ -3204,57 +3204,13 @@ }, "examples": [ { - "name": "Gets the metadata for the coin type in the request.", + "name": "Gets the metadata for the coin types in the request.", "params": [ { "name": "coin_type", "value": "0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC" } ], - "result": { - "name": "Result", - "value": { - "decimals": 9, - "name": "Usdc", - "symbol": "USDC", - "description": "Stable coin.", - "iconUrl": null, - "id": "0x6d907beaa3a49db57bdfdb3557e6d405cbf01c293a53e01457d65e92b5d8dd68" - } - } - } - ] - }, - { - "name": "suix_getCoinsMetadata", - "tags": [ - { - "name": "Coin Query API" - } - ], - "description": "Return metadata(e.g., symbol, decimals) for all coins", - "params": [ - { - "name": "coin_types", - "description": "type name for the coins (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC)", - "required": true, - "schema": { - "type": "string" - } - } - ], - "result": { - "name": "Vec", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SuiCoinMetadata" - } - } - }, - "examples": [ - { - "name": "Gets the metadata for all coins.", "result": { "name": "Result", "value": [ @@ -3264,7 +3220,7 @@ "symbol": "USDC", "description": "Stable coin.", "iconUrl": null, - "id": "0x6d907beaa3a49db57bdfdb3557e6d405cbf01c293a53e01457d65e92b5d8dd68" + "id": "0xd62ca040aba24f862a763851c54908cd2a0ee7d709c11b93d4a2083747b76856" } ] } @@ -3325,7 +3281,7 @@ "params": [ { "name": "owner", - "value": "0xd62ca040aba24f862a763851c54908cd2a0ee7d709c11b93d4a2083747b76856" + "value": "0xa5a8e30db5a798a7354340b6ea78a66f50921841ab5359ec7a3dc01f282420ae" }, { "name": "coin_type", @@ -3333,7 +3289,7 @@ }, { "name": "cursor", - "value": "0xe5c651321915b06c81838c2e370109b554a448a78d3a56220f798398dde66eab" + "value": "0x0a52124e2d53af3bef7959609efa51761ad155441a1b73bdaeecce7c56488b13" }, { "name": "limit", @@ -3346,36 +3302,67 @@ "data": [ { "coinType": "0x2::sui::SUI", - "coinObjectId": "0xa5a8e30db5a798a7354340b6ea78a66f50921841ab5359ec7a3dc01f282420ae", + "coinObjectId": "0x0d4dc2f8623f7e6956c4b75a738cf80e869ecbccf96ef8bab1b6d79fbfa88548", "version": "103626", - "digest": "tw5DzJTfdxTn4f3rekFrhN7dQTUezBgsEhycDobTBLb", + "digest": "HSein75AFXgdsnbABWLQ5mvjFmPFWrBFi9CMVsNn7gJr", "balance": "200000000", - "previousTransaction": "HSein75AFXgdsnbABWLQ5mvjFmPFWrBFi9CMVsNn7gJr" + "previousTransaction": "5qZkmtN5J5uGHURtiy9BtBhnXATPR2Wa6BJBDLrMzCaf" }, { "coinType": "0x2::sui::SUI", - "coinObjectId": "0x47dfa99496428c65b2054ad7db1872b87ff05b1047bb5e3adf5257cceb08ecb4", + "coinObjectId": "0x8fa1a2cc0360d52d0a59e4c9ada705c31cf98a5bee322ea06661084cd6e8769f", "version": "103626", - "digest": "AfgFe7ZfjJ5dWV6VAy2LbtvBFhcABkvdvwEjLrRcFqtr", + "digest": "5WHnm9jUZEtDvSvsj7HBrP5BoxA3UY6R57qqumXJXboV", "balance": "200000000", - "previousTransaction": "5WHnm9jUZEtDvSvsj7HBrP5BoxA3UY6R57qqumXJXboV" + "previousTransaction": "FLE2nB2Wio3oUyTx6HyzkrMsWiZxDg9Kk8s7ivvuoBbD" }, { "coinType": "0x2::sui::SUI", - "coinObjectId": "0xd4f062dbcfc3bf73f5861945592222ff7b090ac21c8a3cf840abdc5b743da778", + "coinObjectId": "0x808f8071df7c48ea3cc4ecc349c766ab8091159b34d8d912ac72d11c4dc40f1a", "version": "103626", - "digest": "9er6jxigfuQEKsn9gtPV2oW1zGQRcFtKNijHVe88GUJD", + "digest": "H3gwoKE2FSLx3BwvNTTKqCsNHmg6ARzm345icHhXUAEW", "balance": "200000000", - "previousTransaction": "H3gwoKE2FSLx3BwvNTTKqCsNHmg6ARzm345icHhXUAEW" + "previousTransaction": "GTwkpVou4qZuRWrrTqwnmGLwEnTJFNyJcC54VEX6CGj4" } ], - "nextCursor": "0xd4f062dbcfc3bf73f5861945592222ff7b090ac21c8a3cf840abdc5b743da778", + "nextCursor": "0x808f8071df7c48ea3cc4ecc349c766ab8091159b34d8d912ac72d11c4dc40f1a", "hasNextPage": true } } } ] }, + { + "name": "suix_getCoinsMetadata", + "tags": [ + { + "name": "Coin Query API" + } + ], + "params": [ + { + "name": "coin_types", + "description": "type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC)", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "result": { + "name": "HashMap", + "required": true, + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SuiCoinMetadata" + } + } + } + }, { "name": "suix_getCommitteeInfo", "tags": [ @@ -3475,7 +3462,7 @@ "params": [ { "name": "parent_object_id", - "value": "0x5ea6f7a348f4a7bd1a9ab069eb7f63865de3075cc5a4e62432f634b50fd2bb2b" + "value": "0x013d1eb156edcc1bedc3b1af1be1fe41671856fd3450dc5574abd53c793c9f22" }, { "name": "name", @@ -3489,14 +3476,14 @@ "name": "Result", "value": { "data": { - "objectId": "0x5ea6f7a348f4a7bd1a9ab069eb7f63865de3075cc5a4e62432f634b50fd2bb2b", + "objectId": "0x013d1eb156edcc1bedc3b1af1be1fe41671856fd3450dc5574abd53c793c9f22", "version": "1", - "digest": "FnxePMX8y7AqX5mRL4nCcK4xecSrpHrd85c3sJDmh5uG", + "digest": "s62w6QWSawprFASPVTsJTqSeUTWf1UwBMJtLQ7uUvy4", "type": "0x0000000000000000000000000000000000000000000000000000000000000009::test::TestField", "owner": { - "AddressOwner": "0x013d1eb156edcc1bedc3b1af1be1fe41671856fd3450dc5574abd53c793c9f22" + "AddressOwner": "0xd8a72d5550df8d2d64a9155d126cb1c283c434615ad29bce2d8a4dd415811ffb" }, - "previousTransaction": "Faiv4yqGR4HjAW8WhMN1NHHNStxXgP3u22dVPyvLad2z", + "previousTransaction": "FnxePMX8y7AqX5mRL4nCcK4xecSrpHrd85c3sJDmh5uG", "storageRebate": "100", "content": { "dataType": "moveObject", @@ -3557,11 +3544,11 @@ "params": [ { "name": "parent_object_id", - "value": "0xcfd10bca4d517e9452ad5486d69ee482b758c2399039dbbedd5db24385e934d6" + "value": "0x82b2fd67344691abd0efc771941b948ad35360b08e449fbbc28b0641175bf60b" }, { "name": "cursor", - "value": "0x3ddea0f8c3da994d9ead562ce76e36fdef6a382da344930c73d1298b0e9644b8" + "value": "0x5ea6f7a348f4a7bd1a9ab069eb7f63865de3075cc5a4e62432f634b50fd2bb2b" }, { "name": "limit", @@ -3580,9 +3567,9 @@ "bcsName": "2F1KQ3miNpBx1RzoRr1MVYMraK7RV", "type": "DynamicField", "objectType": "test", - "objectId": "0x82b2fd67344691abd0efc771941b948ad35360b08e449fbbc28b0641175bf60b", + "objectId": "0x05a4a796534a1833ca2c4df8fda7d073bbbf2715d2cd82ed40dc051dd5e05f7f", "version": 1, - "digest": "P2fGrUFbsF576cFxXYXrp1PskZHo2XKvbEoxL14qtnr" + "digest": "3F8njMJQe6DNxeuvUnHPVjuR9Lt3RNwfsBoxDcB9SXAa" }, { "name": { @@ -3592,9 +3579,9 @@ "bcsName": "2F1KQ3miNpBx1RzoRr1MVYMraK7RV", "type": "DynamicField", "objectType": "test", - "objectId": "0x21564fc5a68ace997461b098c1d1f3ccbde241d8fdf562db36bc1423ee10cecb", + "objectId": "0x6d95af2033dd243fe6bdc6886d51b7d1cb695b9491893f88a5ae1b9d4f235b3c", "version": 1, - "digest": "8Nmpatir33R88Xow2td3dpezMm1gsQJD19VThwR1Y8T5" + "digest": "9Ury7TXnLtHDrxreKjv5eMJpDAU4wZRuev4JJ1UnJBMp" }, { "name": { @@ -3604,12 +3591,12 @@ "bcsName": "2F1KQ3miNpBx1RzoRr1MVYMraK7RV", "type": "DynamicField", "objectType": "test", - "objectId": "0x7e00acf5386662fa062483ba507b1e9e3039750f0a270f2e12441ad7f611a5f7", + "objectId": "0xfd0b2c4326c56b1fec231d73038dba0f0885b97982f5fcac3ec6f5c8cae16743", "version": 1, - "digest": "J2n2gEG8R9P9nMep8mRVLjttxcDXQnWSH9KmrRsnGSg2" + "digest": "7wSPjrWQ4KsGkXdCL3i9L6NMKteaVkF9REeeuvL6dLnC" } ], - "nextCursor": "0x671832358f25bfacde706e528df4e15bb8de6dadd21835dfe44f4973139c15f9", + "nextCursor": "0x3ddea0f8c3da994d9ead562ce76e36fdef6a382da344930c73d1298b0e9644b8", "hasNextPage": true } } @@ -3697,7 +3684,7 @@ "params": [ { "name": "address", - "value": "0x0cd4bb4d4f520fe9bbf0cf1cebe3f2549412826c3c9261bff9786c240123749f" + "value": "0x8a417a09c971859f8f2b8ec279438a25d8876ea3c60e345ac3861444136b4a1b" }, { "name": "query", @@ -3708,7 +3695,7 @@ "StructType": "0x2::coin::Coin<0x2::sui::SUI>" }, { - "AddressOwner": "0x0cd4bb4d4f520fe9bbf0cf1cebe3f2549412826c3c9261bff9786c240123749f" + "AddressOwner": "0x8a417a09c971859f8f2b8ec279438a25d8876ea3c60e345ac3861444136b4a1b" }, { "Version": "13488" @@ -3728,7 +3715,7 @@ }, { "name": "cursor", - "value": "0x8a417a09c971859f8f2b8ec279438a25d8876ea3c60e345ac3861444136b4a1b" + "value": "0x0b37a91692359a98496738a58c17a9334aeacc435c70ab9635e47a277d8f8dd9" }, { "name": "limit", @@ -3741,45 +3728,45 @@ "data": [ { "data": { - "objectId": "0xd87765d1aadec2db8cc24c312542c8359b6b5e3bfeab524e5edaad3a204b4053", + "objectId": "0x745b2d45d1f00cd8d24e5b697607c055d5c23e2f6c69e6aacf5b4664b570cb20", "version": "13488", - "digest": "8qCvxDHh5LtDfF95Ci9G7vvQN2P6y4v55S9xoKBYp7FM", + "digest": "FLSfkL1pVTxv724z5kfPbTq2KsWP1HEKBwZQ57uRZU11", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x0cd4bb4d4f520fe9bbf0cf1cebe3f2549412826c3c9261bff9786c240123749f" + "AddressOwner": "0x8a417a09c971859f8f2b8ec279438a25d8876ea3c60e345ac3861444136b4a1b" }, - "previousTransaction": "kniF9zCBVYevxq3ZmtKxDDJk27N1qEgwkDtPiyeve4Y", + "previousTransaction": "FZzfCnKCSRW2jN9AwkiarjYQapViUQAh799aiRMZ4YC2", "storageRebate": "100" } }, { "data": { - "objectId": "0x26ed170e0427f9416a614d23284116375c16bd317738fd2c7a885362e04923f5", + "objectId": "0x403092867d6bbac0e311f44dd0a7a69bb635dcee0f33643b4729ae81730d55e5", "version": "13488", - "digest": "5Ka3vDaDy9h5UYk3Maz3vssWHrhbcGXQgwg8fL2ygyTi", + "digest": "GEoTGQuWicnPLM9Rg3vW1Q2y3kvnAgEkbyn8Z3RnAYai", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x0cd4bb4d4f520fe9bbf0cf1cebe3f2549412826c3c9261bff9786c240123749f" + "AddressOwner": "0x8a417a09c971859f8f2b8ec279438a25d8876ea3c60e345ac3861444136b4a1b" }, - "previousTransaction": "FLSfkL1pVTxv724z5kfPbTq2KsWP1HEKBwZQ57uRZU11", + "previousTransaction": "3cxBDcfnkVgtXWhnMnKKkMGtZdiEorUhb1vdp2DkVyfi", "storageRebate": "100" } }, { "data": { - "objectId": "0x2aea16d6fb49b7d1ae51f33b01ed8e1ac66916858610c124bb6fd73bb13e141c", + "objectId": "0xb2fd632992b01aa25900867288b63d6255ff8223c12b0fd985c49d5777a0d65a", "version": "13488", - "digest": "D3hfhfecVcmRcqNEkxkoFMzbuXvBqWj1JkCNU9zbnYMo", + "digest": "FFwCMgC7FHBLEwfL9JeSeR2EhMAZMykUPVW1kE3HgTMe", "type": "0x2::coin::Coin<0x2::sui::SUI>", "owner": { - "AddressOwner": "0x0cd4bb4d4f520fe9bbf0cf1cebe3f2549412826c3c9261bff9786c240123749f" + "AddressOwner": "0x8a417a09c971859f8f2b8ec279438a25d8876ea3c60e345ac3861444136b4a1b" }, - "previousTransaction": "GEoTGQuWicnPLM9Rg3vW1Q2y3kvnAgEkbyn8Z3RnAYai", + "previousTransaction": "3tX9sgYC4A6nVKGjKEE5xxW6t4zkvDL9BwjuaxMg8arP", "storageRebate": "100" } } ], - "nextCursor": "0x2aea16d6fb49b7d1ae51f33b01ed8e1ac66916858610c124bb6fd73bb13e141c", + "nextCursor": "0xb2fd632992b01aa25900867288b63d6255ff8223c12b0fd985c49d5777a0d65a", "hasNextPage": true } } @@ -3846,18 +3833,18 @@ "params": [ { "name": "owner", - "value": "0x3befb84f03a24386492bd3b05b1fd386172eb450e5059ce7df0ea6d9d6cefcaa" + "value": "0x9a95cf69368e31b4dbe8ee9bdb3c0587bbc79d8fc6edf4007e185a962fd906df" } ], "result": { "name": "Result", "value": [ { - "validatorAddress": "0x9a95cf69368e31b4dbe8ee9bdb3c0587bbc79d8fc6edf4007e185a962fd906df", - "stakingPool": "0xb4eeb46b70f0bebcae832aeef9f7c5db76052ab656e5f81853d0cf701cdbc8eb", + "validatorAddress": "0xb4eeb46b70f0bebcae832aeef9f7c5db76052ab656e5f81853d0cf701cdbc8eb", + "stakingPool": "0xf27ab513fc6ef8c344406c78da3d5ad3a5fcc295dc8803c15989a62d33ee8590", "stakes": [ { - "stakedSuiId": "0xf27ab513fc6ef8c344406c78da3d5ad3a5fcc295dc8803c15989a62d33ee8590", + "stakedSuiId": "0x14cfd5e91c13a481370240e392464c329a203fb9f0a8158aaab9b2a90044b26e", "stakeRequestEpoch": "62", "stakeActiveEpoch": "63", "principal": "200000000000", @@ -3865,7 +3852,7 @@ "estimatedReward": "520000000" }, { - "stakedSuiId": "0x14cfd5e91c13a481370240e392464c329a203fb9f0a8158aaab9b2a90044b26e", + "stakedSuiId": "0x14cc7fee4100fdcabda6d15c63c4b49c45ae23f2b936495cd38b1a4b04010295", "stakeRequestEpoch": "142", "stakeActiveEpoch": "143", "principal": "200000000000", @@ -3874,11 +3861,11 @@ ] }, { - "validatorAddress": "0x14cc7fee4100fdcabda6d15c63c4b49c45ae23f2b936495cd38b1a4b04010295", - "stakingPool": "0xbaa75ac72e548aeecf2ce8b4e88530651d6e8f93e0fb79b4bc65a512beb5b9f3", + "validatorAddress": "0xbaa75ac72e548aeecf2ce8b4e88530651d6e8f93e0fb79b4bc65a512beb5b9f3", + "stakingPool": "0x378423de90ed03b694cecf443c72b5387b29a731d26d98108d7abc4902107d7d", "stakes": [ { - "stakedSuiId": "0x378423de90ed03b694cecf443c72b5387b29a731d26d98108d7abc4902107d7d", + "stakedSuiId": "0x6a8e0f8fea6fda5488462e58724c034462b6064a08845e2ae2942fe7c4ee816d", "stakeRequestEpoch": "244", "stakeActiveEpoch": "245", "principal": "200000000000", @@ -3928,19 +3915,19 @@ { "name": "staked_sui_ids", "value": [ - "0x6a8e0f8fea6fda5488462e58724c034462b6064a08845e2ae2942fe7c4ee816d", - "0x754eb2eed23e6c6bb32c89fe1f21ab588374445e72e0402aea014b2956105799" + "0x754eb2eed23e6c6bb32c89fe1f21ab588374445e72e0402aea014b2956105799", + "0x63ee67e81398729f87d81d62f399c041b0f8d0938923ea7e3917608ee62df437" ] } ], "result": { "name": "Result", "value": { - "validatorAddress": "0x63ee67e81398729f87d81d62f399c041b0f8d0938923ea7e3917608ee62df437", - "stakingPool": "0x6710024f81dd33ab6833482ee8034e779a48e6ef635c7f856df4905022458bfb", + "validatorAddress": "0x6710024f81dd33ab6833482ee8034e779a48e6ef635c7f856df4905022458bfb", + "stakingPool": "0xd22bbb46f892c42d9ec0ae4de93e02c75973a51c17180798237326a58694a2cf", "stakes": [ { - "stakedSuiId": "0x6a8e0f8fea6fda5488462e58724c034462b6064a08845e2ae2942fe7c4ee816d", + "stakedSuiId": "0x754eb2eed23e6c6bb32c89fe1f21ab588374445e72e0402aea014b2956105799", "stakeRequestEpoch": "62", "stakeActiveEpoch": "63", "principal": "200000000000", @@ -3948,7 +3935,7 @@ "estimatedReward": "520000000" }, { - "stakedSuiId": "0x754eb2eed23e6c6bb32c89fe1f21ab588374445e72e0402aea014b2956105799", + "stakedSuiId": "0x63ee67e81398729f87d81d62f399c041b0f8d0938923ea7e3917608ee62df437", "stakeRequestEpoch": "244", "stakeActiveEpoch": "245", "principal": "200000000000", @@ -3991,7 +3978,7 @@ "params": [ { "name": "coin_type", - "value": "0x0a52124e2d53af3bef7959609efa51761ad155441a1b73bdaeecce7c56488b13::acoin::ACOIN" + "value": "0x7d42c99fc38511ba4813dc57feb3f00e898842487e23dbc2115855b76f2b1195::acoin::ACOIN" } ], "result": { @@ -4028,15 +4015,15 @@ "value": { "apys": [ { - "address": "0x27838b06db0346808ffb0676099de0408b31759f57b69c52e09410a66f9a23c3", + "address": "0x4be9913b6697a5e83e02e2a0fc747057ba0901e4d9b1e04de75ea2699a441321", "apy": 0.06 }, { - "address": "0x4be9913b6697a5e83e02e2a0fc747057ba0901e4d9b1e04de75ea2699a441321", + "address": "0x5612581eba57ebe7e594b809ccceec2be4dac6ff6945d49b3ecc043d049611f6", "apy": 0.02 }, { - "address": "0x5612581eba57ebe7e594b809ccceec2be4dac6ff6945d49b3ecc043d049611f6", + "address": "0xcfd10bca4d517e9452ad5486d69ee482b758c2399039dbbedd5db24385e934d6", "apy": 0.05 } ], @@ -4102,7 +4089,7 @@ "name": "query", "value": { "MoveModule": { - "package": "0x9c76d5157eaa77c41a7bfda8db98a8e8080f7cb53b7313088ed085c73f866f21", + "package": "0x3befb84f03a24386492bd3b05b1fd386172eb450e5059ce7df0ea6d9d6cefcaa", "module": "test" } } @@ -4110,7 +4097,7 @@ { "name": "cursor", "value": { - "txDigest": "EnySDWe22mnp35umt47kifqXvvchBqTzAoyoPXaH3rfK", + "txDigest": "9wAVxwPMuLam9hN1SD7insKzm5GCkSFYMrxExAvTigva", "eventSeq": "1" } }, @@ -4129,55 +4116,55 @@ "data": [ { "id": { - "txDigest": "FUMhRSj76es8MYeaRYeaBnppk56cuEehKwL2CiU82U7B", + "txDigest": "CkEYWW2zxTCGBLvUcTARhyX92fu2uc7cnCUXfCiqAypp", "eventSeq": "1" }, - "packageId": "0xd3d707164b2a378eee639ebc2690873d2f7dd97d60bdd8f0b9935a5c791b096d", + "packageId": "0xd705b36e0619a473ca0356d5ed733ee850c6e74eb31412a79b89fbbf16b72c6a", "transactionModule": "test", - "sender": "0x84bd999f9ff7a1804872957fafa528628a24386298faa98850887f64da841b87", + "sender": "0x279efd098d59a66a3d9adc87cce81fe9ec69dc8105b2b60140589ec8be44c29f", "type": "0x3::test::Test<0x3::test::Test>", "parsedJson": "some_value", "bcs": "" }, { "id": { - "txDigest": "CkEYWW2zxTCGBLvUcTARhyX92fu2uc7cnCUXfCiqAypp", + "txDigest": "Eg3ynETJfTfPKyvJzq3VLG6MngURYHPMjjUJ3Xt1t7tf", "eventSeq": "1" }, - "packageId": "0xd3d707164b2a378eee639ebc2690873d2f7dd97d60bdd8f0b9935a5c791b096d", + "packageId": "0xd705b36e0619a473ca0356d5ed733ee850c6e74eb31412a79b89fbbf16b72c6a", "transactionModule": "test", - "sender": "0x279efd098d59a66a3d9adc87cce81fe9ec69dc8105b2b60140589ec8be44c29f", + "sender": "0x289be027d2a94f744b4c59fda7b528f9c59f430eaba84b8bee9b43a30f9cc83f", "type": "0x3::test::Test<0x3::test::Test>", "parsedJson": "some_value", "bcs": "" }, { "id": { - "txDigest": "Eg3ynETJfTfPKyvJzq3VLG6MngURYHPMjjUJ3Xt1t7tf", + "txDigest": "EnySDWe22mnp35umt47kifqXvvchBqTzAoyoPXaH3rfK", "eventSeq": "1" }, - "packageId": "0xd3d707164b2a378eee639ebc2690873d2f7dd97d60bdd8f0b9935a5c791b096d", + "packageId": "0xd705b36e0619a473ca0356d5ed733ee850c6e74eb31412a79b89fbbf16b72c6a", "transactionModule": "test", - "sender": "0x289be027d2a94f744b4c59fda7b528f9c59f430eaba84b8bee9b43a30f9cc83f", + "sender": "0xa395759ca37c6e1ffc179184e98a6f9a2da5d78f6e34b0e5044ed52a6bc0a1bc", "type": "0x3::test::Test<0x3::test::Test>", "parsedJson": "some_value", "bcs": "" }, { "id": { - "txDigest": "EnySDWe22mnp35umt47kifqXvvchBqTzAoyoPXaH3rfK", + "txDigest": "9wAVxwPMuLam9hN1SD7insKzm5GCkSFYMrxExAvTigva", "eventSeq": "1" }, - "packageId": "0xd3d707164b2a378eee639ebc2690873d2f7dd97d60bdd8f0b9935a5c791b096d", + "packageId": "0xd705b36e0619a473ca0356d5ed733ee850c6e74eb31412a79b89fbbf16b72c6a", "transactionModule": "test", - "sender": "0xa395759ca37c6e1ffc179184e98a6f9a2da5d78f6e34b0e5044ed52a6bc0a1bc", + "sender": "0x9c76d5157eaa77c41a7bfda8db98a8e8080f7cb53b7313088ed085c73f866f21", "type": "0x3::test::Test<0x3::test::Test>", "parsedJson": "some_value", "bcs": "" } ], "nextCursor": { - "txDigest": "EnySDWe22mnp35umt47kifqXvvchBqTzAoyoPXaH3rfK", + "txDigest": "9wAVxwPMuLam9hN1SD7insKzm5GCkSFYMrxExAvTigva", "eventSeq": "1" }, "hasNextPage": false @@ -4319,7 +4306,7 @@ ], "result": { "name": "Result", - "value": "0xd22bbb46f892c42d9ec0ae4de93e02c75973a51c17180798237326a58694a2cf" + "value": "0x5cd6fa76ed1d18f05f15e35075252ddec4fb83621d55952d9172fcfcb72feae2" } } ] @@ -4369,11 +4356,11 @@ "params": [ { "name": "address", - "value": "0x38b3186a7bb26a1ab2c982a0a9b482aa70f5a010fffc60f20194ef0f597474e8" + "value": "0xceaf9ee4582d3a233101e322a22cb2a5bea2e681ea5af4e59bd1abb0bb4fcb27" }, { "name": "cursor", - "value": "0x5cd6fa76ed1d18f05f15e35075252ddec4fb83621d55952d9172fcfcb72feae2" + "value": "0x38b3186a7bb26a1ab2c982a0a9b482aa70f5a010fffc60f20194ef0f597474e8" }, { "name": "limit", @@ -4386,7 +4373,7 @@ "data": [ "example.sui" ], - "nextCursor": "0x5cd6fa76ed1d18f05f15e35075252ddec4fb83621d55952d9172fcfcb72feae2", + "nextCursor": "0x38b3186a7bb26a1ab2c982a0a9b482aa70f5a010fffc60f20194ef0f597474e8", "hasNextPage": false } } @@ -11192,4 +11179,4 @@ } } } -} \ No newline at end of file +} diff --git a/crates/sui-sdk/src/apis.rs b/crates/sui-sdk/src/apis.rs index 272783da0ea01..835701c5c6444 100644 --- a/crates/sui-sdk/src/apis.rs +++ b/crates/sui-sdk/src/apis.rs @@ -980,15 +980,8 @@ impl CoinReadApi { pub async fn get_coins_metadata( &self, coin_types: Vec, - ) -> SuiRpcResult> { - Ok(self.api.http.get_coins_metadata(coin_types).await?) - } - - pub async fn get_coins_metadata2( - &self, - coin_types: Vec, ) -> SuiRpcResult> { - Ok(self.api.http.get_coins_metadata2(coin_types).await?) + Ok(self.api.http.get_coins_metadata(coin_types).await?) } /// Return the total supply for a given coin type, or an error upon failure. From 9e494cb50e62dfc8af5d394691b1fcb4075cae18 Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:39:25 +0200 Subject: [PATCH 42/57] notifications init --- Cargo.lock | 27 ++- Cargo.toml | 4 +- .../src/handlers/checkpoint_handler.rs | 221 ++++++++++++++---- crates/sui-indexer/src/main.rs | 2 +- crates/sui-types/src/nats_queue.rs | 92 +++++++- 5 files changed, 285 insertions(+), 61 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ea4e18f5bccc..e0cfbae51c013 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8384,7 +8384,7 @@ dependencies = [ [[package]] name = "odin" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ce64446#ce64446d5ebe07fa36ab586ab169f50d65f607d1" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=063e6ff#063e6ff6ed0e6fe8ba6c92664498350ece3e88ea" dependencies = [ "async-nats", "bitcode", @@ -11723,7 +11723,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structs" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=ce64446#ce64446d5ebe07fa36ab586ab169f50d65f607d1" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=063e6ff#063e6ff6ed0e6fe8ba6c92664498350ece3e88ea" dependencies = [ "bitcode", "dotenvy", @@ -11732,6 +11732,7 @@ dependencies = [ "serde", "serde_json", "serde_with 3.8.1", + "strum 0.26.3", "typeshare", ] @@ -11753,6 +11754,15 @@ dependencies = [ "strum_macros 0.25.2", ] +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + [[package]] name = "strum_macros" version = "0.24.3" @@ -11779,6 +11789,19 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "rustversion", + "syn 2.0.48", +] + [[package]] name = "subprocess" version = "0.2.9" diff --git a/Cargo.toml b/Cargo.toml index 9d6d4fb066496..0536ab87ebc02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -347,7 +347,7 @@ hashbrown = "0.12" hdrhistogram = "7.5.1" hex = "0.4.3" hex-literal = "0.3.4" -highlight = "all" +highlight = "0.0.3" http = "0.2.8" http-body = "0.4.5" humantime = "2.1.0" @@ -716,7 +716,7 @@ semver = "1.0.16" spinners = "4.1.0" include_dir = "0.7.3" -odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "ce64446", package = "odin" } +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "063e6ff", package = "odin" } [patch.crates-io] quinn-proto = { git = "https://github.com/quinn-rs/quinn.git", rev = "f0fa66f871b80b9d2d7075d76967c649aecc0b77" } diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 98dc4b70d2baa..5e81eca6f06d1 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -6,12 +6,18 @@ use crate::handlers::tx_processor::IndexingPackageBuffer; use crate::handlers::CustomCheckpointDataToCommit; use crate::models::display::StoredDisplay; use async_trait::async_trait; +use chrono::Utc; use itertools::Itertools; use move_core_types::annotated_value::{MoveStructLayout, MoveTypeLayout}; use move_core_types::language_storage::{StructTag, TypeTag}; use mysten_metrics::{get_metrics, spawn_monitored_task}; +use odin::structs::sui_notifications::{ + CoinReceived, CoinSent, CoinSwap, NftBurned, NftMinted, NftReceived, NftSent, + SuiIndexerNotification, +}; use odin::sui_ws::{ AccountObjectsUpdate, CoinCreated, CoinMutated, CoinObjectUpdateStatus, ObjectChangeUpdate, + ObjectUpdateStatus, }; use odin::sui_ws::{SuiWsApiMsg, TokenBalanceUpdate, TokenUpdate}; use std::collections::{BTreeMap, HashMap}; @@ -25,7 +31,7 @@ use sui_types::dynamic_field::DynamicFieldType; use sui_types::messages_checkpoint::{ CertifiedCheckpointSummary, CheckpointContents, CheckpointSequenceNumber, }; -use sui_types::nats_queue::{NatsQueueSender, WsPayload}; +use sui_types::nats_queue::{NatsQueueSender, NotificationPayload, WsPayload}; use sui_types::object::Object; use tokio::sync::watch; use tokio_util::sync::CancellationToken; @@ -157,8 +163,13 @@ where .await?; // Send ws updates via nats - let nats_ws_payload = generate_ws_updates_from_checkpoint_data(&checkpoint_data); - self.nats_queue.sender.send(nats_ws_payload).await?; + let (nats_ws_payload, notifications_payload) = + generate_updates_from_checkpoint_data(&checkpoint_data); + self.nats_queue.ws_sender.send(nats_ws_payload).await?; + self.nats_queue + .notifications_sender + .send(notifications_payload) + .await?; // Convert custom checkpoint data into original type self.indexed_checkpoint_sender @@ -953,102 +964,216 @@ fn try_create_dynamic_field_info( })) } -pub fn generate_ws_updates_from_checkpoint_data( +pub fn generate_updates_from_checkpoint_data( checkpoint_data: &CustomCheckpointDataToCommit, -) -> WsPayload { +) -> (WsPayload, NotificationPayload) { let block_number = checkpoint_data.checkpoint.sequence_number; - + let mut notifications: BTreeMap> = BTreeMap::new(); let mut ws_balance_changes: HashMap = HashMap::new(); - let mut account_object_changes: HashMap = HashMap::new(); // account address -> account object changes + let mut account_object_changes: HashMap = HashMap::new(); let mut objects_changes: Vec = Vec::new(); - // transaction balance changes - for transaction in checkpoint_data.transactions.iter() { - for change in transaction.balance_change.iter() { - let user_address = match &change.owner.get_owner_address() { + for transaction in &checkpoint_data.transactions { + let transaction_id = transaction.tx_sequence_number; + let mut transaction_coin_changes: HashMap> = HashMap::new(); + + // Process balance changes + for change in &transaction.balance_change { + let user_address = match change.owner.get_owner_address() { Ok(address) => address.to_string(), Err(_) => continue, }; let coin_type = change.coin_type.to_canonical_string(true); - // Prepare ws update + // Update transaction_coin_changes for notifications + let total_change = transaction_coin_changes + .entry(user_address.clone()) + .or_insert_with(HashMap::new) + .entry(coin_type.clone()) + .or_insert(0); + *total_change += change.amount; + + // Update ws_balance_changes for WS updates let ws_update = ws_balance_changes .entry(user_address.clone()) .or_insert(TokenBalanceUpdate { - sui_address: user_address.clone(), + sui_address: user_address, sequence_number: block_number, changed_balances: HashMap::new(), - timestamp_ms: chrono::Utc::now().timestamp_millis() as u64, + timestamp_ms: Utc::now().timestamp_millis() as u64, }) .changed_balances .entry(coin_type.clone()) .or_insert(TokenUpdate { - coin_type, + coin_type: coin_type.clone(), object_changes: HashMap::new(), }); + match change.status { - // New coin is created ObjectStatus::Created => { - // Update ws update - ws_update - .object_changes - .entry(change.object_id.clone()) - .or_insert(CoinObjectUpdateStatus::Created(CoinCreated { + ws_update.object_changes.insert( + change.object_id.clone(), + CoinObjectUpdateStatus::Created(CoinCreated { amount: change.amount, - })); + }), + ); } ObjectStatus::Mutated => { - // Update ws update - ws_update - .object_changes - .entry(change.object_id.clone()) - .or_insert(CoinObjectUpdateStatus::Mutated(CoinMutated { + ws_update.object_changes.insert( + change.object_id.clone(), + CoinObjectUpdateStatus::Mutated(CoinMutated { change: change.amount, - })); + }), + ); } ObjectStatus::Deleted => { - // Update ws update ws_update .object_changes - .entry(change.object_id.clone()) - .or_insert(CoinObjectUpdateStatus::Deleted); + .insert(change.object_id.clone(), CoinObjectUpdateStatus::Deleted); + } + } + } + + // Generate notifications + for (sui_address, coin_changes) in &transaction_coin_changes { + if coin_changes.len() >= 3 { + // Potential swap scenario + let mut sui_change = 0i128; + let mut base_coin: Option<(String, i128)> = None; + let mut quote_coin: Option<(String, i128)> = None; + + for (coin_type, amount) in coin_changes { + if coin_type == "0x2::sui::SUI" { + sui_change = *amount; + } else if *amount < 0 && base_coin.is_none() { + base_coin = Some((coin_type.clone(), -amount)); + } else if *amount > 0 && quote_coin.is_none() { + quote_coin = Some((coin_type.clone(), *amount)); + } + } + + if sui_change < 0 && base_coin.is_some() && quote_coin.is_some() { + let (base_coin_type, base_amount) = base_coin.unwrap(); + let (quote_coin_type, quote_amount) = quote_coin.unwrap(); + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSwap(CoinSwap { + sui_address: sui_address.clone(), + base_coin_type, + base_amount, + quote_coin_type, + quote_amount, + })); + continue; + } + } + + // If not a swap, generate individual send/receive notifications + for (coin_type, amount) in coin_changes { + if coin_type == "0x2::sui::SUI" { + continue; + } + if *amount < 0 { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSent(CoinSent { + sender_address: sui_address.clone(), + coin_type: coin_type.clone(), + amount: -amount, + })); + } else if *amount > 0 { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinReceived(CoinReceived { + receiver_address: sui_address.clone(), + coin_type: coin_type.clone(), + amount: *amount, + })); } } } - for (change_owner, object_change) in transaction.custom_object_changes.iter() { + // Process custom object changes + for (change_owner, object_change) in &transaction.custom_object_changes { if let Some(owner) = change_owner { + let owner_address = owner.to_string(); + let nft_id = object_change.object_id.to_string(); + + // Update account_object_changes for WS updates account_object_changes - .entry(owner.to_string()) + .entry(owner_address.clone()) .or_insert(AccountObjectsUpdate { - sui_address: owner.to_string(), + sui_address: owner_address.clone(), sequence_number: block_number, object_changes: HashMap::new(), - timestamp_ms: chrono::Utc::now().timestamp_millis() as u64, + timestamp_ms: Utc::now().timestamp_millis() as u64, }) .object_changes - .entry(object_change.object_id.clone()) - .or_insert(object_change.clone()); + .insert(object_change.object_id.clone(), object_change.clone()); + + objects_changes.push(object_change.clone()); + + // Generate notifications for NFT changes + match &object_change.status { + ObjectUpdateStatus::Created => { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::NftMinted(NftMinted { + sui_address: owner_address, + nft_id, + })); + } + ObjectUpdateStatus::Received(received) => { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::NftReceived(NftReceived { + receiver_address: received.receiver_address.clone(), + nft_id, + })); + } + ObjectUpdateStatus::Deleted => { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::NftBurned(NftBurned { + sui_address: owner_address, + nft_id, + })); + } + ObjectUpdateStatus::Sent(sent) => { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::NftSent(NftSent { + sender_address: sent.sender_address.clone(), + nft_id, + })); + } + _ => {} + } } - - objects_changes.push(object_change.clone()); } } - let updates: Vec = ws_balance_changes + // Prepare WS updates + let ws_updates: Vec = ws_balance_changes .into_values() - .map(|v| SuiWsApiMsg::TokenBalanceUpdate(v)) + .map(SuiWsApiMsg::TokenBalanceUpdate) .chain( account_object_changes .into_values() - .map(|v| SuiWsApiMsg::AccountObjectsUpdate(v)), - ) - .chain( - objects_changes - .into_iter() - .map(|v| SuiWsApiMsg::ObjectUpdate(v)), + .map(SuiWsApiMsg::AccountObjectsUpdate), ) + .chain(objects_changes.into_iter().map(SuiWsApiMsg::ObjectUpdate)) .collect(); - return (checkpoint_data.checkpoint.sequence_number, updates); + return ( + (checkpoint_data.checkpoint.sequence_number, ws_updates), + (checkpoint_data.checkpoint.sequence_number, notifications), + ); } diff --git a/crates/sui-indexer/src/main.rs b/crates/sui-indexer/src/main.rs index 1e9c691f8cb71..f57566cf3a831 100644 --- a/crates/sui-indexer/src/main.rs +++ b/crates/sui-indexer/src/main.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use clap::Parser; -use odin::{get_odin, ConnectOptions, Odin}; +use odin::{ConnectOptions, Odin}; use sui_types::nats_queue::nats_queue; use tracing::info; diff --git a/crates/sui-types/src/nats_queue.rs b/crates/sui-types/src/nats_queue.rs index 4854c08387c5f..ad406090bd0b2 100644 --- a/crates/sui-types/src/nats_queue.rs +++ b/crates/sui-types/src/nats_queue.rs @@ -2,7 +2,7 @@ // This task is responsible for gathering all the messages and sending them in correct order // We will use a priority queue to store the messages and send them in correct order -use odin::{sui_ws::SuiWsApiMsg, Odin}; +use odin::{structs::sui_notifications::SuiIndexerNotification, sui_ws::SuiWsApiMsg, Odin}; use std::{collections::BTreeMap, sync::Arc}; use tokio::sync::{ mpsc::{channel, Receiver, Sender}, @@ -11,22 +11,29 @@ use tokio::sync::{ use tracing::info; pub type WsPayload = (u64, Vec); +pub type NotificationPayload = (u64, BTreeMap>); pub struct NatsQueueSender { pub init_checkpoint: u64, - pub sender: Arc>, - pub receiver: Arc>>, + pub ws_sender: Arc>, + pub ws_receiver: Arc>>, + pub notifications_sender: Arc>, + pub notifications_receiver: Arc>>, odin: Arc, } pub fn nats_queue(odin: Arc) -> NatsQueueSender { - // Create sender and receiver - let (tx, rx) = channel::(10_000); // 10k + // Create sender and receiver for ws updates + let (tx, rx) = channel::(10_000); + // Create sender and receiver for notifications + let (tx_notifications, rx_notifications) = channel::(10_000); NatsQueueSender { init_checkpoint: u64::MAX, - sender: Arc::new(tx), - receiver: Arc::new(Mutex::new(rx)), + ws_sender: Arc::new(tx), + ws_receiver: Arc::new(Mutex::new(rx)), + notifications_sender: Arc::new(tx_notifications), + notifications_receiver: Arc::new(Mutex::new(rx_notifications)), odin, } } @@ -35,9 +42,10 @@ impl NatsQueueSender { pub async fn run(&mut self) { // Spawn task that will order the messages let odin = self.odin.clone(); - let receiver = self.receiver.clone(); + let receiver = self.ws_receiver.clone(); let init_checkpoint = self.init_checkpoint; + // Task for ws updates tokio::spawn(async move { let mut next_index: u64 = init_checkpoint; // MAX means we have not received any message yet @@ -96,5 +104,73 @@ impl NatsQueueSender { } } }); + + // Task for notifications + let odin = self.odin.clone(); + let notifications_receiver = self.notifications_receiver.clone(); + tokio::spawn(async move { + let mut next_index: u64 = init_checkpoint; // MAX means we have not received any message yet + + let mut receiver_lock = notifications_receiver.lock().await; + + // Log init checkpoint + info!( + "Nats notifications queue init checkpoint: {}", + init_checkpoint + ); + + //Cache if we get a message with a block number that is not in order + let mut bmap_checkpoints: BTreeMap>> = + BTreeMap::new(); + + while let Some((checkpoint_seq_number, notifications)) = receiver_lock.recv().await { + // Check if we have not received any message yet + if next_index == u64::MAX { + next_index = checkpoint_seq_number + } + // Check if correct order + if checkpoint_seq_number == next_index { + // Send message + info!( + "Sending: {} notifications with seq number {}", + notifications.len(), + next_index + ); + + // Iter over notifications and ordered by sequence number send them + for (_, notifications) in notifications.iter() { + odin.publish_sui_notifications(¬ifications).await; + } + + // Update next index + next_index = next_index + 1; + // Check if we have any cached messages + while let Some(next_checkpoint) = bmap_checkpoints.remove(&next_index) { + info!( + "Sending: {} cached notifications with seq number {}", + next_checkpoint.len(), + next_index + ); + // Iter over notifications and ordered by sequence number send them + for (_, notifications) in notifications.iter() { + odin.publish_sui_notifications(¬ifications).await; + } + + // Update next index + next_index = next_index + 1; + } + } else { + info!( + "Received checkpoint with seq number {} but expected {}", + checkpoint_seq_number, next_index + ); + // Cache message + bmap_checkpoints + .entry(checkpoint_seq_number) + .or_insert(BTreeMap::new()) + .extend(notifications); + } + } + }); } } From f78cf6e64930138b6ba68f5cfb9fa5a99b7fe5aa Mon Sep 17 00:00:00 2001 From: Giems <109511301+Giems@users.noreply.github.com> Date: Tue, 20 Aug 2024 10:32:01 +0200 Subject: [PATCH 43/57] update for coin balances notifications --- Cargo.lock | 179 ++++++++++++- Cargo.toml | 2 +- .../src/handlers/checkpoint_handler.rs | 240 ++++++++++++++---- crates/sui-json-rpc/src/balance_changes.rs | 9 + 4 files changed, 375 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0cfbae51c013..066d46510dc18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3977,6 +3977,15 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + [[package]] name = "errno" version = "0.3.8" @@ -4483,6 +4492,20 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +[[package]] +name = "fcm" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8d0da8a6bd63bdec888b6d7a87c5698230005c1800823d28ddd5adb6f2550f" +dependencies = [ + "chrono", + "erased-serde", + "log", + "reqwest 0.11.20", + "serde", + "serde_json", +] + [[package]] name = "fd-lock" version = "3.0.13" @@ -4584,6 +4607,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "firebase" +version = "0.1.0" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=017d52bca2e11f6cdd98fe5fc5186e01b95c730f#017d52bca2e11f6cdd98fe5fc5186e01b95c730f" +dependencies = [ + "fcm", + "reqwest 0.12.4", + "serde", + "serde_json", + "structs", + "tokio", +] + [[package]] name = "fixed-hash" version = "0.7.0" @@ -4655,6 +4691,21 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.1.0" @@ -5462,6 +5513,35 @@ dependencies = [ "tokio-io-timeout", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.26", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" version = "0.1.7" @@ -7904,6 +7984,23 @@ dependencies = [ "typed-store", ] +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "neptune" version = "13.0.0" @@ -8384,10 +8481,11 @@ dependencies = [ [[package]] name = "odin" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=063e6ff#063e6ff6ed0e6fe8ba6c92664498350ece3e88ea" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=017d52bca2e11f6cdd98fe5fc5186e01b95c730f#017d52bca2e11f6cdd98fe5fc5186e01b95c730f" dependencies = [ "async-nats", "bitcode", + "firebase", "futures", "serde", "serde_json", @@ -8472,12 +8570,50 @@ dependencies = [ "serde_json", ] +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "opentelemetry" version = "0.20.0" @@ -10033,10 +10169,12 @@ dependencies = [ "http 0.2.9", "http-body 0.4.5", "hyper 0.14.26", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -10044,6 +10182,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "tokio", + "tokio-native-tls", "tower-service", "url", "wasm-bindgen", @@ -10061,6 +10200,7 @@ dependencies = [ "async-compression 0.4.12", "base64 0.22.1", "bytes", + "encoding_rs", "futures-channel", "futures-core", "futures-util", @@ -10070,11 +10210,13 @@ dependencies = [ "http-body-util", "hyper 1.4.1", "hyper-rustls 0.26.0", + "hyper-tls 0.6.0", "hyper-util", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -10086,7 +10228,9 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper", + "system-configuration", "tokio", + "tokio-native-tls", "tokio-rustls 0.25.0", "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service", @@ -11723,7 +11867,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structs" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=063e6ff#063e6ff6ed0e6fe8ba6c92664498350ece3e88ea" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=017d52bca2e11f6cdd98fe5fc5186e01b95c730f#017d52bca2e11f6cdd98fe5fc5186e01b95c730f" dependencies = [ "bitcode", "dotenvy", @@ -14407,6 +14551,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tabled" version = "0.12.2" @@ -14846,6 +15011,16 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-retry" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index 0536ab87ebc02..9124092502b41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -716,7 +716,7 @@ semver = "1.0.16" spinners = "4.1.0" include_dir = "0.7.3" -odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "063e6ff", package = "odin" } +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "017d52bca2e11f6cdd98fe5fc5186e01b95c730f", package = "odin" } [patch.crates-io] quinn-proto = { git = "https://github.com/quinn-rs/quinn.git", rev = "f0fa66f871b80b9d2d7075d76967c649aecc0b77" } diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 5e81eca6f06d1..15957ee76d9dc 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -47,7 +47,7 @@ use sui_types::event::SystemEpochInfoEvent; use sui_types::object::Owner; use sui_types::transaction::TransactionDataAPI; use tap::tap::TapFallible; -use tracing::{info, warn}; +use tracing::{error, info, warn}; use sui_types::base_types::ObjectID; use sui_types::sui_system_state::sui_system_state_summary::SuiSystemStateSummary; @@ -976,6 +976,8 @@ pub fn generate_updates_from_checkpoint_data( for transaction in &checkpoint_data.transactions { let transaction_id = transaction.tx_sequence_number; let mut transaction_coin_changes: HashMap> = HashMap::new(); + let mut gas_change: i128 = 0; + let mut gas_owner: Option = None; // Process balance changes for change in &transaction.balance_change { @@ -983,6 +985,13 @@ pub fn generate_updates_from_checkpoint_data( Ok(address) => address.to_string(), Err(_) => continue, }; + + if change.coin_type == TypeTag::Bool { + // This is for out custom sui gas change for transaction + gas_change = change.amount; + gas_owner = Some(user_address.clone()); + continue; + } let coin_type = change.coin_type.to_canonical_string(true); // Update transaction_coin_changes for notifications @@ -1034,66 +1043,193 @@ pub fn generate_updates_from_checkpoint_data( } } - // Generate notifications - for (sui_address, coin_changes) in &transaction_coin_changes { - if coin_changes.len() >= 3 { - // Potential swap scenario - let mut sui_change = 0i128; - let mut base_coin: Option<(String, i128)> = None; - let mut quote_coin: Option<(String, i128)> = None; - - for (coin_type, amount) in coin_changes { - if coin_type == "0x2::sui::SUI" { - sui_change = *amount; - } else if *amount < 0 && base_coin.is_none() { - base_coin = Some((coin_type.clone(), -amount)); - } else if *amount > 0 && quote_coin.is_none() { - quote_coin = Some((coin_type.clone(), *amount)); + // Generate notifications, There should always be at least one coin change for each transaction, SUI + // gas owner should be present in the transaction at this point + if let Some(gas_owner) = gas_owner { + for (sui_address, coin_changes) in &transaction_coin_changes { + if coin_changes.len() == 1 { + // First check if single change is happening for gas owner + if sui_address == &gas_owner { + // Either sui was used for gas or user has sent sui to another user while also paying gas + let coin_type = coin_changes.keys().next().unwrap(); + let amount = coin_changes.values().next().unwrap(); + + if coin_type != "0x2::sui::SUI" { + error!("Unexpected coin type for single coin change: {}", coin_type); + continue; + } + + // Check if balance change is equal to gas change, + // based on the data it we should be able to determine if it was a gas payment or a transfer + if *amount == gas_change { + // Gas payment, do nothing + } else { + // Sui transfer + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSent(CoinSent { + sender_address: sui_address.clone(), + coin_type: coin_type.clone(), + amount: *amount, + })); + } + } else { + // Single coin change for non-gas owner, very likely a receive + let coin_type = coin_changes.keys().next().unwrap(); + let amount = coin_changes.values().next().unwrap(); + + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinReceived(CoinReceived { + receiver_address: sui_address.clone(), + coin_type: coin_type.clone(), + amount: *amount, + })); } - } - if sui_change < 0 && base_coin.is_some() && quote_coin.is_some() { - let (base_coin_type, base_amount) = base_coin.unwrap(); - let (quote_coin_type, quote_amount) = quote_coin.unwrap(); - notifications - .entry(transaction_id) - .or_insert_with(Vec::new) - .push(SuiIndexerNotification::CoinSwap(CoinSwap { - sui_address: sui_address.clone(), - base_coin_type, - base_amount, - quote_coin_type, - quote_amount, - })); continue; } - } - // If not a swap, generate individual send/receive notifications - for (coin_type, amount) in coin_changes { - if coin_type == "0x2::sui::SUI" { + if coin_changes.len() == 2 { + // Two coin changes, two possible scenarios + // 1. Sui gas payment and a coin transfer to another user + // 2. Swap using Sui and another coin + + let mut sui_change = 0i128; + let mut other_change = 0i128; + let mut other_token_type = String::new(); + + for (coin_type, amount) in coin_changes { + if coin_type == "0x2::sui::SUI" { + sui_change = *amount; + } else { + other_change = *amount; + other_token_type = coin_type.clone(); + } + } + + if sui_change == gas_change { + // Sui gas payment and a coin transfer to another user + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSent(CoinSent { + sender_address: sui_address.clone(), + coin_type: other_token_type, + amount: other_change, + })); + } else { + // Swap using Sui and another coin, base is a token which we swap to receive another token + // So base is the token with negative change and quote is the token with positive change + let (base_coin_type, base_amount, quote_coin_type, quote_amount) = + if sui_change < 0 { + ( + "0x2::sui::SUI", + sui_change, + other_token_type.as_str(), + other_change, + ) + } else { + ( + other_token_type.as_str(), + other_change, + "0x2::sui::SUI", + sui_change, + ) + }; + + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSwap(CoinSwap { + sui_address: sui_address.clone(), + spent_token_type: base_coin_type.to_string(), + spent_amount: -base_amount, + received: vec![(quote_coin_type.to_string(), quote_amount)], + })); + } + } + + // By this point we have multiple coin changes in the transaction for the user, which means swap or multiple sends/receives + let mut positive_changes: Vec<(String, i128)> = coin_changes + .iter() + .filter(|(_, amount)| **amount > 0) + .map(|(coin_type, amount)| (coin_type.clone(), *amount)) + .collect(); + + // order positive changes by amount, largest first (3, 2, 1) + positive_changes.sort_by(|a, b| b.1.cmp(&a.1)); + + let mut negative_changes: Vec<(String, i128)> = coin_changes + .iter() + .filter(|(_, amount)| **amount < 0) + .map(|(coin_type, amount)| (coin_type.clone(), *amount)) + .collect(); + + // order negative changes by amount, largest first (-3, -2, -1) + negative_changes.sort_by(|a, b| a.1.cmp(&b.1)); + + // Few possible scenarios + // 1. Only negative changes, user sent multiple coins + // 2. Only positive changes, user received multiple coins + // 3. If there is at least one negative change and one positive change, it's a swap, + // biggest positive change is the quote coin as the rest should be just dust + + // 1. + if positive_changes.is_empty() { + for (coin_type, amount) in negative_changes { + if coin_type == "0x2::sui::SUI" { + // Check if SUI change was equal to gas change + if amount == gas_change { + // Gas payment, do nothing + continue; + } + } + + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSent(CoinSent { + sender_address: sui_address.clone(), + coin_type: coin_type.clone(), + amount: -amount, + })); + } continue; } - if *amount < 0 { - notifications - .entry(transaction_id) - .or_insert_with(Vec::new) - .push(SuiIndexerNotification::CoinSent(CoinSent { - sender_address: sui_address.clone(), - coin_type: coin_type.clone(), - amount: -amount, - })); - } else if *amount > 0 { - notifications - .entry(transaction_id) - .or_insert_with(Vec::new) - .push(SuiIndexerNotification::CoinReceived(CoinReceived { - receiver_address: sui_address.clone(), - coin_type: coin_type.clone(), - amount: *amount, - })); + + // 2. + if negative_changes.is_empty() { + for (coin_type, amount) in positive_changes { + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinReceived(CoinReceived { + receiver_address: sui_address.clone(), + coin_type: coin_type.clone(), + amount, + })); + } + continue; } + + // 3. + let (base_coin_type, base_amount) = negative_changes.remove(0); + + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSwap(CoinSwap { + sui_address: sui_address.clone(), + spent_token_type: base_coin_type.clone(), + spent_amount: -base_amount, + received: positive_changes, + })); } + } else { + error!("Gas owner not found for transaction {}", transaction_id); } // Process custom object changes diff --git a/crates/sui-json-rpc/src/balance_changes.rs b/crates/sui-json-rpc/src/balance_changes.rs index c7abc73a6f40b..4a4de9f181c74 100644 --- a/crates/sui-json-rpc/src/balance_changes.rs +++ b/crates/sui-json-rpc/src/balance_changes.rs @@ -260,6 +260,15 @@ pub async fn get_balance_changes_with_status_from_effect Date: Tue, 20 Aug 2024 11:15:45 +0200 Subject: [PATCH 44/57] cr fixes --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- crates/sui-indexer/src/handlers/checkpoint_handler.rs | 8 ++------ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 066d46510dc18..44dd32541a47d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4610,7 +4610,7 @@ dependencies = [ [[package]] name = "firebase" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=017d52bca2e11f6cdd98fe5fc5186e01b95c730f#017d52bca2e11f6cdd98fe5fc5186e01b95c730f" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=bd401bc3807bba5bb5203f42cc7b8cf836be83f5#bd401bc3807bba5bb5203f42cc7b8cf836be83f5" dependencies = [ "fcm", "reqwest 0.12.4", @@ -8481,7 +8481,7 @@ dependencies = [ [[package]] name = "odin" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=017d52bca2e11f6cdd98fe5fc5186e01b95c730f#017d52bca2e11f6cdd98fe5fc5186e01b95c730f" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=bd401bc3807bba5bb5203f42cc7b8cf836be83f5#bd401bc3807bba5bb5203f42cc7b8cf836be83f5" dependencies = [ "async-nats", "bitcode", @@ -11867,7 +11867,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structs" version = "0.1.0" -source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=017d52bca2e11f6cdd98fe5fc5186e01b95c730f#017d52bca2e11f6cdd98fe5fc5186e01b95c730f" +source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=bd401bc3807bba5bb5203f42cc7b8cf836be83f5#bd401bc3807bba5bb5203f42cc7b8cf836be83f5" dependencies = [ "bitcode", "dotenvy", diff --git a/Cargo.toml b/Cargo.toml index 9124092502b41..6c02cfcd7dfcc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -716,7 +716,7 @@ semver = "1.0.16" spinners = "4.1.0" include_dir = "0.7.3" -odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "017d52bca2e11f6cdd98fe5fc5186e01b95c730f", package = "odin" } +odin = { git = "ssh://git@github.com/nightly-labs/alexandria.git", rev = "bd401bc3807bba5bb5203f42cc7b8cf836be83f5", package = "odin" } [patch.crates-io] quinn-proto = { git = "https://github.com/quinn-rs/quinn.git", rev = "f0fa66f871b80b9d2d7075d76967c649aecc0b77" } diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 15957ee76d9dc..3009faeca7b26 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -1145,8 +1145,7 @@ pub fn generate_updates_from_checkpoint_data( .or_insert_with(Vec::new) .push(SuiIndexerNotification::CoinSwap(CoinSwap { sui_address: sui_address.clone(), - spent_token_type: base_coin_type.to_string(), - spent_amount: -base_amount, + spent: vec![(base_coin_type.to_string(), -base_amount)], received: vec![(quote_coin_type.to_string(), quote_amount)], })); } @@ -1216,15 +1215,12 @@ pub fn generate_updates_from_checkpoint_data( } // 3. - let (base_coin_type, base_amount) = negative_changes.remove(0); - notifications .entry(transaction_id) .or_insert_with(Vec::new) .push(SuiIndexerNotification::CoinSwap(CoinSwap { sui_address: sui_address.clone(), - spent_token_type: base_coin_type.clone(), - spent_amount: -base_amount, + spent: negative_changes, received: positive_changes, })); } From bfc425923e4a2d91055466fa6ff3fd902ba151e4 Mon Sep 17 00:00:00 2001 From: NB Date: Tue, 20 Aug 2024 13:18:08 +0200 Subject: [PATCH 45/57] update --- crates/sui-indexer/src/handlers/checkpoint_handler.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 3009faeca7b26..a2977246877bf 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -1054,7 +1054,7 @@ pub fn generate_updates_from_checkpoint_data( let coin_type = coin_changes.keys().next().unwrap(); let amount = coin_changes.values().next().unwrap(); - if coin_type != "0x2::sui::SUI" { + if coin_type != "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI" { error!("Unexpected coin type for single coin change: {}", coin_type); continue; } @@ -1102,7 +1102,7 @@ pub fn generate_updates_from_checkpoint_data( let mut other_token_type = String::new(); for (coin_type, amount) in coin_changes { - if coin_type == "0x2::sui::SUI" { + if coin_type == &"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI".to_string() { sui_change = *amount; } else { other_change = *amount; @@ -1126,7 +1126,7 @@ pub fn generate_updates_from_checkpoint_data( let (base_coin_type, base_amount, quote_coin_type, quote_amount) = if sui_change < 0 { ( - "0x2::sui::SUI", + "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", sui_change, other_token_type.as_str(), other_change, @@ -1135,7 +1135,7 @@ pub fn generate_updates_from_checkpoint_data( ( other_token_type.as_str(), other_change, - "0x2::sui::SUI", + "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", sui_change, ) }; @@ -1179,7 +1179,7 @@ pub fn generate_updates_from_checkpoint_data( // 1. if positive_changes.is_empty() { for (coin_type, amount) in negative_changes { - if coin_type == "0x2::sui::SUI" { + if coin_type == "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI" { // Check if SUI change was equal to gas change if amount == gas_change { // Gas payment, do nothing From 829274042083891dfe94441a6b50e08d3289b353 Mon Sep 17 00:00:00 2001 From: NB Date: Thu, 22 Aug 2024 07:52:48 +0200 Subject: [PATCH 46/57] update notifications generation --- .../src/handlers/checkpoint_handler.rs | 59 ++++++++++++------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index a2977246877bf..420fc3a17041c 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -28,6 +28,7 @@ use sui_types::base_types::ObjectRef; use sui_types::dynamic_field::DynamicFieldInfo; use sui_types::dynamic_field::DynamicFieldName; use sui_types::dynamic_field::DynamicFieldType; +use sui_types::gas_coin::GAS; use sui_types::messages_checkpoint::{ CertifiedCheckpointSummary, CheckpointContents, CheckpointSequenceNumber, }; @@ -978,6 +979,7 @@ pub fn generate_updates_from_checkpoint_data( let mut transaction_coin_changes: HashMap> = HashMap::new(); let mut gas_change: i128 = 0; let mut gas_owner: Option = None; + let gas_coin_type = GAS::type_tag().to_canonical_string(true); // Process balance changes for change in &transaction.balance_change { @@ -1042,7 +1044,6 @@ pub fn generate_updates_from_checkpoint_data( } } } - // Generate notifications, There should always be at least one coin change for each transaction, SUI // gas owner should be present in the transaction at this point if let Some(gas_owner) = gas_owner { @@ -1054,14 +1055,14 @@ pub fn generate_updates_from_checkpoint_data( let coin_type = coin_changes.keys().next().unwrap(); let amount = coin_changes.values().next().unwrap(); - if coin_type != "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI" { + if coin_type != &gas_coin_type { error!("Unexpected coin type for single coin change: {}", coin_type); continue; } // Check if balance change is equal to gas change, // based on the data it we should be able to determine if it was a gas payment or a transfer - if *amount == gas_change { + if (*amount).abs() == gas_change { // Gas payment, do nothing } else { // Sui transfer @@ -1071,7 +1072,7 @@ pub fn generate_updates_from_checkpoint_data( .push(SuiIndexerNotification::CoinSent(CoinSent { sender_address: sui_address.clone(), coin_type: coin_type.clone(), - amount: *amount, + amount: *amount + gas_change, })); } } else { @@ -1102,7 +1103,7 @@ pub fn generate_updates_from_checkpoint_data( let mut other_token_type = String::new(); for (coin_type, amount) in coin_changes { - if coin_type == &"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI".to_string() { + if coin_type == &gas_coin_type.to_string() { sui_change = *amount; } else { other_change = *amount; @@ -1110,7 +1111,7 @@ pub fn generate_updates_from_checkpoint_data( } } - if sui_change == gas_change { + if sui_change.abs() == gas_change { // Sui gas payment and a coin transfer to another user notifications .entry(transaction_id) @@ -1126,16 +1127,16 @@ pub fn generate_updates_from_checkpoint_data( let (base_coin_type, base_amount, quote_coin_type, quote_amount) = if sui_change < 0 { ( - "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", + gas_coin_type.clone(), sui_change, - other_token_type.as_str(), + other_token_type, other_change, ) } else { ( - other_token_type.as_str(), + other_token_type, other_change, - "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI", + gas_coin_type.clone(), sui_change, ) }; @@ -1149,6 +1150,8 @@ pub fn generate_updates_from_checkpoint_data( received: vec![(quote_coin_type.to_string(), quote_amount)], })); } + + continue; } // By this point we have multiple coin changes in the transaction for the user, which means swap or multiple sends/receives @@ -1178,10 +1181,10 @@ pub fn generate_updates_from_checkpoint_data( // 1. if positive_changes.is_empty() { - for (coin_type, amount) in negative_changes { - if coin_type == "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI" { + for (coin_type, amount) in negative_changes.iter() { + if coin_type == &gas_coin_type { // Check if SUI change was equal to gas change - if amount == gas_change { + if (*amount).abs() == gas_change { // Gas payment, do nothing continue; } @@ -1215,14 +1218,28 @@ pub fn generate_updates_from_checkpoint_data( } // 3. - notifications - .entry(transaction_id) - .or_insert_with(Vec::new) - .push(SuiIndexerNotification::CoinSwap(CoinSwap { - sui_address: sui_address.clone(), - spent: negative_changes, - received: positive_changes, - })); + { + // Update used sui amount for gas owner + if sui_address == &gas_owner { + if let Some((_, change_amount)) = negative_changes + .iter_mut() + .find(|(coin_type, _)| coin_type == &gas_coin_type) + { + if (*change_amount).abs() >= gas_change { + *change_amount += gas_change; + } + } + } + + notifications + .entry(transaction_id) + .or_insert_with(Vec::new) + .push(SuiIndexerNotification::CoinSwap(CoinSwap { + sui_address: sui_address.clone(), + spent: negative_changes, + received: positive_changes, + })); + } } } else { error!("Gas owner not found for transaction {}", transaction_id); From cf75cf9ff050bc990df521b63b6a8c15c94cf64b Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Fri, 23 Aug 2024 14:31:26 -0500 Subject: [PATCH 47/57] chore: update rust to 1.80.1 (#19087) --- .cargo/{config => config.toml} | 5 + .github/workflows/external.yml | 3 +- .github/workflows/rust.yml | 3 +- Cargo.lock | 291 +++++++++--------- Cargo.toml | 18 +- consensus/config/Cargo.toml | 3 + consensus/core/Cargo.toml | 3 + consensus/core/src/authority_service.rs | 8 +- consensus/core/src/block_verifier.rs | 1 + consensus/core/src/commit_observer.rs | 8 +- consensus/core/src/commit_syncer.rs | 2 +- consensus/core/src/dag_state.rs | 4 +- consensus/core/src/leader_scoring.rs | 2 +- consensus/core/src/leader_scoring_strategy.rs | 1 + consensus/core/src/network/network_tests.rs | 12 +- consensus/core/src/stake_aggregator.rs | 1 + consensus/core/src/storage/mem_store.rs | 2 + consensus/core/src/storage/mod.rs | 1 + consensus/core/src/subscriber.rs | 6 +- consensus/core/src/synchronizer.rs | 4 +- consensus/core/src/test_dag_parser.rs | 2 +- consensus/core/src/transaction.rs | 1 + crates/mysten-metrics/Cargo.toml | 3 + crates/mysten-util-mem/src/malloc_size.rs | 65 ---- crates/mysten-util-mem/tests/derive.rs | 21 -- crates/sui-archival/src/lib.rs | 1 + crates/sui-aws-orchestrator/src/settings.rs | 1 - crates/sui-benchmark/Cargo.toml | 3 + .../src/embedded_reconfig_observer.rs | 1 + crates/sui-bridge-cli/src/lib.rs | 2 +- crates/sui-bridge/src/types.rs | 2 +- crates/sui-config/Cargo.toml | 3 + crates/sui-config/src/node.rs | 1 - crates/sui-config/src/p2p.rs | 1 + crates/sui-core/Cargo.toml | 3 + crates/sui-core/src/authority.rs | 5 +- .../authority/authority_per_epoch_store.rs | 18 +- .../src/authority/authority_store_pruner.rs | 4 + .../src/authority/authority_store_tables.rs | 5 +- .../shared_object_congestion_tracker.rs | 4 +- .../src/authority/test_authority_builder.rs | 5 +- crates/sui-core/src/authority_aggregator.rs | 1 + .../checkpoints/checkpoint_executor/mod.rs | 2 +- crates/sui-core/src/consensus_adapter.rs | 4 +- crates/sui-core/src/rest_index.rs | 4 +- crates/sui-core/src/transaction_manager.rs | 5 +- .../unit_tests/authority_aggregator_tests.rs | 2 +- .../src/unit_tests/execution_driver_tests.rs | 2 +- crates/sui-e2e-tests/Cargo.toml | 5 +- .../tests/dynamic_committee_tests.rs | 3 +- crates/sui-faucet/src/faucet/simple_faucet.rs | 5 +- crates/sui-framework-tests/Cargo.toml | 3 + crates/sui-framework/src/lib.rs | 4 +- crates/sui-genesis-builder/Cargo.toml | 3 + crates/sui-genesis-builder/src/lib.rs | 8 +- crates/sui-graphql-e2e-tests/Cargo.toml | 3 + crates/sui-graphql-rpc/src/server/version.rs | 1 + crates/sui-graphql-rpc/src/types/event.rs | 14 - .../sui-graphql-rpc/src/types/move_object.rs | 1 + crates/sui-graphql-rpc/src/types/object.rs | 5 +- crates/sui-graphql-rpc/src/types/owner.rs | 1 + .../src/types/transaction_block/tx_lookups.rs | 4 +- crates/sui-indexer/src/store/mod.rs | 7 +- .../sui-indexer/src/store/pg_indexer_store.rs | 1 + crates/sui-json-rpc-tests/Cargo.toml | 3 + .../sui-json-rpc-types/src/sui_transaction.rs | 2 +- crates/sui-json/src/lib.rs | 2 +- crates/sui-keys/src/keypair_file.rs | 1 + crates/sui-macros/Cargo.toml | 3 + crates/sui-macros/src/lib.rs | 4 +- crates/sui-move/src/unit_test.rs | 29 +- crates/sui-network/src/state_sync/server.rs | 2 +- crates/sui-node/Cargo.toml | 3 + crates/sui-node/src/admin.rs | 4 +- crates/sui-open-rpc-macros/src/lib.rs | 15 - crates/sui-open-rpc/Cargo.toml | 3 + crates/sui-open-rpc/src/examples.rs | 5 - crates/sui-package-resolver/src/lib.rs | 5 +- crates/sui-proc-macros/Cargo.toml | 3 + crates/sui-protocol-config/Cargo.toml | 3 + crates/sui-proxy/src/consumer.rs | 7 +- crates/sui-replay/src/lib.rs | 5 +- crates/sui-rest-api/src/reader.rs | 1 + crates/sui-rest-api/src/response.rs | 4 +- crates/sui-rosetta/src/construction.rs | 2 +- crates/sui-rosetta/tests/gas_budget_tests.rs | 1 + .../src/payload/query_transactions.rs | 2 +- .../sui-rpc-loadgen/src/payload/validation.rs | 2 +- crates/sui-sdk/src/lib.rs | 4 +- crates/sui-simulator/Cargo.toml | 3 + crates/sui-simulator/src/lib.rs | 2 +- crates/sui-snapshot/src/lib.rs | 1 + crates/sui-storage/Cargo.toml | 3 + .../sui-storage/src/http_key_value_store.rs | 9 +- crates/sui-swarm-config/Cargo.toml | 3 + crates/sui-swarm/Cargo.toml | 3 + crates/sui-swarm/src/memory/container.rs | 2 +- crates/sui-tool/src/commands.rs | 54 ---- crates/sui-tool/src/lib.rs | 37 --- .../sui-transactional-test-runner/Cargo.toml | 3 + .../src/simulator_persisted_store.rs | 16 +- crates/sui-types/Cargo.toml | 3 + crates/sui-types/src/crypto.rs | 4 +- crates/sui-types/src/execution.rs | 19 +- .../sui-types/src/full_checkpoint_content.rs | 4 +- crates/sui-types/src/messages_grpc.rs | 1 + crates/sui-types/tests/serde_tests.rs | 2 +- crates/sui/Cargo.toml | 3 + crates/sui/src/client_commands.rs | 1 + crates/sui/src/client_ptb/lexer.rs | 12 +- crates/sui/tests/cli_tests.rs | 6 +- crates/suiop-cli/src/command.rs | 6 +- crates/telemetry-subscribers/src/lib.rs | 2 +- .../src/span_latency_prom.rs | 1 + crates/test-cluster/Cargo.toml | 3 + crates/transaction-fuzzer/Cargo.toml | 3 + .../src/programmable_transaction_gen.rs | 2 +- crates/typed-store-derive/src/lib.rs | 2 +- crates/typed-store/src/lib.rs | 11 +- crates/typed-store/src/rocks/mod.rs | 8 +- crates/typed-store/tests/macro_tests.rs | 16 +- deny.toml | 56 +--- docker/deterministic-canary/Dockerfile | 2 +- docker/sui-bridge-indexer/Dockerfile | 2 +- docker/sui-graphql-rpc/Dockerfile | 2 +- docker/sui-indexer-tidb/Dockerfile | 2 +- docker/sui-indexer/Dockerfile | 2 +- docker/sui-node/Dockerfile | 2 +- docker/sui-services/Dockerfile | 2 +- docker/sui-source-service/Dockerfile | 2 +- docker/sui-tools/Dockerfile | 2 +- external-crates/move/Cargo.toml | 2 +- .../move-binary-format/src/file_format.rs | 14 +- .../src/file_format_common.rs | 2 +- .../src/proptest_types/functions.rs | 14 +- .../src/proptest_types/types.rs | 3 - .../move-binary-format/src/serializer.rs | 8 +- .../src/unit_tests/number_tests.rs | 4 +- .../src/control_flow_v5.rs | 2 +- .../src/script_signature.rs | 1 + .../move-command-line-common/src/files.rs | 4 +- .../crates/move-compiler/src/cfgir/cfg.rs | 1 + .../move-compiler/src/naming/translate.rs | 6 +- .../src/to_bytecode/canonicalize_handles.rs | 6 +- .../src/typing/deprecation_warnings.rs | 1 + .../crates/move-compiler/src/typing/expand.rs | 10 +- .../src/unit_test/plan_builder.rs | 2 +- .../move/crates/move-core-types/src/state.rs | 2 +- .../move/crates/move-core-types/src/u256.rs | 1 - .../crates/move-ir-to-bytecode/src/context.rs | 2 +- .../move/crates/move-model/src/ty.rs | 28 +- .../src/access_path.rs | 1 + .../src/inconsistency_check.rs | 1 + .../src/packed_types_analysis.rs | 1 + .../crates/move-stdlib-natives/src/debug.rs | 2 +- .../crates/move-vm-runtime/src/tracing.rs | 1 - .../move-vm-test-utils/src/gas_schedule.rs | 5 +- .../move-vm-types/src/values/values_impl.rs | 30 +- .../test-generation/src/abstract_state.rs | 4 +- .../test-generation/src/borrow_graph.rs | 2 +- .../test-generation/src/bytecode_generator.rs | 18 +- .../test-generation/src/control_flow_graph.rs | 12 +- .../move/crates/test-generation/src/lib.rs | 4 +- .../tests/generic_instructions.rs | 2 +- .../src/control_flow_v5.rs | 2 +- .../src/script_signature.rs | 1 + .../v0/crates/move-vm-runtime/src/tracing.rs | 1 - .../src/control_flow_v5.rs | 2 +- .../src/script_signature.rs | 1 + .../v1/crates/move-vm-runtime/src/tracing.rs | 1 - .../src/control_flow_v5.rs | 2 +- .../src/script_signature.rs | 1 + .../v2/crates/move-vm-runtime/src/tracing.rs | 1 - narwhal/config/src/lib.rs | 6 +- narwhal/node/src/benchmark_client.rs | 1 + narwhal/node/src/main.rs | 2 +- narwhal/primary/src/consensus/metrics.rs | 6 +- narwhal/primary/src/synchronizer.rs | 5 +- narwhal/primary/tests/randomized_tests.rs | 2 +- narwhal/storage/src/certificate_store.rs | 90 +++--- narwhal/test-utils/src/cluster.rs | 1 + narwhal/types/src/primary.rs | 1 + narwhal/worker/Cargo.toml | 3 + narwhal/worker/src/handlers.rs | 2 + rust-toolchain.toml | 2 +- sui-execution/latest/sui-adapter/Cargo.toml | 3 + .../sui-move-natives/src/crypto/group_ops.rs | 4 +- .../sui-verifier/src/entry_points_verifier.rs | 4 +- sui-execution/v0/sui-adapter/Cargo.toml | 3 + sui-execution/v0/sui-verifier/Cargo.toml | 3 + .../sui-verifier/src/entry_points_verifier.rs | 2 +- sui-execution/v1/sui-adapter/Cargo.toml | 3 + .../sui-verifier/src/entry_points_verifier.rs | 2 +- sui-execution/v2/sui-adapter/Cargo.toml | 3 + .../sui-move-natives/src/crypto/group_ops.rs | 4 +- .../sui-verifier/src/entry_points_verifier.rs | 2 +- 196 files changed, 620 insertions(+), 793 deletions(-) rename .cargo/{config => config.toml} (86%) diff --git a/.cargo/config b/.cargo/config.toml similarity index 86% rename from .cargo/config rename to .cargo/config.toml index b6879bf01e5f0..47c98de4efc2a 100644 --- a/.cargo/config +++ b/.cargo/config.toml @@ -7,6 +7,7 @@ xclippy = [ "clippy", "--all-targets", "--all-features", "--", "-Wclippy::all", "-Wclippy::disallowed_methods", + "-Aclippy::unnecessary_get_then_check", ] xlint = "run --package x --bin x -- lint" xtest = "run --package x --bin x -- external-crates-tests" @@ -22,6 +23,9 @@ move-clippy = [ "-Aclippy::upper_case_acronyms", "-Aclippy::type_complexity", "-Aclippy::new_without_default", + "-Aclippy::question_mark", + "-Aclippy::unnecessary_get_then_check", + "-Aclippy::needless_borrows_for_generic_args", ] mysql-clippy = [ @@ -38,6 +42,7 @@ mysql-clippy = [ "-Aclippy::upper_case_acronyms", "-Aclippy::type_complexity", "-Aclippy::new_without_default", + "-Aclippy::unnecessary_get_then_check", ] [build] diff --git a/.github/workflows/external.yml b/.github/workflows/external.yml index 2ded81bc787b3..40faac1020070 100644 --- a/.github/workflows/external.yml +++ b/.github/workflows/external.yml @@ -127,4 +127,5 @@ jobs: runs-on: [ubuntu-latest] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # Pin v4.1.1 - - uses: mystenlabs/cargo-deny-action@main + - uses: taiki-e/install-action@cargo-deny + - run: cargo deny check diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 68ff61c03e218..b549b5639e485 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -375,7 +375,8 @@ jobs: runs-on: [ ubuntu-latest ] steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # Pin v4.1.1 - - uses: mystenlabs/cargo-deny-action@main + - uses: taiki-e/install-action@cargo-deny + - run: cargo deny check sui-excution-cut: name: cutting a new execution layer diff --git a/Cargo.lock b/Cargo.lock index 7d0bedcbdc523..9cec723dbb5e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,18 +100,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -257,15 +248,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anstream" version = "0.6.13" @@ -316,9 +298,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.81" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" dependencies = [ "backtrace", ] @@ -1064,12 +1046,13 @@ checksum = "62af46d040ba9df09edc6528dae9d8e49f5f3e82f55b7d2ec31a733c38dbc49d" [[package]] name = "atomicwrites" -version = "0.3.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb8f2cd6962fa53c0e2a9d3f97eaa7dbd1e3cbbeeb4745403515b42ae07b3ff6" +checksum = "fc7b2dbe9169059af0f821e811180fddc971fc210c776c133c7819ccd6e478db" dependencies = [ + "rustix 0.38.28", "tempfile", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1865,9 +1848,9 @@ dependencies = [ [[package]] name = "bimap" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bin-version" @@ -2172,13 +2155,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.1.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", - "once_cell", - "regex-automata 0.1.10", + "regex-automata 0.4.7", "serde", ] @@ -2301,9 +2283,9 @@ checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" [[package]] name = "camino" -version = "1.1.2" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -2325,7 +2307,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", ] @@ -2338,7 +2320,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "thiserror", @@ -2352,7 +2334,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "thiserror", @@ -2400,9 +2382,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.13.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a327683d7499ecc47369531a679fe38acdd300e09bf8c852d08b1e10558622bd" +checksum = "345c78335be0624ed29012dc10c49102196c6882c12dde65d9f35b02da2aada8" dependencies = [ "smallvec", "target-lexicon", @@ -2663,17 +2645,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "colored-diff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410208eb08c3f3ad44b95b51c4fc0d5993cbcc9dd39cfadb4214b9115a97dcb5" -dependencies = [ - "ansi_term", - "dissimilar", - "itertools 0.10.5", -] - [[package]] name = "combine" version = "4.6.6" @@ -3647,26 +3618,26 @@ dependencies = [ [[package]] name = "determinator" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c644b91adb5bcc66d3533607b6d3ee5c1c2d858d2d95e41dd6aae673e29e0509" +checksum = "bf14b901cdfba3f731d01c4c184100e85f586a272d38874824175b845dbaeaf9" dependencies = [ "camino", "globset", "guppy", "guppy-workspace-hack", "once_cell", - "petgraph 0.6.2", + "petgraph 0.6.5", "rayon", "serde", - "toml 0.5.10", + "toml 0.5.11", ] [[package]] name = "diesel" -version = "2.1.4" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62c6fcf842f17f8c78ecf7c81d75c5ce84436b41ee07e03f490fbb5f5a8731d8" +checksum = "65e13bab2796f412722112327f3e575601a3e9cdcbe426f0d30dbf43f3f5dc71" dependencies = [ "bitflags 2.4.1", "byteorder", @@ -3695,11 +3666,12 @@ dependencies = [ [[package]] name = "diesel_derives" -version = "2.1.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8337737574f55a468005a83499da720f20c65586241ffea339db9ecdfd2b44" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ "diesel_table_macro_syntax", + "dsl_auto_type", "proc-macro2 1.0.78", "quote 1.0.35", "syn 2.0.48", @@ -3707,9 +3679,9 @@ dependencies = [ [[package]] name = "diesel_migrations" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6036b3f0120c5961381b570ee20a02432d7e2d27ea60de9578799cf9156914ac" +checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" dependencies = [ "diesel", "migrations_internals", @@ -3718,9 +3690,9 @@ dependencies = [ [[package]] name = "diesel_table_macro_syntax" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5" +checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ "syn 2.0.48", ] @@ -3922,6 +3894,20 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +[[package]] +name = "dsl_auto_type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +dependencies = [ + "darling 0.20.3", + "either", + "heck 0.5.0", + "proc-macro2 1.0.78", + "quote 1.0.35", + "syn 2.0.48", +] + [[package]] name = "dunce" version = "1.0.4" @@ -4441,7 +4427,7 @@ dependencies = [ "chrono", "ethers-core", "reqwest 0.11.20", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "thiserror", @@ -4551,7 +4537,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "solang-parser", @@ -4734,7 +4720,7 @@ dependencies = [ "fastcrypto", "ff 0.13.0", "im", - "itertools 0.12.0", + "itertools 0.12.1", "lazy_static", "neptune", "num-bigint 0.4.4", @@ -5224,15 +5210,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ - "aho-corasick 0.7.20", + "aho-corasick", "bstr", - "fnv", "log", - "regex", + "regex-automata 0.4.7", + "regex-syntax 0.8.2", ] [[package]] @@ -5291,31 +5277,32 @@ dependencies = [ [[package]] name = "guppy" -version = "0.15.2" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f822a2716041492e071691606474f5a7e4fa7c2acbfd7da7b29884fb448291c7" +checksum = "3bff2f6a9d515cf6453282af93363f93bdf570792a6f4f619756e46696d773fa" dependencies = [ + "ahash 0.8.11", "camino", - "cargo_metadata 0.15.4", + "cargo_metadata 0.18.1", "cfg-if", "debug-ignore", "fixedbitset 0.4.2", "guppy-summaries", "guppy-workspace-hack", - "indexmap 1.9.3", - "itertools 0.10.5", + "indexmap 2.2.6", + "itertools 0.13.0", "nested", "once_cell", "pathdiff", - "petgraph 0.6.2", + "petgraph 0.6.5", "rayon", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "smallvec", "static_assertions", "target-spec", - "toml 0.5.10", + "toml 0.5.11", ] [[package]] @@ -5328,9 +5315,9 @@ dependencies = [ "cfg-if", "diffus", "guppy-workspace-hack", - "semver 1.0.16", + "semver 1.0.23", "serde", - "toml 0.5.10", + "toml 0.5.11", ] [[package]] @@ -5379,10 +5366,11 @@ dependencies = [ [[package]] name = "hakari" -version = "0.13.1" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2c76369039f6ac178748e96def487662aebbeb26d43070d01a0eadd53964994" +checksum = "12bd2b14c094d2793daf279eb7624f4525e26f555fbc1647613756cf83f44755" dependencies = [ + "ahash 0.8.11", "atomicwrites", "bimap", "camino", @@ -5393,15 +5381,15 @@ dependencies = [ "guppy-workspace-hack", "include_dir", "indenter", - "itertools 0.10.5", + "itertools 0.12.1", "owo-colors 3.5.0", "pathdiff", "rayon", "serde", "tabular", "target-spec", - "toml 0.5.10", - "toml_edit 0.15.0", + "toml 0.5.11", + "toml_edit 0.17.1", "twox-hash", ] @@ -6174,9 +6162,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -6479,7 +6467,7 @@ dependencies = [ "ena", "itertools 0.11.0", "lalrpop-util", - "petgraph 0.6.2", + "petgraph 0.6.5", "regex", "regex-syntax 0.8.2", "string_cache", @@ -6924,19 +6912,19 @@ dependencies = [ [[package]] name = "migrations_internals" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" +checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" dependencies = [ "serde", - "toml 0.7.4", + "toml 0.8.16", ] [[package]] name = "migrations_macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08" +checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" dependencies = [ "migrations_internals", "proc-macro2 1.0.78", @@ -7481,7 +7469,7 @@ dependencies = [ "serde_yaml 0.8.26", "sha2 0.9.9", "tempfile", - "toml 0.5.10", + "toml 0.5.11", "toml_edit 0.14.4", "treeline", "vfs", @@ -7515,7 +7503,7 @@ dependencies = [ "once_cell", "serde", "simplelog", - "toml 0.5.10", + "toml 0.5.11", ] [[package]] @@ -7822,7 +7810,7 @@ dependencies = [ "socket2 0.4.9", "tap", "tokio-util 0.7.10 (git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1)", - "toml 0.5.10", + "toml 0.5.11", "tracing", "tracing-subscriber", ] @@ -8417,7 +8405,7 @@ dependencies = [ [[package]] name = "nexlint" version = "0.1.0" -source = "git+https://github.com/nextest-rs/nexlint.git?rev=94da5c787636dad779c340affa65219134d127f5#94da5c787636dad779c340affa65219134d127f5" +source = "git+https://github.com/nextest-rs/nexlint.git?rev=7ce56bd591242a57660ed05f14ca2483c37d895b#7ce56bd591242a57660ed05f14ca2483c37d895b" dependencies = [ "camino", "debug-ignore", @@ -8432,17 +8420,17 @@ dependencies = [ [[package]] name = "nexlint-lints" version = "0.1.0" -source = "git+https://github.com/nextest-rs/nexlint.git?rev=94da5c787636dad779c340affa65219134d127f5#94da5c787636dad779c340affa65219134d127f5" +source = "git+https://github.com/nextest-rs/nexlint.git?rev=7ce56bd591242a57660ed05f14ca2483c37d895b#7ce56bd591242a57660ed05f14ca2483c37d895b" dependencies = [ "anyhow", "camino", - "colored-diff", + "diffy", "globset", "guppy", "nexlint", "regex", "serde", - "toml 0.5.10", + "toml 0.5.11", ] [[package]] @@ -8469,9 +8457,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", "cfg-if", @@ -8494,6 +8482,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom8" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" +dependencies = [ + "memchr", +] + [[package]] name = "nonempty" version = "0.9.0" @@ -9091,7 +9088,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" dependencies = [ "heck 0.4.1", - "itertools 0.12.0", + "itertools 0.12.1", "proc-macro2 1.0.78", "proc-macro2-diagnostics", "quote 1.0.35", @@ -9530,12 +9527,12 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 1.9.3", + "indexmap 2.2.6", ] [[package]] @@ -9745,16 +9742,16 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "pprof" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e20150f965e0e4c925982b9356da71c84bcd56cb66ef4e894825837cbcf6613e" +checksum = "ef5c97c51bd34c7e742402e216abdeb44d415fbe6ae41d56b114723e953711cb" dependencies = [ "backtrace", "cfg-if", "findshlibs", "libc", "log", - "nix 0.24.3", + "nix 0.26.4", "once_cell", "parking_lot 0.12.1", "smallvec", @@ -9892,7 +9889,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", - "toml 0.5.10", + "toml 0.5.11", ] [[package]] @@ -10079,7 +10076,7 @@ dependencies = [ "log", "multimap", "once_cell", - "petgraph 0.6.2", + "petgraph 0.6.5", "prettyplease", "prost 0.13.1", "prost-types 0.13.1", @@ -10540,7 +10537,7 @@ version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick", "memchr", "regex-automata 0.4.7", "regex-syntax 0.8.2", @@ -10561,7 +10558,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick", "memchr", "regex-syntax 0.8.2", ] @@ -11103,7 +11100,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.23", ] [[package]] @@ -11540,9 +11537,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] @@ -11576,9 +11573,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" dependencies = [ "serde_derive", ] @@ -11615,9 +11612,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -15225,7 +15222,7 @@ dependencies = [ "rand 0.8.5", "regex", "reqwest 0.12.5", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "serde_yaml 0.8.26", @@ -15272,7 +15269,7 @@ dependencies = [ "hex", "once_cell", "reqwest 0.11.20", - "semver 1.0.16", + "semver 1.0.23", "serde", "serde_json", "sha2 0.10.8", @@ -15283,9 +15280,9 @@ dependencies = [ [[package]] name = "symbolic-common" -version = "10.2.1" +version = "12.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b55cdc318ede251d0957f07afe5fed912119b8c1bc5a7804151826db999e737" +checksum = "26212dc7aeb75abb4cc84320a50dd482977089402f7b4043b454d6d79d8536e7" dependencies = [ "debugid", "memmap2", @@ -15295,9 +15292,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "10.2.1" +version = "12.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79be897be8a483a81fff6a3a4e195b4ac838ef73ca42d348b3f722da9902e489" +checksum = "76f1b0155f588568b2df0d693b30aeedb59360b647b85fc3c23942e81e8cc97a" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -15435,20 +15432,21 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.5" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "target-spec" -version = "1.3.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb0303f2cecb4171c439135b28c33fe9da7b9fd7816fe674761834da70c9778" +checksum = "419ccf3482090c626619fa2574290aaa00b696f9ab73af08fbf48260565431bf" dependencies = [ "cfg-expr", "guppy-workspace-hack", "serde", "target-lexicon", + "unicode-ident", ] [[package]] @@ -15948,9 +15946,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "indexmap 1.9.3", "serde", @@ -16010,13 +16008,13 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.15.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1541ba70885967e662f69d31ab3aeca7b1aaecfcd58679590b893e9239c3646" +checksum = "a34cc558345efd7e88b9eda9626df2138b80bb46a7606f695e751c892bc7dac6" dependencies = [ - "combine", "indexmap 1.9.3", "itertools 0.10.5", + "nom8", "toml_datetime 0.5.1", ] @@ -16622,9 +16620,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-linebreak" @@ -16902,19 +16900,20 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", @@ -16939,9 +16938,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote 1.0.35", "wasm-bindgen-macro-support", @@ -16949,9 +16948,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -16962,9 +16961,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" diff --git a/Cargo.toml b/Cargo.toml index 35176bf63b231..2d175748d0d4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -237,6 +237,9 @@ overflow-checks = true # opt-level 1 gives >5x speedup for simulator tests without slowing down build times very much. opt-level = 1 +[workspace.lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(msim)', 'cfg(fail_points)'] } + # Dependencies that should be kept in sync through the whole workspace [workspace.dependencies] anyhow = "1.0.71" @@ -345,7 +348,6 @@ hashbrown = "0.12" hdrhistogram = "7.5.1" hex = "0.4.3" hex-literal = "0.3.4" -highlight = "all" http = "1" http-body = "1" humantime = "2.1.0" @@ -384,8 +386,8 @@ more-asserts = "0.3.1" msim = { git = "https://github.com/MystenLabs/mysten-sim.git", rev = "b320996d8dfb99b273fe31c0222c659332283c99", package = "msim" } msim-macros = { git = "https://github.com/MystenLabs/mysten-sim.git", rev = "b320996d8dfb99b273fe31c0222c659332283c99", package = "msim-macros" } multiaddr = "0.17.0" -nexlint = { git = "https://github.com/nextest-rs/nexlint.git", rev = "94da5c787636dad779c340affa65219134d127f5" } -nexlint-lints = { git = "https://github.com/nextest-rs/nexlint.git", rev = "94da5c787636dad779c340affa65219134d127f5" } +nexlint = { git = "https://github.com/nextest-rs/nexlint.git", rev = "7ce56bd591242a57660ed05f14ca2483c37d895b" } +nexlint-lints = { git = "https://github.com/nextest-rs/nexlint.git", rev = "7ce56bd591242a57660ed05f14ca2483c37d895b" } nonempty = "0.9.0" notify = "6.1.1" ntest = "0.9.0" @@ -398,12 +400,12 @@ ouroboros = "0.17" parking_lot = "0.12.1" parquet = "52" pkcs8 = { version = "0.9.0", features = ["std"] } -pprof = { version = "0.11.0", features = ["cpp", "frame-pointer"] } +pprof = { version = "0.13.0", features = ["cpp", "frame-pointer"] } pretty_assertions = "1.3.0" prettytable-rs = "0.10.0" proc-macro2 = "1.0.47" prometheus = "0.13.3" -prometheus-http-query = { version = "0.8", default_features = false, features = [ +prometheus-http-query = { version = "0.8", default-features = false, features = [ "rustls-tls", ] } prometheus-parse = { git = "https://github.com/asonnino/prometheus-parser.git", rev = "75334db" } @@ -418,7 +420,7 @@ rand = "0.8.5" rayon = "1.5.3" rcgen = "0.13" regex = "1.7.1" -reqwest = { version = "0.12", default_features = false, features = [ +reqwest = { version = "0.12", default-features = false, features = [ "http2", "json", "rustls-tls", @@ -426,10 +428,10 @@ reqwest = { version = "0.12", default_features = false, features = [ roaring = "0.10.6" ron = "0.8.0" rstest = "0.16.0" -rusoto_core = { version = "0.48.0", default_features = false, features = [ +rusoto_core = { version = "0.48.0", default-features = false, features = [ "rustls", ] } -rusoto_kms = { version = "0.48.0", default_features = false, features = [ +rusoto_kms = { version = "0.48.0", default-features = false, features = [ "rustls", ] } russh = "0.38.0" diff --git a/consensus/config/Cargo.toml b/consensus/config/Cargo.toml index aeb3978f12301..48697e2f7e91b 100644 --- a/consensus/config/Cargo.toml +++ b/consensus/config/Cargo.toml @@ -6,6 +6,9 @@ authors = ["Mysten Labs "] edition = "2021" publish = false +[lints] +workspace = true + [dependencies] fastcrypto.workspace = true mysten-network.workspace = true diff --git a/consensus/core/Cargo.toml b/consensus/core/Cargo.toml index 067901f002a16..2cb277834c9b2 100644 --- a/consensus/core/Cargo.toml +++ b/consensus/core/Cargo.toml @@ -6,6 +6,9 @@ authors = ["Mysten Labs "] edition = "2021" publish = false +[lints] +workspace = true + [dependencies] anemo.workspace = true anemo-tower.workspace = true diff --git a/consensus/core/src/authority_service.rs b/consensus/core/src/authority_service.rs index c1c38f9dfbfb6..94fa311e01a6b 100644 --- a/consensus/core/src/authority_service.rs +++ b/consensus/core/src/authority_service.rs @@ -133,7 +133,7 @@ impl NetworkService for AuthorityService { .metrics .node_metrics .rejected_future_blocks - .with_label_values(&[&peer_hostname]) + .with_label_values(&[peer_hostname]) .inc(); debug!( "Block {:?} timestamp ({} > {}) is too far in the future, rejected.", @@ -157,7 +157,7 @@ impl NetworkService for AuthorityService { .metrics .node_metrics .block_timestamp_drift_wait_ms - .with_label_values(&[peer_hostname, &"handle_send_block"]) + .with_label_values(&[peer_hostname, "handle_send_block"]) .inc_by(forward_time_drift.as_millis() as u64); debug!( "Block {:?} timestamp ({} > {}) is in the future, waiting for {}ms", @@ -192,7 +192,7 @@ impl NetworkService for AuthorityService { .metrics .node_metrics .rejected_blocks - .with_label_values(&[&"commit_lagging"]) + .with_label_values(&["commit_lagging"]) .inc(); debug!( "Block {:?} is rejected because last commit index is lagging quorum commit index too much ({} < {})", @@ -213,7 +213,7 @@ impl NetworkService for AuthorityService { .metrics .node_metrics .verified_blocks - .with_label_values(&[&peer_hostname]) + .with_label_values(&[peer_hostname]) .inc(); let missing_ancestors = self diff --git a/consensus/core/src/block_verifier.rs b/consensus/core/src/block_verifier.rs index 4d68f476455fe..2e876e9130f0b 100644 --- a/consensus/core/src/block_verifier.rs +++ b/consensus/core/src/block_verifier.rs @@ -206,6 +206,7 @@ impl BlockVerifier for SignedBlockVerifier { } } +#[allow(unused)] pub(crate) struct NoopBlockVerifier; impl BlockVerifier for NoopBlockVerifier { diff --git a/consensus/core/src/commit_observer.rs b/consensus/core/src/commit_observer.rs index f5c996687c029..a25113de387fb 100644 --- a/consensus/core/src/commit_observer.rs +++ b/consensus/core/src/commit_observer.rs @@ -23,14 +23,16 @@ use crate::{ /// Role of CommitObserver /// - Called by core when try_commit() returns newly committed leaders. /// - The newly committed leaders are sent to commit observer and then commit observer -/// gets subdags for each leader via the commit interpreter (linearizer) +/// gets subdags for each leader via the commit interpreter (linearizer) /// - The committed subdags are sent as consensus output via an unbounded tokio channel. +/// /// No back pressure mechanism is needed as backpressure is handled as input into /// consenus. +/// /// - Commit metadata including index is persisted in store, before the CommittedSubDag -/// is sent to the consumer. +/// is sent to the consumer. /// - When CommitObserver is initialized a last processed commit index can be used -/// to ensure any missing commits are re-sent. +/// to ensure any missing commits are re-sent. pub(crate) struct CommitObserver { context: Arc, /// Component to deterministically collect subdags for committed leaders. diff --git a/consensus/core/src/commit_syncer.rs b/consensus/core/src/commit_syncer.rs index 3594548eaa95e..f4ecf4fa2f951 100644 --- a/consensus/core/src/commit_syncer.rs +++ b/consensus/core/src/commit_syncer.rs @@ -567,7 +567,7 @@ impl CommitSyncer { .metrics .node_metrics .block_timestamp_drift_wait_ms - .with_label_values(&[peer_hostname, &"commit_syncer"]) + .with_label_values(&[peer_hostname, "commit_syncer"]) .inc_by(forward_drift); let forward_drift = Duration::from_millis(forward_drift); if forward_drift >= inner.context.parameters.max_forward_time_drift { diff --git a/consensus/core/src/dag_state.rs b/consensus/core/src/dag_state.rs index 5ebac04a585a1..aa7f3ca718f28 100644 --- a/consensus/core/src/dag_state.rs +++ b/consensus/core/src/dag_state.rs @@ -307,7 +307,7 @@ impl DagState { .metrics .node_metrics .dag_state_store_read_count - .with_label_values(&[&"get_blocks"]) + .with_label_values(&["get_blocks"]) .inc(); for ((index, _), result) in missing.into_iter().zip(store_results.into_iter()) { @@ -556,7 +556,7 @@ impl DagState { .metrics .node_metrics .dag_state_store_read_count - .with_label_values(&[&"contains_blocks"]) + .with_label_values(&["contains_blocks"]) .inc(); for ((index, _), result) in missing.into_iter().zip(store_results.into_iter()) { diff --git a/consensus/core/src/leader_scoring.rs b/consensus/core/src/leader_scoring.rs index eaafbcc439e00..380003debd37d 100644 --- a/consensus/core/src/leader_scoring.rs +++ b/consensus/core/src/leader_scoring.rs @@ -41,7 +41,7 @@ pub(crate) struct ReputationScoreCalculator<'a> { impl<'a> ReputationScoreCalculator<'a> { pub(crate) fn new( context: Arc, - unscored_subdags: &Vec, + unscored_subdags: &[CommittedSubDag], scoring_strategy: &'a dyn ScoringStrategy, ) -> Self { let num_authorities = context.committee.size(); diff --git a/consensus/core/src/leader_scoring_strategy.rs b/consensus/core/src/leader_scoring_strategy.rs index b635f5f474cd0..640e3667cd71c 100644 --- a/consensus/core/src/leader_scoring_strategy.rs +++ b/consensus/core/src/leader_scoring_strategy.rs @@ -10,6 +10,7 @@ use crate::{ stake_aggregator::{QuorumThreshold, StakeAggregator}, }; +#[allow(unused)] pub(crate) trait ScoringStrategy: Send + Sync { fn calculate_scores_for_leader(&self, subdag: &UnscoredSubdag, leader_slot: Slot) -> Vec; diff --git a/consensus/core/src/network/network_tests.rs b/consensus/core/src/network/network_tests.rs index d8113befb6b3a..cef1ff8530c54 100644 --- a/consensus/core/src/network/network_tests.rs +++ b/consensus/core/src/network/network_tests.rs @@ -31,7 +31,11 @@ trait ManagerBuilder { struct AnemoManagerBuilder {} impl ManagerBuilder for AnemoManagerBuilder { - fn build(&self, context: Arc, network_keypair: NetworkKeyPair) -> AnemoManager { + fn build( + &self, + context: Arc, + network_keypair: NetworkKeyPair, + ) -> impl NetworkManager> { AnemoManager::new(context, network_keypair) } } @@ -39,7 +43,11 @@ impl ManagerBuilder for AnemoManagerBuilder { struct TonicManagerBuilder {} impl ManagerBuilder for TonicManagerBuilder { - fn build(&self, context: Arc, network_keypair: NetworkKeyPair) -> TonicManager { + fn build( + &self, + context: Arc, + network_keypair: NetworkKeyPair, + ) -> impl NetworkManager> { TonicManager::new(context, network_keypair) } } diff --git a/consensus/core/src/stake_aggregator.rs b/consensus/core/src/stake_aggregator.rs index 7e907dee1fcb8..11501319e64e9 100644 --- a/consensus/core/src/stake_aggregator.rs +++ b/consensus/core/src/stake_aggregator.rs @@ -11,6 +11,7 @@ pub(crate) trait CommitteeThreshold { pub(crate) struct QuorumThreshold; +#[allow(unused)] pub(crate) struct ValidityThreshold; impl CommitteeThreshold for QuorumThreshold { diff --git a/consensus/core/src/storage/mem_store.rs b/consensus/core/src/storage/mem_store.rs index 2a88fc5bd71ad..ad23cd3652cee 100644 --- a/consensus/core/src/storage/mem_store.rs +++ b/consensus/core/src/storage/mem_store.rs @@ -20,10 +20,12 @@ use crate::{ }; /// In-memory storage for testing. +#[allow(unused)] pub(crate) struct MemStore { inner: RwLock, } +#[allow(unused)] struct Inner { blocks: BTreeMap<(Round, AuthorityIndex, BlockDigest), VerifiedBlock>, digests_by_authorities: BTreeSet<(AuthorityIndex, Round, BlockDigest)>, diff --git a/consensus/core/src/storage/mod.rs b/consensus/core/src/storage/mod.rs index 5c524be30318e..38258c87e8420 100644 --- a/consensus/core/src/storage/mod.rs +++ b/consensus/core/src/storage/mod.rs @@ -17,6 +17,7 @@ use crate::{ }; /// A common interface for consensus storage. +#[allow(unused)] pub(crate) trait Store: Send + Sync { /// Writes blocks, consensus commits and other data to store atomically. fn write(&self, write_batch: WriteBatch) -> ConsensusResult<()>; diff --git a/consensus/core/src/subscriber.rs b/consensus/core/src/subscriber.rs index bce04247c7a1d..7b350debf313c 100644 --- a/consensus/core/src/subscriber.rs +++ b/consensus/core/src/subscriber.rs @@ -152,7 +152,7 @@ impl Subscriber { .metrics .node_metrics .subscriber_connection_attempts - .with_label_values(&[&peer_hostname, "success"]) + .with_label_values(&[peer_hostname, "success"]) .inc(); blocks } @@ -162,7 +162,7 @@ impl Subscriber { .metrics .node_metrics .subscriber_connection_attempts - .with_label_values(&[&peer_hostname, "failure"]) + .with_label_values(&[peer_hostname, "failure"]) .inc(); continue 'subscription; } @@ -184,7 +184,7 @@ impl Subscriber { .metrics .node_metrics .subscribed_blocks - .with_label_values(&[&peer_hostname]) + .with_label_values(&[peer_hostname]) .inc(); let result = authority_service .handle_send_block(peer, block.clone()) diff --git a/consensus/core/src/synchronizer.rs b/consensus/core/src/synchronizer.rs index e3bc24c2e2b07..09193b7d06742 100644 --- a/consensus/core/src/synchronizer.rs +++ b/consensus/core/src/synchronizer.rs @@ -537,13 +537,13 @@ impl Synchronizer usize; } -/// Like `MallocSizeOf`, but only measures if the value hasn't already been -/// measured. For use with types like `Rc` and `Arc` when appropriate (e.g. -/// when there is no "primary" reference). -pub trait MallocConditionalSizeOf { - /// Measure the heap usage of all heap-allocated descendant structures, but - /// not the space taken up by the value itself, and only if that heap usage - /// hasn't already been measured. - fn conditional_size_of(&self, ops: &mut MallocSizeOfOps) -> usize; -} - -/// `MallocConditionalSizeOf` combined with `MallocShallowSizeOf`. -pub trait MallocConditionalShallowSizeOf { - /// `conditional_size_of` combined with `shallow_size_of`. - fn conditional_shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize; -} - impl<'a, T: ?Sized> MallocSizeOf for &'a T { fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize { // Zero makes sense for a non-owning reference. @@ -510,11 +492,6 @@ where // impl !MallocSizeOf for Arc { } // impl !MallocShallowSizeOf for Arc { } -#[cfg(feature = "std")] -fn arc_ptr(s: &Arc) -> *const T { - &(**s) as *const T -} - #[cfg(feature = "std")] impl MallocUnconditionalSizeOf for Arc { fn unconditional_size_of(&self, ops: &mut MallocSizeOfOps) -> usize { @@ -522,28 +499,6 @@ impl MallocUnconditionalSizeOf for Arc { } } -#[cfg(feature = "std")] -impl MallocConditionalShallowSizeOf for Arc { - fn conditional_shallow_size_of(&self, ops: &mut MallocSizeOfOps) -> usize { - if ops.have_seen_ptr(arc_ptr(self)) { - 0 - } else { - self.unconditional_shallow_size_of(ops) - } - } -} - -#[cfg(feature = "std")] -impl MallocConditionalSizeOf for Arc { - fn conditional_size_of(&self, ops: &mut MallocSizeOfOps) -> usize { - if ops.have_seen_ptr(arc_ptr(self)) { - 0 - } else { - self.unconditional_size_of(ops) - } - } -} - /// If a mutex is stored directly as a member of a data type that is being measured, /// it is the unique owner of its contents and deserves to be measured. /// @@ -724,26 +679,6 @@ where } } -#[cfg(feature = "lru")] -impl MallocSizeOf for lru::LruCache -where - K: MallocSizeOf + rstd::cmp::Eq + rstd::hash::Hash, - V: MallocSizeOf, - S: rstd::hash::BuildHasher, -{ - fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { - let mut n = 0; - if let (Some(k), Some(v)) = (K::constant_size(), V::constant_size()) { - n += self.len() * (k + v) - } else { - n = self - .iter() - .fold(n, |acc, (k, v)| acc + k.size_of(ops) + v.size_of(ops)) - } - n - } -} - malloc_size_of_is_0!( [u8; 1], [u8; 2], [u8; 3], [u8; 4], [u8; 5], [u8; 6], [u8; 7], [u8; 8], [u8; 9], [u8; 10], [u8; 11], [u8; 12], [u8; 13], [u8; 14], [u8; 15], [u8; 16], [u8; 17], [u8; 18], [u8; 19], diff --git a/crates/mysten-util-mem/tests/derive.rs b/crates/mysten-util-mem/tests/derive.rs index 0beeb6fb11c47..ed4b0196b1978 100644 --- a/crates/mysten-util-mem/tests/derive.rs +++ b/crates/mysten-util-mem/tests/derive.rs @@ -55,27 +55,6 @@ fn derive_ignore() { assert!(t.malloc_size_of() < 3000); } -#[test] -#[cfg(all(feature = "lru", feature = "hashbrown"))] -fn derive_morecomplex() { - #[derive(MallocSizeOf)] - struct Trivia { - hm: hashbrown::HashMap>, - cache: lru::LruCache>, - } - - let mut t = Trivia { - hm: hashbrown::HashMap::new(), - cache: lru::LruCache::unbounded(), - }; - - t.hm.insert(1, vec![0u8; 2048]); - t.cache.put(1, vec![0u8; 2048]); - t.cache.put(2, vec![0u8; 4096]); - - assert!(t.malloc_size_of() > 8000); -} - #[test] fn derive_tuple() { #[derive(MallocSizeOf)] diff --git a/crates/sui-archival/src/lib.rs b/crates/sui-archival/src/lib.rs index 1dbcd632c254d..bdc5b6b3ab18a 100644 --- a/crates/sui-archival/src/lib.rs +++ b/crates/sui-archival/src/lib.rs @@ -61,6 +61,7 @@ use tracing::{error, info}; /// - epoch_1/ /// - 101000.chk /// - ... +/// /// Blob File Disk Format ///┌──────────────────────────────┐ ///│ magic <4 byte> │ diff --git a/crates/sui-aws-orchestrator/src/settings.rs b/crates/sui-aws-orchestrator/src/settings.rs index 8eaca609aa3a8..be4b17d3ca10e 100644 --- a/crates/sui-aws-orchestrator/src/settings.rs +++ b/crates/sui-aws-orchestrator/src/settings.rs @@ -121,7 +121,6 @@ impl Settings { .path_segments() .expect("Url should already be checked when loading settings") .collect::>()[1] - .to_string() .split('.') .next() .unwrap() diff --git a/crates/sui-benchmark/Cargo.toml b/crates/sui-benchmark/Cargo.toml index 54a9362e4675b..daad4d2158c51 100644 --- a/crates/sui-benchmark/Cargo.toml +++ b/crates/sui-benchmark/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] async-trait.workspace = true anyhow = { workspace = true, features = ["backtrace"] } diff --git a/crates/sui-benchmark/src/embedded_reconfig_observer.rs b/crates/sui-benchmark/src/embedded_reconfig_observer.rs index 9976491327bfd..42df82d81ce3b 100644 --- a/crates/sui-benchmark/src/embedded_reconfig_observer.rs +++ b/crates/sui-benchmark/src/embedded_reconfig_observer.rs @@ -23,6 +23,7 @@ use tracing::{error, info, trace}; /// and we happen to have a big committee rotation, it may /// fail to get quorum on the latest committee info from /// demissioned validators and then stop working. +/// /// Background: this is a temporary solution for stress before /// we see fullnode reconfiguration stabilizes. #[derive(Clone, Default)] diff --git a/crates/sui-bridge-cli/src/lib.rs b/crates/sui-bridge-cli/src/lib.rs index 3cafe745d4c9b..eacd3ca431f2c 100644 --- a/crates/sui-bridge-cli/src/lib.rs +++ b/crates/sui-bridge-cli/src/lib.rs @@ -313,7 +313,7 @@ pub fn make_action(chain_id: BridgeChainId, cmd: &GovernanceClientCommands) -> B } } -fn encode_call_data(function_selector: &str, params: &Vec) -> Vec { +fn encode_call_data(function_selector: &str, params: &[String]) -> Vec { let left = function_selector .find('(') .expect("Invalid function selector, no left parentheses"); diff --git a/crates/sui-bridge/src/types.rs b/crates/sui-bridge/src/types.rs index e722a79c65eea..4fb157254a5a4 100644 --- a/crates/sui-bridge/src/types.rs +++ b/crates/sui-bridge/src/types.rs @@ -354,7 +354,7 @@ impl BridgeAction { // Digest of BridgeAction (with Keccak256 hasher) pub fn digest(&self) -> BridgeActionDigest { let mut hasher = Keccak256::default(); - hasher.update(&self.to_bytes()); + hasher.update(self.to_bytes()); BridgeActionDigest::new(hasher.finalize().into()) } diff --git a/crates/sui-config/Cargo.toml b/crates/sui-config/Cargo.toml index 87f5ab16a33ad..9704c09230224 100644 --- a/crates/sui-config/Cargo.toml +++ b/crates/sui-config/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anemo.workspace = true anyhow = { workspace = true, features = ["backtrace"] } diff --git a/crates/sui-config/src/node.rs b/crates/sui-config/src/node.rs index ff87d1c8cc506..9637ffe4e2be8 100644 --- a/crates/sui-config/src/node.rs +++ b/crates/sui-config/src/node.rs @@ -19,7 +19,6 @@ use std::num::NonZeroUsize; use std::path::{Path, PathBuf}; use std::sync::Arc; use std::time::Duration; -use std::usize; use sui_keys::keypair_file::{read_authority_keypair_from_file, read_keypair_from_file}; use sui_types::base_types::{ObjectID, SuiAddress}; use sui_types::committee::EpochId; diff --git a/crates/sui-config/src/p2p.rs b/crates/sui-config/src/p2p.rs index 4be9e93ddde90..7b7b4ba59198d 100644 --- a/crates/sui-config/src/p2p.rs +++ b/crates/sui-config/src/p2p.rs @@ -267,6 +267,7 @@ impl StateSyncConfig { /// * If the node marks itself as Private, only nodes that have it in /// their `allowlisted_peers` or `seed_peers` will try to connect to it. /// * If not set, defaults to Public. +/// /// AccessType is useful when a network of nodes want to stay private. To achieve this, /// mark every node in this network as `Private` and allowlist/seed them to each other. #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] diff --git a/crates/sui-core/Cargo.toml b/crates/sui-core/Cargo.toml index a2103140851db..2c596b502a54b 100644 --- a/crates/sui-core/Cargo.toml +++ b/crates/sui-core/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow = { workspace = true, features = ["backtrace"] } arc-swap.workspace = true diff --git a/crates/sui-core/src/authority.rs b/crates/sui-core/src/authority.rs index 409a9f67f8de4..c94076206a994 100644 --- a/crates/sui-core/src/authority.rs +++ b/crates/sui-core/src/authority.rs @@ -3651,12 +3651,12 @@ impl AuthorityState { .rev() .skip_while(|d| cursor.is_some() && Some(*d) != cursor) .skip(usize::from(cursor.is_some())); - return Ok(iter.take(limit.unwrap_or(usize::max_value())).collect()); + return Ok(iter.take(limit.unwrap_or(usize::MAX)).collect()); } else { let iter = iter .skip_while(|d| cursor.is_some() && Some(*d) != cursor) .skip(usize::from(cursor.is_some())); - return Ok(iter.take(limit.unwrap_or(usize::max_value())).collect()); + return Ok(iter.take(limit.unwrap_or(usize::MAX)).collect()); } } self.get_indexes()? @@ -5469,7 +5469,6 @@ impl NodeStateDump { Ok(path) } - #[cfg(not(release))] pub fn read_from_file(path: &PathBuf) -> Result { let file = File::open(path)?; serde_json::from_reader(file).map_err(|e| anyhow::anyhow!(e)) diff --git a/crates/sui-core/src/authority/authority_per_epoch_store.rs b/crates/sui-core/src/authority/authority_per_epoch_store.rs index 367e77965d1d7..9e922112eff57 100644 --- a/crates/sui-core/src/authority/authority_per_epoch_store.rs +++ b/crates/sui-core/src/authority/authority_per_epoch_store.rs @@ -125,8 +125,8 @@ pub(crate) type EncG = bls12381::G2Element; // CertLockGuard and CertTxGuard are functionally identical right now, but we retain a distinction // anyway. If we need to support distributed object storage, having this distinction will be // useful, as we will most likely have to re-implement a retry / write-ahead-log at that point. -pub struct CertLockGuard(MutexGuard); -pub struct CertTxGuard(CertLockGuard); +pub struct CertLockGuard(#[allow(unused)] MutexGuard); +pub struct CertTxGuard(#[allow(unused)] CertLockGuard); impl CertTxGuard { pub fn release(self) {} @@ -370,15 +370,15 @@ pub struct AuthorityEpochTables { /// The tables below manage shared object locks / versions. There are three ways they can be /// updated: /// 1. (validators only): Upon receiving a certified transaction from consensus, the authority - /// assigns the next version to each shared object of the transaction. The next versions of - /// the shared objects are updated as well. + /// assigns the next version to each shared object of the transaction. The next versions of + /// the shared objects are updated as well. /// 2. (validators only): Upon receiving a new consensus commit, the authority assigns the - /// next version of the randomness state object to an expected future transaction to be - /// generated after the next random value is available. The next version of the randomness - /// state object is updated as well. + /// next version of the randomness state object to an expected future transaction to be + /// generated after the next random value is available. The next version of the randomness + /// state object is updated as well. /// 3. (fullnodes + validators): Upon receiving a certified effect from state sync, or - /// transaction orchestrator fast execution path, the node assigns the shared object - /// versions from the transaction effect. Next object versions are not updated. + /// transaction orchestrator fast execution path, the node assigns the shared object + /// versions from the transaction effect. Next object versions are not updated. /// /// REQUIRED: all authorities must assign the same shared object versions for each transaction. assigned_shared_object_versions: DBMap>, diff --git a/crates/sui-core/src/authority/authority_store_pruner.rs b/crates/sui-core/src/authority/authority_store_pruner.rs index aca327f15f5a2..17f34f5755f89 100644 --- a/crates/sui-core/src/authority/authority_store_pruner.rs +++ b/crates/sui-core/src/authority/authority_store_pruner.rs @@ -1152,6 +1152,8 @@ mod pprof_tests { } #[tokio::test] + // un-ignore once https://github.com/tikv/pprof-rs/issues/250 is fixed + #[ignore] async fn ensure_no_tombstone_fragmentation_in_stack_frame_with_ignore_tombstones( ) -> Result<(), anyhow::Error> { // This test writes a bunch of objects to objects table, invokes pruning on it and @@ -1188,6 +1190,8 @@ mod pprof_tests { } #[tokio::test] + // un-ignore once https://github.com/tikv/pprof-rs/issues/250 is fixed + #[ignore] async fn ensure_no_tombstone_fragmentation_in_stack_frame_after_flush( ) -> Result<(), anyhow::Error> { // This test writes a bunch of objects to objects table, invokes pruning on it and diff --git a/crates/sui-core/src/authority/authority_store_tables.rs b/crates/sui-core/src/authority/authority_store_tables.rs index d61187a3050d3..db8394b2de2d5 100644 --- a/crates/sui-core/src/authority/authority_store_tables.rs +++ b/crates/sui-core/src/authority/authority_store_tables.rs @@ -71,9 +71,10 @@ pub struct AuthorityPerpetualTables { /// A map between the transaction digest of a certificate to the effects of its execution. /// We store effects into this table in two different cases: /// 1. When a transaction is synced through state_sync, we store the effects here. These effects - /// are known to be final in the network, but may not have been executed locally yet. + /// are known to be final in the network, but may not have been executed locally yet. /// 2. When the transaction is executed locally on this node, we store the effects here. This means that - /// it's possible to store the same effects twice (once for the synced transaction, and once for the executed). + /// it's possible to store the same effects twice (once for the synced transaction, and once for the executed). + /// /// It's also possible for the effects to be reverted if the transaction didn't make it into the epoch. #[default_options_override_fn = "effects_table_default_config"] pub(crate) effects: DBMap, diff --git a/crates/sui-core/src/authority/shared_object_congestion_tracker.rs b/crates/sui-core/src/authority/shared_object_congestion_tracker.rs index 4732afe4b7399..041e523594074 100644 --- a/crates/sui-core/src/authority/shared_object_congestion_tracker.rs +++ b/crates/sui-core/src/authority/shared_object_congestion_tracker.rs @@ -78,9 +78,7 @@ impl SharedObjectCongestionTracker { previously_deferred_tx_digests: &HashMap, commit_round: Round, ) -> Option<(DeferralKey, Vec)> { - let Some(tx_cost) = self.get_tx_cost(cert) else { - return None; - }; + let tx_cost = self.get_tx_cost(cert)?; let shared_input_objects: Vec<_> = cert.shared_input_objects().collect(); if shared_input_objects.is_empty() { diff --git a/crates/sui-core/src/authority/test_authority_builder.rs b/crates/sui-core/src/authority/test_authority_builder.rs index a1fc9c40020c8..6ba9dd32d4801 100644 --- a/crates/sui-core/src/authority/test_authority_builder.rs +++ b/crates/sui-core/src/authority/test_authority_builder.rs @@ -227,10 +227,7 @@ impl<'a> TestAuthorityBuilder<'a> { epoch_flags, ) .unwrap(); - let expensive_safety_checks = match self.expensive_safety_checks { - None => ExpensiveSafetyCheckConfig::default(), - Some(config) => config, - }; + let expensive_safety_checks = self.expensive_safety_checks.unwrap_or_default(); let cache_traits = build_execution_cache(&epoch_start_configuration, ®istry, &authority_store); diff --git a/crates/sui-core/src/authority_aggregator.rs b/crates/sui-core/src/authority_aggregator.rs index 65955171bcbec..8365a2064fb3b 100644 --- a/crates/sui-core/src/authority_aggregator.rs +++ b/crates/sui-core/src/authority_aggregator.rs @@ -277,6 +277,7 @@ pub enum AggregatorProcessCertificateError { } pub fn group_errors(errors: Vec<(SuiError, Vec, StakeUnit)>) -> GroupedErrors { + #[allow(clippy::mutable_key_type)] let mut grouped_errors = HashMap::new(); for (error, names, stake) in errors { let entry = grouped_errors.entry(error).or_insert((0, vec![])); diff --git a/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs b/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs index b1872a9f21723..fd0a9c90a34d8 100644 --- a/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs +++ b/crates/sui-core/src/checkpoints/checkpoint_executor/mod.rs @@ -94,7 +94,7 @@ pub struct CheckpointTimeoutConfig { // the function is still very cheap to call so this is okay. thread_local! { static SCHEDULING_TIMEOUT: once_cell::sync::OnceCell = - once_cell::sync::OnceCell::new(); + const { once_cell::sync::OnceCell::new() }; } #[cfg(msim)] diff --git a/crates/sui-core/src/consensus_adapter.rs b/crates/sui-core/src/consensus_adapter.rs index 8b33d8031fac7..f67388061656c 100644 --- a/crates/sui-core/src/consensus_adapter.rs +++ b/crates/sui-core/src/consensus_adapter.rs @@ -1029,12 +1029,12 @@ impl<'a> InflightDropGuard<'a> { adapter .metrics .sequencing_certificate_inflight - .with_label_values(&[&tx_type]) + .with_label_values(&[tx_type]) .inc(); adapter .metrics .sequencing_certificate_attempt - .with_label_values(&[&tx_type]) + .with_label_values(&[tx_type]) .inc(); Self { adapter, diff --git a/crates/sui-core/src/rest_index.rs b/crates/sui-core/src/rest_index.rs index e999cfe2abc2e..ade98f8ada4dd 100644 --- a/crates/sui-core/src/rest_index.rs +++ b/crates/sui-core/src/rest_index.rs @@ -114,9 +114,9 @@ struct IndexStoreTables { /// /// A few uses for this singleton: /// - determining if the DB has been initialized (as some tables will still be empty post - /// initializatio) + /// initialization) /// - version of the DB. Everytime a new table or schema is changed the version number needs to - /// be incremented. + /// be incremented. meta: DBMap<(), MetadataInfo>, /// An index of extra metadata for Transactions. diff --git a/crates/sui-core/src/transaction_manager.rs b/crates/sui-core/src/transaction_manager.rs index 5accb919a8680..d7796b69edbc2 100644 --- a/crates/sui-core/src/transaction_manager.rs +++ b/crates/sui-core/src/transaction_manager.rs @@ -62,6 +62,7 @@ pub struct TransactionManager { #[derive(Clone, Debug)] pub struct PendingCertificateStats { // The time this certificate enters transaction manager. + #[allow(unused)] pub enqueue_time: Instant, // The time this certificate becomes ready for execution. pub ready_time: Option, @@ -966,9 +967,7 @@ impl TransactionQueue { /// After removing the digest, first() will return the new oldest entry /// in the queue (which may be unchanged). fn remove(&mut self, digest: &TransactionDigest) -> Option { - let Some(when) = self.digests.remove(digest) else { - return None; - }; + let when = self.digests.remove(digest)?; // This loop removes all previously inserted entries that no longer // correspond to live entries in self.digests. When the loop terminates, diff --git a/crates/sui-core/src/unit_tests/authority_aggregator_tests.rs b/crates/sui-core/src/unit_tests/authority_aggregator_tests.rs index cef3075a2e93f..cc3ffa82fb08e 100644 --- a/crates/sui-core/src/unit_tests/authority_aggregator_tests.rs +++ b/crates/sui-core/src/unit_tests/authority_aggregator_tests.rs @@ -693,7 +693,7 @@ fn get_genesis_agg( .build_custom_clients(clients) } -fn get_agg_at_epoch( +fn get_agg_at_epoch( authorities: BTreeMap, clients: BTreeMap, epoch: EpochId, diff --git a/crates/sui-core/src/unit_tests/execution_driver_tests.rs b/crates/sui-core/src/unit_tests/execution_driver_tests.rs index e9a5f381dceeb..a138886c4f6a7 100644 --- a/crates/sui-core/src/unit_tests/execution_driver_tests.rs +++ b/crates/sui-core/src/unit_tests/execution_driver_tests.rs @@ -46,7 +46,7 @@ use tokio::time::{sleep, timeout}; #[allow(dead_code)] async fn wait_for_certs( stream: &mut UnboundedReceiver, - certs: &Vec, + certs: &[VerifiedCertificate], ) { if certs.is_empty() { if timeout(Duration::from_secs(30), stream.recv()) diff --git a/crates/sui-e2e-tests/Cargo.toml b/crates/sui-e2e-tests/Cargo.toml index 4d7e294f06c75..970458f3a9e94 100644 --- a/crates/sui-e2e-tests/Cargo.toml +++ b/crates/sui-e2e-tests/Cargo.toml @@ -6,6 +6,9 @@ publish = false edition = "2021" version.workspace = true +[lints] +workspace = true + [dependencies] [dev-dependencies] @@ -67,4 +70,4 @@ passkey-client.workspace = true passkey-authenticator.workspace = true coset.workspace = true url.workspace = true -p256.workspace = true \ No newline at end of file +p256.workspace = true diff --git a/crates/sui-e2e-tests/tests/dynamic_committee_tests.rs b/crates/sui-e2e-tests/tests/dynamic_committee_tests.rs index 3d0b374dfefa8..454328bace837 100644 --- a/crates/sui-e2e-tests/tests/dynamic_committee_tests.rs +++ b/crates/sui-e2e-tests/tests/dynamic_committee_tests.rs @@ -57,6 +57,7 @@ trait StatePredicate { runner: &StressTestRunner, effects: &TransactionEffects, ); + #[allow(unused)] async fn post_epoch_post_condition( &mut self, runner: &StressTestRunner, @@ -351,7 +352,7 @@ async fn fuzz_dynamic_committee() { let num_operations = 10; // Add more actions here as we create them - let actions = vec![Box::new(add_stake::RequestAddStakeGen)]; + let actions = [Box::new(add_stake::RequestAddStakeGen)]; let mut runner = StressTestRunner::new().await; diff --git a/crates/sui-faucet/src/faucet/simple_faucet.rs b/crates/sui-faucet/src/faucet/simple_faucet.rs index 0bdbb8641d764..00133d92dcd03 100644 --- a/crates/sui-faucet/src/faucet/simple_faucet.rs +++ b/crates/sui-faucet/src/faucet/simple_faucet.rs @@ -328,6 +328,7 @@ impl SimpleFaucet { /// Check if the gas coin is still valid. A valid gas coin /// 1. Exists presently /// 2. is a gas coin + /// /// If the coin is valid, return Ok(Some(GasCoin)) /// If the coin invalid, return Ok(None) /// If the fullnode returns an unexpected error, returns Err(e) @@ -1303,7 +1304,7 @@ mod tests { .await .unwrap(); - let amounts = &vec![coin_amount]; + let amounts = &[coin_amount]; // Create a vector containing five randomly generated addresses let target_addresses: Vec = (0..5) @@ -1384,7 +1385,7 @@ mod tests { .await .unwrap(); - let amounts = &vec![1; 1]; + let amounts = &[1; 1]; // Create a vector containing five randomly generated addresses let target_addresses: Vec = (0..5) .map(|_| SuiAddress::random_for_testing_only()) diff --git a/crates/sui-framework-tests/Cargo.toml b/crates/sui-framework-tests/Cargo.toml index ad593b3634716..2093974fa826f 100644 --- a/crates/sui-framework-tests/Cargo.toml +++ b/crates/sui-framework-tests/Cargo.toml @@ -7,6 +7,9 @@ description = "Runs Move tests for sui-framework" license = "Apache-2.0" publish = false +[lints] +workspace = true + [[test]] name = "move_tests" harness = false diff --git a/crates/sui-framework/src/lib.rs b/crates/sui-framework/src/lib.rs index dfc8679cd2fc6..f51f746585acb 100644 --- a/crates/sui-framework/src/lib.rs +++ b/crates/sui-framework/src/lib.rs @@ -256,9 +256,7 @@ pub async fn compare_system_package( let mut new_normalized = new_pkg.normalize(binary_config).ok()?; for (name, cur_module) in cur_normalized { - let Some(new_module) = new_normalized.remove(&name) else { - return None; - }; + let new_module = new_normalized.remove(&name)?; if let Err(e) = compatibility.check(&cur_module, &new_module) { error!("Compatibility check failed, for new version of {id}::{name}: {e:?}"); diff --git a/crates/sui-genesis-builder/Cargo.toml b/crates/sui-genesis-builder/Cargo.toml index 32e62bf08712b..c439f28b4caf7 100644 --- a/crates/sui-genesis-builder/Cargo.toml +++ b/crates/sui-genesis-builder/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow.workspace = true bcs.workspace = true diff --git a/crates/sui-genesis-builder/src/lib.rs b/crates/sui-genesis-builder/src/lib.rs index fbab297181074..b0925b19951f3 100644 --- a/crates/sui-genesis-builder/src/lib.rs +++ b/crates/sui-genesis-builder/src/lib.rs @@ -693,11 +693,11 @@ fn create_genesis_context( ) -> TxContext { let mut hasher = DefaultHash::default(); hasher.update(b"sui-genesis"); - hasher.update(&bcs::to_bytes(genesis_chain_parameters).unwrap()); - hasher.update(&bcs::to_bytes(genesis_validators).unwrap()); - hasher.update(&bcs::to_bytes(token_distribution_schedule).unwrap()); + hasher.update(bcs::to_bytes(genesis_chain_parameters).unwrap()); + hasher.update(bcs::to_bytes(genesis_validators).unwrap()); + hasher.update(bcs::to_bytes(token_distribution_schedule).unwrap()); for system_package in system_packages { - hasher.update(&bcs::to_bytes(system_package.bytes()).unwrap()); + hasher.update(bcs::to_bytes(system_package.bytes()).unwrap()); } let hash = hasher.finalize(); diff --git a/crates/sui-graphql-e2e-tests/Cargo.toml b/crates/sui-graphql-e2e-tests/Cargo.toml index fb8642a2a404e..1bc925321f16e 100644 --- a/crates/sui-graphql-e2e-tests/Cargo.toml +++ b/crates/sui-graphql-e2e-tests/Cargo.toml @@ -7,6 +7,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dev-dependencies] datatest-stable.workspace = true sui-graphql-rpc.workspace = true diff --git a/crates/sui-graphql-rpc/src/server/version.rs b/crates/sui-graphql-rpc/src/server/version.rs index 0dcb46a5ba891..b73bc9b9d215d 100644 --- a/crates/sui-graphql-rpc/src/server/version.rs +++ b/crates/sui-graphql-rpc/src/server/version.rs @@ -17,6 +17,7 @@ use crate::{ pub(crate) static VERSION_HEADER: HeaderName = HeaderName::from_static("x-sui-rpc-version"); +#[allow(unused)] pub(crate) struct SuiRpcVersion(Vec, Vec>); const NAMED_VERSIONS: [&str; 3] = ["beta", "legacy", "stable"]; diff --git a/crates/sui-graphql-rpc/src/types/event.rs b/crates/sui-graphql-rpc/src/types/event.rs index e2555bb0214eb..cb558c2fba6c3 100644 --- a/crates/sui-graphql-rpc/src/types/event.rs +++ b/crates/sui-graphql-rpc/src/types/event.rs @@ -259,9 +259,6 @@ impl Event { checkpoint_sequence_number: stored_tx.checkpoint_sequence_number, #[cfg(feature = "postgres-feature")] senders: vec![Some(native_event.sender.to_vec())], - #[cfg(feature = "mysql-feature")] - #[cfg(not(feature = "postgres-feature"))] - senders: serde_json::to_value(vec![native_event.sender.to_vec()]).unwrap(), package: native_event.package_id.to_vec(), module: native_event.transaction_module.to_string(), event_type: native_event @@ -290,17 +287,6 @@ impl Event { { stored.senders.first() } - #[cfg(feature = "mysql-feature")] - #[cfg(not(feature = "postgres-feature"))] - { - stored - .senders - .as_array() - .ok_or_else(|| { - Error::Internal("Failed to parse event senders as array".to_string()) - })? - .first() - } }) else { return Err(Error::Internal("No senders found for event".to_string())); }; diff --git a/crates/sui-graphql-rpc/src/types/move_object.rs b/crates/sui-graphql-rpc/src/types/move_object.rs index c5cf724604089..cabe71c92bf60 100644 --- a/crates/sui-graphql-rpc/src/types/move_object.rs +++ b/crates/sui-graphql-rpc/src/types/move_object.rs @@ -50,6 +50,7 @@ pub(crate) enum MoveObjectDowncastError { /// This interface is implemented by types that represent a Move object on-chain (A Move value whose /// type has `key`). +#[allow(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IMoveObject", diff --git a/crates/sui-graphql-rpc/src/types/object.rs b/crates/sui-graphql-rpc/src/types/object.rs index 5cb49d63ff03c..eebe0b86447ed 100644 --- a/crates/sui-graphql-rpc/src/types/object.rs +++ b/crates/sui-graphql-rpc/src/types/object.rs @@ -221,6 +221,7 @@ pub(crate) struct HistoricalObjectCursor { /// Interface implemented by on-chain values that are addressable by an ID (also referred to as its /// address). This includes Move objects and packages. +#[allow(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IObject", @@ -579,9 +580,7 @@ impl ObjectImpl<'_> { pub(crate) async fn owner(&self, ctx: &Context<'_>) -> Option { use NativeOwner as O; - let Some(native) = self.0.native_impl() else { - return None; - }; + let native = self.0.native_impl()?; match native.owner { O::AddressOwner(address) => { diff --git a/crates/sui-graphql-rpc/src/types/owner.rs b/crates/sui-graphql-rpc/src/types/owner.rs index 3986a39f6ad23..8d790fdc2d699 100644 --- a/crates/sui-graphql-rpc/src/types/owner.rs +++ b/crates/sui-graphql-rpc/src/types/owner.rs @@ -56,6 +56,7 @@ pub(crate) struct OwnerImpl { /// are identified by an address which can represent either the public key of an account or another /// object. The same address can only refer to an account or an object, never both, but it is not /// possible to know which up-front. +#[allow(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IOwner", diff --git a/crates/sui-graphql-rpc/src/types/transaction_block/tx_lookups.rs b/crates/sui-graphql-rpc/src/types/transaction_block/tx_lookups.rs index e3d551976d5d4..8077f4b4d5da4 100644 --- a/crates/sui-graphql-rpc/src/types/transaction_block/tx_lookups.rs +++ b/crates/sui-graphql-rpc/src/types/transaction_block/tx_lookups.rs @@ -293,9 +293,7 @@ pub(crate) fn subqueries(filter: &TransactionBlockFilter, tx_bounds: TxBounds) - subqueries.push(("tx_digests", select_ids(txs, tx_bounds))); } - let Some((_, mut subquery)) = subqueries.pop() else { - return None; - }; + let (_, mut subquery) = subqueries.pop()?; if !subqueries.is_empty() { subquery = query!("SELECT tx_sequence_number FROM ({}) AS initial", subquery); diff --git a/crates/sui-indexer/src/store/mod.rs b/crates/sui-indexer/src/store/mod.rs index 920cc5817499c..f520f6afa1414 100644 --- a/crates/sui-indexer/src/store/mod.rs +++ b/crates/sui-indexer/src/store/mod.rs @@ -11,7 +11,7 @@ pub mod pg_partition_manager; pub mod diesel_macro { thread_local! { - pub static CALLED_FROM_BLOCKING_POOL: std::cell::RefCell = std::cell::RefCell::new(false); + pub static CALLED_FROM_BLOCKING_POOL: std::cell::RefCell = const { std::cell::RefCell::new(false) }; } #[macro_export] @@ -292,10 +292,11 @@ pub mod diesel_macro { /// Check that we are in a context conducive to making blocking calls. /// This is done by either: /// - Checking that we are not inside a tokio runtime context + /// /// Or: /// - If we are inside a tokio runtime context, ensure that the call went through - /// `IndexerReader::spawn_blocking` which properly moves the blocking call to a blocking thread - /// pool. + /// `IndexerReader::spawn_blocking` which properly moves the blocking call to a blocking thread + /// pool. #[macro_export] macro_rules! blocking_call_is_ok_or_panic { () => {{ diff --git a/crates/sui-indexer/src/store/pg_indexer_store.rs b/crates/sui-indexer/src/store/pg_indexer_store.rs index 7a2ac3cdb8854..23080f3f1fcaa 100644 --- a/crates/sui-indexer/src/store/pg_indexer_store.rs +++ b/crates/sui-indexer/src/store/pg_indexer_store.rs @@ -135,6 +135,7 @@ SET object_version = EXCLUDED.object_version, pub struct PgIndexerStoreConfig { pub parallel_chunk_size: usize, pub parallel_objects_chunk_size: usize, + #[allow(unused)] pub epochs_to_keep: Option, } diff --git a/crates/sui-json-rpc-tests/Cargo.toml b/crates/sui-json-rpc-tests/Cargo.toml index af78d3ccc56df..0f688d4b455e0 100644 --- a/crates/sui-json-rpc-tests/Cargo.toml +++ b/crates/sui-json-rpc-tests/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] [dev-dependencies] diff --git a/crates/sui-json-rpc-types/src/sui_transaction.rs b/crates/sui-json-rpc-types/src/sui_transaction.rs index dcd685349ec2a..8936d54831102 100644 --- a/crates/sui-json-rpc-types/src/sui_transaction.rs +++ b/crates/sui-json-rpc-types/src/sui_transaction.rs @@ -1803,7 +1803,7 @@ impl SuiProgrammableTransactionBlock { } fn resolve_input_type( - inputs: &Vec, + inputs: &[CallArg], commands: &[Command], module_cache: &impl GetModule, ) -> Vec> { diff --git a/crates/sui-json/src/lib.rs b/crates/sui-json/src/lib.rs index 6c367c0d6ba15..4782ed9e57116 100644 --- a/crates/sui-json/src/lib.rs +++ b/crates/sui-json/src/lib.rs @@ -703,7 +703,7 @@ fn resolve_object_vec_arg(idx: usize, arg: &SuiJsonValue) -> Result>( /// - Base64 encoded `privkey` for Raw key /// - Bech32 encoded private key prefixed with `suiprivkey` /// - Hex encoded `privkey` for Raw key +/// /// If `require_secp256k1` is true, it will return an error if the key is not Secp256k1. pub fn read_key(path: &PathBuf, require_secp256k1: bool) -> Result { if !path.exists() { diff --git a/crates/sui-macros/Cargo.toml b/crates/sui-macros/Cargo.toml index c7e99bd255f69..cb274a3af898c 100644 --- a/crates/sui-macros/Cargo.toml +++ b/crates/sui-macros/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] sui-proc-macros.workspace = true once_cell.workspace = true diff --git a/crates/sui-macros/src/lib.rs b/crates/sui-macros/src/lib.rs index 6e3cd85ca19be..a036a3dbfcfb0 100644 --- a/crates/sui-macros/src/lib.rs +++ b/crates/sui-macros/src/lib.rs @@ -528,7 +528,7 @@ mod test { assert_eq!(Foo::new(1, 2).b, 2); assert_eq!(new_foo(1).a, 1); - let v = vec![Foo::new(1, 2), Foo::new(3, 2)]; + let v = [Foo::new(1, 2), Foo::new(3, 2)]; assert_eq!(v[0].a, 1); assert_eq!(v[1].b, 2); @@ -720,7 +720,7 @@ mod test { assert_eq!(Foo::new(1, 2).b, 2); assert_eq!(new_foo(1).a, 1); - let v = vec![Foo::new(1, 2), Foo::new(3, 2)]; + let v = [Foo::new(1, 2), Foo::new(3, 2)]; assert_eq!(v[0].a, 1); assert_eq!(v[1].b, 2); diff --git a/crates/sui-move/src/unit_test.rs b/crates/sui-move/src/unit_test.rs index 3bb4da1f2da0f..78ae1e5260a52 100644 --- a/crates/sui-move/src/unit_test.rs +++ b/crates/sui-move/src/unit_test.rs @@ -20,13 +20,8 @@ use sui_move_natives::test_scenario::InMemoryTestStore; use sui_move_natives::{object_runtime::ObjectRuntime, NativesCostTable}; use sui_protocol_config::ProtocolConfig; use sui_types::{ - base_types::{ObjectID, SequenceNumber}, - error::SuiResult, - gas_model::tables::initial_cost_schedule_for_unit_tests, - in_memory_storage::InMemoryStorage, + gas_model::tables::initial_cost_schedule_for_unit_tests, in_memory_storage::InMemoryStorage, metrics::LimitsMetrics, - object::Object, - storage::ChildObjectResolver, }; // Move unit tests will halt after executing this many steps. This is a protection to avoid divergence @@ -63,28 +58,6 @@ impl Test { } } -struct DummyChildObjectStore {} - -impl ChildObjectResolver for DummyChildObjectStore { - fn read_child_object( - &self, - _parent: &ObjectID, - _child: &ObjectID, - _child_version_upper_bound: SequenceNumber, - ) -> SuiResult> { - Ok(None) - } - fn get_object_received_at_version( - &self, - _owner: &ObjectID, - _receiving_object_id: &ObjectID, - _receive_object_at_version: SequenceNumber, - _epoch_id: sui_types::committee::EpochId, - ) -> SuiResult> { - Ok(None) - } -} - static TEST_STORE_INNER: Lazy> = Lazy::new(|| RwLock::new(InMemoryStorage::default())); diff --git a/crates/sui-network/src/state_sync/server.rs b/crates/sui-network/src/state_sync/server.rs index f7e24b5a5202f..4e6b32cff059e 100644 --- a/crates/sui-network/src/state_sync/server.rs +++ b/crates/sui-network/src/state_sync/server.rs @@ -221,7 +221,7 @@ where } })?; - struct SemaphoreExtension(OwnedSemaphorePermit); + struct SemaphoreExtension(#[allow(unused)] OwnedSemaphorePermit); inner.call(req).await.map(move |mut response| { // Insert permit as extension so it's not dropped until the response is sent. response diff --git a/crates/sui-node/Cargo.toml b/crates/sui-node/Cargo.toml index 9411c6f9e3f9c..1e3449067aaf3 100644 --- a/crates/sui-node/Cargo.toml +++ b/crates/sui-node/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anemo.workspace = true anemo-tower.workspace = true diff --git a/crates/sui-node/src/admin.rs b/crates/sui-node/src/admin.rs index 228707cebd2b4..3c867e2f994a0 100644 --- a/crates/sui-node/src/admin.rs +++ b/crates/sui-node/src/admin.rs @@ -241,12 +241,12 @@ async fn capabilities(State(state): State>) -> (StatusCode, String // Only one of v1 or v2 will be populated at a time let capabilities = epoch_store.get_capabilities_v1(); let mut output = String::new(); - for capability in &capabilities { + for capability in capabilities.unwrap_or_default() { output.push_str(&format!("{:?}\n", capability)); } let capabilities = epoch_store.get_capabilities_v2(); - for capability in &capabilities { + for capability in capabilities.unwrap_or_default() { output.push_str(&format!("{:?}\n", capability)); } diff --git a/crates/sui-open-rpc-macros/src/lib.rs b/crates/sui-open-rpc-macros/src/lib.rs index 6fa99cc211998..ccf58a392286a 100644 --- a/crates/sui-open-rpc-macros/src/lib.rs +++ b/crates/sui-open-rpc-macros/src/lib.rs @@ -121,10 +121,6 @@ pub fn open_rpc(attr: TokenStream, item: TokenStream) -> TokenStream { trait OptionalQuote { fn to_quote(&self) -> TokenStream2; - - fn unwrap_quote(&self, quote: F) -> TokenStream2 - where - F: FnOnce(LitStr) -> TokenStream2; } impl OptionalQuote for Option { @@ -135,17 +131,6 @@ impl OptionalQuote for Option { quote!(None) } } - - fn unwrap_quote(&self, quote: F) -> TokenStream2 - where - F: FnOnce(LitStr) -> TokenStream2, - { - if let Some(lit_str) = self { - quote(lit_str.clone()) - } else { - quote!() - } - } } struct RpcDefinition { diff --git a/crates/sui-open-rpc/Cargo.toml b/crates/sui-open-rpc/Cargo.toml index 3bbe0f53ab5d7..e6000fe18d0e2 100644 --- a/crates/sui-open-rpc/Cargo.toml +++ b/crates/sui-open-rpc/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] schemars.workspace = true serde.workspace = true diff --git a/crates/sui-open-rpc/src/examples.rs b/crates/sui-open-rpc/src/examples.rs index ed8c038571073..9c2f8d8ba6805 100644 --- a/crates/sui-open-rpc/src/examples.rs +++ b/crates/sui-open-rpc/src/examples.rs @@ -69,11 +69,6 @@ struct Examples { examples: Vec, } -#[derive(serde::Serialize)] -struct Value { - value: String, -} - impl Examples { fn new(name: &str, examples: Vec) -> Self { Self { diff --git a/crates/sui-package-resolver/src/lib.rs b/crates/sui-package-resolver/src/lib.rs index 17f1118e591d1..a6c1f3d3c0043 100644 --- a/crates/sui-package-resolver/src/lib.rs +++ b/crates/sui-package-resolver/src/lib.rs @@ -132,6 +132,7 @@ pub enum ErrorConstants { /// * A numeric value (u8, u16, u32, u64, u128, u256); or /// * A boolean value; or /// * An address value + /// /// Otherwise, the `Raw` bytes of the error constant are returned. Rendered { /// The name of the error constant. @@ -1547,7 +1548,7 @@ impl<'l> ResolutionContext<'l> { O::Datatype(key, params) => { // SAFETY: `add_signature` ensures `datatypes` has an element with this key. - let def = &self.datatypes[&key]; + let def = &self.datatypes[key]; let param_layouts = params .iter() @@ -1639,7 +1640,7 @@ impl<'l> ResolutionContext<'l> { O::Datatype(key, params) => { // SAFETY: `add_signature` ensures `datatypes` has an element with this key. - let defining_id = &self.datatypes[&key].defining_id; + let defining_id = &self.datatypes[key].defining_id; for param in params { self.relocate_signature(param)?; } diff --git a/crates/sui-proc-macros/Cargo.toml b/crates/sui-proc-macros/Cargo.toml index 0ccf1b0d77060..cb3bf09505604 100644 --- a/crates/sui-proc-macros/Cargo.toml +++ b/crates/sui-proc-macros/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [lib] proc-macro = true diff --git a/crates/sui-protocol-config/Cargo.toml b/crates/sui-protocol-config/Cargo.toml index edcea7bd5ba8b..f8a8dfec81551 100644 --- a/crates/sui-protocol-config/Cargo.toml +++ b/crates/sui-protocol-config/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] serde.workspace = true tracing.workspace = true diff --git a/crates/sui-proxy/src/consumer.rs b/crates/sui-proxy/src/consumer.rs index 7135c5eaa670b..c4b3af8ad9770 100644 --- a/crates/sui-proxy/src/consumer.rs +++ b/crates/sui-proxy/src/consumer.rs @@ -242,7 +242,7 @@ async fn check_response( async fn convert( mfs: Vec, ) -> Result, (StatusCode, &'static str)> { - let result = match tokio::task::spawn_blocking(|| { + let result = tokio::task::spawn_blocking(|| { let timer = CONSUMER_OPERATION_DURATION .with_label_values(&["convert_to_remote_write_task"]) .start_timer(); @@ -250,8 +250,9 @@ async fn convert( timer.observe_duration(); result.into_iter() }) - .await - { + .await; + + let result = match result { Ok(v) => v, Err(err) => { error!("unable to convert to remote_write; {err}"); diff --git a/crates/sui-replay/src/lib.rs b/crates/sui-replay/src/lib.rs index 4d139661dd794..26a27cf828767 100644 --- a/crates/sui-replay/src/lib.rs +++ b/crates/sui-replay/src/lib.rs @@ -586,9 +586,8 @@ pub(crate) fn chain_from_chain_id(chain: &str) -> Chain { fn parse_configs_versions( configs_and_versions: Option>, ) -> Option> { - let Some(configs_and_versions) = configs_and_versions else { - return None; - }; + let configs_and_versions = configs_and_versions?; + assert!(configs_and_versions.len() % 2 == 0, "Invalid number of arguments for configs and version -- you must supply a version for each config"); Some( configs_and_versions diff --git a/crates/sui-rest-api/src/reader.rs b/crates/sui-rest-api/src/reader.rs index dd07ba57ae88f..30b2f8c2271b7 100644 --- a/crates/sui-rest-api/src/reader.rs +++ b/crates/sui-rest-api/src/reader.rs @@ -260,6 +260,7 @@ impl Iterator for CheckpointTransactionsIter { pub struct CursorInfo { pub checkpoint: CheckpointSequenceNumber, pub timestamp_ms: u64, + #[allow(unused)] pub index: u64, // None if there are no more transactions in the store diff --git a/crates/sui-rest-api/src/response.rs b/crates/sui-rest-api/src/response.rs index 3d2bda9df3a5f..cc30c9935cd1c 100644 --- a/crates/sui-rest-api/src/response.rs +++ b/crates/sui-rest-api/src/response.rs @@ -102,9 +102,9 @@ impl axum::response::IntoResponse for BcsRejection { "Expected request with `Content-Type: application/bcs`", ) .into_response(), - BcsRejection::DeserializationError(_) => ( + BcsRejection::DeserializationError(e) => ( StatusCode::UNPROCESSABLE_ENTITY, - "Failed to deserialize the BCS body into the target type", + format!("Failed to deserialize the BCS body into the target type: {e}"), ) .into_response(), BcsRejection::BytesRejection(bytes_rejection) => bytes_rejection.into_response(), diff --git a/crates/sui-rosetta/src/construction.rs b/crates/sui-rosetta/src/construction.rs index 45eaaef6abe57..d67c37ce34a94 100644 --- a/crates/sui-rosetta/src/construction.rs +++ b/crates/sui-rosetta/src/construction.rs @@ -74,7 +74,7 @@ pub async fn payloads( let intent_msg_bytes = bcs::to_bytes(&intent_msg)?; let mut hasher = DefaultHash::default(); - hasher.update(&bcs::to_bytes(&intent_msg).expect("Message serialization should not fail")); + hasher.update(bcs::to_bytes(&intent_msg).expect("Message serialization should not fail")); let digest = hasher.finalize().digest; Ok(ConstructionPayloadsResponse { diff --git a/crates/sui-rosetta/tests/gas_budget_tests.rs b/crates/sui-rosetta/tests/gas_budget_tests.rs index ead522c111354..f5666298bdd58 100644 --- a/crates/sui-rosetta/tests/gas_budget_tests.rs +++ b/crates/sui-rosetta/tests/gas_budget_tests.rs @@ -28,6 +28,7 @@ mod rosetta_client; #[derive(Deserialize, Debug)] #[serde(untagged)] enum TransactionIdentifierResponseResult { + #[allow(unused)] Success(TransactionIdentifierResponse), Error(RosettaSubmitGasError), } diff --git a/crates/sui-rpc-loadgen/src/payload/query_transactions.rs b/crates/sui-rpc-loadgen/src/payload/query_transactions.rs index b4abb519fee19..5482372cdd812 100644 --- a/crates/sui-rpc-loadgen/src/payload/query_transactions.rs +++ b/crates/sui-rpc-loadgen/src/payload/query_transactions.rs @@ -82,7 +82,7 @@ impl<'a> ProcessPayload<'a, &'a QueryTransactionBlocks> for RpcCommandProcessor } }; - results = join_all(clients.iter().enumerate().map(|(_i, client)| { + results = join_all(clients.iter().map(|client| { let with_query = query.clone(); async move { query_transaction_blocks(client, with_query, cursor, None) diff --git a/crates/sui-rpc-loadgen/src/payload/validation.rs b/crates/sui-rpc-loadgen/src/payload/validation.rs index 00656da736ed7..8204692c73ab1 100644 --- a/crates/sui-rpc-loadgen/src/payload/validation.rs +++ b/crates/sui-rpc-loadgen/src/payload/validation.rs @@ -16,7 +16,7 @@ use tracing::log::warn; const LOADGEN_QUERY_MAX_RESULT_LIMIT: usize = 25; -pub(crate) fn cross_validate_entities(entities: &Vec>, entity_name: &str) +pub(crate) fn cross_validate_entities(entities: &[Vec], entity_name: &str) where U: PartialEq + Debug, { diff --git a/crates/sui-sdk/src/lib.rs b/crates/sui-sdk/src/lib.rs index 945a0e0ba5c86..9200d8451e5fc 100644 --- a/crates/sui-sdk/src/lib.rs +++ b/crates/sui-sdk/src/lib.rs @@ -14,9 +14,9 @@ //! * [EventApi] - provides event related functions functions to //! * [GovernanceApi] - provides functionality related to staking //! * [QuorumDriverApi] - provides functionality to execute a transaction -//! block and submit it to the fullnode(s) +//! block and submit it to the fullnode(s) //! * [ReadApi] - provides functions for retrieving data about different -//! objects and transactions +//! objects and transactions //! * TransactionBuilder - provides functions for building transactions //! //! # Usage diff --git a/crates/sui-simulator/Cargo.toml b/crates/sui-simulator/Cargo.toml index 5d2f864250cc3..4d12c46ef42a4 100644 --- a/crates/sui-simulator/Cargo.toml +++ b/crates/sui-simulator/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] move-package.workspace = true diff --git a/crates/sui-simulator/src/lib.rs b/crates/sui-simulator/src/lib.rs index 086d2f1282184..91fa6b5937d26 100644 --- a/crates/sui-simulator/src/lib.rs +++ b/crates/sui-simulator/src/lib.rs @@ -110,7 +110,7 @@ pub mod configs { } thread_local! { - static NODE_COUNT: AtomicUsize = AtomicUsize::new(0); + static NODE_COUNT: AtomicUsize = const { AtomicUsize::new(0) }; } pub struct NodeLeakDetector(()); diff --git a/crates/sui-snapshot/src/lib.rs b/crates/sui-snapshot/src/lib.rs index a19a090770d5c..ac083f021efe1 100644 --- a/crates/sui-snapshot/src/lib.rs +++ b/crates/sui-snapshot/src/lib.rs @@ -72,6 +72,7 @@ use tokio::time::Instant; /// - epoch_1/ /// - 1_1.obj /// - ... +/// /// Object File Disk Format ///┌──────────────────────────────┐ ///│ magic(0x00B7EC75) <4 byte> │ diff --git a/crates/sui-storage/Cargo.toml b/crates/sui-storage/Cargo.toml index e34973c342c0b..ff541a7b7e962 100644 --- a/crates/sui-storage/Cargo.toml +++ b/crates/sui-storage/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] integer-encoding.workspace = true async-trait.workspace = true diff --git a/crates/sui-storage/src/http_key_value_store.rs b/crates/sui-storage/src/http_key_value_store.rs index 9232bdfb1bc50..461a441cd2a02 100644 --- a/crates/sui-storage/src/http_key_value_store.rs +++ b/crates/sui-storage/src/http_key_value_store.rs @@ -148,12 +148,7 @@ impl HttpKVStore { async fn multi_fetch(&self, uris: Vec) -> Vec>> { let uris_vec = uris.to_vec(); - let fetches = stream::iter( - uris_vec - .into_iter() - .enumerate() - .map(|(_i, url)| self.fetch(url)), - ); + let fetches = stream::iter(uris_vec.into_iter().map(|url| self.fetch(url))); fetches.buffered(uris.len()).collect::>().await } @@ -221,7 +216,7 @@ fn multi_split_slice<'a, T>(slice: &'a [T], lengths: &'a [usize]) -> Vec<&'a [T] .collect() } -fn deser_check_digest( +fn deser_check_digest( digest: &D, bytes: &Bytes, get_expected_digest: impl FnOnce(&T) -> D, diff --git a/crates/sui-swarm-config/Cargo.toml b/crates/sui-swarm-config/Cargo.toml index 8c6561469549f..12a367ccbd6c4 100644 --- a/crates/sui-swarm-config/Cargo.toml +++ b/crates/sui-swarm-config/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anemo.workspace = true anyhow.workspace = true diff --git a/crates/sui-swarm/Cargo.toml b/crates/sui-swarm/Cargo.toml index b67f22a309465..51caeadf3b797 100644 --- a/crates/sui-swarm/Cargo.toml +++ b/crates/sui-swarm/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow.workspace = true rand.workspace = true diff --git a/crates/sui-swarm/src/memory/container.rs b/crates/sui-swarm/src/memory/container.rs index edbb5e4b4f146..b763fc7893cbc 100644 --- a/crates/sui-swarm/src/memory/container.rs +++ b/crates/sui-swarm/src/memory/container.rs @@ -69,7 +69,7 @@ impl Container { RuntimeType::MultiThreaded => { thread_local! { static SPAN: std::cell::RefCell> = - std::cell::RefCell::new(None); + const { std::cell::RefCell::new(None) }; } let mut builder = tokio::runtime::Builder::new_multi_thread(); let span = span.clone(); diff --git a/crates/sui-tool/src/commands.rs b/crates/sui-tool/src/commands.rs index 5c352104c8aaa..d4a6eb83facfc 100644 --- a/crates/sui-tool/src/commands.rs +++ b/crates/sui-tool/src/commands.rs @@ -22,7 +22,6 @@ use telemetry_subscribers::TracingHandle; use sui_types::{ base_types::*, crypto::AuthorityPublicKeyBytes, messages_grpc::TransactionInfoRequest, - object::Owner, }; use clap::*; @@ -419,59 +418,6 @@ pub enum ToolCommand { }, } -trait OptionDebug { - fn opt_debug(&self, def_str: &str) -> String; -} -trait OptionDisplay { - fn opt_display(&self, def_str: &str) -> String; -} - -impl OptionDebug for Option -where - T: std::fmt::Debug, -{ - fn opt_debug(&self, def_str: &str) -> String { - match self { - None => def_str.to_string(), - Some(t) => format!("{:?}", t), - } - } -} - -impl OptionDisplay for Option -where - T: std::fmt::Display, -{ - fn opt_display(&self, def_str: &str) -> String { - match self { - None => def_str.to_string(), - Some(t) => format!("{}", t), - } - } -} - -struct OwnerOutput(Owner); - -// grep/awk-friendly output for Owner -impl std::fmt::Display for OwnerOutput { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match &self.0 { - Owner::AddressOwner(address) => { - write!(f, "address({})", address) - } - Owner::ObjectOwner(address) => { - write!(f, "object({})", address) - } - Owner::Immutable => { - write!(f, "immutable") - } - Owner::Shared { .. } => { - write!(f, "shared") - } - } - } -} - async fn check_locked_object( sui_client: &Arc, committee: Arc>, diff --git a/crates/sui-tool/src/lib.rs b/crates/sui-tool/src/lib.rs index b4290dc48b510..a49ac1b5e9498 100644 --- a/crates/sui-tool/src/lib.rs +++ b/crates/sui-tool/src/lib.rs @@ -127,9 +127,6 @@ pub struct ObjectData { trait OptionDebug { fn opt_debug(&self, def_str: &str) -> String; } -trait OptionDisplay { - fn opt_display(&self, def_str: &str) -> String; -} impl OptionDebug for Option where @@ -143,40 +140,6 @@ where } } -impl OptionDisplay for Option -where - T: std::fmt::Display, -{ - fn opt_display(&self, def_str: &str) -> String { - match self { - None => def_str.to_string(), - Some(t) => format!("{}", t), - } - } -} - -struct OwnerOutput(Owner); - -// grep/awk-friendly output for Owner -impl std::fmt::Display for OwnerOutput { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match &self.0 { - Owner::AddressOwner(address) => { - write!(f, "address({})", address) - } - Owner::ObjectOwner(address) => { - write!(f, "object({})", address) - } - Owner::Immutable => { - write!(f, "immutable") - } - Owner::Shared { .. } => { - write!(f, "shared") - } - } - } -} - #[allow(clippy::type_complexity)] pub struct GroupedObjectOutput { pub grouped_results: BTreeMap< diff --git a/crates/sui-transactional-test-runner/Cargo.toml b/crates/sui-transactional-test-runner/Cargo.toml index 46fd3ab10242f..d602aea50457a 100644 --- a/crates/sui-transactional-test-runner/Cargo.toml +++ b/crates/sui-transactional-test-runner/Cargo.toml @@ -7,6 +7,9 @@ description = "Move framework for Sui platform" license = "Apache-2.0" publish = false +[lints] +workspace = true + [dependencies] anyhow.workspace = true bcs.workspace = true diff --git a/crates/sui-transactional-test-runner/src/simulator_persisted_store.rs b/crates/sui-transactional-test-runner/src/simulator_persisted_store.rs index 2c2e9de3c7b90..64606fa58dc0d 100644 --- a/crates/sui-transactional-test-runner/src/simulator_persisted_store.rs +++ b/crates/sui-transactional-test-runner/src/simulator_persisted_store.rs @@ -313,16 +313,12 @@ impl SimulatorStore for PersistedStore { fn insert_committee(&mut self, committee: Committee) { let epoch = committee.epoch as usize; - let mut committees = if let Some(c) = self + let mut committees = self .read_write .epoch_to_committee .get(&()) .expect("Fatal: DB read failed") - { - c - } else { - vec![] - }; + .unwrap_or_default(); if committees.get(epoch).is_some() { return; @@ -397,16 +393,12 @@ impl SimulatorStore for PersistedStore { .live_objects .insert(&object_id, &version) .expect("Fatal: DB write failed"); - let mut q = if let Some(x) = self + let mut q = self .read_write .objects .get(&object_id) .expect("Fatal: DB read failed") - { - x - } else { - BTreeMap::new() - }; + .unwrap_or_default(); q.insert(version, object); self.read_write .objects diff --git a/crates/sui-types/Cargo.toml b/crates/sui-types/Cargo.toml index 90c35908f1b0a..9943fc5465d25 100644 --- a/crates/sui-types/Cargo.toml +++ b/crates/sui-types/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] async-trait.workspace = true anemo.workspace = true diff --git a/crates/sui-types/src/crypto.rs b/crates/sui-types/src/crypto.rs index 16c83f6fa2493..792906ce4f05e 100644 --- a/crates/sui-types/src/crypto.rs +++ b/crates/sui-types/src/crypto.rs @@ -730,7 +730,7 @@ impl Signature { // itself that computes the BCS hash of the Rust type prefix and `struct TransactionData`. // (See `fn digest` in `impl Message for SenderSignedData`). let mut hasher = DefaultHash::default(); - hasher.update(&bcs::to_bytes(&value).expect("Message serialization should not fail")); + hasher.update(bcs::to_bytes(&value).expect("Message serialization should not fail")); Signer::sign(secret, &hasher.finalize().digest) } @@ -999,7 +999,7 @@ impl SuiSignature for S { T: Serialize, { let mut hasher = DefaultHash::default(); - hasher.update(&bcs::to_bytes(&value).expect("Message serialization should not fail")); + hasher.update(bcs::to_bytes(&value).expect("Message serialization should not fail")); let digest = hasher.finalize().digest; let (sig, pk) = &self.get_verification_inputs()?; diff --git a/crates/sui-types/src/execution.rs b/crates/sui-types/src/execution.rs index c4bcf7ba293b8..53dbcfbd74797 100644 --- a/crates/sui-types/src/execution.rs +++ b/crates/sui-types/src/execution.rs @@ -175,18 +175,21 @@ impl ExecutionResultsV2 { /// gas smashing). Because this list is not gated by protocol version, there are a few important /// criteria for adding a digest to this list: /// 1. The certificate must be causing all validators to either panic or hang forever deterministically. -/// 2. If we ever ship a fix to make it no longer panic or hang when executing such transaction, -/// we must make sure the transaction is already in this list. Otherwise nodes running the newer version -/// without these transactions in the list will generate forked result. +/// 2. If we ever ship a fix to make it no longer panic or hang when executing such transaction, we +/// must make sure the transaction is already in this list. Otherwise nodes running the newer +/// version without these transactions in the list will generate forked result. +/// /// Below is a scenario of when we need to use this list: /// 1. We detect that a specific transaction is causing all validators to either panic or hang forever deterministically. /// 2. We push a CertificateDenyConfig to deny such transaction to all validators asap. -/// 3. To make sure that all fullnodes are able to sync to the latest version, we need to add the transaction digest -/// to this list as well asap, and ship this binary to all fullnodes, so that they can sync past this transaction. +/// 3. To make sure that all fullnodes are able to sync to the latest version, we need to add the +/// transaction digest to this list as well asap, and ship this binary to all fullnodes, so that +/// they can sync past this transaction. /// 4. We then can start fixing the issue, and ship the fix to all nodes. -/// 5. Unfortunately, we can't remove the transaction digest from this list, because if we do so, any future -/// node that sync from genesis will fork on this transaction. We may be able to remove it once -/// we have stable snapshots and the binary has a minimum supported protocol version past the epoch. +/// 5. Unfortunately, we can't remove the transaction digest from this list, because if we do so, +/// any future node that sync from genesis will fork on this transaction. We may be able to +/// remove it once we have stable snapshots and the binary has a minimum supported protocol +/// version past the epoch. pub fn get_denied_certificates() -> &'static HashSet { static DENIED_CERTIFICATES: Lazy> = Lazy::new(|| HashSet::from([])); Lazy::force(&DENIED_CERTIFICATES) diff --git a/crates/sui-types/src/full_checkpoint_content.rs b/crates/sui-types/src/full_checkpoint_content.rs index 4d0cb95217bbc..2c8eef47f237e 100644 --- a/crates/sui-types/src/full_checkpoint_content.rs +++ b/crates/sui-types/src/full_checkpoint_content.rs @@ -177,7 +177,7 @@ impl CheckpointTransaction { ObjectIn::NotExist, ObjectOut::PackageWrite((version, _)), IDOperation::Created, - ) => Some(((id, &version), None)), + ) => Some(((id, version), None)), // Unwrapped Objects (ObjectIn::NotExist, ObjectOut::ObjectWrite(_), IDOperation::None) => { @@ -241,7 +241,7 @@ impl CheckpointTransaction { ObjectIn::NotExist, ObjectOut::PackageWrite((version, _)), IDOperation::Created, - ) => Some((id, &version)), + ) => Some((id, version)), _ => None, } diff --git a/crates/sui-types/src/messages_grpc.rs b/crates/sui-types/src/messages_grpc.rs index f29707cca75b7..ffe8001980e68 100644 --- a/crates/sui-types/src/messages_grpc.rs +++ b/crates/sui-types/src/messages_grpc.rs @@ -233,6 +233,7 @@ impl From for HandleCertificateResponseV2 { /// If `wait_for_effects` is true, it is guaranteed that: /// - Number of responses will be equal to the number of input transactions. /// - The order of the responses matches the order of the input transactions. +/// /// Otherwise, `responses` will be empty. #[derive(Clone, Debug, Serialize, Deserialize)] pub struct HandleSoftBundleCertificatesResponseV3 { diff --git a/crates/sui-types/tests/serde_tests.rs b/crates/sui-types/tests/serde_tests.rs index cd7056857b06b..2343c90b91329 100644 --- a/crates/sui-types/tests/serde_tests.rs +++ b/crates/sui-types/tests/serde_tests.rs @@ -18,7 +18,7 @@ fn test_struct_tag_serde() { struct TestStructTag(#[serde_as(as = "SuiStructTag")] StructTag); // serialize to json should not trim the leading 0 - let Value::String(json) = serde_json::to_value(&TestStructTag(tag.clone())).unwrap() else { + let Value::String(json) = serde_json::to_value(TestStructTag(tag.clone())).unwrap() else { panic!() }; assert_eq!(json, "0x07f89cdffd8968affa0b47bef91adc5314e19509080470c45bfd434cd83a766b::suifrens::SuiFren<0x07f89cdffd8968affa0b47bef91adc5314e19509080470c45bfd434cd83a766b::capy::Capy>"); diff --git a/crates/sui/Cargo.toml b/crates/sui/Cargo.toml index 9c06cb2893505..50afe8ab31472 100644 --- a/crates/sui/Cargo.toml +++ b/crates/sui/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anemo.workspace = true anyhow.workspace = true diff --git a/crates/sui/src/client_commands.rs b/crates/sui/src/client_commands.rs index 58d6a75f60d96..aec1751251eb1 100644 --- a/crates/sui/src/client_commands.rs +++ b/crates/sui/src/client_commands.rs @@ -2715,6 +2715,7 @@ pub async fn execute_dry_run( /// Call a dry run with the transaction data to estimate the gas budget. /// The estimated gas budget is computed as following: /// * the maximum between A and B, where: +/// /// A = computation cost + GAS_SAFE_OVERHEAD * reference gas price /// B = computation cost + storage cost - storage rebate + GAS_SAFE_OVERHEAD * reference gas price /// overhead diff --git a/crates/sui/src/client_ptb/lexer.rs b/crates/sui/src/client_ptb/lexer.rs index 749e8f724ada6..2338683ffadad 100644 --- a/crates/sui/src/client_ptb/lexer.rs +++ b/crates/sui/src/client_ptb/lexer.rs @@ -17,9 +17,7 @@ pub struct Lexer<'l, I: Iterator> { impl<'l, I: Iterator> Lexer<'l, I> { pub fn new(mut tokens: I) -> Option { - let Some(buf) = tokens.next() else { - return None; - }; + let buf = tokens.next()?; Some(Self { buf, @@ -63,9 +61,7 @@ impl<'l, I: Iterator> Lexer<'l, I> { fn eat_prefix(&mut self, patt: &str) -> Option> { let start = self.offset; - let Some(rest) = self.buf.strip_prefix(patt) else { - return None; - }; + let rest = self.buf.strip_prefix(patt)?; let len = self.buf.len() - rest.len(); let value = &self.buf[..len]; @@ -120,9 +116,7 @@ impl<'l, I: Iterator> Lexer<'l, I> { /// Look at the next character in the current shell token without consuming it, if it exists. fn peek(&self) -> Option> { let start = self.offset; - let Some((ix, _)) = self.next_char_boundary() else { - return None; - }; + let (ix, _) = self.next_char_boundary()?; let value = &self.buf[..ix]; let span = Span { diff --git a/crates/sui/tests/cli_tests.rs b/crates/sui/tests/cli_tests.rs index 00c2f5034172e..7d0c374dce9df 100644 --- a/crates/sui/tests/cli_tests.rs +++ b/crates/sui/tests/cli_tests.rs @@ -691,7 +691,7 @@ async fn test_move_call_args_linter_command() -> Result<(), anyhow::Error> { // Try a transfer // This should fail due to mismatch of object being sent - let args = vec![ + let args = [ SuiJsonValue::new(json!(obj))?, SuiJsonValue::new(json!(address2))?, ]; @@ -712,7 +712,7 @@ async fn test_move_call_args_linter_command() -> Result<(), anyhow::Error> { // Try a transfer with explicitly set gas price. // It should fail due to that gas price is below RGP. - let args = vec![ + let args = [ SuiJsonValue::new(json!(created_obj))?, SuiJsonValue::new(json!(address2))?, ]; @@ -740,7 +740,7 @@ async fn test_move_call_args_linter_command() -> Result<(), anyhow::Error> { // assert!(err_string.contains(&format!("Expected argument of type {package_addr}::object_basics::Object, but found type {framework_addr}::coin::Coin<{framework_addr}::sui::SUI>"))); // Try a proper transfer - let args = vec![ + let args = [ SuiJsonValue::new(json!(created_obj))?, SuiJsonValue::new(json!(address2))?, ]; diff --git a/crates/suiop-cli/src/command.rs b/crates/suiop-cli/src/command.rs index c14c39cb3e4f2..8247dbb9938f1 100644 --- a/crates/suiop-cli/src/command.rs +++ b/crates/suiop-cli/src/command.rs @@ -38,11 +38,7 @@ impl Default for CommandOptions { pub fn run_cmd(cmd_in: Vec<&str>, options: Option) -> Result { debug!("attempting to run {}", cmd_in.join(" ")); - let opts = if let Some(opts) = options { - opts - } else { - CommandOptions::default() - }; + let opts = options.unwrap_or_default(); let mut cmd = Command::new(cmd_in[0]); // add extra args diff --git a/crates/telemetry-subscribers/src/lib.rs b/crates/telemetry-subscribers/src/lib.rs index ac032093bb193..7221034ad9273 100644 --- a/crates/telemetry-subscribers/src/lib.rs +++ b/crates/telemetry-subscribers/src/lib.rs @@ -500,7 +500,7 @@ impl SamplingFilter { fn clamp(sample_rate: f64) -> f64 { // clamp sample rate to between 0.0001 and 1.0 - sample_rate.max(0.0001).min(1.0) + sample_rate.clamp(0.0001, 1.0) } fn update_sampling_rate(&self, sample_rate: f64) { diff --git a/crates/telemetry-subscribers/src/span_latency_prom.rs b/crates/telemetry-subscribers/src/span_latency_prom.rs index a42783d84684b..476bf30151980 100644 --- a/crates/telemetry-subscribers/src/span_latency_prom.rs +++ b/crates/telemetry-subscribers/src/span_latency_prom.rs @@ -10,6 +10,7 @@ //! - tracing-timing does not output to Prometheus, and extracting data from its histograms takes extra CPU //! - tracing-timing records latencies using HDRHistogram, which is great, but uses extra memory when one //! is already using Prometheus +//! //! Thus this is a much smaller and more focused module. //! //! ## Making spans visible diff --git a/crates/test-cluster/Cargo.toml b/crates/test-cluster/Cargo.toml index 826433cb330f2..6f967e93389b8 100644 --- a/crates/test-cluster/Cargo.toml +++ b/crates/test-cluster/Cargo.toml @@ -6,6 +6,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow.workspace = true bcs.workspace = true diff --git a/crates/transaction-fuzzer/Cargo.toml b/crates/transaction-fuzzer/Cargo.toml index 15fe64e0735b4..106bebdf5a8d1 100644 --- a/crates/transaction-fuzzer/Cargo.toml +++ b/crates/transaction-fuzzer/Cargo.toml @@ -7,6 +7,9 @@ description = "Tool to fuzz the system with randomly generated transactions" license = "Apache-2.0" publish = false +[lints] +workspace = true + [dependencies] proptest.workspace = true proptest-derive.workspace = true diff --git a/crates/transaction-fuzzer/src/programmable_transaction_gen.rs b/crates/transaction-fuzzer/src/programmable_transaction_gen.rs index 85de6eabbe2a6..3526a02009d61 100644 --- a/crates/transaction-fuzzer/src/programmable_transaction_gen.rs +++ b/crates/transaction-fuzzer/src/programmable_transaction_gen.rs @@ -404,7 +404,7 @@ pub fn gen_move_vec_input( /// A helper function to generate enough input coins for a command (transfer, merge, or create vector) /// - either collect them all from previous command or generate additional ones if the previous -/// command does not deliver enough. +/// command does not deliver enough. fn gen_enough_arguments( builder: &mut ProgrammableTransactionBuilder, prev_cmd_num: i64, diff --git a/crates/typed-store-derive/src/lib.rs b/crates/typed-store-derive/src/lib.rs index 9b0c73b8acd12..be1d81862cb8d 100644 --- a/crates/typed-store-derive/src/lib.rs +++ b/crates/typed-store-derive/src/lib.rs @@ -93,7 +93,7 @@ fn extract_struct_info( } else { field_name.clone() }; - if attrs.get(DB_OPTIONS_DEPRECATE).is_some() { + if attrs.contains_key(DB_OPTIONS_DEPRECATE) { deprecated_cfs.push(field_name.clone()); } diff --git a/crates/typed-store/src/lib.rs b/crates/typed-store/src/lib.rs index 734d22dc9cfea..00743e16fd65c 100644 --- a/crates/typed-store/src/lib.rs +++ b/crates/typed-store/src/lib.rs @@ -33,7 +33,8 @@ pub type StoreError = typed_store_error::TypedStoreError; /// 5. Other convenience features /// /// 1. Flexible configuration: -/// a. Static options specified at struct definition +/// a. Static options specified at struct definition +/// /// The definer of the struct can specify the default options for each table using annotations /// We can also supply column family options on the default ones /// A user defined function of signature () -> Options can be provided for each table @@ -90,10 +91,10 @@ pub type StoreError = typed_store_error::TypedStoreError; ///``` /// /// 2. Auto-generated `open` routine -/// The function `open_tables_read_write` is generated which allows for specifying DB wide options and custom table configs as mentioned above +/// The function `open_tables_read_write` is generated which allows for specifying DB wide options and custom table configs as mentioned above /// /// 3. Auto-generated `read_only_mode` handle -/// This mode provides handle struct which opens the DB in read only mode and has certain features like dumping and counting the keys in the tables +/// This mode provides handle struct which opens the DB in read only mode and has certain features like dumping and counting the keys in the tables /// /// Use the function `Tables::get_read_only_handle` which returns a handle that only allows read only features ///``` @@ -138,10 +139,10 @@ pub type StoreError = typed_store_error::TypedStoreError; /// } /// ``` /// 4. Auto-generated memory stats method -/// `self.get_memory_usage` is derived to provide memory and cache usage +/// `self.get_memory_usage` is derived to provide memory and cache usage /// /// 5. Other convenience features -/// `Tables::describe_tables` is used to get a list of the table names and key-value types as string in a BTreeMap +/// `Tables::describe_tables` is used to get a list of the table names and key-value types as string in a BTreeMap /// /// // Bad usage example /// // Structs fields most only be of type Store or DMBap diff --git a/crates/typed-store/src/rocks/mod.rs b/crates/typed-store/src/rocks/mod.rs index 752b42fba8ab3..ca6505b9a448e 100644 --- a/crates/typed-store/src/rocks/mod.rs +++ b/crates/typed-store/src/rocks/mod.rs @@ -88,9 +88,8 @@ mod tests; /// # Arguments /// /// * `db` - a reference to a rocks DB object -/// * `cf;` - a comma separated list of column families to open. For each -/// column family a concatenation of column family name (cf) and Key-Value -/// should be provided. +/// * `cf;` - a comma separated list of column families to open. For each column family a +/// concatenation of column family name (cf) and Key-Value should be provided. /// /// # Examples /// @@ -2735,7 +2734,7 @@ fn populate_missing_cfs( /// Given a vec, find the value which is one more than the vector /// if the vector was a big endian number. /// If the vector is already minimum, don't change it. -fn big_endian_saturating_add_one(v: &mut Vec) { +fn big_endian_saturating_add_one(v: &mut [u8]) { if is_max(v) { return; } @@ -2769,7 +2768,6 @@ fn test_helpers() { uint::construct_uint! { // 32 byte number - #[cfg_attr(feature = "scale-info", derive(TypeInfo))] struct Num32(4); } diff --git a/crates/typed-store/tests/macro_tests.rs b/crates/typed-store/tests/macro_tests.rs index ccd040ebddef9..dc8252864c144 100644 --- a/crates/typed-store/tests/macro_tests.rs +++ b/crates/typed-store/tests/macro_tests.rs @@ -166,13 +166,13 @@ async fn macro_test() { // Test pagination let m = tbls_secondary.dump("table1", 2, 0).unwrap(); assert_eq!(2, m.len()); - assert_eq!(format!("\"1\""), *m.get(&"\"1\"".to_string()).unwrap()); - assert_eq!(format!("\"2\""), *m.get(&"\"2\"".to_string()).unwrap()); + assert_eq!(format!("\"1\""), *m.get("\"1\"").unwrap()); + assert_eq!(format!("\"2\""), *m.get("\"2\"").unwrap()); let m = tbls_secondary.dump("table1", 3, 2).unwrap(); assert_eq!(3, m.len()); - assert_eq!(format!("\"7\""), *m.get(&"\"7\"".to_string()).unwrap()); - assert_eq!(format!("\"8\""), *m.get(&"\"8\"".to_string()).unwrap()); + assert_eq!(format!("\"7\""), *m.get("\"7\"").unwrap()); + assert_eq!(format!("\"8\""), *m.get("\"8\"").unwrap()); } #[tokio::test] @@ -306,13 +306,13 @@ async fn test_sallydb() { // Test pagination let m = example_db_secondary.dump("col1", 2, 0).unwrap(); assert_eq!(2, m.len()); - assert_eq!(format!("\"1\""), *m.get(&"\"1\"".to_string()).unwrap()); - assert_eq!(format!("\"2\""), *m.get(&"\"2\"".to_string()).unwrap()); + assert_eq!(format!("\"1\""), *m.get("\"1\"").unwrap()); + assert_eq!(format!("\"2\""), *m.get("\"2\"").unwrap()); let m = example_db_secondary.dump("col1", 3, 2).unwrap(); assert_eq!(3, m.len()); - assert_eq!(format!("\"7\""), *m.get(&"\"7\"".to_string()).unwrap()); - assert_eq!(format!("\"8\""), *m.get(&"\"8\"".to_string()).unwrap()); + assert_eq!(format!("\"7\""), *m.get("\"7\"").unwrap()); + assert_eq!(format!("\"8\""), *m.get("\"8\"").unwrap()); } #[tokio::test] diff --git a/deny.toml b/deny.toml index 4d26ba89ccb0e..b1f837e63143e 100644 --- a/deny.toml +++ b/deny.toml @@ -9,42 +9,15 @@ # The values provided in this template are the default values that will be used # when any section or field is not specified in your own configuration -# If 1 or more target triples (and optionally, target_features) are specified, -# only the specified targets will be checked when running `cargo deny check`. -# This means, if a particular package is only ever used as a target specific -# dependency, such as, for example, the `nix` crate only being used via the -# `target_family = "unix"` configuration, that only having windows targets in -# this list would mean the nix crate, as well as any of its exclusive -# dependencies not shared by any other crates, would be ignored, as the target -# list here is effectively saying which targets you are building for. -targets = [ - # The triple can be any string, but only the target triples built in to - # rustc (as of 1.40) can be checked against actual config expressions - #{ triple = "x86_64-unknown-linux-musl" }, - # You can also specify which target_features you promise are enabled for a - # particular target. target_features are currently not validated against - # the actual valid features supported by the target architecture. - #{ triple = "wasm32-unknown-unknown", features = ["atomics"] }, -] - # This section is considered when running `cargo deny check advisories` # More documentation for the advisories section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html [advisories] +version = 2 # The path where the advisory database is cloned/fetched into db-path = "~/.cargo/advisory-db" # The url(s) of the advisory databases to use db-urls = ["https://github.com/rustsec/advisory-db"] -# The lint level for security vulnerabilities -vulnerability = "deny" -# The lint level for unmaintained crates -unmaintained = "warn" -# The lint level for crates that have been yanked from their source registry -yanked = "warn" -# The lint level for crates with security notices. Note that as of -# 2019-12-17 there are no security notice advisories in -# https://github.com/rustsec/advisory-db -notice = "warn" # A list of advisory IDs to ignore. Note that ignored advisories will still # output a note when they are encountered. ignore = [ @@ -55,8 +28,6 @@ ignore = [ "RUSTSEC-2022-0071", # `tui` is unmaintained; use `ratatui` instead "RUSTSEC-2023-0049", - # ansi_term is Unmaintained - "RUSTSEC-2021-0139", # we don't do RSA signing on Sui (only verifying for zklogin) "RUSTSEC-2023-0071", # A few dependencies use unpatched rustls. @@ -78,8 +49,7 @@ ignore = [ # More documentation for the licenses section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html [licenses] -# The lint level for crates which do not have a detectable license -unlicensed = "deny" +version = 2 # List of explicitly allowed licenses # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.11 short identifier (+ optional exception)]. @@ -98,26 +68,6 @@ allow = [ "Unicode-DFS-2016", #"Apache-2.0 WITH LLVM-exception", ] -# List of explicitly disallowed licenses -# See https://spdx.org/licenses/ for list of possible licenses -# [possible values: any SPDX 3.11 short identifier (+ optional exception)]. -deny = [ - #"Nokia", -] -# Lint level for licenses considered copyleft -copyleft = "deny" -# Blanket approval or denial for OSI-approved or FSF Free/Libre licenses -# * both - The license will be approved if it is both OSI-approved *AND* FSF -# * either - The license will be approved if it is either OSI-approved *OR* FSF -# * osi-only - The license will be approved if is OSI-approved *AND NOT* FSF -# * fsf-only - The license will be approved if is FSF *AND NOT* OSI-approved -# * neither - This predicate is ignored and the default lint level is used -allow-osi-fsf-free = "neither" -# Lint level used when no other predicates are matched -# 1. License isn't in the allow or deny lists -# 2. License isn't copyleft -# 3. License isn't OSI/FSF, or allow-osi-fsf-free = "neither" -default = "deny" # The confidence threshold for detecting a license from license text. # The higher the value, the more closely the license text must be to the # canonical license text of a valid SPDX license file. @@ -251,8 +201,6 @@ github = [ "mystenmark", "bmwill", "mystenlabs", - "MystenLabs", "nextest-rs", "wlmyng", # jsonrpsee fork - "quinn-rs", ] diff --git a/docker/deterministic-canary/Dockerfile b/docker/deterministic-canary/Dockerfile index 67f253135d3b6..5ebdef630f182 100644 --- a/docker/deterministic-canary/Dockerfile +++ b/docker/deterministic-canary/Dockerfile @@ -1,7 +1,7 @@ ARG PROFILE=release # ARG BUILD_DATE # ARG GIT_REVISION -ARG RUST_VERSION=1.76.0 +ARG RUST_VERSION=1.80.1 FROM scratch AS base diff --git a/docker/sui-bridge-indexer/Dockerfile b/docker/sui-bridge-indexer/Dockerfile index 3be48a6e006cb..4f0fcde7b9c42 100644 --- a/docker/sui-bridge-indexer/Dockerfile +++ b/docker/sui-bridge-indexer/Dockerfile @@ -2,7 +2,7 @@ # # Copy in all crates, Cargo.toml and Cargo.lock unmodified, # and build the application. -FROM rust:1.75-bullseye AS builder +FROM rust:1.80.1-bullseye AS builder ARG PROFILE=release ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/docker/sui-graphql-rpc/Dockerfile b/docker/sui-graphql-rpc/Dockerfile index 0035b8268bd81..049b8603e39c8 100644 --- a/docker/sui-graphql-rpc/Dockerfile +++ b/docker/sui-graphql-rpc/Dockerfile @@ -2,7 +2,7 @@ # # Copy in all crates, Cargo.toml and Cargo.lock unmodified, # and build the application. -FROM rust:1.75-bullseye AS builder +FROM rust:1.80.1-bullseye AS builder ARG PROFILE=release ENV PROFILE=$PROFILE ARG GIT_REVISION diff --git a/docker/sui-indexer-tidb/Dockerfile b/docker/sui-indexer-tidb/Dockerfile index d1d46bf81024c..6d11dc569bd60 100644 --- a/docker/sui-indexer-tidb/Dockerfile +++ b/docker/sui-indexer-tidb/Dockerfile @@ -2,7 +2,7 @@ # # Copy in all crates, Cargo.toml and Cargo.lock unmodified, # and build the application. -FROM rust:1.75-bullseye AS builder +FROM rust:1.80.1-bullseye AS builder ARG PROFILE=release ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/docker/sui-indexer/Dockerfile b/docker/sui-indexer/Dockerfile index db27235841255..98635444f78c3 100644 --- a/docker/sui-indexer/Dockerfile +++ b/docker/sui-indexer/Dockerfile @@ -2,7 +2,7 @@ # # Copy in all crates, Cargo.toml and Cargo.lock unmodified, # and build the application. -FROM rust:1.75-bullseye AS builder +FROM rust:1.80.1-bullseye AS builder ARG PROFILE=release ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/docker/sui-node/Dockerfile b/docker/sui-node/Dockerfile index 190e352cc6da6..e9557b7698adc 100644 --- a/docker/sui-node/Dockerfile +++ b/docker/sui-node/Dockerfile @@ -2,7 +2,7 @@ # # Copy in all crates, Cargo.toml and Cargo.lock unmodified, # and build the application. -FROM rust:1.75-bullseye AS builder +FROM rust:1.80.1-bullseye AS builder ARG PROFILE=release ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/docker/sui-services/Dockerfile b/docker/sui-services/Dockerfile index dd9cc69f5edda..2002fe6b9140b 100644 --- a/docker/sui-services/Dockerfile +++ b/docker/sui-services/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.75-bullseye AS chef +FROM rust:1.80.1-bullseye AS chef WORKDIR sui ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/docker/sui-source-service/Dockerfile b/docker/sui-source-service/Dockerfile index bb73ef2e3e0d5..0936bd0562256 100644 --- a/docker/sui-source-service/Dockerfile +++ b/docker/sui-source-service/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.75-bullseye AS chef +FROM rust:1.80.1-bullseye AS chef WORKDIR sui ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/docker/sui-tools/Dockerfile b/docker/sui-tools/Dockerfile index e475fd2abf160..4f800e03b01e6 100644 --- a/docker/sui-tools/Dockerfile +++ b/docker/sui-tools/Dockerfile @@ -2,7 +2,7 @@ # # Copy in all crates, Cargo.toml and Cargo.lock unmodified, # and build the application. -FROM rust:1.75-bullseye AS builder +FROM rust:1.80.1-bullseye AS builder ARG PROFILE=release ARG GIT_REVISION ENV GIT_REVISION=$GIT_REVISION diff --git a/external-crates/move/Cargo.toml b/external-crates/move/Cargo.toml index 8bac472e296d6..4aeea3a73a592 100644 --- a/external-crates/move/Cargo.toml +++ b/external-crates/move/Cargo.toml @@ -83,7 +83,7 @@ parking_lot = "0.11.1" paste = "1.0.5" petgraph = "0.5.1" phf = { version = "0.11", features = ["macros"] } -plotters = { version = "0.3.0", default_features = false, features = ["evcxr", "line_series", "histogram"]} +plotters = { version = "0.3.0", default-features = false, features = ["evcxr", "line_series", "histogram"]} pretty = "0.10.0" prettydiff = "0.4.0" primitive-types = { version = "0.10.1", features = ["impl-serde"]} diff --git a/external-crates/move/crates/move-binary-format/src/file_format.rs b/external-crates/move/crates/move-binary-format/src/file_format.rs index ff60d27ee3849..c65207ff96e15 100644 --- a/external-crates/move/crates/move-binary-format/src/file_format.rs +++ b/external-crates/move/crates/move-binary-format/src/file_format.rs @@ -12,15 +12,15 @@ //! //! Overall the binary format is structured in a number of sections: //! - **Header**: this must start at offset 0 in the binary. It contains a blob that starts every -//! Diem binary, followed by the version of the VM used to compile the code, and last is the -//! number of tables present in this binary. +//! Diem binary, followed by the version of the VM used to compile the code, and last is the +//! number of tables present in this binary. //! - **Table Specification**: it's a number of tuple of the form -//! `(table type, starting_offset, byte_count)`. The number of entries is specified in the -//! header (last entry in header). There can only be a single entry per table type. The -//! `starting offset` is from the beginning of the binary. Tables must cover the entire size of -//! the binary blob and cannot overlap. +//! `(table type, starting_offset, byte_count)`. The number of entries is specified in the +//! header (last entry in header). There can only be a single entry per table type. The +//! `starting offset` is from the beginning of the binary. Tables must cover the entire size of +//! the binary blob and cannot overlap. //! - **Table Content**: the serialized form of the specific entries in the table. Those roughly -//! map to the structs defined in this module. Entries in each table must be unique. +//! map to the structs defined in this module. Entries in each table must be unique. //! //! We have two formats: one for modules here represented by `CompiledModule`, another //! for transaction scripts which is `CompiledScript`. Building those tables and passing them diff --git a/external-crates/move/crates/move-binary-format/src/file_format_common.rs b/external-crates/move/crates/move-binary-format/src/file_format_common.rs index 7c81c755a012a..7d006ef74f9f9 100644 --- a/external-crates/move/crates/move-binary-format/src/file_format_common.rs +++ b/external-crates/move/crates/move-binary-format/src/file_format_common.rs @@ -334,7 +334,7 @@ pub enum Opcodes { } /// Upper limit on the binary size -pub const BINARY_SIZE_LIMIT: usize = usize::max_value(); +pub const BINARY_SIZE_LIMIT: usize = usize::MAX; /// A wrapper for the binary vector #[derive(Default, Debug)] diff --git a/external-crates/move/crates/move-binary-format/src/proptest_types/functions.rs b/external-crates/move/crates/move-binary-format/src/proptest_types/functions.rs index a549e18fb8b94..42bbfacfc1b75 100644 --- a/external-crates/move/crates/move-binary-format/src/proptest_types/functions.rs +++ b/external-crates/move/crates/move-binary-format/src/proptest_types/functions.rs @@ -55,7 +55,7 @@ impl SignatureState { } fn add_signature(&mut self, sig: Signature) -> SignatureIndex { - debug_assert!(self.signatures.len() < TableSize::max_value() as usize); + debug_assert!(self.signatures.len() < TableSize::MAX as usize); if let Some(idx) = self.signature_map.get(&sig) { return *idx; } @@ -81,7 +81,7 @@ impl FieldHandleState { #[allow(unused)] fn add_field_handle(&mut self, fh: FieldHandle) -> FieldHandleIndex { - debug_assert!(self.field_handles.len() < TableSize::max_value() as usize); + debug_assert!(self.field_handles.len() < TableSize::MAX as usize); if let Some(idx) = self.field_map.get(&fh) { return *idx; } @@ -105,7 +105,7 @@ impl VariantHandleState { } fn add_variant_handle(&mut self, vh: VariantHandle) -> Option { - debug_assert!(self.variant_handles.len() < TableSize::max_value() as usize); + debug_assert!(self.variant_handles.len() < TableSize::MAX as usize); if let Some(idx) = self.variant_map.get(&vh) { return Some(*idx); } @@ -135,7 +135,7 @@ impl VariantInstantiationHandleState { &mut self, vh: VariantInstantiationHandle, ) -> Option { - debug_assert!(self.variant_instantiation_handles.len() < TableSize::max_value() as usize); + debug_assert!(self.variant_instantiation_handles.len() < TableSize::MAX as usize); if let Some(idx) = self.variant_map.get(&vh) { return Some(*idx); } @@ -179,7 +179,7 @@ where #[allow(unused)] fn add_instantiation(&mut self, inst: T) -> TableIndex { - debug_assert!(self.instantiations.len() < TableSize::max_value() as usize); + debug_assert!(self.instantiations.len() < TableSize::MAX as usize); if let Some(idx) = self.instantiation_map.get(&inst) { return *idx; } @@ -381,7 +381,7 @@ impl<'a> FnDefnMaterializeState<'a> { } fn add_function_handle(&mut self, handle: FunctionHandle) -> FunctionHandleIndex { - debug_assert!(self.function_handles.len() < TableSize::max_value() as usize); + debug_assert!(self.function_handles.len() < TableSize::MAX as usize); self.function_handles.push(handle); FunctionHandleIndex((self.function_handles.len() - 1) as TableIndex) } @@ -488,7 +488,7 @@ impl FunctionDefinitionGen { pub fn materialize(self, state: &mut FnDefnMaterializeState) -> Option { // This precondition should never fail because the table size cannot be greater - // than TableSize::max_value() + // than TableSize::MAX let iden_idx = IdentifierIndex(self.name.index(state.identifiers_len) as TableIndex); if state .def_function_handles diff --git a/external-crates/move/crates/move-binary-format/src/proptest_types/types.rs b/external-crates/move/crates/move-binary-format/src/proptest_types/types.rs index 6cd5e43e76afd..49071e100b080 100644 --- a/external-crates/move/crates/move-binary-format/src/proptest_types/types.rs +++ b/external-crates/move/crates/move-binary-format/src/proptest_types/types.rs @@ -23,9 +23,6 @@ use proptest::{ }; use std::collections::BTreeSet; -#[derive(Debug)] -struct TypeSignatureIndex(u16); - #[derive(Debug)] pub struct StDefnMaterializeState { pub self_module_handle_idx: ModuleHandleIndex, diff --git a/external-crates/move/crates/move-binary-format/src/serializer.rs b/external-crates/move/crates/move-binary-format/src/serializer.rs index 2d5a362e23914..0c8c6038df4d9 100644 --- a/external-crates/move/crates/move-binary-format/src/serializer.rs +++ b/external-crates/move/crates/move-binary-format/src/serializer.rs @@ -228,11 +228,11 @@ impl CompiledModule { let mut ser = ModuleSerializer::new(version); let mut temp = BinaryData::new(); ser.serialize_tables(&mut temp, self)?; - if temp.len() > u32::max_value() as usize { + if temp.len() > u32::MAX as usize { bail!( "table content size ({}) cannot exceed ({})", temp.len(), - u32::max_value() + u32::MAX ); } ser.common.serialize_header(&mut binary_data)?; @@ -296,11 +296,11 @@ struct ModuleSerializer { // Helpers // fn check_index_in_binary(index: usize) -> Result { - if index > u32::max_value() as usize { + if index > u32::MAX as usize { bail!( "Compilation unit too big ({}) cannot exceed {}", index, - u32::max_value() + u32::MAX ) } Ok(index as u32) diff --git a/external-crates/move/crates/move-binary-format/src/unit_tests/number_tests.rs b/external-crates/move/crates/move-binary-format/src/unit_tests/number_tests.rs index b99e94bb66e33..1e5f97f551374 100644 --- a/external-crates/move/crates/move-binary-format/src/unit_tests/number_tests.rs +++ b/external-crates/move/crates/move-binary-format/src/unit_tests/number_tests.rs @@ -42,8 +42,8 @@ fn uleb128_test() { uleb128_test_u64(2u64.pow(exp), n + 1); n += 1; } - uleb128_test_u64(u64::max_value() - 1, 10); - uleb128_test_u64(u64::max_value(), 10); + uleb128_test_u64(u64::MAX - 1, 10); + uleb128_test_u64(u64::MAX, 10); } #[test] diff --git a/external-crates/move/crates/move-bytecode-verifier/src/control_flow_v5.rs b/external-crates/move/crates/move-bytecode-verifier/src/control_flow_v5.rs index b24d7aeca62b9..eb705b9498b8b 100644 --- a/external-crates/move/crates/move-bytecode-verifier/src/control_flow_v5.rs +++ b/external-crates/move/crates/move-bytecode-verifier/src/control_flow_v5.rs @@ -37,7 +37,7 @@ pub fn verify( fn verify_fallthrough( current_function: FunctionDefinitionIndex, - code: &Vec, + code: &[Bytecode], ) -> PartialVMResult<()> { // Check to make sure that the bytecode vector ends with a branching instruction. match code.last() { diff --git a/external-crates/move/crates/move-bytecode-verifier/src/script_signature.rs b/external-crates/move/crates/move-bytecode-verifier/src/script_signature.rs index a26628c138ed0..8f11893a3f44a 100644 --- a/external-crates/move/crates/move-bytecode-verifier/src/script_signature.rs +++ b/external-crates/move/crates/move-bytecode-verifier/src/script_signature.rs @@ -9,6 +9,7 @@ //! - (DEPRECATED) Has an empty return type //! - All return types are not references //! - Satisfies the additional checks provided as an argument via `check_signature` +//! //! `check_signature` should be used by adapters to quickly and easily verify custom signature //! rules for entrypoints diff --git a/external-crates/move/crates/move-command-line-common/src/files.rs b/external-crates/move/crates/move-command-line-common/src/files.rs index 9300f49f895fc..b7b1039c7c12a 100644 --- a/external-crates/move/crates/move-command-line-common/src/files.rs +++ b/external-crates/move/crates/move-command-line-common/src/files.rs @@ -212,6 +212,7 @@ pub fn try_exists_vfs(vfs_path: &VfsPath) -> VfsResult { /// - For each directory in `paths`, it will return all files that satisfy the predicate /// - Any file explicitly passed in `paths`, it will include that file in the result, regardless /// of the file extension +/// /// It implements the same functionality as find_filenames above but for the virtual file system pub fn find_filenames_vfs bool>( paths: &[VfsPath], @@ -244,7 +245,8 @@ pub fn find_filenames_vfs bool>( /// - For each directory in `paths`, it will return all files with the `MOVE_EXTENSION` found /// recursively in that directory /// - If `keep_specified_files` any file explicitly passed in `paths`, will be added to the result -/// Otherwise, they will be discarded +/// +/// Otherwise, they will be discarded /// It implements the same functionality as find_move_filenames above but for the virtual file /// system pub fn find_move_filenames_vfs( diff --git a/external-crates/move/crates/move-compiler/src/cfgir/cfg.rs b/external-crates/move/crates/move-compiler/src/cfgir/cfg.rs index d640a3f20589a..8cad547a7ce11 100644 --- a/external-crates/move/crates/move-compiler/src/cfgir/cfg.rs +++ b/external-crates/move/crates/move-compiler/src/cfgir/cfg.rs @@ -205,6 +205,7 @@ impl<'a> ImmForwardCFG<'a> { /// Returns /// - A CFG /// - A set of infinite loop heads + /// /// This _must_ be called after `BlockMutCFG::new`, as the mutable version optimizes the code /// This will be done for external usage, /// since the Mut CFG is used during the building of the cfgir::ast::Program diff --git a/external-crates/move/crates/move-compiler/src/naming/translate.rs b/external-crates/move/crates/move-compiler/src/naming/translate.rs index ed6593ec344e9..f238eb60f6ff1 100644 --- a/external-crates/move/crates/move-compiler/src/naming/translate.rs +++ b/external-crates/move/crates/move-compiler/src/naming/translate.rs @@ -51,6 +51,7 @@ pub struct ResolvedModuleFunction { pub mident: ModuleIdent, pub name: FunctionName, pub tyarg_arity: usize, + #[allow(unused)] pub arity: usize, } @@ -93,6 +94,7 @@ pub enum FieldInfo { pub struct ResolvedConstant { pub mident: ModuleIdent, pub name: ConstantName, + #[allow(unused)] pub decl_loc: Loc, } @@ -138,6 +140,7 @@ pub(super) enum ResolvedConstructor { #[derive(Debug, Clone)] pub(super) enum ResolvedCallSubject { Builtin(Box), + #[allow(unused)] Constructor(Box), Function(Box), Var(Box), @@ -146,6 +149,7 @@ pub(super) enum ResolvedCallSubject { #[derive(Debug, Clone)] pub(super) enum ResolvedUseFunFunction { + #[allow(unused)] Builtin(Box), Module(Box), Unbound, @@ -3193,7 +3197,7 @@ fn unique_pattern_binders( ) -> Vec<(Mutability, P::Var)> { use E::MatchPattern_ as EP; - fn report_duplicate(context: &mut Context, var: P::Var, locs: &Vec<(Mutability, Loc)>) { + fn report_duplicate(context: &mut Context, var: P::Var, locs: &[(Mutability, Loc)]) { assert!(locs.len() > 1, "ICE pattern duplicate detection error"); let (_, first_loc) = locs.first().unwrap(); let mut diag = diag!( diff --git a/external-crates/move/crates/move-compiler/src/to_bytecode/canonicalize_handles.rs b/external-crates/move/crates/move-compiler/src/to_bytecode/canonicalize_handles.rs index 36d4a2544ef4b..5f816dd627ab4 100644 --- a/external-crates/move/crates/move-compiler/src/to_bytecode/canonicalize_handles.rs +++ b/external-crates/move/crates/move-compiler/src/to_bytecode/canonicalize_handles.rs @@ -31,7 +31,7 @@ use move_symbol_pool::Symbol; /// /// - Friend Declarations are sorted in lexical order (by address name and module name), followed by /// unnamed addresses in their original order. - +/// /// Key for ordering module handles, distinguishing the module's self handle, handles with names, /// and handles without names. #[derive(Eq, PartialEq, Ord, PartialOrd)] @@ -336,7 +336,7 @@ fn remap_code(code: &mut CodeUnit, functions: &[TableIndex]) { /// /// is sorted according to `key`. fn permutation<'p, T, K: Ord>( - pool: &'p Vec, + pool: &'p [T], key: impl Fn(TableIndex, &'p T) -> K + 'p, ) -> Vec { let mut inverse: Vec<_> = (0..pool.len() as TableIndex).collect(); @@ -352,7 +352,7 @@ fn permutation<'p, T, K: Ord>( /// Re-order `pool` according to the `permutation` array. `permutation[i]` is the new location of /// `pool[i]`. -fn apply_permutation(pool: &mut Vec, mut permutation: Vec) { +fn apply_permutation(pool: &mut [T], mut permutation: Vec) { assert_eq!(pool.len(), permutation.len()); // At every iteration we confirm that one more value is in its final position in the pool, diff --git a/external-crates/move/crates/move-compiler/src/typing/deprecation_warnings.rs b/external-crates/move/crates/move-compiler/src/typing/deprecation_warnings.rs index dc6c387a99cd9..9ba6765d66dc3 100644 --- a/external-crates/move/crates/move-compiler/src/typing/deprecation_warnings.rs +++ b/external-crates/move/crates/move-compiler/src/typing/deprecation_warnings.rs @@ -19,6 +19,7 @@ const NOTE_STR: &str = "note"; #[derive(Debug, Clone)] pub struct Deprecation { // The source location of the deprecation attribute + #[allow(unused)] pub source_location: Loc, // The type of the member that is deprecated (function, constant, etc.) pub location: AttributePosition, diff --git a/external-crates/move/crates/move-compiler/src/typing/expand.rs b/external-crates/move/crates/move-compiler/src/typing/expand.rs index 2fd127861672a..9f36764277e55 100644 --- a/external-crates/move/crates/move-compiler/src/typing/expand.rs +++ b/external-crates/move/crates/move-compiler/src/typing/expand.rs @@ -318,11 +318,11 @@ fn inferred_numerical_value( Some(sp!(_, bt)) if bt.is_numeric() => bt, _ => panic!("ICE inferred num failed {:?}", &ty.value), }; - let u8_max = U256::from(std::u8::MAX); - let u16_max = U256::from(std::u16::MAX); - let u32_max = U256::from(std::u32::MAX); - let u64_max = U256::from(std::u64::MAX); - let u128_max = U256::from(std::u128::MAX); + let u8_max = U256::from(u8::MAX); + let u16_max = U256::from(u16::MAX); + let u32_max = U256::from(u32::MAX); + let u64_max = U256::from(u64::MAX); + let u128_max = U256::from(u128::MAX); let u256_max = U256::max_value(); let max = match bt { BT::U8 => u8_max, diff --git a/external-crates/move/crates/move-compiler/src/unit_test/plan_builder.rs b/external-crates/move/crates/move-compiler/src/unit_test/plan_builder.rs index 066cd6f982799..7aab1a163d71d 100644 --- a/external-crates/move/crates/move-compiler/src/unit_test/plan_builder.rs +++ b/external-crates/move/crates/move-compiler/src/unit_test/plan_builder.rs @@ -713,7 +713,7 @@ fn convert_attribute_value_u64( ) -> Option<(Loc, u64)> { use E::{AttributeValue_ as EAV, Value_ as EV}; match value { - sp!(vloc, EAV::Value(sp!(_, EV::InferredNum(u)))) if *u <= U256::from(std::u64::MAX) => { + sp!(vloc, EAV::Value(sp!(_, EV::InferredNum(u)))) if *u <= U256::from(u64::MAX) => { Some((*vloc, u.down_cast_lossy())) } sp!(vloc, EAV::Value(sp!(_, EV::U64(u)))) => Some((*vloc, *u)), diff --git a/external-crates/move/crates/move-core-types/src/state.rs b/external-crates/move/crates/move-core-types/src/state.rs index 6d94c574a9dd6..f57e1abdcad79 100644 --- a/external-crates/move/crates/move-core-types/src/state.rs +++ b/external-crates/move/crates/move-core-types/src/state.rs @@ -13,7 +13,7 @@ pub enum VMState { } thread_local! { - static STATE: RefCell = RefCell::new(VMState::OTHER); + static STATE: RefCell = const { RefCell::new(VMState::OTHER) }; } pub fn set_state(state: VMState) -> VMState { diff --git a/external-crates/move/crates/move-core-types/src/u256.rs b/external-crates/move/crates/move-core-types/src/u256.rs index fb240326cebad..d47245857df5c 100644 --- a/external-crates/move/crates/move-core-types/src/u256.rs +++ b/external-crates/move/crates/move-core-types/src/u256.rs @@ -567,7 +567,6 @@ impl Distribution for Standard { // Rand impl below are inspired by u128 impl found in https://rust-random.github.io/rand/src/rand/distributions/uniform.rs.html #[derive(Clone, Copy, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] pub struct UniformU256 { low: U256, range: U256, diff --git a/external-crates/move/crates/move-ir-to-bytecode/src/context.rs b/external-crates/move/crates/move-ir-to-bytecode/src/context.rs index b62cda8506c6d..1d320b4653cf9 100644 --- a/external-crates/move/crates/move-ir-to-bytecode/src/context.rs +++ b/external-crates/move/crates/move-ir-to-bytecode/src/context.rs @@ -48,7 +48,7 @@ macro_rules! get_or_add_item_macro { }}; } -pub const TABLE_MAX_SIZE: usize = u16::max_value() as usize; +pub const TABLE_MAX_SIZE: usize = u16::MAX as usize; fn get_or_add_item_ref( m: &mut HashMap, k: &K, diff --git a/external-crates/move/crates/move-model/src/ty.rs b/external-crates/move/crates/move-model/src/ty.rs index 8083e4eaa7119..31ef1d646d1b7 100644 --- a/external-crates/move/crates/move-model/src/ty.rs +++ b/external-crates/move/crates/move-model/src/ty.rs @@ -173,19 +173,18 @@ impl Type { /// Returns true if this is any number type. pub fn is_number(&self) -> bool { - if let Type::Primitive(p) = self { - if let PrimitiveType::U8 - | PrimitiveType::U16 - | PrimitiveType::U32 - | PrimitiveType::U64 - | PrimitiveType::U128 - | PrimitiveType::U256 - | PrimitiveType::Num = p - { - return true; - } - } - false + matches!( + self, + Type::Primitive( + PrimitiveType::U8 + | PrimitiveType::U16 + | PrimitiveType::U32 + | PrimitiveType::U64 + | PrimitiveType::U128 + | PrimitiveType::U256 + | PrimitiveType::Num, + ) + ) } /// Returns true if this is an address or signer type. pub fn is_signer_or_address(&self) -> bool { @@ -780,6 +779,7 @@ impl TypeUnificationAdapter { /// - any type parameter on the LHS with index < P will be treated as concrete types and /// - only type parameters on the LHS with index >= P are treated as variables and thus, /// participate in the type unification process. + /// /// The same rule applies to the RHS parameters via `treat_rhs_type_param_as_var_after_index`. fn new<'a, I>( lhs_types: I, @@ -982,6 +982,7 @@ impl TypeInstantiationDerivation { /// - be assigned with a concrete type already and hence, ceases to be a type parameter, or /// - does not have any matching instantiation and hence, either remains a type parameter or is /// represented as a type error. + /// /// But in anyway, these type parameters no longer participate in type unification anymore. /// /// If `target_lhs` is True, derive instantiations for the type parameter with @@ -1043,6 +1044,7 @@ impl TypeInstantiationDerivation { /// - finds all possible instantiations for parameter at index 2 (`inst_param_2`) /// - for each instantiation in `inst_param_2`, /// - ...... + /// /// The process continues until all type parameters are analyzed (i.e., reaching the type /// parameter at index `N`). /// diff --git a/external-crates/move/crates/move-stackless-bytecode/src/access_path.rs b/external-crates/move/crates/move-stackless-bytecode/src/access_path.rs index 52927f081a542..84d41e97e530d 100644 --- a/external-crates/move/crates/move-stackless-bytecode/src/access_path.rs +++ b/external-crates/move/crates/move-stackless-bytecode/src/access_path.rs @@ -6,6 +6,7 @@ //! memory. Some examples of concrete paths are: //! * `0x7/M::T/f` (i.e., the field `f` of the `M::T` resource stored at address `0x7` //! * `Formal(0)/[2]` (i.e., the value stored at index 2 of the array bound the 0th formal of the current procedure) +//! //! An abstract path is similar; it consists of the following components: //! * A *root*, which is either an abstract address or a local //! * Zero or more *offsets*, where an offset is a field, an unknown vector index, or an abstract struct type diff --git a/external-crates/move/crates/move-stackless-bytecode/src/inconsistency_check.rs b/external-crates/move/crates/move-stackless-bytecode/src/inconsistency_check.rs index 7ca6aad925ba2..8a5f2dec7e20a 100644 --- a/external-crates/move/crates/move-stackless-bytecode/src/inconsistency_check.rs +++ b/external-crates/move/crates/move-stackless-bytecode/src/inconsistency_check.rs @@ -11,6 +11,7 @@ //! an `assert false` before //! - every `return` and //! - every `abort` (if the `unconditional-abort-as-inconsistency` option is set). +//! //! In this way, if the instrumented `assert false` can be proved, it means we have an inconsistency //! in the specifications. //! diff --git a/external-crates/move/crates/move-stackless-bytecode/src/packed_types_analysis.rs b/external-crates/move/crates/move-stackless-bytecode/src/packed_types_analysis.rs index 1e0783cd8b308..10fc6fbe99891 100644 --- a/external-crates/move/crates/move-stackless-bytecode/src/packed_types_analysis.rs +++ b/external-crates/move/crates/move-stackless-bytecode/src/packed_types_analysis.rs @@ -26,6 +26,7 @@ use crate::{ /// - Transaction scripts have at most 1 type argument /// - The only values that can be bound to a transaction script type argument are XUS and /// XDX. Passing any other values will lead to an aborted transaction. +/// /// The first assumption is checked and will trigger an assert failure if violated. The second /// is unchecked, but would be a nice property for the prover. pub fn get_packed_types( diff --git a/external-crates/move/crates/move-stdlib-natives/src/debug.rs b/external-crates/move/crates/move-stdlib-natives/src/debug.rs index 1aee70ebed864..d4e55a46ea170 100644 --- a/external-crates/move/crates/move-stdlib-natives/src/debug.rs +++ b/external-crates/move/crates/move-stdlib-natives/src/debug.rs @@ -286,7 +286,7 @@ mod testing { Ok(()) } - fn is_non_empty_vector_u8(vec: &Vec) -> bool { + fn is_non_empty_vector_u8(vec: &[A::MoveValue]) -> bool { if vec.is_empty() { false } else { diff --git a/external-crates/move/crates/move-vm-runtime/src/tracing.rs b/external-crates/move/crates/move-vm-runtime/src/tracing.rs index b016879c9bb45..a4c984c62a537 100644 --- a/external-crates/move/crates/move-vm-runtime/src/tracing.rs +++ b/external-crates/move/crates/move-vm-runtime/src/tracing.rs @@ -48,7 +48,6 @@ static DEBUGGING_ENABLED: Lazy = static LOGGING_FILE: Lazy> = Lazy::new(|| { Mutex::new( OpenOptions::new() - .write(true) .create(true) .append(true) .open(&*FILE_PATH) diff --git a/external-crates/move/crates/move-vm-test-utils/src/gas_schedule.rs b/external-crates/move/crates/move-vm-test-utils/src/gas_schedule.rs index 2d4cfed4537ed..128d7e4447841 100644 --- a/external-crates/move/crates/move-vm-test-utils/src/gas_schedule.rs +++ b/external-crates/move/crates/move-vm-test-utils/src/gas_schedule.rs @@ -33,10 +33,7 @@ use move_vm_types::{ }; use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; -use std::{ - ops::{Add, Mul}, - u64, -}; +use std::ops::{Add, Mul}; pub enum GasUnit {} pub type Gas = GasQuantity; diff --git a/external-crates/move/crates/move-vm-types/src/values/values_impl.rs b/external-crates/move/crates/move-vm-types/src/values/values_impl.rs index e09471bf6e027..aab6897fdc244 100644 --- a/external-crates/move/crates/move-vm-types/src/values/values_impl.rs +++ b/external-crates/move/crates/move-vm-types/src/values/values_impl.rs @@ -2018,7 +2018,7 @@ impl IntegerValue { match self { U8(x) => Ok(x), U16(x) => { - if x > (std::u8::MAX as u16) { + if x > (u8::MAX as u16) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u16({}) to u8", x))) } else { @@ -2026,7 +2026,7 @@ impl IntegerValue { } } U32(x) => { - if x > (std::u8::MAX as u32) { + if x > (u8::MAX as u32) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u32({}) to u8", x))) } else { @@ -2034,7 +2034,7 @@ impl IntegerValue { } } U64(x) => { - if x > (std::u8::MAX as u64) { + if x > (u8::MAX as u64) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u64({}) to u8", x))) } else { @@ -2042,7 +2042,7 @@ impl IntegerValue { } } U128(x) => { - if x > (std::u8::MAX as u128) { + if x > (u8::MAX as u128) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u128({}) to u8", x))) } else { @@ -2050,7 +2050,7 @@ impl IntegerValue { } } U256(x) => { - if x > (u256::U256::from(std::u8::MAX)) { + if x > (u256::U256::from(u8::MAX)) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u256({}) to u8", x))) } else { @@ -2067,7 +2067,7 @@ impl IntegerValue { U8(x) => Ok(x as u16), U16(x) => Ok(x), U32(x) => { - if x > (std::u16::MAX as u32) { + if x > (u16::MAX as u32) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u32({}) to u16", x))) } else { @@ -2075,7 +2075,7 @@ impl IntegerValue { } } U64(x) => { - if x > (std::u16::MAX as u64) { + if x > (u16::MAX as u64) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u64({}) to u16", x))) } else { @@ -2083,7 +2083,7 @@ impl IntegerValue { } } U128(x) => { - if x > (std::u16::MAX as u128) { + if x > (u16::MAX as u128) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u128({}) to u16", x))) } else { @@ -2091,7 +2091,7 @@ impl IntegerValue { } } U256(x) => { - if x > (u256::U256::from(std::u16::MAX)) { + if x > (u256::U256::from(u16::MAX)) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u256({}) to u16", x))) } else { @@ -2109,7 +2109,7 @@ impl IntegerValue { U16(x) => Ok(x as u32), U32(x) => Ok(x), U64(x) => { - if x > (std::u32::MAX as u64) { + if x > (u32::MAX as u64) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u64({}) to u32", x))) } else { @@ -2117,7 +2117,7 @@ impl IntegerValue { } } U128(x) => { - if x > (std::u32::MAX as u128) { + if x > (u32::MAX as u128) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u128({}) to u32", x))) } else { @@ -2125,7 +2125,7 @@ impl IntegerValue { } } U256(x) => { - if x > (u256::U256::from(std::u32::MAX)) { + if x > (u256::U256::from(u32::MAX)) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u128({}) to u32", x))) } else { @@ -2144,7 +2144,7 @@ impl IntegerValue { U32(x) => Ok(x as u64), U64(x) => Ok(x), U128(x) => { - if x > (std::u64::MAX as u128) { + if x > (u64::MAX as u128) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u128({}) to u64", x))) } else { @@ -2152,7 +2152,7 @@ impl IntegerValue { } } U256(x) => { - if x > (u256::U256::from(std::u64::MAX)) { + if x > (u256::U256::from(u64::MAX)) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u256({}) to u64", x))) } else { @@ -2172,7 +2172,7 @@ impl IntegerValue { U64(x) => Ok(x as u128), U128(x) => Ok(x), U256(x) => { - if x > (u256::U256::from(std::u128::MAX)) { + if x > (u256::U256::from(u128::MAX)) { Err(PartialVMError::new(StatusCode::ARITHMETIC_ERROR) .with_message(format!("Cannot cast u256({}) to u128", x))) } else { diff --git a/external-crates/move/crates/test-generation/src/abstract_state.rs b/external-crates/move/crates/test-generation/src/abstract_state.rs index 00325826f9402..b83e2759c98b9 100644 --- a/external-crates/move/crates/test-generation/src/abstract_state.rs +++ b/external-crates/move/crates/test-generation/src/abstract_state.rs @@ -511,7 +511,7 @@ impl AbstractState { pub fn stack_push(&mut self, item: AbstractValue) { // Programs that are large enough to exceed this bound // will not be generated - debug_assert!(self.stack.len() < usize::max_value()); + debug_assert!(self.stack.len() < usize::MAX); self.stack.push(item); } @@ -521,7 +521,7 @@ impl AbstractState { if let Some(abstract_value) = self.register_move() { // Programs that are large enough to exceed this bound // will not be generated - debug_assert!(self.stack.len() < usize::max_value()); + debug_assert!(self.stack.len() < usize::MAX); self.stack.push(abstract_value); Ok(()) } else { diff --git a/external-crates/move/crates/test-generation/src/borrow_graph.rs b/external-crates/move/crates/test-generation/src/borrow_graph.rs index df1ea3fde6c18..8d5a489a78136 100644 --- a/external-crates/move/crates/test-generation/src/borrow_graph.rs +++ b/external-crates/move/crates/test-generation/src/borrow_graph.rs @@ -67,7 +67,7 @@ impl BorrowGraph { } self.partition_map.insert(self.partition_counter, vec![n]); // Implication of `checked_add` - debug_assert!(self.partitions.len() < usize::max_value()); + debug_assert!(self.partitions.len() < usize::MAX); self.partitions.push(self.partition_counter); Ok(()) } else { diff --git a/external-crates/move/crates/test-generation/src/bytecode_generator.rs b/external-crates/move/crates/test-generation/src/bytecode_generator.rs index 3177706654b32..efbb3aae9141e 100644 --- a/external-crates/move/crates/test-generation/src/bytecode_generator.rs +++ b/external-crates/move/crates/test-generation/src/bytecode_generator.rs @@ -157,7 +157,7 @@ impl FunctionGenerationContext { pub fn incr_instruction_count(&mut self) -> Option<()> { self.bytecode_len += 1; - if self.bytecode_len >= (u16::max_value() - 1) as u64 { + if self.bytecode_len >= (u16::MAX - 1) as u64 { return None; } Some(()) @@ -357,25 +357,23 @@ impl<'a> BytecodeGenerator<'a> { } BytecodeType::U8(instruction) => { // Generate a random u8 constant to load - Some(instruction(self.rng.gen_range(0..u8::max_value()))) + Some(instruction(self.rng.gen_range(0..u8::MAX))) } BytecodeType::U16(instruction) => { // Generate a random u16 constant to load - Some(instruction(self.rng.gen_range(0..u16::max_value()))) + Some(instruction(self.rng.gen_range(0..u16::MAX))) } BytecodeType::U32(instruction) => { // Generate a random u32 constant to load - Some(instruction(self.rng.gen_range(0..u32::max_value()))) + Some(instruction(self.rng.gen_range(0..u32::MAX))) } BytecodeType::U64(instruction) => { // Generate a random u64 constant to load - Some(instruction(self.rng.gen_range(0..u64::max_value()))) + Some(instruction(self.rng.gen_range(0..u64::MAX))) } BytecodeType::U128(instruction) => { // Generate a random u128 constant to load - Some(instruction(Box::new( - self.rng.gen_range(0..u128::max_value()), - ))) + Some(instruction(Box::new(self.rng.gen_range(0..u128::MAX)))) } BytecodeType::U256(instruction) => { // Generate a random u256 constant to load @@ -442,7 +440,7 @@ impl<'a> BytecodeGenerator<'a> { || unsatisfied_preconditions == 0 { // The size of matches cannot be greater than the number of bytecode instructions - debug_assert!(matches.len() < usize::max_value()); + debug_assert!(matches.len() < usize::MAX); matches.push((*stack_effect, instruction)); } } @@ -572,7 +570,7 @@ impl<'a> BytecodeGenerator<'a> { exact: bool, ) -> Option { // Bytecode will never be generated this large - debug_assert!(bytecode.len() < usize::max_value()); + debug_assert!(bytecode.len() < usize::MAX); debug!("**********************"); debug!("State1: {}", state); debug!("Next instr: {:?}", instruction); diff --git a/external-crates/move/crates/test-generation/src/control_flow_graph.rs b/external-crates/move/crates/test-generation/src/control_flow_graph.rs index 78100aa710d89..341d68ed5f6d7 100644 --- a/external-crates/move/crates/test-generation/src/control_flow_graph.rs +++ b/external-crates/move/crates/test-generation/src/control_flow_graph.rs @@ -95,22 +95,22 @@ impl CFG { // The number of edges will be at most `2*target_blocks`` // Since target blocks is at most a `u16`, this will not overflow even if // `usize` is a `u32` - debug_assert!(edges.len() < usize::max_value()); + debug_assert!(edges.len() < usize::MAX); edges.push((parent_block_id, current_block_id)); block_queue.push_back(current_block_id); // `current_block_id` is bound by the max og `target_block_size` - debug_assert!(current_block_id < u16::max_value()); + debug_assert!(current_block_id < u16::MAX); current_block_id += 1; // Generate a second child edge with prob = 1/2 if rng.gen_bool(0.5) && current_block_id < target_blocks { // The number of edges will be at most `2*target_blocks`` // Since target blocks is at most a `u16`, this will not overflow even if // `usize` is a `u32` - debug_assert!(edges.len() < usize::max_value()); + debug_assert!(edges.len() < usize::MAX); edges.push((parent_block_id, current_block_id)); block_queue.push_back(current_block_id); // `current_block_id` is bound by the max og `target_block_size` - debug_assert!(current_block_id < u16::max_value()); + debug_assert!(current_block_id < u16::MAX); current_block_id += 1; } } @@ -156,7 +156,7 @@ impl CFG { for (parent, child) in self.edges.iter() { if *parent == block_id { // Length is bound by iteration on `self.edges` - debug_assert!(children_ids.len() < usize::max_value()); + debug_assert!(children_ids.len() < usize::MAX); children_ids.push(*child); } } @@ -175,7 +175,7 @@ impl CFG { for (parent, child) in self.edges.iter() { if *child == block_id { // Iteration is bound by the self.edges vector length - debug_assert!(parent_ids.len() < usize::max_value()); + debug_assert!(parent_ids.len() < usize::MAX); parent_ids.push(*parent); } } diff --git a/external-crates/move/crates/test-generation/src/lib.rs b/external-crates/move/crates/test-generation/src/lib.rs index 4a4ce8449659a..676044d88b632 100644 --- a/external-crates/move/crates/test-generation/src/lib.rs +++ b/external-crates/move/crates/test-generation/src/lib.rs @@ -236,9 +236,7 @@ pub fn module_frame_generation( let mut module = generate_module(&mut rng, generation_options.clone()); // Either get the number of iterations provided by the user, or iterate "infinitely"--up to // u128::MAX number of times. - let iters = num_iters - .map(|x| x as u128) - .unwrap_or_else(|| std::u128::MAX); + let iters = num_iters.map(|x| x as u128).unwrap_or_else(|| u128::MAX); while generated < iters && sender.send(module).is_ok() { module = generate_module(&mut rng, generation_options.clone()); diff --git a/external-crates/move/crates/test-generation/tests/generic_instructions.rs b/external-crates/move/crates/test-generation/tests/generic_instructions.rs index 66eb17078de50..0f6305f419638 100644 --- a/external-crates/move/crates/test-generation/tests/generic_instructions.rs +++ b/external-crates/move/crates/test-generation/tests/generic_instructions.rs @@ -13,7 +13,7 @@ use test_generation::transitions::Subst; #[test] fn unify_no_subst() { use SignatureToken::*; - let tys = vec![Bool, U64, Vector(Box::new(U8)), Address]; + let tys = [Bool, U64, Vector(Box::new(U8)), Address]; for tok1 in tys.iter() { for tok2 in tys.iter() { let should_unify = tok1.clone() == tok2.clone(); diff --git a/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/control_flow_v5.rs b/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/control_flow_v5.rs index b24d7aeca62b9..eb705b9498b8b 100644 --- a/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/control_flow_v5.rs +++ b/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/control_flow_v5.rs @@ -37,7 +37,7 @@ pub fn verify( fn verify_fallthrough( current_function: FunctionDefinitionIndex, - code: &Vec, + code: &[Bytecode], ) -> PartialVMResult<()> { // Check to make sure that the bytecode vector ends with a branching instruction. match code.last() { diff --git a/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/script_signature.rs b/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/script_signature.rs index b55ea638e1e3d..35b065b204dbe 100644 --- a/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/script_signature.rs +++ b/external-crates/move/move-execution/v0/crates/move-bytecode-verifier/src/script_signature.rs @@ -9,6 +9,7 @@ //! - (DEPRECATED) Has an empty return type //! - All return types are not references //! - Satisfies the additional checks provided as an argument via `check_signature` +//! //! `check_signature` should be used by adapters to quickly and easily verify custom signature //! rules for entrypoints diff --git a/external-crates/move/move-execution/v0/crates/move-vm-runtime/src/tracing.rs b/external-crates/move/move-execution/v0/crates/move-vm-runtime/src/tracing.rs index b016879c9bb45..a4c984c62a537 100644 --- a/external-crates/move/move-execution/v0/crates/move-vm-runtime/src/tracing.rs +++ b/external-crates/move/move-execution/v0/crates/move-vm-runtime/src/tracing.rs @@ -48,7 +48,6 @@ static DEBUGGING_ENABLED: Lazy = static LOGGING_FILE: Lazy> = Lazy::new(|| { Mutex::new( OpenOptions::new() - .write(true) .create(true) .append(true) .open(&*FILE_PATH) diff --git a/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/control_flow_v5.rs b/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/control_flow_v5.rs index b24d7aeca62b9..eb705b9498b8b 100644 --- a/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/control_flow_v5.rs +++ b/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/control_flow_v5.rs @@ -37,7 +37,7 @@ pub fn verify( fn verify_fallthrough( current_function: FunctionDefinitionIndex, - code: &Vec, + code: &[Bytecode], ) -> PartialVMResult<()> { // Check to make sure that the bytecode vector ends with a branching instruction. match code.last() { diff --git a/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/script_signature.rs b/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/script_signature.rs index b55ea638e1e3d..35b065b204dbe 100644 --- a/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/script_signature.rs +++ b/external-crates/move/move-execution/v1/crates/move-bytecode-verifier/src/script_signature.rs @@ -9,6 +9,7 @@ //! - (DEPRECATED) Has an empty return type //! - All return types are not references //! - Satisfies the additional checks provided as an argument via `check_signature` +//! //! `check_signature` should be used by adapters to quickly and easily verify custom signature //! rules for entrypoints diff --git a/external-crates/move/move-execution/v1/crates/move-vm-runtime/src/tracing.rs b/external-crates/move/move-execution/v1/crates/move-vm-runtime/src/tracing.rs index b016879c9bb45..a4c984c62a537 100644 --- a/external-crates/move/move-execution/v1/crates/move-vm-runtime/src/tracing.rs +++ b/external-crates/move/move-execution/v1/crates/move-vm-runtime/src/tracing.rs @@ -48,7 +48,6 @@ static DEBUGGING_ENABLED: Lazy = static LOGGING_FILE: Lazy> = Lazy::new(|| { Mutex::new( OpenOptions::new() - .write(true) .create(true) .append(true) .open(&*FILE_PATH) diff --git a/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/control_flow_v5.rs b/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/control_flow_v5.rs index b24d7aeca62b9..eb705b9498b8b 100644 --- a/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/control_flow_v5.rs +++ b/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/control_flow_v5.rs @@ -37,7 +37,7 @@ pub fn verify( fn verify_fallthrough( current_function: FunctionDefinitionIndex, - code: &Vec, + code: &[Bytecode], ) -> PartialVMResult<()> { // Check to make sure that the bytecode vector ends with a branching instruction. match code.last() { diff --git a/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/script_signature.rs b/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/script_signature.rs index b55ea638e1e3d..35b065b204dbe 100644 --- a/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/script_signature.rs +++ b/external-crates/move/move-execution/v2/crates/move-bytecode-verifier/src/script_signature.rs @@ -9,6 +9,7 @@ //! - (DEPRECATED) Has an empty return type //! - All return types are not references //! - Satisfies the additional checks provided as an argument via `check_signature` +//! //! `check_signature` should be used by adapters to quickly and easily verify custom signature //! rules for entrypoints diff --git a/external-crates/move/move-execution/v2/crates/move-vm-runtime/src/tracing.rs b/external-crates/move/move-execution/v2/crates/move-vm-runtime/src/tracing.rs index b016879c9bb45..a4c984c62a537 100644 --- a/external-crates/move/move-execution/v2/crates/move-vm-runtime/src/tracing.rs +++ b/external-crates/move/move-execution/v2/crates/move-vm-runtime/src/tracing.rs @@ -48,7 +48,6 @@ static DEBUGGING_ENABLED: Lazy = static LOGGING_FILE: Lazy> = Lazy::new(|| { Mutex::new( OpenOptions::new() - .write(true) .create(true) .append(true) .open(&*FILE_PATH) diff --git a/narwhal/config/src/lib.rs b/narwhal/config/src/lib.rs index 37f92aec91fb9..6ee97a903091f 100644 --- a/narwhal/config/src/lib.rs +++ b/narwhal/config/src/lib.rs @@ -99,7 +99,11 @@ impl Import for D {} pub trait Export: Serialize { fn export(&self, path: &str) -> Result<(), ConfigError> { let writer = || -> Result<(), std::io::Error> { - let file = OpenOptions::new().create(true).write(true).open(path)?; + let file = OpenOptions::new() + .create(true) + .truncate(true) + .write(true) + .open(path)?; let mut writer = BufWriter::new(file); let data = serde_json::to_string_pretty(self).unwrap(); writer.write_all(data.as_ref())?; diff --git a/narwhal/node/src/benchmark_client.rs b/narwhal/node/src/benchmark_client.rs index 1f6e10843dfec..a8d721f882d8c 100644 --- a/narwhal/node/src/benchmark_client.rs +++ b/narwhal/node/src/benchmark_client.rs @@ -31,6 +31,7 @@ use worker::LazyNarwhalClient; /// * the size of the transactions via the --size property /// * the worker address to send the transactions to. A url format is expected ex http://127.0.0.1:7000 /// * the rate of sending transactions via the --rate parameter +/// /// Optionally the --nodes parameter can be passed where a list of worker addresses /// should be passed. The benchmarking client will first try to connect to all of those nodes before start sending /// any transactions. That confirms the system is up and running and ready to start processing the transactions. diff --git a/narwhal/node/src/main.rs b/narwhal/node/src/main.rs index 8de09ecd12106..3aa919b9b5012 100644 --- a/narwhal/node/src/main.rs +++ b/narwhal/node/src/main.rs @@ -303,7 +303,7 @@ async fn main() -> Result<(), eyre::Report> { /// Generate all the genesis files required for benchmarks. fn benchmark_genesis( - ips: &Vec, + ips: &[String], working_directory: &PathBuf, num_workers: usize, base_port: usize, diff --git a/narwhal/primary/src/consensus/metrics.rs b/narwhal/primary/src/consensus/metrics.rs index d855a249327bf..11a16da29d8f9 100644 --- a/narwhal/primary/src/consensus/metrics.rs +++ b/narwhal/primary/src/consensus/metrics.rs @@ -37,7 +37,7 @@ pub struct ConsensusMetrics { /// all the nodes are expected to report the same results. For every leader of each round the /// output can be one of the following: /// * committed: the leader has been found and its subdag will get committed - no matter if the leader - /// is committed on its time or not (part of recursion) + /// is committed on its time or not (part of recursion) /// * not_found: the leader has not been found on the commit path and doesn't get committed /// * no_path: the leader exists but there is no path that leads to it pub leader_election: IntCounterVec, @@ -135,9 +135,9 @@ pub struct ChannelMetrics { /// occupancy of the channel from the `Consensus` to `SubscriberHandler`. /// See also: /// * tx_committed_certificates in primary, where the committed certificates - /// from `Consensus` are sent to `primary::StateHandler` + /// from `Consensus` are sent to `primary::StateHandler` /// * tx_new_certificates where the newly accepted certificates are sent - /// from `primary::Synchronizer` to `Consensus` + /// from `primary::Synchronizer` to `Consensus` pub tx_sequence: IntGauge, } diff --git a/narwhal/primary/src/synchronizer.rs b/narwhal/primary/src/synchronizer.rs index 6ce964d43501a..f7953c8bfab87 100644 --- a/narwhal/primary/src/synchronizer.rs +++ b/narwhal/primary/src/synchronizer.rs @@ -336,6 +336,7 @@ impl Inner { /// - Validating and accepting certificates received from peers. /// - Triggering fetching for certificates and batches. /// - Broadcasting created certificates. +/// /// `Synchronizer` contains most of the certificate processing logic in Narwhal. #[derive(Clone)] pub struct Synchronizer { @@ -1516,9 +1517,7 @@ impl State { ) -> Option<((u64, CertificateDigest), Option)> { // Accept suspended certificates at and below gc round because their parents will not // be accepted into the DAG store anymore, in sanitize_certificate(). - let Some(((round, digest), _children)) = self.missing.first_key_value() else { - return None; - }; + let ((round, digest), _children) = self.missing.first_key_value()?; // Note that gc_round is the highest round where certificates are gc'ed, and which will // never be in a consensus commit. It's safe to gc up to gc_round, so anything suspended on gc_round + 1 // can safely be accepted as their parents (of gc_round) have already been removed from the DAG. diff --git a/narwhal/primary/tests/randomized_tests.rs b/narwhal/primary/tests/randomized_tests.rs index 79274b9dbdd18..db357ab53ae5a 100644 --- a/narwhal/primary/tests/randomized_tests.rs +++ b/narwhal/primary/tests/randomized_tests.rs @@ -299,7 +299,7 @@ fn generate_randomised_dag( /// * nodes that don't create certificates at all for some rounds (failures) /// * leaders that don't get enough support (f+1) for their immediate round /// * slow nodes - nodes that create certificates but those might not referenced by nodes of -/// subsequent rounds. +/// subsequent rounds. pub fn make_certificates_with_parameters( seed: u64, committee: &Committee, diff --git a/narwhal/storage/src/certificate_store.rs b/narwhal/storage/src/certificate_store.rs index 17517c5edd686..8f1264f94745d 100644 --- a/narwhal/storage/src/certificate_store.rs +++ b/narwhal/storage/src/certificate_store.rs @@ -187,50 +187,6 @@ impl Cache for CertificateStoreCache { } } -/// An implementation that basically disables the caching functionality when used for CertificateStore. -#[derive(Clone)] -struct NoCache {} - -impl Cache for NoCache { - fn write(&self, _certificate: Certificate) { - // no-op - } - - fn write_all(&self, _certificate: Vec) { - // no-op - } - - fn read(&self, _digest: &CertificateDigest) -> Option { - None - } - - fn read_all( - &self, - digests: Vec, - ) -> Vec<(CertificateDigest, Option)> { - digests.into_iter().map(|digest| (digest, None)).collect() - } - - fn contains(&self, _digest: &CertificateDigest) -> bool { - false - } - - fn multi_contains<'a>( - &self, - digests: impl Iterator, - ) -> Vec { - digests.map(|_| false).collect() - } - - fn remove(&self, _digest: &CertificateDigest) { - // no-op - } - - fn remove_all(&self, _digests: Vec) { - // no-op - } -} - /// The main storage when we have to deal with certificates. It maintains /// two storages, one main which saves the certificates by their ids, and a /// secondary one which acts as an index to allow us fast retrieval based @@ -731,7 +687,7 @@ impl CertificateStore { #[cfg(test)] mod test { - use crate::certificate_store::{CertificateStore, NoCache}; + use crate::certificate_store::CertificateStore; use crate::{Cache, CertificateStoreCache}; use config::AuthorityIdentifier; use fastcrypto::hash::Hash; @@ -749,6 +705,50 @@ mod test { use test_utils::{latest_protocol_version, temp_dir, CommitteeFixture}; use types::{Certificate, CertificateAPI, CertificateDigest, HeaderAPI, Round}; + /// An implementation that basically disables the caching functionality when used for CertificateStore. + #[derive(Clone)] + struct NoCache {} + + impl Cache for NoCache { + fn write(&self, _certificate: Certificate) { + // no-op + } + + fn write_all(&self, _certificate: Vec) { + // no-op + } + + fn read(&self, _digest: &CertificateDigest) -> Option { + None + } + + fn read_all( + &self, + digests: Vec, + ) -> Vec<(CertificateDigest, Option)> { + digests.into_iter().map(|digest| (digest, None)).collect() + } + + fn contains(&self, _digest: &CertificateDigest) -> bool { + false + } + + fn multi_contains<'a>( + &self, + digests: impl Iterator, + ) -> Vec { + digests.map(|_| false).collect() + } + + fn remove(&self, _digest: &CertificateDigest) { + // no-op + } + + fn remove_all(&self, _digests: Vec) { + // no-op + } + } + fn new_store(path: std::path::PathBuf) -> CertificateStore { let (certificate_map, certificate_id_by_round_map, certificate_id_by_origin_map) = create_db_maps(path); diff --git a/narwhal/test-utils/src/cluster.rs b/narwhal/test-utils/src/cluster.rs index 84fbf658a12b2..cd0e426f2a90d 100644 --- a/narwhal/test-utils/src/cluster.rs +++ b/narwhal/test-utils/src/cluster.rs @@ -178,6 +178,7 @@ impl Cluster { /// Returns all the running authorities. Any authority that: /// * has been started ever /// * or has been stopped + /// /// will not be returned by this method. pub async fn authorities(&self) -> Vec { let mut result = Vec::new(); diff --git a/narwhal/types/src/primary.rs b/narwhal/types/src/primary.rs index a2ab6d0afcd68..a478479ab0e54 100644 --- a/narwhal/types/src/primary.rs +++ b/narwhal/types/src/primary.rs @@ -1729,6 +1729,7 @@ pub struct FetchCertificatesRequest { /// This contains per authority serialized RoaringBitmap for the round diffs between /// - rounds of certificates to be skipped from the response and /// - the GC round. + /// /// These rounds are skipped because the requestor already has them. pub skip_rounds: Vec<(AuthorityIdentifier, Vec)>, /// Maximum number of certificates that should be returned. diff --git a/narwhal/worker/Cargo.toml b/narwhal/worker/Cargo.toml index bfb56b3886dfe..6b70a2be94f81 100644 --- a/narwhal/worker/Cargo.toml +++ b/narwhal/worker/Cargo.toml @@ -6,6 +6,9 @@ authors = ["Mysten Labs "] edition = "2021" publish = false +[lints] +workspace = true + [dependencies] arc-swap.workspace = true async-trait.workspace = true diff --git a/narwhal/worker/src/handlers.rs b/narwhal/worker/src/handlers.rs index e908739dbd7ba..8aab5309d1820 100644 --- a/narwhal/worker/src/handlers.rs +++ b/narwhal/worker/src/handlers.rs @@ -114,6 +114,7 @@ impl WorkerToWorker for WorkerReceiverHandler { /// Defines how the network receiver handles incoming primary messages. pub struct PrimaryReceiverHandler { // The id of this authority. + #[allow(unused)] pub authority_id: AuthorityIdentifier, // The id of this worker. pub id: WorkerId, @@ -127,6 +128,7 @@ pub struct PrimaryReceiverHandler { // Timeout on RequestBatches RPC. pub request_batches_timeout: Duration, // Number of random nodes to query when retrying batch requests. + #[allow(unused)] pub request_batches_retry_nodes: usize, // Synchronize header payloads from other workers. pub network: Option, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 6d833ff50699a..a56a283d2abc1 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.75" +channel = "1.80.1" diff --git a/sui-execution/latest/sui-adapter/Cargo.toml b/sui-execution/latest/sui-adapter/Cargo.toml index 04f1d9734cf8d..7a58fe23095ff 100644 --- a/sui-execution/latest/sui-adapter/Cargo.toml +++ b/sui-execution/latest/sui-adapter/Cargo.toml @@ -7,6 +7,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow = { workspace = true, features = ["backtrace"] } bcs.workspace = true diff --git a/sui-execution/latest/sui-move-natives/src/crypto/group_ops.rs b/sui-execution/latest/sui-move-natives/src/crypto/group_ops.rs index 7a740b6f2b191..93535741f7567 100644 --- a/sui-execution/latest/sui-move-natives/src/crypto/group_ops.rs +++ b/sui-execution/latest/sui-move-natives/src/crypto/group_ops.rs @@ -571,8 +571,8 @@ fn multi_scalar_mul( base_cost: Option, base_cost_per_addition: Option, max_len: u32, - scalars: &Vec, - points: &Vec, + scalars: &[u8], + points: &[u8], ) -> PartialVMResult where G: GroupElement diff --git a/sui-execution/latest/sui-verifier/src/entry_points_verifier.rs b/sui-execution/latest/sui-verifier/src/entry_points_verifier.rs index e3147b9d5a24d..9eadf862fcad0 100644 --- a/sui-execution/latest/sui-verifier/src/entry_points_verifier.rs +++ b/sui-execution/latest/sui-verifier/src/entry_points_verifier.rs @@ -28,8 +28,8 @@ use crate::{verification_failure, INIT_FN_NAME}; /// - The function must have `Visibility::Private` /// - The function can have at most two parameters: /// - mandatory &mut TxContext or &TxContext (see `is_tx_context`) in the last position -/// - optional one-time witness type (see one_time_witness verifier pass) passed by value in the first -/// position +/// - optional one-time witness type (see one_time_witness verifier pass) passed by value in the +/// first position /// /// For transaction entry points /// - The function must have `is_entry` true diff --git a/sui-execution/v0/sui-adapter/Cargo.toml b/sui-execution/v0/sui-adapter/Cargo.toml index 0eb11447ba112..745245766b109 100644 --- a/sui-execution/v0/sui-adapter/Cargo.toml +++ b/sui-execution/v0/sui-adapter/Cargo.toml @@ -7,6 +7,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow = { workspace = true, features = ["backtrace"] } bcs.workspace = true diff --git a/sui-execution/v0/sui-verifier/Cargo.toml b/sui-execution/v0/sui-verifier/Cargo.toml index bb3dde2501689..e5304b9386808 100644 --- a/sui-execution/v0/sui-verifier/Cargo.toml +++ b/sui-execution/v0/sui-verifier/Cargo.toml @@ -7,6 +7,9 @@ description = "Move framework for Sui platform" license = "Apache-2.0" publish = false +[lints] +workspace = true + [dependencies] move-binary-format.workspace = true move-bytecode-utils.workspace = true diff --git a/sui-execution/v0/sui-verifier/src/entry_points_verifier.rs b/sui-execution/v0/sui-verifier/src/entry_points_verifier.rs index b32ba8fcde498..002d0b3a795c3 100644 --- a/sui-execution/v0/sui-verifier/src/entry_points_verifier.rs +++ b/sui-execution/v0/sui-verifier/src/entry_points_verifier.rs @@ -27,7 +27,7 @@ use crate::{verification_failure, INIT_FN_NAME}; /// - The function can have at most two parameters: /// - mandatory &mut TxContext or &TxContext (see `is_tx_context`) in the last position /// - optional one-time witness type (see one_time_witness verifier pass) passed by value in the first -/// position +/// position /// /// For transaction entry points /// - The function must have `is_entry` true diff --git a/sui-execution/v1/sui-adapter/Cargo.toml b/sui-execution/v1/sui-adapter/Cargo.toml index 8dce979551406..d986af97a9856 100644 --- a/sui-execution/v1/sui-adapter/Cargo.toml +++ b/sui-execution/v1/sui-adapter/Cargo.toml @@ -7,6 +7,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow = { workspace = true, features = ["backtrace"] } bcs.workspace = true diff --git a/sui-execution/v1/sui-verifier/src/entry_points_verifier.rs b/sui-execution/v1/sui-verifier/src/entry_points_verifier.rs index d107c81b98f4b..2f6a706e0f24d 100644 --- a/sui-execution/v1/sui-verifier/src/entry_points_verifier.rs +++ b/sui-execution/v1/sui-verifier/src/entry_points_verifier.rs @@ -27,7 +27,7 @@ use crate::{verification_failure, INIT_FN_NAME}; /// - The function can have at most two parameters: /// - mandatory &mut TxContext or &TxContext (see `is_tx_context`) in the last position /// - optional one-time witness type (see one_time_witness verifier pass) passed by value in the first -/// position +/// position /// /// For transaction entry points /// - The function must have `is_entry` true diff --git a/sui-execution/v2/sui-adapter/Cargo.toml b/sui-execution/v2/sui-adapter/Cargo.toml index ae29ab4845fc0..cb8bf360a0b12 100644 --- a/sui-execution/v2/sui-adapter/Cargo.toml +++ b/sui-execution/v2/sui-adapter/Cargo.toml @@ -7,6 +7,9 @@ license = "Apache-2.0" publish = false edition = "2021" +[lints] +workspace = true + [dependencies] anyhow = { workspace = true, features = ["backtrace"] } bcs.workspace = true diff --git a/sui-execution/v2/sui-move-natives/src/crypto/group_ops.rs b/sui-execution/v2/sui-move-natives/src/crypto/group_ops.rs index 54cc84f55be48..8f1e459486371 100644 --- a/sui-execution/v2/sui-move-natives/src/crypto/group_ops.rs +++ b/sui-execution/v2/sui-move-natives/src/crypto/group_ops.rs @@ -563,8 +563,8 @@ fn multi_scalar_mul( base_cost: Option, base_cost_per_addition: Option, max_len: u32, - scalars: &Vec, - points: &Vec, + scalars: &[u8], + points: &[u8], ) -> PartialVMResult where G: GroupElement diff --git a/sui-execution/v2/sui-verifier/src/entry_points_verifier.rs b/sui-execution/v2/sui-verifier/src/entry_points_verifier.rs index 9785762cf5581..6e17dba9ffa3b 100644 --- a/sui-execution/v2/sui-verifier/src/entry_points_verifier.rs +++ b/sui-execution/v2/sui-verifier/src/entry_points_verifier.rs @@ -29,7 +29,7 @@ use crate::{verification_failure, INIT_FN_NAME}; /// - The function can have at most two parameters: /// - mandatory &mut TxContext or &TxContext (see `is_tx_context`) in the last position /// - optional one-time witness type (see one_time_witness verifier pass) passed by value in the first -/// position +/// position /// /// For transaction entry points /// - The function must have `is_entry` true From 5855c7fc4c9da7132fe3a22064092a2438734175 Mon Sep 17 00:00:00 2001 From: Damir Shamanaev Date: Mon, 26 Aug 2024 20:19:46 +0300 Subject: [PATCH 48/57] [framework] Adds Option macros to release (#19101) ## Description Adds recent Option changes to release branch. ## Test plan How did you test the new or updated feature? --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: --- ...000000000000000000000000000000000000000002 | Bin 66623 -> 66660 bytes crates/sui-framework-snapshot/manifest.json | 2 +- .../packages/move-stdlib/sources/option.move | 43 ++++++++----- .../move-stdlib/tests/option_tests.move | 60 ++++++++++++++++++ .../packages_compiled/sui-framework | Bin 66558 -> 66595 bytes ..._populated_genesis_snapshot_matches-2.snap | 29 ++++----- 6 files changed, 103 insertions(+), 31 deletions(-) diff --git a/crates/sui-framework-snapshot/bytecode_snapshot/55/0x0000000000000000000000000000000000000000000000000000000000000002 b/crates/sui-framework-snapshot/bytecode_snapshot/55/0x0000000000000000000000000000000000000000000000000000000000000002 index 0c65581651840fbe5545ecd4f670d693e86bbe49..54d541c98c20262d6e1d64a7ab834589d98b3206 100644 GIT binary patch delta 1327 zcmZuwOK%%h6h8Mgb3J!5_Dsf(?L0h=$FZF_&Lno48#k{uG$CyhC=fPOED!>0h*Ua@^SbAp?|f(Oy??@gIpN>! z-P*rf|6=TSWdVRoph$~b?B$;*zsGKhPx(i}{wDLQlph8g)(^p7-1&ZF-Tk2Wz#V!R z%j~0=LWNu)FG2t%sKFF0!c%YswqQT~>elx0E)akhjM$?L;2DnMhCugOBc8L+ecndV zHLh>Oh|B;KYzJV;9BeC$?ci8&-B{O*^|a}7bqK|nhi>1?0*N9*fK;O@%A~>w(9z3` zWPr{s8fPPY^LF|5p0@)$HykpsZ64+e1KkYRK=<@A0lqRmLGf^P@+@gRKhUDF&WJ5$ zE)r@>(O%y$YIbb~l@(VBVRoxLN~GQMu7kaqKDZqn_q;u7bGg=;LzTIVNz%D=H32nx zg%PIeWFF=87S^iH`~u3gZM3U?#gF{DKU1oWjj#gCv)Hf3l{kv)ajg-@l#aU3=wL6 z{ZuWzdswS_Pb$y2Tybiyz*Gf6iq|p$*IAc)9Dz!TBM=kgsBs*o7?qgW{E|431&8RI zD;=354%L3dJ)5~ggpSObK%j@ymyY@*Og}zql6-pqXkQe(vK~oG@4kOr9L&O9OF@=7 zHWDc*TUmk7Wr}waRx?P31{5(dK`}i_)nnnD36D|tN#Sv7uI;7JriO{f^hCs^a1{`n zG_d0_C>&l<#e9!?*kQBh0P-M)heC43tmw#Cm|1n1!#W<-le~;Q6eC!P9BWuaQO6N) zVk(;EaSuLSM;NN84qfi>(832a_zH^WX*T`jj<@^ROy?uzXby8XXaA3`gnx!_XfPaT z>I_zg=^uBR$9W>!cusvoJ~$`O9gJphgE<4z81N2gfFPuCPT?%+AHNy?N2SUOgYxqY zMgO)l%W0Xt&|z%0zEgCd<1gC0%59-A$p-B2Pq<_VO$C0ar~O$)0?;!wH1HCS+YV?P NThE^U_}*(Le*=CBk;ni5 delta 1289 zcmZ`&J8v9S6h8MgbNAla*`0lPpWfHlyKC>R#~wQ#zwJ1&N=Jo+QihznPMRRLIFEb2`+eUT-Fbuxcv2ZC!!Z^P?;# zHyE+S)C!VHF};DLQuNo6R9fvOADmdc{68-MZ1 zGcpmM-d|0&6OPb=;&+5%Gp?N!<3H~wJ?RKnL>8}U5!ntG^@qprw-XJ%qAa2WQIaT2 z38kcxks{jCLMtsJ9iJcHO*n*_w=&s`A0M}C$=9h84%eKT_cB>S!Rof_aF?T4Nploq zqLOf!W>g}g`wdZ$0!5;fgIZ~#Xq0Yn*Jh3oIVDr(z>6~RXD7=f8~<|BCAs+N$&tvr z<){#^pME|!Hqz&gr6I+XjSCgEt*wlRN)#V1tR*zjG(%An0h&eS`0vxgd4)Q!4bx^= zrRFJb*BVzb<#<##6(SoBQ*7wc zsL9Jnp&7xOxKT^BAx*JpH+UDZSeifl=ok4YLp6=E@uN>$2mh;|rfI})5B@8qg?A-p zEHhM}xROA|;+gq?TW5uZ8dnHPPz`Cb)8uHU49y@X>EKQ;-CcoR_MP~_S?OKewDIby zS+Z;PqglMTS5z?c=55~Ow$O;N0ja#2Ly}l(@N!Yl>uZvMXo}{HlEm?}f@oSp)W3Xw H_Tj|~ip!4d diff --git a/crates/sui-framework-snapshot/manifest.json b/crates/sui-framework-snapshot/manifest.json index 251e84b33962f..52a6de4971010 100644 --- a/crates/sui-framework-snapshot/manifest.json +++ b/crates/sui-framework-snapshot/manifest.json @@ -438,7 +438,7 @@ ] }, "55": { - "git_revision": "e19a8015fb45", + "git_revision": "495a499c3ed2", "package_ids": [ "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000002", diff --git a/crates/sui-framework/packages/move-stdlib/sources/option.move b/crates/sui-framework/packages/move-stdlib/sources/option.move index b0f1862c91ba5..00d5b9a20686f 100644 --- a/crates/sui-framework/packages/move-stdlib/sources/option.move +++ b/crates/sui-framework/packages/move-stdlib/sources/option.move @@ -153,17 +153,14 @@ module std::option { /// Destroy `Option` and call the closure `f` on the value inside if it holds one. public macro fun do<$T>($o: Option<$T>, $f: |$T|) { let o = $o; - if (o.is_some()) { - $f(o.destroy_some()); - } + if (o.is_some()) $f(o.destroy_some()) + else o.destroy_none() } /// Execute a closure on the value inside `t` if it holds one. public macro fun do_ref<$T>($o: &Option<$T>, $f: |&$T|) { let o = $o; - if (o.is_some()) { - $f(o.borrow()); - } + if (o.is_some()) $f(o.borrow()); } /// Execute a closure on the mutable reference to the value inside `t` if it holds one. @@ -176,16 +173,24 @@ module std::option { /// Equivalent to Rust's `a.or(b)`. public macro fun or<$T>($o: Option<$T>, $default: Option<$T>): Option<$T> { let o = $o; - if (o.is_some()) o - else $default + if (o.is_some()) { + o + } else { + o.destroy_none(); + $default + } } /// If the value is `Some`, call the closure `f` on it. Otherwise, return `None`. /// Equivalent to Rust's `t.and_then(f)`. public macro fun and<$T, $U>($o: Option<$T>, $f: |$T| -> Option<$U>): Option<$U> { let o = $o; - if (o.is_some()) $f(o.extract()) - else none() + if (o.is_some()) { + $f(o.destroy_some()) + } else { + o.destroy_none(); + none() + } } /// If the value is `Some`, call the closure `f` on it. Otherwise, return `None`. @@ -199,9 +204,13 @@ module std::option { /// Map an `Option` to `Option` by applying a function to a contained value. /// Equivalent to Rust's `t.map(f)`. public macro fun map<$T, $U>($o: Option<$T>, $f: |$T| -> $U): Option<$U> { - let mut o = $o; - if (o.is_some()) some($f(o.extract())) - else none() + let o = $o; + if (o.is_some()) { + some($f(o.destroy_some())) + } else { + o.destroy_none(); + none() + } } /// Map an `Option` value to `Option` by applying a function to a contained value by reference. @@ -234,7 +243,11 @@ module std::option { /// deprecated in favor of this function. public macro fun destroy_or<$T>($o: Option<$T>, $default: $T): $T { let o = $o; - if (o.is_some()) o.destroy_some() - else $default + if (o.is_some()) { + o.destroy_some() + } else { + o.destroy_none(); + $default + } } } diff --git a/crates/sui-framework/packages/move-stdlib/tests/option_tests.move b/crates/sui-framework/packages/move-stdlib/tests/option_tests.move index a8cb8875d5495..18c02dcee2218 100644 --- a/crates/sui-framework/packages/move-stdlib/tests/option_tests.move +++ b/crates/sui-framework/packages/move-stdlib/tests/option_tests.move @@ -172,6 +172,8 @@ module std::option_tests { // === Macros === + public struct NoDrop {} + #[test] fun do_destroy() { let mut counter = 0; @@ -179,6 +181,12 @@ module std::option_tests { option::some(10).do!(|x| counter = counter + x); assert!(counter == 15); + + let some = option::some(NoDrop {}); + let none = option::none(); + + some.do!(|el| { let NoDrop {} = el; }); + none.do!(|el| { let NoDrop {} = el; }); } #[test] @@ -199,6 +207,49 @@ module std::option_tests { assert!(option::none().map_ref!(|x| vector[*x]) == option::none()); } + #[test] + fun map_no_drop() { + let none = option::none().map!(|el| { + let NoDrop {} = el; + 100u64 + }); + let some = option::some(NoDrop {}).map!(|el| { + let NoDrop {} = el; + 100u64 + }); + + assert!(none == option::none()); + assert!(some == option::some(100)); + } + + #[test] + fun or_no_drop() { + let none = option::none().or!(option::some(NoDrop {})); + let some = option::some(NoDrop {}).or!(option::some(NoDrop {})); + + assert!(none.is_some()); + assert!(some.is_some()); + + let NoDrop {} = none.destroy_some(); + let NoDrop {} = some.destroy_some(); + } + + #[test] + fun and_no_drop() { + let none = option::none().and!(|e| { + let NoDrop {} = e; + option::some(100) + }); + + let some = option::some(NoDrop {}).and!(|e| { + let NoDrop {} = e; + option::some(100) + }); + + assert!(some == option::some(100)); + assert!(none == option::none()); + } + #[test] fun filter() { assert!(option::some(5).filter!(|x| *x == 5) == option::some(5)); @@ -217,4 +268,13 @@ module std::option_tests { assert!(option::none().destroy_or!(10) == 10); assert!(option::some(5).destroy_or!(10) == 5); } + + #[test] + fun destroy_or_no_drop() { + let none = option::none().destroy_or!(NoDrop {}); + let some = option::some(NoDrop {}).destroy_or!(NoDrop {}); + + let NoDrop {} = some; + let NoDrop {} = none; + } } diff --git a/crates/sui-framework/packages_compiled/sui-framework b/crates/sui-framework/packages_compiled/sui-framework index 7e808acfe68d4facc2447aa27522b1728485b336..fa0f19b2b4ab59a685a19847154df0ccda882484 100644 GIT binary patch delta 1327 zcmZuw&2Jk;6o2!zJKou>y_>b;I3Hfe>)1{lXA?Wk#QAWVGzn>wLV<9qxT2N=Cz7Zj zBE*3r;Iub{gaE-ADJLYv1&ITQ6aN4gPN>IL;u3h{0Fg@f@V@4~_j|v$GZ*jkFCX%6 z+V_sWt9?HHhq3^`B~YZrUH0m4lz-3eick1Q!u~q*yObXWo7T_4U)=d=r0;%EeB=&2 ziDmX8rcfr=$SV-QC{$q@mf!~Lz%Cr6@7>!wI|KsovJtl_19+aJxFgVg!H5?vbYHSj zbd2j8F(NYn1=|5wHV1nOWBWK392o1Cv7R$sZVsUs_t5QmSs+nF2#`utL79{p0XnwD zNCxQql5sZEgZrh|y52tU+;GUiwt1K@40I!41Krgt1o+y-B*nw^smr8(exOCY&xkE% zR|&PHX!SRZn%kH~WyKXjnB6Rm5ove51F*N#U+za|UGFxvx!h>aqsnYyl60=$OhAq8 zFv3)gETEj(#ah)~SVXz8hjzs;`;lMsXGg2!BdoykEcPpLIga95T&>6PM026lX{{tl zr_(7Vqsi2Ay*IPg>@|AR>&0X_X}6NrwL~WiL8sm6CF9Nc&U|aE**#qBES|sp`UOjW zeC(gU^Tt%F;69 z3MD9R4T{zDEE*BNlGX3HBE^*T6q~I!|EG3kqq;}J-lRKFqLd~zA zuBM-!R4d-I$}=ukoSG{zT}F`NtxUjm*5w{Ypi#vUh=~c*I1W>cO3ZA0K^(|}Lv+rS zj?58hV;+=%`43eP%MNCXkOpj6ZR5)kCtSq3x!EGV1IwoB|~T`@IyW0&nXgso~5CImw4QAK;zhY L?)=-gb{_r>^hl56 delta 1290 zcmZ`&OK%%h6h8MgbA9i4?C~pp#;>*?f?nIo-L}_P&n5qn=d-A*vmgt{w;e^e8fKx_NR#-rF`UVTHj>;=IZN-4d;)EU!3Ga zU#5QYDb&d#IfM+9pamURfGxNN+wemC&fVR!eINkOn{YrGz%7p9S%K{{Cfv5Lea^-( zZ(7fU37G&W*b3m18SH30yNkVd0PfXvnz0b03g;%JeP zGoTv_gaAw3B-G|CdwtWS{Pc`Tp}Pk>oy{?@ZJx^)#<`ne;~YlI1o&!glHzc!bpg7Z zA7?SO!H6xUSCLeTnGGbBVsIHrrPXc{!t7qTLZls@x%*&WCHo*#*Ng#~9U22NKQabn zWynkl-CHKDk7h9?t{{O_n>PZ`m2F0t_Q@Q^{toi$;oLmN^DPVVZ*|*#wI2-T2a8cK8_tKNpcpilrdIlEy_N1tXMG~L6buKmgT-Je2*P2w z98~(Fa5O0Q!-KhS?)=@?AG7lh-~3Wc_oSYal2Fnll+q;@Dat5W5!{>zN&`vDQdyMs z;@94KL^|=EqqSr^;Rr1#en%)au{H& zT1j(MW1^C9m}XQWqW3vbkOD=bl!IDnqG*(EaMxyz5IH4N=D>?G@vA2*BpZKn(j&R} zhm%8*cgs;Bp1k+={KQzFJC=qNQ#Ni?)V8)VA}UdQxv-wlMAHmKO$2BbmE(u^3TGAS zJT*+4VU?P501w(38F!zj0c+ zgPS(~y=s>1nf+)MFYXl;jJyS#H@Ph|Vr)PvujY^>mKwZV)b|FOWFVTRIin Date: Thu, 29 Aug 2024 21:23:17 -0700 Subject: [PATCH 49/57] =?UTF-8?q?[pick][GraphQL/Events]=20Disable=20filter?= =?UTF-8?q?ing=20on=20both=20`event=5Ftype`=20and=20`emitting=E2=80=A6=20(?= =?UTF-8?q?#19135)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …_module` (#18740) ## Description Cherry pick event indexer + graphql changes. ## Test plan How did you test the new or updated feature? --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: --------- Co-authored-by: wlmyng <127570466+wlmyng@users.noreply.github.com> Co-authored-by: Lu Zhang <8418040+longbowlu@users.noreply.github.com> --- .github/workflows/bridge.yml | 4 +- bridge/evm/.gitignore | 3 +- bridge/evm/README.md | 13 +- bridge/evm/foundry.toml | 15 +- bridge/evm/remappings.txt | 13 +- bridge/evm/soldeer.lock | 24 -- .../event_connection/combo_filter_error.exp | 43 +++ .../event_connection/combo_filter_error.move | 51 +++ .../tests/event_connection/no_filter.exp | 254 ++++++++++++++ .../tests/event_connection/no_filter.move | 59 ++++ .../tests/event_connection/tx_digest.exp | 326 ++++++++++++++++++ .../tests/event_connection/tx_digest.move | 226 ++++++++++++ .../tests/event_connection/type_filter.exp | 211 ++++++++++++ .../tests/event_connection/type_filter.move | 140 ++++++++ .../event_connection/type_param_filter.exp | 182 ++++++++++ .../event_connection/type_param_filter.move | 92 +++++ crates/sui-graphql-rpc/schema.graphql | 6 +- .../sui-graphql-rpc/src/types/event/cursor.rs | 183 ++++++++++ .../sui-graphql-rpc/src/types/event/filter.rs | 44 +++ .../src/types/event/lookups.rs | 158 +++++++++ .../src/types/{event.rs => event/mod.rs} | 256 +++++--------- crates/sui-graphql-rpc/src/types/query.rs | 4 +- .../sui-graphql-rpc/src/types/type_filter.rs | 115 +----- .../snapshot_tests__schema_sdl_export.snap | 6 +- .../pg/2023-08-19-044020_events/up.sql | 8 - crates/sui-indexer/src/models/events.rs | 16 - crates/sui-indexer/src/schema/pg.rs | 8 - crates/sui-indexer/tests/ingestion_tests.rs | 69 +--- 28 files changed, 2093 insertions(+), 436 deletions(-) delete mode 100644 bridge/evm/soldeer.lock create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.exp create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.move create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.exp create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.move create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.exp create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.move create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.exp create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.move create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.exp create mode 100644 crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.move create mode 100644 crates/sui-graphql-rpc/src/types/event/cursor.rs create mode 100644 crates/sui-graphql-rpc/src/types/event/filter.rs create mode 100644 crates/sui-graphql-rpc/src/types/event/lookups.rs rename crates/sui-graphql-rpc/src/types/{event.rs => event/mod.rs} (50%) diff --git a/.github/workflows/bridge.yml b/.github/workflows/bridge.yml index 3bd5fea50a24e..ff3a4f8288e2b 100644 --- a/.github/workflows/bridge.yml +++ b/.github/workflows/bridge.yml @@ -92,7 +92,7 @@ jobs: - name: Install Foundry Dependencies working-directory: bridge/evm run: | - forge soldeer update + forge install https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@v5.0.1 https://github.com/foundry-rs/forge-std@v1.3.0 https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades --no-git --no-commit - name: cargo test run: | cargo nextest run --profile ci -E 'package(sui-bridge)' @@ -114,7 +114,7 @@ jobs: - name: Install Foundry Dependencies working-directory: bridge/evm run: | - forge soldeer update + forge install https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@v5.0.1 https://github.com/foundry-rs/forge-std@v1.3.0 https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades --no-git --no-commit - name: Check Bridge EVM Unit Tests shell: bash working-directory: bridge/evm diff --git a/bridge/evm/.gitignore b/bridge/evm/.gitignore index eede9111c4f1a..b03db232ccd9e 100644 --- a/bridge/evm/.gitignore +++ b/bridge/evm/.gitignore @@ -10,4 +10,5 @@ out*/ lcov.info broadcast/**/31337 -dependencies +lib/* + diff --git a/bridge/evm/README.md b/bridge/evm/README.md index 94667326299ca..97cbdb270a45c 100644 --- a/bridge/evm/README.md +++ b/bridge/evm/README.md @@ -1,6 +1,6 @@ # 🏄‍♂️ Quick Start -This project leverages [Foundry](https://github.com/foundry-rs/foundry) to manage dependencies (via soldeer), contract compilation, testing, deployment, and on chain interactions via Solidity scripting. +This project leverages [Foundry](https://github.com/foundry-rs/foundry) to manage dependencies, contract compilation, testing, deployment, and on chain interactions via Solidity scripting. #### Environment configuration @@ -14,7 +14,7 @@ Duplicate rename the `.env.example` file to `.env`. You'll need accounts and api To install the project dependencies, run: ```bash -forge soldeer update +forge install https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@v5.0.1 https://github.com/foundry-rs/forge-std@v1.3.0 https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades --no-git --no-commit ``` #### Compilation @@ -28,7 +28,8 @@ forge compile #### Testing ```bash -forge test +forge clean +forge test --ffi ``` #### Coverage @@ -44,13 +45,15 @@ forge coverage > The file should be named `.json` and should have the same fields and in the same order (alphabetical) as the `example.json`. ```bash -forge script script/deploy_bridge.s.sol --rpc-url <> --broadcast --verify +forge clean +forge script script/deploy_bridge.s.sol --rpc-url <> --broadcast --verify --ffi ``` **Local deployment** ```bash -forge script script/deploy_bridge.s.sol --fork-url anvil --broadcast +forge clean +forge script script/deploy_bridge.s.sol --fork-url anvil --broadcast --ffi ``` All deployments are saved in the `broadcast` directory. diff --git a/bridge/evm/foundry.toml b/bridge/evm/foundry.toml index ba31fcbba8e08..b2a3ebfec2a6d 100644 --- a/bridge/evm/foundry.toml +++ b/bridge/evm/foundry.toml @@ -3,31 +3,20 @@ src = 'contracts' test = 'test' no_match_test = "testSkip" out = 'out' -libs = ['dependencies'] +libs = ['lib'] solc = "0.8.20" build_info = true extra_output = ["storageLayout"] fs_permissions = [{ access = "read", path = "/"}] gas_reports = ["SuiBridge"] -ffi = true - [fmt] line_length = 100 - [fuzz] runs = 1000 - [rpc_endpoints] mainnet = "${MAINNET_RPC_URL}" sepolia = "${SEPOLIA_RPC_URL}" anvil = "http://localhost:8545" - [etherscan] sepolia = { key = "${ETHERSCAN_API_KEY}" } -mainnet = { key = "${ETHERSCAN_API_KEY}" } - -[dependencies] -forge-std = "1.9.2" -openzeppelin-foundry-upgrades = "0.3.1" -"@openzeppelin-contracts-upgradeable" = "5.0.1" -"@openzeppelin-contracts" = "5.0.1" \ No newline at end of file +mainnet = { key = "${ETHERSCAN_API_KEY}" } \ No newline at end of file diff --git a/bridge/evm/remappings.txt b/bridge/evm/remappings.txt index c680ee33d8dd9..5279b569511f7 100644 --- a/bridge/evm/remappings.txt +++ b/bridge/evm/remappings.txt @@ -1,8 +1,5 @@ -@forge-std=dependencies/forge-std-1.9.2/src -@openzeppelin/foundry-upgrades=dependencies/openzeppelin-foundry-upgrades-0.3.1/src -@openzeppelin/contracts=dependencies/@openzeppelin-contracts-5.0.1 -@openzeppelin/contracts-upgradeable=dependencies/@openzeppelin-contracts-upgradeable-5.0.1 -@forge-std-1.9.2=dependencies/forge-std-1.9.2 -@openzeppelin-foundry-upgrades-0.3.1=dependencies/openzeppelin-foundry-upgrades-0.3.1 -@openzeppelin-contracts-upgradeable-5.0.1=dependencies/@openzeppelin-contracts-upgradeable-5.0.1 -@openzeppelin-contracts-5.0.1=dependencies/@openzeppelin-contracts-5.0.1 \ No newline at end of file +@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/ +@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/ +@openzeppelin/openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/ +ds-test/=lib/forge-std/lib/ds-test/src/ +forge-std/=lib/openzeppelin-foundry-upgrades/lib/forge-std/src/ \ No newline at end of file diff --git a/bridge/evm/soldeer.lock b/bridge/evm/soldeer.lock deleted file mode 100644 index 20bd2407a347b..0000000000000 --- a/bridge/evm/soldeer.lock +++ /dev/null @@ -1,24 +0,0 @@ - -[[dependencies]] -name = "forge-std" -version = "1.9.2" -source = "https://soldeer-revisions.s3.amazonaws.com/forge-std/1_9_2_06-08-2024_17:31:25_forge-std-1.9.2.zip" -checksum = "20fd008c7c69b6c737cc0284469d1c76497107bc3e004d8381f6d8781cb27980" - -[[dependencies]] -name = "openzeppelin-foundry-upgrades" -version = "0.3.1" -source = "https://soldeer-revisions.s3.amazonaws.com/openzeppelin-foundry-upgrades/0_3_1_25-06-2024_18:12:33_openzeppelin-foundry-upgrades.zip" -checksum = "16a43c67b7c62e4a638b669b35f7b19c98a37278811fe910750b62b6e6fdffa7" - -[[dependencies]] -name = "@openzeppelin-contracts-upgradeable" -version = "5.0.1" -source = "https://soldeer-revisions.s3.amazonaws.com/@openzeppelin-contracts-upgradeable/5_0_1_22-01-2024_13:15:10_contracts-upgradeable.zip" -checksum = "cca37ad1d376a5c3954d1c2a8d2675339f182eee535caa7ba7ebf8d589a2c19a" - -[[dependencies]] -name = "@openzeppelin-contracts" -version = "5.0.1" -source = "https://soldeer-revisions.s3.amazonaws.com/@openzeppelin-contracts/5_0_1_22-01-2024_13:14:01_contracts.zip" -checksum = "c256cbf6f5f38d3b65c7528bbffb530d0bdb818a20c9d5b61235a829202d7df7" diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.exp b/crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.exp new file mode 100644 index 0000000000000..2e134867efbdc --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.exp @@ -0,0 +1,43 @@ +processed 5 tasks + +init: +A: object(0,0), B: object(0,1) + +task 1, lines 9-28: +//# publish +created: object(1,0) +mutated: object(0,2) +gas summary: computation_cost: 1000000, storage_cost: 5380800, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 2, line 30: +//# run Test::M2::emit_emit_a --sender A --args 20 +events: Event { package_id: Test, transaction_module: Identifier("M2"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [20, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 3, line 32: +//# create-checkpoint +Checkpoint created: 1 + +task 4, lines 34-51: +//# run-graphql +Response: { + "data": null, + "errors": [ + { + "message": "Filtering by both emitting module and event type is not supported", + "locations": [ + { + "line": 2, + "column": 3 + } + ], + "path": [ + "events" + ], + "extensions": { + "code": "BAD_USER_INPUT" + } + } + ] +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.move b/crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.move new file mode 100644 index 0000000000000..ad38316463e76 --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/combo_filter_error.move @@ -0,0 +1,51 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Tests that fetching events filtered on both emitting module and event would result +// in an error. + +//# init --protocol-version 51 --addresses Test=0x0 --accounts A B --simulator + +//# publish +module Test::M1 { + use sui::event; + + public struct EventA has copy, drop { + new_value: u64 + } + + public fun emit_a(value: u64) { + event::emit(EventA { new_value: value }) + } +} + +module Test::M2 { + use Test::M1; + + public fun emit_emit_a(value: u64) { + M1::emit_a(value); + } +} + +//# run Test::M2::emit_emit_a --sender A --args 20 + +//# create-checkpoint + +//# run-graphql +{ + events(filter: {sender: "@{A}", emittingModule: "@{Test}::M2", eventType: "@{Test}::M1::EventA"}) { + nodes { + sendingModule { + name + } + type { + repr + } + sender { + address + } + json + bcs + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.exp b/crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.exp new file mode 100644 index 0000000000000..3d916fe5b9508 --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.exp @@ -0,0 +1,254 @@ +processed 6 tasks + +init: +A: object(0,0) + +task 1, lines 6-25: +//# publish +created: object(1,0) +mutated: object(0,1) +gas summary: computation_cost: 1000000, storage_cost: 4970400, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 2, line 27: +//# run Test::M1::emit --sender A --args 0 +events: Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [0, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [1, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [2, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [3, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [4, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [5, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [6, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [7, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [8, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [9, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [10, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [11, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [12, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [13, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [14, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [15, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [16, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [17, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [18, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [19, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [20, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [21, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [22, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [23, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [24, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [25, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [26, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [27, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [28, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [29, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [30, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [31, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [32, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [33, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [34, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [35, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [36, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [37, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [38, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [39, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [40, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [41, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [42, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [43, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [44, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [45, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [46, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [47, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [48, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [49, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [50, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 3, line 29: +//# create-checkpoint +Checkpoint created: 1 + +task 4, lines 31-44: +//# run-graphql +Response: { + "data": { + "events": { + "pageInfo": { + "hasPreviousPage": false, + "hasNextPage": true, + "startCursor": "eyJ0eCI6MiwiZSI6MCwiYyI6MX0", + "endCursor": "eyJ0eCI6MiwiZSI6MTksImMiOjF9" + }, + "nodes": [ + { + "json": { + "new_value": "0" + } + }, + { + "json": { + "new_value": "1" + } + }, + { + "json": { + "new_value": "2" + } + }, + { + "json": { + "new_value": "3" + } + }, + { + "json": { + "new_value": "4" + } + }, + { + "json": { + "new_value": "5" + } + }, + { + "json": { + "new_value": "6" + } + }, + { + "json": { + "new_value": "7" + } + }, + { + "json": { + "new_value": "8" + } + }, + { + "json": { + "new_value": "9" + } + }, + { + "json": { + "new_value": "10" + } + }, + { + "json": { + "new_value": "11" + } + }, + { + "json": { + "new_value": "12" + } + }, + { + "json": { + "new_value": "13" + } + }, + { + "json": { + "new_value": "14" + } + }, + { + "json": { + "new_value": "15" + } + }, + { + "json": { + "new_value": "16" + } + }, + { + "json": { + "new_value": "17" + } + }, + { + "json": { + "new_value": "18" + } + }, + { + "json": { + "new_value": "19" + } + } + ] + } + } +} + +task 5, lines 46-59: +//# run-graphql --cursors {"tx":2,"e":19,"c":1} +Response: { + "data": { + "events": { + "pageInfo": { + "hasPreviousPage": true, + "hasNextPage": true, + "startCursor": "eyJ0eCI6MiwiZSI6MjAsImMiOjF9", + "endCursor": "eyJ0eCI6MiwiZSI6MzksImMiOjF9" + }, + "nodes": [ + { + "json": { + "new_value": "20" + } + }, + { + "json": { + "new_value": "21" + } + }, + { + "json": { + "new_value": "22" + } + }, + { + "json": { + "new_value": "23" + } + }, + { + "json": { + "new_value": "24" + } + }, + { + "json": { + "new_value": "25" + } + }, + { + "json": { + "new_value": "26" + } + }, + { + "json": { + "new_value": "27" + } + }, + { + "json": { + "new_value": "28" + } + }, + { + "json": { + "new_value": "29" + } + }, + { + "json": { + "new_value": "30" + } + }, + { + "json": { + "new_value": "31" + } + }, + { + "json": { + "new_value": "32" + } + }, + { + "json": { + "new_value": "33" + } + }, + { + "json": { + "new_value": "34" + } + }, + { + "json": { + "new_value": "35" + } + }, + { + "json": { + "new_value": "36" + } + }, + { + "json": { + "new_value": "37" + } + }, + { + "json": { + "new_value": "38" + } + }, + { + "json": { + "new_value": "39" + } + } + ] + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.move b/crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.move new file mode 100644 index 0000000000000..aaca18be1a12a --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/no_filter.move @@ -0,0 +1,59 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +//# init --protocol-version 48 --addresses Test=0x0 --accounts A --simulator + +//# publish +module Test::M1 { + use sui::event; + + public struct EventA has copy, drop { + new_value: u64 + } + + public entry fun no_emit(value: u64): u64 { + value + } + + public entry fun emit(value: u64) { + let mut i = 0; + while (i < 51) { + event::emit(EventA { new_value: value + i }); + i = i + 1; + } + } +} + +//# run Test::M1::emit --sender A --args 0 + +//# create-checkpoint + +//# run-graphql +{ + events { + pageInfo { + hasPreviousPage + hasNextPage + startCursor + endCursor + } + nodes { + json + } + } +} + +//# run-graphql --cursors {"tx":2,"e":19,"c":1} +{ + events(after: "@{cursor_0}") { + pageInfo { + hasPreviousPage + hasNextPage + startCursor + endCursor + } + nodes { + json + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.exp b/crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.exp new file mode 100644 index 0000000000000..12f3b6c2ebbb3 --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.exp @@ -0,0 +1,326 @@ +processed 21 tasks + +init: +A: object(0,0), B: object(0,1) + +task 1, lines 10-26: +//# publish +created: object(1,0) +mutated: object(0,2) +gas summary: computation_cost: 1000000, storage_cost: 4795600, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 2, line 28: +//# run Test::M1::no_emit --sender A --args 0 +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 3, line 30: +//# run Test::M1::emit_2 --sender A --args 2 +events: Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [2, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [3, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 + +task 4, line 32: +//# run Test::M1::emit_2 --sender B --args 4 +events: Event { package_id: Test, transaction_module: Identifier("M1"), sender: B, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [4, 0, 0, 0, 0, 0, 0, 0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: B, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [5, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,1) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 5, line 34: +//# create-checkpoint +Checkpoint created: 1 + +task 6, lines 36-43: +//# run-graphql +Response: { + "data": { + "transactionBlocks": { + "nodes": [ + { + "digest": "AXoD3PWjAdYov3o7FaWgAqJA8RmvQrjwxGxAi2MNEujz" + }, + { + "digest": "3nuQk9o2VVoqWbF6gS5vBTPwVLhMRbFJREDCvQJUavZ2" + }, + { + "digest": "5VAhspujQVcgJNvqe9Ed8BuFTeZdTRCCTzS6WwSZ9Dke" + }, + { + "digest": "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj" + }, + { + "digest": "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v" + } + ] + } + } +} + +task 7, lines 45-55: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6MywiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "2" + } + } + }, + { + "cursor": "eyJ0eCI6MywiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "3" + } + } + } + ] + } + } +} + +task 8, lines 57-68: +//# run-graphql --cursors {"tx":3,"e":1,"c":1} +Response: { + "data": { + "events": { + "edges": [] + } + } +} + +task 9, lines 70-83: +//# run-graphql --cursors {"tx":1,"e":1,"c":1} +Response: { + "data": { + "events": { + "edges": [] + } + } +} + +task 10, lines 86-96: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6NCwiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "4" + } + } + }, + { + "cursor": "eyJ0eCI6NCwiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "5" + } + } + } + ] + } + } +} + +task 11, lines 98-108: +//# run-graphql --cursors {"tx":4,"e":0,"c":1} +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6NCwiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "5" + } + } + } + ] + } + } +} + +task 12, lines 111-121: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6MywiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "2" + } + } + }, + { + "cursor": "eyJ0eCI6MywiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "3" + } + } + } + ] + } + } +} + +task 13, lines 123-134: +//# run-graphql --cursors {"tx":3,"e":1,"c":1} +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6MywiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "2" + } + } + } + ] + } + } +} + +task 14, lines 136-149: +//# run-graphql --cursors {"tx":4,"e":1,"c":1} +Response: { + "data": { + "events": { + "edges": [] + } + } +} + +task 15, lines 152-162: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6NCwiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "4" + } + } + }, + { + "cursor": "eyJ0eCI6NCwiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "5" + } + } + } + ] + } + } +} + +task 16, lines 164-174: +//# run-graphql --cursors {"tx":4,"e":1,"c":1} +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6NCwiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "4" + } + } + } + ] + } + } +} + +task 17, lines 176-187: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6MywiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "2" + } + } + }, + { + "cursor": "eyJ0eCI6MywiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "3" + } + } + } + ] + } + } +} + +task 18, lines 189-200: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [ + { + "cursor": "eyJ0eCI6NCwiZSI6MCwiYyI6MX0", + "node": { + "json": { + "new_value": "4" + } + } + }, + { + "cursor": "eyJ0eCI6NCwiZSI6MSwiYyI6MX0", + "node": { + "json": { + "new_value": "5" + } + } + } + ] + } + } +} + +task 19, lines 202-213: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [] + } + } +} + +task 20, lines 215-226: +//# run-graphql +Response: { + "data": { + "events": { + "edges": [] + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.move b/crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.move new file mode 100644 index 0000000000000..58b17e5fd21d8 --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/tx_digest.move @@ -0,0 +1,226 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Tests that fetching events filtered on a tx digest that has no events correctly returns no nodes. +// Also tests that fetching events filtered on a tx digest that has events returns the correct +// number of page-limit-bound nodes. + +//# init --protocol-version 48 --addresses Test=0x0 --accounts A B --simulator + +//# publish +module Test::M1 { + use sui::event; + + public struct EventA has copy, drop { + new_value: u64 + } + + public entry fun no_emit(value: u64): u64 { + value + } + + public entry fun emit_2(value: u64) { + event::emit(EventA { new_value: value }); + event::emit(EventA { new_value: value + 1}) + } +} + +//# run Test::M1::no_emit --sender A --args 0 + +//# run Test::M1::emit_2 --sender A --args 2 + +//# run Test::M1::emit_2 --sender B --args 4 + +//# create-checkpoint + +//# run-graphql +{ + transactionBlocks { + nodes { + digest + } + } +} + +//# run-graphql +{ + events(filter: {transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql --cursors {"tx":3,"e":1,"c":1} +# When the tx digest and after cursor are on the same tx, we'll use the after cursor's event sequence number +{ + events(after: "@{cursor_0}" filter: {transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql --cursors {"tx":1,"e":1,"c":1} +# If the after cursor does not match the transaction digest's tx sequence number, +# we will get an empty response, since it's not possible to fetch an event +# that isn't of the same tx sequence number +{ + events(after: "@{cursor_0}" filter: {transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + + +//# run-graphql +{ + events(filter: {transactionDigest: "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql --cursors {"tx":4,"e":0,"c":1} +{ + events(after: "@{cursor_0}" filter: {transactionDigest: "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v"}) { + edges { + cursor + node { + json + } + } + } +} + + +//# run-graphql +{ + events(last: 10 filter: {transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql --cursors {"tx":3,"e":1,"c":1} +# When the tx digest and cursor are on the same tx, we'll use the cursor's event sequence number +{ + events(last: 10 before: "@{cursor_0}" filter: {transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql --cursors {"tx":4,"e":1,"c":1} +# If the cursor does not match the transaction digest's tx sequence number, +# we will get an empty response, since it's not possible to fetch an event +# that isn't of the same tx sequence number +{ + events(last: 10 before: "@{cursor_0}" filter: {transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + + +//# run-graphql +{ + events(last: 10 filter: {transactionDigest: "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql --cursors {"tx":4,"e":1,"c":1} +{ + events(last: 10 before: "@{cursor_0}" filter: {transactionDigest: "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql +# correct sender +{ + events(filter: {sender: "@{A}" transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql +# correct sender +{ + events(filter: {sender: "@{B}" transactionDigest: "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql +# incorrect sender +{ + events(filter: {sender: "@{B}" transactionDigest: "8n1pk5fYM7v7tvsh4dcKxLRy8uf3he24FZCwdEKi9cSj"}) { + edges { + cursor + node { + json + } + } + } +} + +//# run-graphql +# incorrect sender +{ + events(filter: {sender: "@{A}" transactionDigest: "4dqR1zeomDMNHbUAZjooSZXrosPEb67gvvsUFeUSet9v"}) { + edges { + cursor + node { + json + } + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.exp b/crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.exp new file mode 100644 index 0000000000000..3afb31848780e --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.exp @@ -0,0 +1,211 @@ +processed 12 tasks + +init: +A: object(0,0), B: object(0,1) + +task 1, lines 6-34: +//# publish +created: object(1,0) +mutated: object(0,2) +gas summary: computation_cost: 1000000, storage_cost: 6604400, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 2, line 36: +//# run Test::M2::emit_emit_a --sender A --args 20 +events: Event { package_id: Test, transaction_module: Identifier("M2"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [] }, contents: [20, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 3, line 38: +//# create-checkpoint +Checkpoint created: 1 + +task 4, lines 40-57: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M1::EventA" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "20" + }, + "bcs": "FAAAAAAAAAA=" + } + ] + } + } +} + +task 5, line 59: +//# run Test::M2::emit_b --sender A --args 42 +events: Event { package_id: Test, transaction_module: Identifier("M2"), sender: A, type_: StructTag { address: Test, module: Identifier("M2"), name: Identifier("EventB"), type_params: [] }, contents: [42, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 + +task 6, line 61: +//# run Test::M2::emit_b --sender B --args 43 +events: Event { package_id: Test, transaction_module: Identifier("M2"), sender: B, type_: StructTag { address: Test, module: Identifier("M2"), name: Identifier("EventB"), type_params: [] }, contents: [43, 0, 0, 0, 0, 0, 0, 0] } +mutated: object(0,1) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 7, line 63: +//# create-checkpoint +Checkpoint created: 2 + +task 8, lines 65-82: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M1::EventA" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "20" + }, + "bcs": "FAAAAAAAAAA=" + } + ] + } + } +} + +task 9, lines 84-101: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M2::EventB" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "42" + }, + "bcs": "KgAAAAAAAAA=" + } + ] + } + } +} + +task 10, lines 103-120: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M1::EventA" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "20" + }, + "bcs": "FAAAAAAAAAA=" + }, + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M2::EventB" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "42" + }, + "bcs": "KgAAAAAAAAA=" + } + ] + } + } +} + +task 11, lines 122-139: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M1::EventA" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "20" + }, + "bcs": "FAAAAAAAAAA=" + }, + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M2::EventB" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "new_value": "42" + }, + "bcs": "KgAAAAAAAAA=" + }, + { + "sendingModule": { + "name": "M2" + }, + "type": { + "repr": "0x6edb181eb03cea19a3c4b09d2d6b5de8d0a741df186d072d18b2030eb36faee1::M2::EventB" + }, + "sender": { + "address": "0xa7b032703878aa74c3126935789fd1d4d7e111d5911b09247d6963061c312b5a" + }, + "json": { + "new_value": "43" + }, + "bcs": "KwAAAAAAAAA=" + } + ] + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.move b/crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.move new file mode 100644 index 0000000000000..0ca546a3a94ef --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/type_filter.move @@ -0,0 +1,140 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +//# init --protocol-version 51 --addresses Test=0x0 --accounts A B --simulator + +//# publish +module Test::M1 { + use sui::event; + + public struct EventA has copy, drop { + new_value: u64 + } + + public fun emit_a(value: u64) { + event::emit(EventA { new_value: value }) + } +} + +module Test::M2 { + use sui::event; + use Test::M1; + + public struct EventB has copy, drop { + new_value: u64 + } + + public fun emit_emit_a(value: u64) { + M1::emit_a(value); + } + + public fun emit_b(value: u64) { + event::emit(EventB { new_value: value }) + } +} + +//# run Test::M2::emit_emit_a --sender A --args 20 + +//# create-checkpoint + +//# run-graphql +{ + events(filter: {sender: "@{A}", eventType: "@{Test}::M1::EventA"}) { + nodes { + sendingModule { + name + } + type { + repr + } + sender { + address + } + json + bcs + } + } +} + +//# run Test::M2::emit_b --sender A --args 42 + +//# run Test::M2::emit_b --sender B --args 43 + +//# create-checkpoint + +//# run-graphql +{ + events(filter: {sender: "@{A}", eventType: "@{Test}::M1"}) { + nodes { + sendingModule { + name + } + type { + repr + } + sender { + address + } + json + bcs + } + } +} + +//# run-graphql +{ + events(filter: {sender: "@{A}", eventType: "@{Test}::M2"}) { + nodes { + sendingModule { + name + } + type { + repr + } + sender { + address + } + json + bcs + } + } +} + +//# run-graphql +{ + events(filter: {sender: "@{A}", eventType: "@{Test}"}) { + nodes { + sendingModule { + name + } + type { + repr + } + sender { + address + } + json + bcs + } + } +} + +//# run-graphql +{ + events(filter: {eventType: "@{Test}"}) { + nodes { + sendingModule { + name + } + type { + repr + } + sender { + address + } + json + bcs + } + } +} + diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.exp b/crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.exp new file mode 100644 index 0000000000000..383af1455f8f3 --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.exp @@ -0,0 +1,182 @@ +processed 10 tasks + +init: +A: object(0,0), B: object(0,1) + +task 1, lines 6-29: +//# publish +created: object(1,0) +mutated: object(0,2) +gas summary: computation_cost: 1000000, storage_cost: 5996400, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 2, line 32: +//# run Test::M1::emit_T1 --sender A +events: Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [Struct(StructTag { address: Test, module: Identifier("M1"), name: Identifier("T1"), type_params: [] })] }, contents: [0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 0, non_refundable_storage_fee: 0 + +task 3, line 34: +//# run Test::M1::emit_T2 --sender A +events: Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [Struct(StructTag { address: Test, module: Identifier("M1"), name: Identifier("T2"), type_params: [] })] }, contents: [0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 + +task 4, line 36: +//# run Test::M1::emit_both --sender A +events: Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [Struct(StructTag { address: Test, module: Identifier("M1"), name: Identifier("T1"), type_params: [] })] }, contents: [0] }, Event { package_id: Test, transaction_module: Identifier("M1"), sender: A, type_: StructTag { address: Test, module: Identifier("M1"), name: Identifier("EventA"), type_params: [Struct(StructTag { address: Test, module: Identifier("M1"), name: Identifier("T2"), type_params: [] })] }, contents: [0] } +mutated: object(0,0) +gas summary: computation_cost: 1000000, storage_cost: 988000, storage_rebate: 978120, non_refundable_storage_fee: 9880 + +task 5, line 38: +//# create-checkpoint +Checkpoint created: 1 + +task 6, lines 40-47: +//# run-graphql +Response: { + "data": { + "transactionBlocks": { + "nodes": [ + { + "digest": "J7mHXcoa7LXwyjzZUWsk8zvYZjek359TM4d2hQK4LGHo" + }, + { + "digest": "Ch3i5cdtNPU5v8oSg3V5cdKtZDa3YjqjMd7Qh4NQLAx6" + }, + { + "digest": "6taTf6v2NQCFtd9A4nw3mBbkHwUw8RUoJjqQGSB5cBNt" + }, + { + "digest": "AEXpVZ7Vpsk7ZSTsR2QNPT7zhq8oqpJXRGgx3kAaTdn" + }, + { + "digest": "9nu1ivpL9hHcbJ9GwGfmD3Kuet5w74t2GBp8f1Ggy3UD" + } + ] + } + } +} + +task 7, lines 49-62: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T1>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + }, + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T2>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + }, + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T1>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + }, + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T2>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + } + ] + } + } +} + +task 8, lines 64-77: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T1>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + }, + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T1>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + } + ] + } + } +} + +task 9, lines 79-92: +//# run-graphql +Response: { + "data": { + "events": { + "nodes": [ + { + "type": { + "repr": "0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::EventA<0xe722de9e58a9bab3a202b769b7518f91f852460d3d2c6d6743c301d08b9e614a::M1::T2>" + }, + "sender": { + "address": "0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e" + }, + "json": { + "value": { + "dummy_field": false + } + } + } + ] + } + } +} diff --git a/crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.move b/crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.move new file mode 100644 index 0000000000000..128362999b50b --- /dev/null +++ b/crates/sui-graphql-e2e-tests/tests/event_connection/type_param_filter.move @@ -0,0 +1,92 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +//# init --protocol-version 51 --addresses Test=0x0 --accounts A B --simulator + +//# publish +module Test::M1 { + use sui::event; + + public struct T1 has copy, drop {} + public struct T2 has copy, drop {} + + public struct EventA has copy, drop { + value: T + } + + public fun emit_T1() { + event::emit(EventA { value: T1 {} }) + } + + public fun emit_T2() { + event::emit(EventA { value: T2 {} }) + } + + public fun emit_both() { + event::emit(EventA { value: T1 {} }); + event::emit(EventA { value: T2 {} }) + } +} + + +//# run Test::M1::emit_T1 --sender A + +//# run Test::M1::emit_T2 --sender A + +//# run Test::M1::emit_both --sender A + +//# create-checkpoint + +//# run-graphql +{ + transactionBlocks { + nodes { + digest + } + } +} + +//# run-graphql +{ + events(filter: {eventType: "@{Test}::M1::EventA"}) { + nodes { + type { + repr + } + sender { + address + } + json + } + } +} + +//# run-graphql +{ + events(filter: {eventType: "@{Test}::M1::EventA<@{Test}::M1::T1>"}) { + nodes { + type { + repr + } + sender { + address + } + json + } + } +} + +//# run-graphql +{ + events(filter: {eventType: "@{Test}::M1::EventA<@{Test}::M1::T2>", transactionDigest: "9nu1ivpL9hHcbJ9GwGfmD3Kuet5w74t2GBp8f1Ggy3UD"}) { + nodes { + type { + repr + } + sender { + address + } + json + } + } +} diff --git a/crates/sui-graphql-rpc/schema.graphql b/crates/sui-graphql-rpc/schema.graphql index defc55cc329d2..faca90cc4e354 100644 --- a/crates/sui-graphql-rpc/schema.graphql +++ b/crates/sui-graphql-rpc/schema.graphql @@ -1272,6 +1272,8 @@ input EventFilter { PTB and emits an event. Modules can be filtered by their package, or package::module. + We currently do not support filtering by emitting module and event type + at the same time so if both are provided in one filter, the query will error. """ emittingModule: String """ @@ -3312,7 +3314,9 @@ type Query { """ transactionBlocks(first: Int, after: String, last: Int, before: String, filter: TransactionBlockFilter, scanLimit: Int): TransactionBlockConnection! """ - The events that exist in the network. + Query events that are emitted in the network. + We currently do not support filtering by emitting module and event type + at the same time so if both are provided in one filter, the query will error. """ events(first: Int, after: String, last: Int, before: String, filter: EventFilter): EventConnection! """ diff --git a/crates/sui-graphql-rpc/src/types/event/cursor.rs b/crates/sui-graphql-rpc/src/types/event/cursor.rs new file mode 100644 index 0000000000000..9a64399f1fab6 --- /dev/null +++ b/crates/sui-graphql-rpc/src/types/event/cursor.rs @@ -0,0 +1,183 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +use crate::{ + consistency::Checkpointed, + filter, + raw_query::RawQuery, + types::cursor::{self, Paginated, RawPaginated, ScanLimited, Target}, +}; +use diesel::{ + backend::Backend, + deserialize::{self, FromSql, QueryableByName}, + row::NamedRow, + BoolExpressionMethods, ExpressionMethods, QueryDsl, +}; +use serde::{Deserialize, Serialize}; +use sui_indexer::{models::events::StoredEvent, schema::events}; + +use super::Query; + +/// Contents of an Event's cursor. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +pub(crate) struct EventKey { + /// Transaction Sequence Number + pub tx: u64, + + /// Event Sequence Number + pub e: u64, + + /// The checkpoint sequence number this was viewed at. + #[serde(rename = "c")] + pub checkpoint_viewed_at: u64, +} + +pub(crate) type Cursor = cursor::JsonCursor; + +/// Results from raw queries in Diesel can only be deserialized into structs that implement +/// `QueryableByName`. This struct is used to represent a row of `tx_sequence_number` and +/// `event_sequence_number` returned from subqueries against event lookup tables. +#[derive(Clone, Debug)] +pub struct EvLookup { + pub tx: i64, + pub ev: i64, +} + +impl Paginated for StoredEvent { + type Source = events::table; + + fn filter_ge(cursor: &Cursor, query: Query) -> Query { + use events::dsl::{event_sequence_number as event, tx_sequence_number as tx}; + query.filter( + tx.gt(cursor.tx as i64) + .or(tx.eq(cursor.tx as i64).and(event.ge(cursor.e as i64))), + ) + } + + fn filter_le(cursor: &Cursor, query: Query) -> Query { + use events::dsl::{event_sequence_number as event, tx_sequence_number as tx}; + query.filter( + tx.lt(cursor.tx as i64) + .or(tx.eq(cursor.tx as i64).and(event.le(cursor.e as i64))), + ) + } + + fn order(asc: bool, query: Query) -> Query { + use events::dsl; + if asc { + query + .order_by(dsl::tx_sequence_number.asc()) + .then_order_by(dsl::event_sequence_number.asc()) + } else { + query + .order_by(dsl::tx_sequence_number.desc()) + .then_order_by(dsl::event_sequence_number.desc()) + } + } +} + +impl RawPaginated for StoredEvent { + fn filter_ge(cursor: &Cursor, query: RawQuery) -> RawQuery { + filter!( + query, + format!( + "ROW(tx_sequence_number, event_sequence_number) >= ({}, {})", + cursor.tx, cursor.e + ) + ) + } + + fn filter_le(cursor: &Cursor, query: RawQuery) -> RawQuery { + filter!( + query, + format!( + "ROW(tx_sequence_number, event_sequence_number) <= ({}, {})", + cursor.tx, cursor.e + ) + ) + } + + fn order(asc: bool, query: RawQuery) -> RawQuery { + if asc { + query.order_by("tx_sequence_number ASC, event_sequence_number ASC") + } else { + query.order_by("tx_sequence_number DESC, event_sequence_number DESC") + } + } +} + +impl Target for StoredEvent { + fn cursor(&self, checkpoint_viewed_at: u64) -> Cursor { + Cursor::new(EventKey { + tx: self.tx_sequence_number as u64, + e: self.event_sequence_number as u64, + checkpoint_viewed_at, + }) + } +} + +impl Checkpointed for Cursor { + fn checkpoint_viewed_at(&self) -> u64 { + self.checkpoint_viewed_at + } +} + +impl ScanLimited for Cursor {} + +impl Target for EvLookup { + fn cursor(&self, checkpoint_viewed_at: u64) -> Cursor { + Cursor::new(EventKey { + tx: self.tx as u64, + e: self.ev as u64, + checkpoint_viewed_at, + }) + } +} + +impl RawPaginated for EvLookup { + fn filter_ge(cursor: &Cursor, query: RawQuery) -> RawQuery { + filter!( + query, + format!( + "ROW(tx_sequence_number, event_sequence_number) >= ({}, {})", + cursor.tx, cursor.e + ) + ) + } + + fn filter_le(cursor: &Cursor, query: RawQuery) -> RawQuery { + filter!( + query, + format!( + "ROW(tx_sequence_number, event_sequence_number) <= ({}, {})", + cursor.tx, cursor.e + ) + ) + } + + fn order(asc: bool, query: RawQuery) -> RawQuery { + if asc { + query.order_by("tx_sequence_number ASC, event_sequence_number ASC") + } else { + query.order_by("tx_sequence_number DESC, event_sequence_number DESC") + } + } +} + +/// `sql_query` raw queries require `QueryableByName`. The default implementation looks for a table +/// based on the struct name, and it also expects the struct's fields to reflect the table's +/// columns. We can override this behavior by implementing `QueryableByName` for our struct. For +/// `EvLookup`, its fields are derived from the common `tx_sequence_number` and +/// `event_sequence_number` columns for all events-related tables. +impl QueryableByName for EvLookup +where + DB: Backend, + i64: FromSql, +{ + fn build<'a>(row: &impl NamedRow<'a, DB>) -> deserialize::Result { + let tx = NamedRow::get::(row, "tx_sequence_number")?; + let ev = NamedRow::get::(row, "event_sequence_number")?; + + Ok(Self { tx, ev }) + } +} diff --git a/crates/sui-graphql-rpc/src/types/event/filter.rs b/crates/sui-graphql-rpc/src/types/event/filter.rs new file mode 100644 index 0000000000000..0a02a31be8969 --- /dev/null +++ b/crates/sui-graphql-rpc/src/types/event/filter.rs @@ -0,0 +1,44 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +use crate::types::{ + digest::Digest, + sui_address::SuiAddress, + type_filter::{ModuleFilter, TypeFilter}, +}; +use async_graphql::*; + +#[derive(InputObject, Clone, Default)] +pub(crate) struct EventFilter { + pub sender: Option, + pub transaction_digest: Option, + // Enhancement (post-MVP) + // after_checkpoint + // before_checkpoint + /// Events emitted by a particular module. An event is emitted by a + /// particular module if some function in the module is called by a + /// PTB and emits an event. + /// + /// Modules can be filtered by their package, or package::module. + /// We currently do not support filtering by emitting module and event type + /// at the same time so if both are provided in one filter, the query will error. + pub emitting_module: Option, + + /// This field is used to specify the type of event emitted. + /// + /// Events can be filtered by their type's package, package::module, + /// or their fully qualified type name. + /// + /// Generic types can be queried by either the generic type name, e.g. + /// `0x2::coin::Coin`, or by the full type name, such as + /// `0x2::coin::Coin<0x2::sui::SUI>`. + pub event_type: Option, + // Enhancement (post-MVP) + // pub start_time + // pub end_time + + // Enhancement (post-MVP) + // pub any + // pub all + // pub not +} diff --git a/crates/sui-graphql-rpc/src/types/event/lookups.rs b/crates/sui-graphql-rpc/src/types/event/lookups.rs new file mode 100644 index 0000000000000..93a9a55bf6e6b --- /dev/null +++ b/crates/sui-graphql-rpc/src/types/event/lookups.rs @@ -0,0 +1,158 @@ +// Copyright (c) Mysten Labs, Inc. +// SPDX-License-Identifier: Apache-2.0 + +use crate::{ + data::pg::bytea_literal, + filter, query, + raw_query::RawQuery, + types::{ + cursor::Page, + digest::Digest, + sui_address::SuiAddress, + type_filter::{ModuleFilter, TypeFilter}, + }, +}; + +use std::fmt::Write; + +use super::Cursor; + +fn select_ev(sender: Option, from: &str) -> RawQuery { + let query = query!(format!( + "SELECT tx_sequence_number, event_sequence_number FROM {}", + from + )); + + if let Some(sender) = sender { + return query.filter(format!("sender = {}", bytea_literal(sender.as_slice()))); + } + + query +} + +pub(crate) fn select_sender(sender: SuiAddress) -> RawQuery { + select_ev(Some(sender), "event_senders") +} + +pub(crate) fn select_event_type(event_type: &TypeFilter, sender: Option) -> RawQuery { + match event_type { + TypeFilter::ByModule(ModuleFilter::ByPackage(p)) => { + filter!( + select_ev(sender, "event_struct_package"), + format!("package = {}", bytea_literal(p.as_slice())) + ) + } + TypeFilter::ByModule(ModuleFilter::ByModule(p, m)) => { + filter!( + select_ev(sender, "event_struct_module"), + format!( + "package = {} and module = {{}}", + bytea_literal(p.as_slice()) + ), + m + ) + } + TypeFilter::ByType(tag) => { + let package = tag.address; + let module = tag.module.to_string(); + let mut name = tag.name.as_str().to_owned(); + let (table, col_name) = if tag.type_params.is_empty() { + ("event_struct_name", "type_name") + } else { + let mut prefix = "<"; + for param in &tag.type_params { + name += prefix; + // SAFETY: write! to String always succeeds. + write!( + name, + "{}", + param.to_canonical_display(/* with_prefix */ true) + ) + .unwrap(); + prefix = ", "; + } + name += ">"; + ("event_struct_instantiation", "type_instantiation") + }; + + filter!( + select_ev(sender, table), + format!( + "package = {} and module = {{}} and {} = {{}}", + bytea_literal(package.as_slice()), + col_name + ), + module, + name + ) + } + } +} + +pub(crate) fn select_emit_module( + emit_module: &ModuleFilter, + sender: Option, +) -> RawQuery { + match emit_module { + ModuleFilter::ByPackage(p) => { + filter!( + select_ev(sender, "event_emit_package"), + format!("package = {}", bytea_literal(p.as_slice())) + ) + } + ModuleFilter::ByModule(p, m) => { + filter!( + select_ev(sender, "event_emit_module"), + format!( + "package = {} and module = {{}}", + bytea_literal(p.as_slice()) + ), + m + ) + } + } +} + +/// Adds filters to bound an events query from above and below based on cursors and filters. The +/// query will always at least be bounded by `tx_hi`, the current exclusive upperbound on +/// transaction sequence numbers, based on the consistency cursor. +pub(crate) fn add_bounds( + mut query: RawQuery, + tx_digest_filter: &Option, + page: &Page, + tx_hi: i64, +) -> RawQuery { + query = filter!(query, format!("tx_sequence_number < {}", tx_hi)); + + if let Some(after) = page.after() { + query = filter!( + query, + format!( + "ROW(tx_sequence_number, event_sequence_number) >= ({}, {})", + after.tx, after.e + ) + ); + } + + if let Some(before) = page.before() { + query = filter!( + query, + format!( + "ROW(tx_sequence_number, event_sequence_number) <= ({}, {})", + before.tx, before.e + ) + ); + } + + if let Some(digest) = tx_digest_filter { + query = filter!( + query, + format!( + "tx_sequence_number = (SELECT tx_sequence_number FROM tx_digests WHERE tx_digest = {})", + bytea_literal(digest.as_slice()), + ) + ); + } + + query +} diff --git a/crates/sui-graphql-rpc/src/types/event.rs b/crates/sui-graphql-rpc/src/types/event/mod.rs similarity index 50% rename from crates/sui-graphql-rpc/src/types/event.rs rename to crates/sui-graphql-rpc/src/types/event/mod.rs index cb558c2fba6c3..10c130c7f43c1 100644 --- a/crates/sui-graphql-rpc/src/types/event.rs +++ b/crates/sui-graphql-rpc/src/types/event/mod.rs @@ -3,28 +3,33 @@ use std::str::FromStr; -use super::cursor::{self, Page, Paginated, ScanLimited, Target}; -use super::digest::Digest; -use super::type_filter::{ModuleFilter, TypeFilter}; +use super::cursor::{Page, Target}; use super::{ address::Address, base64::Base64, date_time::DateTime, move_module::MoveModule, - move_value::MoveValue, sui_address::SuiAddress, + move_value::MoveValue, }; -use crate::consistency::Checkpointed; -use crate::data::{self, QueryExecutor}; +use crate::data::{self, DbConnection, QueryExecutor}; +use crate::query; use crate::{data::Db, error::Error}; use async_graphql::connection::{Connection, CursorType, Edge}; use async_graphql::*; -use diesel::{BoolExpressionMethods, ExpressionMethods, NullableExpressionMethods, QueryDsl}; -use serde::{Deserialize, Serialize}; +use cursor::EvLookup; +use diesel::{ExpressionMethods, QueryDsl}; +use lookups::{add_bounds, select_emit_module, select_event_type, select_sender}; use sui_indexer::models::{events::StoredEvent, transactions::StoredTransaction}; -use sui_indexer::schema::{events, transactions, tx_senders}; +use sui_indexer::schema::{checkpoints, events}; use sui_types::base_types::ObjectID; use sui_types::Identifier; use sui_types::{ base_types::SuiAddress as NativeSuiAddress, event::Event as NativeEvent, parse_sui_struct_tag, }; +mod cursor; +mod filter; +mod lookups; +pub(crate) use cursor::Cursor; +pub(crate) use filter::EventFilter; + /// A Sui node emits one of the following events: /// Move event /// Publish event @@ -40,56 +45,8 @@ pub(crate) struct Event { pub checkpoint_viewed_at: u64, } -/// Contents of an Event's cursor. -#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] -pub(crate) struct EventKey { - /// Transaction Sequence Number - tx: u64, - - /// Event Sequence Number - e: u64, - - /// The checkpoint sequence number this was viewed at. - #[serde(rename = "c")] - checkpoint_viewed_at: u64, -} - -pub(crate) type Cursor = cursor::JsonCursor; type Query = data::Query; -#[derive(InputObject, Clone, Default)] -pub(crate) struct EventFilter { - pub sender: Option, - pub transaction_digest: Option, - // Enhancement (post-MVP) - // after_checkpoint - // before_checkpoint - /// Events emitted by a particular module. An event is emitted by a - /// particular module if some function in the module is called by a - /// PTB and emits an event. - /// - /// Modules can be filtered by their package, or package::module. - pub emitting_module: Option, - - /// This field is used to specify the type of event emitted. - /// - /// Events can be filtered by their type's package, package::module, - /// or their fully qualified type name. - /// - /// Generic types can be queried by either the generic type name, e.g. - /// `0x2::coin::Coin`, or by the full type name, such as - /// `0x2::coin::Coin<0x2::sui::SUI>`. - pub event_type: Option, - // Enhancement (post-MVP) - // pub start_time - // pub end_time - - // Enhancement (post-MVP) - // pub any - // pub all - // pub not -} - #[Object] impl Event { /// The Move module containing some function that when called by @@ -158,64 +115,82 @@ impl Event { let cursor_viewed_at = page.validate_cursor_consistency()?; let checkpoint_viewed_at = cursor_viewed_at.unwrap_or(checkpoint_viewed_at); + // Construct tx and ev sequence number query with table-relevant filters, if they exist. The + // resulting query will look something like `SELECT tx_sequence_number, + // event_sequence_number FROM lookup_table WHERE ...`. If no filter is provided we don't + // need to use any lookup tables and can just query `events` table, as can be seen in the + // code below. + let query_constraint = match (filter.sender, &filter.emitting_module, &filter.event_type) { + (None, None, None) => None, + (Some(sender), None, None) => Some(select_sender(sender)), + (sender, None, Some(event_type)) => Some(select_event_type(event_type, sender)), + (sender, Some(module), None) => Some(select_emit_module(module, sender)), + (_, Some(_), Some(_)) => { + return Err(Error::Client( + "Filtering by both emitting module and event type is not supported".to_string(), + )) + } + }; + + use checkpoints::dsl; let (prev, next, results) = db .execute(move |conn| { - page.paginate_query::(conn, checkpoint_viewed_at, move || { - let mut query = events::dsl::events.into_boxed(); - - // Bound events by the provided `checkpoint_viewed_at`. From EXPLAIN - // ANALYZE, using the checkpoint sequence number directly instead of - // translating into a transaction sequence number bound is more efficient. - query = query.filter( - events::dsl::checkpoint_sequence_number.le(checkpoint_viewed_at as i64), - ); - - // The transactions table doesn't have an index on the senders column, so use - // `tx_senders`. - if let Some(sender) = &filter.sender { - query = query.filter( - events::dsl::tx_sequence_number.eq_any( - tx_senders::dsl::tx_senders - .select(tx_senders::dsl::tx_sequence_number) - .filter(tx_senders::dsl::sender.eq(sender.into_vec())), - ), - ) - } - - if let Some(digest) = &filter.transaction_digest { - // Since the event filter takes in a single tx_digest, we know that - // there will only be one corresponding transaction. We can use - // single_value() to tell the query planner that we expect only one - // instead of a range of values, which will subsequently speed up query - // execution time. - query = query.filter( - events::dsl::tx_sequence_number.nullable().eq( - transactions::dsl::transactions - .select(transactions::dsl::tx_sequence_number) - .filter( - transactions::dsl::transaction_digest.eq(digest.to_vec()), - ) - .single_value(), - ), - ) - } - - if let Some(module) = &filter.emitting_module { - query = module.apply(query, events::dsl::package, events::dsl::module); - } - - if let Some(type_) = &filter.event_type { - query = type_.apply( - query, - events::dsl::event_type, - events::dsl::event_type_package, - events::dsl::event_type_module, - events::dsl::event_type_name, - ); - } - - query - }) + let tx_hi: i64 = conn.first(move || { + dsl::checkpoints.select(dsl::network_total_transactions) + .filter(dsl::sequence_number.eq(checkpoint_viewed_at as i64)) + })?; + + let (prev, next, mut events): (bool, bool, Vec) = + if let Some(filter_query) = query_constraint { + let query = add_bounds(filter_query, &filter.transaction_digest, &page, tx_hi); + + let (prev, next, results) = + page.paginate_raw_query::(conn, checkpoint_viewed_at, query)?; + + let ev_lookups = results + .into_iter() + .map(|x| (x.tx, x.ev)) + .collect::>(); + + if ev_lookups.is_empty() { + return Ok::<_, diesel::result::Error>((prev, next, vec![])); + } + + // Unlike a multi-get on a single column which can be serviced by a query `IN + // (...)`, because events have a composite primary key, the query planner tends + // to perform a sequential scan when given a list of tuples to lookup. A query + // using `UNION ALL` allows us to leverage the index on the composite key. + let events = conn.results(move || { + // Diesel's DSL does not current support chained `UNION ALL`, so we have to turn + // to `RawQuery` here. + let query_string = ev_lookups.iter() + .map(|&(tx, ev)| { + format!("SELECT * FROM events WHERE tx_sequence_number = {} AND event_sequence_number = {}", tx, ev) + }) + .collect::>() + .join(" UNION ALL "); + + query!(query_string).into_boxed() + })?; + (prev, next, events) + } else { + // No filter is provided so we add bounds to the basic `SELECT * FROM + // events` query and call it a day. + let query = add_bounds(query!("SELECT * FROM events"), &filter.transaction_digest, &page, tx_hi); + let (prev, next, events_iter) = page.paginate_raw_query::(conn, checkpoint_viewed_at, query)?; + let events = events_iter.collect::>(); + (prev, next, events) + }; + + // UNION ALL does not guarantee order, so we need to sort the results. Whether + // `first` or `last, the result set is always sorted in ascending order. + events.sort_by(|a, b| { + a.tx_sequence_number.cmp(&b.tx_sequence_number) + .then_with(|| a.event_sequence_number.cmp(&b.event_sequence_number)) + }); + + + Ok::<_, diesel::result::Error>((prev, next, events)) }) .await?; @@ -256,7 +231,6 @@ impl Event { tx_sequence_number: stored_tx.tx_sequence_number, event_sequence_number: idx as i64, transaction_digest: stored_tx.transaction_digest.clone(), - checkpoint_sequence_number: stored_tx.checkpoint_sequence_number, #[cfg(feature = "postgres-feature")] senders: vec![Some(native_event.sender.to_vec())], package: native_event.package_id.to_vec(), @@ -264,9 +238,6 @@ impl Event { event_type: native_event .type_ .to_canonical_string(/* with_prefix */ true), - event_type_package: native_event.type_.address.to_vec(), - event_type_module: native_event.type_.module.to_string(), - event_type_name: native_event.type_.name.to_string(), bcs: native_event.contents.clone(), timestamp_ms: stored_tx.timestamp_ms, }; @@ -312,54 +283,3 @@ impl Event { }) } } - -impl Paginated for StoredEvent { - type Source = events::table; - - fn filter_ge(cursor: &Cursor, query: Query) -> Query { - use events::dsl::{event_sequence_number as event, tx_sequence_number as tx}; - query.filter( - tx.gt(cursor.tx as i64) - .or(tx.eq(cursor.tx as i64).and(event.ge(cursor.e as i64))), - ) - } - - fn filter_le(cursor: &Cursor, query: Query) -> Query { - use events::dsl::{event_sequence_number as event, tx_sequence_number as tx}; - query.filter( - tx.lt(cursor.tx as i64) - .or(tx.eq(cursor.tx as i64).and(event.le(cursor.e as i64))), - ) - } - - fn order(asc: bool, query: Query) -> Query { - use events::dsl; - if asc { - query - .order_by(dsl::tx_sequence_number.asc()) - .then_order_by(dsl::event_sequence_number.asc()) - } else { - query - .order_by(dsl::tx_sequence_number.desc()) - .then_order_by(dsl::event_sequence_number.desc()) - } - } -} - -impl Target for StoredEvent { - fn cursor(&self, checkpoint_viewed_at: u64) -> Cursor { - Cursor::new(EventKey { - tx: self.tx_sequence_number as u64, - e: self.event_sequence_number as u64, - checkpoint_viewed_at, - }) - } -} - -impl Checkpointed for Cursor { - fn checkpoint_viewed_at(&self) -> u64 { - self.checkpoint_viewed_at - } -} - -impl ScanLimited for Cursor {} diff --git a/crates/sui-graphql-rpc/src/types/query.rs b/crates/sui-graphql-rpc/src/types/query.rs index f403fbf8657b5..f6f4704b3009f 100644 --- a/crates/sui-graphql-rpc/src/types/query.rs +++ b/crates/sui-graphql-rpc/src/types/query.rs @@ -414,7 +414,9 @@ impl Query { .extend() } - /// The events that exist in the network. + /// Query events that are emitted in the network. + /// We currently do not support filtering by emitting module and event type + /// at the same time so if both are provided in one filter, the query will error. async fn events( &self, ctx: &Context<'_>, diff --git a/crates/sui-graphql-rpc/src/types/type_filter.rs b/crates/sui-graphql-rpc/src/types/type_filter.rs index f2028483989ff..16f9dd03181f1 100644 --- a/crates/sui-graphql-rpc/src/types/type_filter.rs +++ b/crates/sui-graphql-rpc/src/types/type_filter.rs @@ -2,18 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 use super::{string_input::impl_string_input, sui_address::SuiAddress}; +use crate::filter; use crate::raw_query::RawQuery; -use crate::{ - data::{DieselBackend, Query}, - filter, -}; use async_graphql::*; -use diesel::{ - expression::{is_aggregate::No, ValidGrouping}, - query_builder::QueryFragment, - sql_types::{Binary, Text}, - AppearsOnTable, Expression, ExpressionMethods, QueryDsl, QuerySource, -}; use move_core_types::language_storage::StructTag; use std::{fmt, result::Result, str::FromStr}; use sui_types::{ @@ -67,89 +58,7 @@ pub(crate) enum Error { InvalidFormat(&'static str), } -/// Trait for a field that can be used in a query. -pub(crate) trait Field: - ExpressionMethods - + Expression - + QueryFragment - + AppearsOnTable - + ValidGrouping<(), IsAggregate = No> - + Send - + 'static -{ -} - -impl Field for T where - T: ExpressionMethods - + Expression - + QueryFragment - + AppearsOnTable - + ValidGrouping<(), IsAggregate = No> - + Send - + 'static -{ -} - impl TypeFilter { - /// Modify `query` to apply this filter to `type_field`, `package_field`, `module_field` - /// and `name_field`, where `type_field` stores the full type tag while the rest - /// store the package, module and name of the type tag respectively. The new query - /// after applying the filter is returned. - pub(crate) fn apply( - &self, - query: Query, - // Field storing the full type tag, including type parameters. - type_field: T, - package_field: P, - module_field: M, - // Name field only includes the name of the struct, like `Coin`, not including type parameters. - name_field: N, - ) -> Query - where - Query: QueryDsl, - T: Field, - P: Field, - M: Field, - N: Field, - QS: QuerySource, - { - match self { - TypeFilter::ByModule(ModuleFilter::ByPackage(p)) => { - query.filter(package_field.eq(p.into_vec())) - } - - TypeFilter::ByModule(ModuleFilter::ByModule(p, m)) => query - .filter(package_field.eq(p.into_vec())) - .filter(module_field.eq(m.clone())), - - // A type filter without type parameters is interpreted as either an exact match, or a - // match for all generic instantiations of the type so we check against only package, module - // and name fields. - TypeFilter::ByType(tag) if tag.type_params.is_empty() => { - let p = tag.address.to_vec(); - let m = tag.module.to_string(); - let n = tag.name.to_string(); - query - .filter(package_field.eq(p)) - .filter(module_field.eq(m)) - .filter(name_field.eq(n)) - } - - TypeFilter::ByType(tag) => { - let p = tag.address.to_vec(); - let m = tag.module.to_string(); - let n = tag.name.to_string(); - let exact = tag.to_canonical_string(/* with_prefix */ true); - // We check against the full type field for an exact match, including type parameters. - query - .filter(package_field.eq(p)) - .filter(module_field.eq(m)) - .filter(name_field.eq(n)) - .filter(type_field.eq(exact)) - } - } - } - /// Modify `query` to apply this filter to `field`, returning the new query. pub(crate) fn apply_raw( &self, @@ -295,28 +204,6 @@ impl FqNameFilter { } impl ModuleFilter { - /// Modify `query` to apply this filter, treating `package` as the column containing the package - /// address and `module` as the module containing the module name. - pub(crate) fn apply( - &self, - query: Query, - package: P, - module: M, - ) -> Query - where - Query: QueryDsl, - P: Field, - M: Field, - QS: QuerySource, - { - match self { - ModuleFilter::ByPackage(p) => query.filter(package.eq(p.into_vec())), - ModuleFilter::ByModule(p, m) => query - .filter(package.eq(p.into_vec())) - .filter(module.eq(m.clone())), - } - } - /// Try to create a filter whose results are the intersection of the results of the input /// filters (`self` and `other`). This may not be possible if the resulting filter is /// inconsistent (e.g. a filter that requires the module's package to be at two different diff --git a/crates/sui-graphql-rpc/tests/snapshots/snapshot_tests__schema_sdl_export.snap b/crates/sui-graphql-rpc/tests/snapshots/snapshot_tests__schema_sdl_export.snap index fd04f186f34b6..ed3ec693362f4 100644 --- a/crates/sui-graphql-rpc/tests/snapshots/snapshot_tests__schema_sdl_export.snap +++ b/crates/sui-graphql-rpc/tests/snapshots/snapshot_tests__schema_sdl_export.snap @@ -1276,6 +1276,8 @@ input EventFilter { PTB and emits an event. Modules can be filtered by their package, or package::module. + We currently do not support filtering by emitting module and event type + at the same time so if both are provided in one filter, the query will error. """ emittingModule: String """ @@ -3316,7 +3318,9 @@ type Query { """ transactionBlocks(first: Int, after: String, last: Int, before: String, filter: TransactionBlockFilter, scanLimit: Int): TransactionBlockConnection! """ - The events that exist in the network. + Query events that are emitted in the network. + We currently do not support filtering by emitting module and event type + at the same time so if both are provided in one filter, the query will error. """ events(first: Int, after: String, last: Int, before: String, filter: EventFilter): EventConnection! """ diff --git a/crates/sui-indexer/migrations/pg/2023-08-19-044020_events/up.sql b/crates/sui-indexer/migrations/pg/2023-08-19-044020_events/up.sql index dfbfa3ea14495..14aa6a098161f 100644 --- a/crates/sui-indexer/migrations/pg/2023-08-19-044020_events/up.sql +++ b/crates/sui-indexer/migrations/pg/2023-08-19-044020_events/up.sql @@ -4,7 +4,6 @@ CREATE TABLE events tx_sequence_number BIGINT NOT NULL, event_sequence_number BIGINT NOT NULL, transaction_digest bytea NOT NULL, - checkpoint_sequence_number bigint NOT NULL, -- array of SuiAddress in bytes. All signers of the transaction. senders bytea[] NOT NULL, -- bytes of the entry package ID. Notice that the package and module here @@ -15,11 +14,6 @@ CREATE TABLE events module text NOT NULL, -- StructTag in Display format, fully qualified including type parameters event_type text NOT NULL, - -- Components of the StructTag of the event type: package, module, - -- name (name of the struct, without type parameters) - event_type_package bytea NOT NULL, - event_type_module text NOT NULL, - event_type_name text NOT NULL, -- timestamp of the checkpoint when the event was emitted timestamp_ms BIGINT NOT NULL, -- bcs of the Event contents (Event.contents) @@ -30,5 +24,3 @@ CREATE TABLE events_partition_0 PARTITION OF events FOR VALUES FROM (0) TO (MAXV CREATE INDEX events_package ON events (package, tx_sequence_number, event_sequence_number); CREATE INDEX events_package_module ON events (package, module, tx_sequence_number, event_sequence_number); CREATE INDEX events_event_type ON events (event_type text_pattern_ops, tx_sequence_number, event_sequence_number); -CREATE INDEX events_type_package_module_name ON events (event_type_package, event_type_module, event_type_name, tx_sequence_number, event_sequence_number); -CREATE INDEX events_checkpoint_sequence_number ON events (checkpoint_sequence_number); diff --git a/crates/sui-indexer/src/models/events.rs b/crates/sui-indexer/src/models/events.rs index 455b22e1741fe..01f79c41d6ab2 100644 --- a/crates/sui-indexer/src/models/events.rs +++ b/crates/sui-indexer/src/models/events.rs @@ -31,9 +31,6 @@ pub struct StoredEvent { #[diesel(sql_type = diesel::sql_types::Binary)] pub transaction_digest: Vec, - #[diesel(sql_type = diesel::sql_types::BigInt)] - pub checkpoint_sequence_number: i64, - #[cfg(feature = "postgres-feature")] #[diesel(sql_type = diesel::sql_types::Array>)] pub senders: Vec>>, @@ -52,15 +49,6 @@ pub struct StoredEvent { #[diesel(sql_type = diesel::sql_types::Text)] pub event_type: String, - #[diesel(sql_type = diesel::sql_types::Binary)] - pub event_type_package: Vec, - - #[diesel(sql_type = diesel::sql_types::Text)] - pub event_type_module: String, - - #[diesel(sql_type = diesel::sql_types::Text)] - pub event_type_name: String, - #[diesel(sql_type = diesel::sql_types::BigInt)] pub timestamp_ms: i64, @@ -81,7 +69,6 @@ impl From for StoredEvent { tx_sequence_number: event.tx_sequence_number as i64, event_sequence_number: event.event_sequence_number as i64, transaction_digest: event.transaction_digest.into_inner().to_vec(), - checkpoint_sequence_number: event.checkpoint_sequence_number as i64, #[cfg(feature = "postgres-feature")] senders: event .senders @@ -94,9 +81,6 @@ impl From for StoredEvent { package: event.package.to_vec(), module: event.module.clone(), event_type: event.event_type.clone(), - event_type_package: event.event_type_package.to_vec(), - event_type_module: event.event_type_module.clone(), - event_type_name: event.event_type_name.clone(), bcs: event.bcs.clone(), timestamp_ms: event.timestamp_ms as i64, } diff --git a/crates/sui-indexer/src/schema/pg.rs b/crates/sui-indexer/src/schema/pg.rs index 2515c98d34c06..c1720c94b37a1 100644 --- a/crates/sui-indexer/src/schema/pg.rs +++ b/crates/sui-indexer/src/schema/pg.rs @@ -137,14 +137,10 @@ diesel::table! { tx_sequence_number -> Int8, event_sequence_number -> Int8, transaction_digest -> Bytea, - checkpoint_sequence_number -> Int8, senders -> Array>, package -> Bytea, module -> Text, event_type -> Text, - event_type_package -> Bytea, - event_type_module -> Text, - event_type_name -> Text, timestamp_ms -> Int8, bcs -> Bytea, } @@ -155,14 +151,10 @@ diesel::table! { tx_sequence_number -> Int8, event_sequence_number -> Int8, transaction_digest -> Bytea, - checkpoint_sequence_number -> Int8, senders -> Array>, package -> Bytea, module -> Text, event_type -> Text, - event_type_package -> Bytea, - event_type_module -> Text, - event_type_name -> Text, timestamp_ms -> Int8, bcs -> Bytea, } diff --git a/crates/sui-indexer/tests/ingestion_tests.rs b/crates/sui-indexer/tests/ingestion_tests.rs index af67a061bbde3..8eee88f8bd448 100644 --- a/crates/sui-indexer/tests/ingestion_tests.rs +++ b/crates/sui-indexer/tests/ingestion_tests.rs @@ -5,7 +5,6 @@ mod ingestion_tests { use diesel::ExpressionMethods; use diesel::{QueryDsl, RunQueryDsl}; - use move_core_types::language_storage::StructTag; use simulacrum::Simulacrum; use std::net::SocketAddr; use std::path::PathBuf; @@ -14,18 +13,14 @@ mod ingestion_tests { use sui_indexer::db::get_pool_connection; use sui_indexer::errors::Context; use sui_indexer::errors::IndexerError; - use sui_indexer::models::{ - events::StoredEvent, objects::StoredObject, transactions::StoredTransaction, - }; - use sui_indexer::schema::{events, objects, transactions}; + use sui_indexer::models::{objects::StoredObject, transactions::StoredTransaction}; + use sui_indexer::schema::{objects, transactions}; use sui_indexer::store::{indexer_store::IndexerStore, PgIndexerStore}; use sui_indexer::test_utils::{start_test_indexer, ReaderWriterConfig}; use sui_types::base_types::SuiAddress; use sui_types::effects::TransactionEffectsAPI; use sui_types::gas_coin::GasCoin; - use sui_types::{ - Identifier, SUI_FRAMEWORK_PACKAGE_ID, SUI_SYSTEM_ADDRESS, SUI_SYSTEM_PACKAGE_ID, - }; + use sui_types::SUI_FRAMEWORK_PACKAGE_ID; use tempfile::tempdir; use tokio::task::JoinHandle; @@ -93,24 +88,6 @@ mod ingestion_tests { Ok(()) } - /// Wait for the indexer to catch up to the given epoch id. - async fn wait_for_epoch( - pg_store: &PgIndexerStore, - epoch: u64, - ) -> Result<(), IndexerError> { - tokio::time::timeout(Duration::from_secs(10), async { - while { - let cp_opt = pg_store.get_latest_epoch_id().unwrap(); - cp_opt.is_none() || (cp_opt.unwrap() < epoch) - } { - tokio::time::sleep(Duration::from_secs(1)).await; - } - }) - .await - .expect("Timeout waiting for indexer to catchup to epoch"); - Ok(()) - } - #[tokio::test] pub async fn test_transaction_table() -> Result<(), IndexerError> { let mut sim = Simulacrum::new(); @@ -156,46 +133,6 @@ mod ingestion_tests { Ok(()) } - #[tokio::test] - pub async fn test_event_type() -> Result<(), IndexerError> { - let mut sim = Simulacrum::new(); - let data_ingestion_path = tempdir().unwrap().into_path(); - sim.set_data_ingestion_path(data_ingestion_path.clone()); - - // Advance the epoch to generate some events. - sim.advance_epoch(false); - - let (_, pg_store, _) = set_up(Arc::new(sim), data_ingestion_path).await; - - // Wait for the epoch to change so we can get some events. - wait_for_epoch(&pg_store, 1).await?; - - // Read the event from the database directly. - let db_event: StoredEvent = read_only_blocking!(&pg_store.blocking_cp(), |conn| { - events::table - .filter(events::event_type_name.eq("SystemEpochInfoEvent")) - .first::(conn) - }) - .context("Failed reading SystemEpochInfoEvent from PostgresDB")?; - - let event_type_tag = StructTag { - address: SUI_SYSTEM_ADDRESS, - module: Identifier::new("sui_system_state_inner").unwrap(), - name: Identifier::new("SystemEpochInfoEvent").unwrap(), - type_params: vec![], - }; - - // Check that the different components of the event type were stored correctly. - assert_eq!( - db_event.event_type, - event_type_tag.to_canonical_string(true) - ); - assert_eq!(db_event.event_type_package, SUI_SYSTEM_PACKAGE_ID.to_vec()); - assert_eq!(db_event.event_type_module, "sui_system_state_inner"); - assert_eq!(db_event.event_type_name, "SystemEpochInfoEvent"); - Ok(()) - } - #[tokio::test] pub async fn test_object_type() -> Result<(), IndexerError> { let mut sim = Simulacrum::new(); From 62c7d64c490e7f5e08b18e12235444e1d8478e32 Mon Sep 17 00:00:00 2001 From: Eugene Boguslavsky Date: Fri, 30 Aug 2024 15:08:33 +0000 Subject: [PATCH 50/57] Sui v1.32.1 Version Bump --- Cargo.lock | 116 +++++++++++++------------- Cargo.toml | 2 +- crates/sui-open-rpc/spec/openrpc.json | 2 +- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9cec723dbb5e7..40c61f3cb041f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1854,7 +1854,7 @@ checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bin-version" -version = "1.32.0" +version = "1.32.1" dependencies = [ "const-str", "git-version", @@ -12434,7 +12434,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "sui" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anemo", "anyhow", @@ -12505,7 +12505,7 @@ dependencies = [ "sui-package-management", "sui-protocol-config", "sui-replay", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-simulator", "sui-source-validation", "sui-swarm", @@ -12649,7 +12649,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "arrow", @@ -12701,7 +12701,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer-derive" -version = "1.32.0" +version = "1.32.1" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -12710,7 +12710,7 @@ dependencies = [ [[package]] name = "sui-archival" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "byteorder", @@ -12818,7 +12818,7 @@ dependencies = [ "sui-macros", "sui-network", "sui-protocol-config", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-simulator", "sui-storage", "sui-surfer", @@ -12836,7 +12836,7 @@ dependencies = [ [[package]] name = "sui-bridge" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "arc-swap", @@ -12870,7 +12870,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-test-transaction-builder", "sui-types", "tap", @@ -12885,7 +12885,7 @@ dependencies = [ [[package]] name = "sui-bridge-cli" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "clap", @@ -12902,7 +12902,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", "telemetry-subscribers", "tokio", @@ -12933,7 +12933,7 @@ dependencies = [ "sui-data-ingestion-core", "sui-indexer-builder", "sui-json-rpc-types", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-test-transaction-builder", "sui-types", "tap", @@ -12945,7 +12945,7 @@ dependencies = [ [[package]] name = "sui-cluster-test" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -12969,7 +12969,7 @@ dependencies = [ "sui-json", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-swarm", "sui-swarm-config", "sui-test-transaction-builder", @@ -13142,7 +13142,7 @@ dependencies = [ [[package]] name = "sui-data-ingestion" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -13204,7 +13204,7 @@ dependencies = [ [[package]] name = "sui-e2e-tests" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "assert_cmd", @@ -13248,7 +13248,7 @@ dependencies = [ "sui-node", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-simulator", "sui-storage", "sui-swarm", @@ -13321,7 +13321,7 @@ dependencies = [ [[package]] name = "sui-faucet" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-recursion", @@ -13340,7 +13340,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", "tap", "telemetry-subscribers", @@ -13377,7 +13377,7 @@ dependencies = [ [[package]] name = "sui-framework-snapshot" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "bcs", @@ -13440,7 +13440,7 @@ dependencies = [ [[package]] name = "sui-graphql-config" -version = "1.32.0" +version = "1.32.1" dependencies = [ "quote 1.0.35", "syn 1.0.107", @@ -13517,7 +13517,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-swarm-config", "sui-test-transaction-builder", "sui-types", @@ -13557,7 +13557,7 @@ dependencies = [ [[package]] name = "sui-indexer" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -13600,7 +13600,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-test-transaction-builder", "sui-transaction-builder", "sui-types", @@ -13750,7 +13750,7 @@ dependencies = [ "sui-open-rpc", "sui-open-rpc-macros", "sui-protocol-config", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-simulator", "sui-swarm-config", "sui-test-transaction-builder", @@ -13811,7 +13811,7 @@ dependencies = [ [[package]] name = "sui-light-client" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -13828,7 +13828,7 @@ dependencies = [ "sui-json-rpc-types", "sui-package-resolver", "sui-rest-api", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", "tokio", ] @@ -13845,7 +13845,7 @@ dependencies = [ [[package]] name = "sui-metric-checker" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "backoff", @@ -13866,7 +13866,7 @@ dependencies = [ [[package]] name = "sui-move" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "assert_cmd", @@ -13908,7 +13908,7 @@ dependencies = [ [[package]] name = "sui-move-build" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "datatest-stable", @@ -13932,7 +13932,7 @@ dependencies = [ [[package]] name = "sui-move-lsp" -version = "1.32.0" +version = "1.32.1" dependencies = [ "bin-version", "clap", @@ -14062,7 +14062,7 @@ dependencies = [ [[package]] name = "sui-node" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anemo", "anemo-tower", @@ -14115,7 +14115,7 @@ dependencies = [ [[package]] name = "sui-open-rpc" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "bcs", @@ -14151,7 +14151,7 @@ dependencies = [ [[package]] name = "sui-oracle" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "bcs", @@ -14171,7 +14171,7 @@ dependencies = [ "sui-json-rpc-types", "sui-keys", "sui-move-build", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", "tap", "telemetry-subscribers", @@ -14181,7 +14181,7 @@ dependencies = [ [[package]] name = "sui-package-dump" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "bcs", @@ -14198,14 +14198,14 @@ dependencies = [ [[package]] name = "sui-package-management" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "move-core-types", "move-package", "move-symbol-pool", "sui-json-rpc-types", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", "thiserror", "tracing", @@ -14348,7 +14348,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-protocol-config", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-storage", "sui-transaction-checks", "sui-types", @@ -14393,7 +14393,7 @@ dependencies = [ [[package]] name = "sui-rosetta" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -14421,7 +14421,7 @@ dependencies = [ "sui-keys", "sui-move-build", "sui-node", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-swarm-config", "sui-types", "telemetry-subscribers", @@ -14435,7 +14435,7 @@ dependencies = [ [[package]] name = "sui-rpc-loadgen" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -14453,7 +14453,7 @@ dependencies = [ "sui-json-rpc", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", "telemetry-subscribers", "test-cluster", @@ -14484,7 +14484,7 @@ dependencies = [ [[package]] name = "sui-sdk" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-recursion", @@ -14520,7 +14520,7 @@ dependencies = [ [[package]] name = "sui-security-watchdog" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "arrow-array", @@ -14567,7 +14567,7 @@ dependencies = [ [[package]] name = "sui-single-node-benchmark" -version = "1.32.0" +version = "1.32.1" dependencies = [ "async-trait", "bcs", @@ -14630,7 +14630,7 @@ dependencies = [ [[package]] name = "sui-source-validation" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "colored", @@ -14648,7 +14648,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move-build", "sui-package-management", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-test-transaction-builder", "sui-types", "tar", @@ -14684,7 +14684,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move", "sui-move-build", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-source-validation", "telemetry-subscribers", "tempfile", @@ -14755,7 +14755,7 @@ dependencies = [ [[package]] name = "sui-surfer" -version = "1.32.0" +version = "1.32.1" dependencies = [ "async-trait", "bcs", @@ -14853,13 +14853,13 @@ dependencies = [ "shared-crypto", "sui-genesis-builder", "sui-move-build", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-types", ] [[package]] name = "sui-test-validator" -version = "1.32.0" +version = "1.32.1" [[package]] name = "sui-tls" @@ -14884,7 +14884,7 @@ dependencies = [ [[package]] name = "sui-tool" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anemo", "anemo-cli", @@ -14918,7 +14918,7 @@ dependencies = [ "sui-package-dump", "sui-protocol-config", "sui-replay", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-snapshot", "sui-storage", "sui-types", @@ -15170,7 +15170,7 @@ dependencies = [ [[package]] name = "suins-indexer" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "async-trait", @@ -15204,7 +15204,7 @@ dependencies = [ [[package]] name = "suiop-cli" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "axum 0.7.5", @@ -15549,7 +15549,7 @@ dependencies = [ "sui-macros", "sui-node", "sui-protocol-config", - "sui-sdk 1.32.0", + "sui-sdk 1.32.1", "sui-simulator", "sui-swarm", "sui-swarm-config", @@ -17372,7 +17372,7 @@ dependencies = [ [[package]] name = "x" -version = "1.32.0" +version = "1.32.1" dependencies = [ "anyhow", "camino", diff --git a/Cargo.toml b/Cargo.toml index 2d175748d0d4e..f5f6e98767582 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -201,7 +201,7 @@ members = [ [workspace.package] # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates. -version = "1.32.0" +version = "1.32.1" [profile.release] # debug = 1 means line charts only, which is minimum needed for good stack traces diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index f01df691e4369..85a4c2c11a5ba 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -12,7 +12,7 @@ "name": "Apache-2.0", "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE" }, - "version": "1.32.0" + "version": "1.32.1" }, "methods": [ { From 624300d58deda9aea058f2dac58bdfab1a87e13f Mon Sep 17 00:00:00 2001 From: mwtian <81660174+mwtian@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:39:32 -0700 Subject: [PATCH 51/57] Cherrypick additional rocksdb metrics (#19172) ## Description #19112: this emits more metrics from rocksdb, to help with investigations into external fullnode write stalls. ## Test plan CI --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: ## Description Describe the changes or additions included in this PR. ## Test plan How did you test the new or updated feature? --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [ ] Protocol: - [ ] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: --- crates/typed-store/src/metrics.rs | 34 ++++++++++++++++++++++++++- crates/typed-store/src/rocks/mod.rs | 36 +++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/crates/typed-store/src/metrics.rs b/crates/typed-store/src/metrics.rs index 904ad5a31cf67..f7049d8d63768 100644 --- a/crates/typed-store/src/metrics.rs +++ b/crates/typed-store/src/metrics.rs @@ -77,6 +77,7 @@ impl SamplingInterval { pub struct ColumnFamilyMetrics { pub rocksdb_total_sst_files_size: IntGaugeVec, pub rocksdb_total_blob_files_size: IntGaugeVec, + pub rocksdb_current_size_active_mem_tables: IntGaugeVec, pub rocksdb_size_all_mem_tables: IntGaugeVec, pub rocksdb_num_snapshots: IntGaugeVec, pub rocksdb_oldest_snapshot_time: IntGaugeVec, @@ -86,13 +87,16 @@ pub struct ColumnFamilyMetrics { pub rocksdb_block_cache_usage: IntGaugeVec, pub rocksdb_block_cache_pinned_usage: IntGaugeVec, pub rocksdb_estimate_table_readers_mem: IntGaugeVec, + pub rocksdb_num_immutable_mem_tables: IntGaugeVec, pub rocksdb_mem_table_flush_pending: IntGaugeVec, pub rocksdb_compaction_pending: IntGaugeVec, + pub rocksdb_estimate_pending_compaction_bytes: IntGaugeVec, pub rocksdb_num_running_compactions: IntGaugeVec, pub rocksdb_num_running_flushes: IntGaugeVec, pub rocksdb_estimate_oldest_key_time: IntGaugeVec, pub rocksdb_background_errors: IntGaugeVec, pub rocksdb_estimated_num_keys: IntGaugeVec, + pub rocksdb_base_level: IntGaugeVec, } impl ColumnFamilyMetrics { @@ -112,6 +116,13 @@ impl ColumnFamilyMetrics { registry, ) .unwrap(), + rocksdb_current_size_active_mem_tables: register_int_gauge_vec_with_registry!( + "rocksdb_current_size_active_mem_tables", + "The current approximate size of active memtable (bytes).", + &["cf_name"], + registry, + ) + .unwrap(), rocksdb_size_all_mem_tables: register_int_gauge_vec_with_registry!( "rocksdb_size_all_mem_tables", "The memory size occupied by the column family's in-memory buffer", @@ -177,6 +188,13 @@ impl ColumnFamilyMetrics { registry, ) .unwrap(), + rocksdb_num_immutable_mem_tables: register_int_gauge_vec_with_registry!( + "rocksdb_num_immutable_mem_tables", + "The number of immutable memtables that have not yet been flushed.", + &["cf_name"], + registry, + ) + .unwrap(), rocksdb_mem_table_flush_pending: register_int_gauge_vec_with_registry!( "rocksdb_mem_table_flush_pending", "A 1 or 0 flag indicating whether a memtable flush is pending. @@ -198,6 +216,14 @@ impl ColumnFamilyMetrics { registry, ) .unwrap(), + rocksdb_estimate_pending_compaction_bytes: register_int_gauge_vec_with_registry!( + "rocksdb_estimate_pending_compaction_bytes", + "Estimated total number of bytes compaction needs to rewrite to get all levels down + to under target size. Not valid for other compactions than level-based.", + &["cf_name"], + registry, + ) + .unwrap(), rocksdb_num_running_compactions: register_int_gauge_vec_with_registry!( "rocksdb_num_running_compactions", "The number of compactions that are currently running for the column family.", @@ -234,7 +260,13 @@ impl ColumnFamilyMetrics { registry, ) .unwrap(), - + rocksdb_base_level: register_int_gauge_vec_with_registry!( + "rocksdb_base_level", + "The number of level to which L0 data will be compacted.", + &["cf_name"], + registry, + ) + .unwrap(), } } } diff --git a/crates/typed-store/src/rocks/mod.rs b/crates/typed-store/src/rocks/mod.rs index ca6505b9a448e..6bf550f4aa131 100644 --- a/crates/typed-store/src/rocks/mod.rs +++ b/crates/typed-store/src/rocks/mod.rs @@ -704,7 +704,7 @@ impl MetricConf { } } } -const CF_METRICS_REPORT_PERIOD_MILLIS: u64 = 1000; +const CF_METRICS_REPORT_PERIOD_SECS: u64 = 30; const METRICS_ERROR: i64 = -1; /// An interface to a rocksDB database, keyed by a columnfamily @@ -740,7 +740,7 @@ impl DBMap { if !is_deprecated { tokio::task::spawn(async move { let mut interval = - tokio::time::interval(Duration::from_millis(CF_METRICS_REPORT_PERIOD_MILLIS)); + tokio::time::interval(Duration::from_secs(CF_METRICS_REPORT_PERIOD_SECS)); loop { tokio::select! { _ = interval.tick() => { @@ -983,6 +983,14 @@ impl DBMap { Self::get_int_property(rocksdb, &cf, ROCKSDB_PROPERTY_TOTAL_BLOB_FILES_SIZE) .unwrap_or(METRICS_ERROR), ); + db_metrics + .cf_metrics + .rocksdb_current_size_active_mem_tables + .with_label_values(&[cf_name]) + .set( + Self::get_int_property(rocksdb, &cf, properties::CUR_SIZE_ACTIVE_MEM_TABLE) + .unwrap_or(METRICS_ERROR), + ); db_metrics .cf_metrics .rocksdb_size_all_mem_tables @@ -1063,6 +1071,14 @@ impl DBMap { Self::get_int_property(rocksdb, &cf, properties::ESTIMATE_NUM_KEYS) .unwrap_or(METRICS_ERROR), ); + db_metrics + .cf_metrics + .rocksdb_num_immutable_mem_tables + .with_label_values(&[cf_name]) + .set( + Self::get_int_property(rocksdb, &cf, properties::NUM_IMMUTABLE_MEM_TABLE) + .unwrap_or(METRICS_ERROR), + ); db_metrics .cf_metrics .rocksdb_mem_table_flush_pending @@ -1079,6 +1095,14 @@ impl DBMap { Self::get_int_property(rocksdb, &cf, properties::COMPACTION_PENDING) .unwrap_or(METRICS_ERROR), ); + db_metrics + .cf_metrics + .rocksdb_estimate_pending_compaction_bytes + .with_label_values(&[cf_name]) + .set( + Self::get_int_property(rocksdb, &cf, properties::ESTIMATE_PENDING_COMPACTION_BYTES) + .unwrap_or(METRICS_ERROR), + ); db_metrics .cf_metrics .rocksdb_num_running_compactions @@ -1111,6 +1135,14 @@ impl DBMap { Self::get_int_property(rocksdb, &cf, properties::BACKGROUND_ERRORS) .unwrap_or(METRICS_ERROR), ); + db_metrics + .cf_metrics + .rocksdb_base_level + .with_label_values(&[cf_name]) + .set( + Self::get_int_property(rocksdb, &cf, properties::BASE_LEVEL) + .unwrap_or(METRICS_ERROR), + ); } pub fn transaction(&self) -> Result, TypedStoreError> { From 32e55c681cacc4a324ea270eb7f251ac06d7a542 Mon Sep 17 00:00:00 2001 From: Eugene Boguslavsky Date: Tue, 3 Sep 2024 23:12:26 +0000 Subject: [PATCH 52/57] Sui v1.32.2 Version Bump --- Cargo.lock | 116 +++++++++++++------------- Cargo.toml | 2 +- crates/sui-open-rpc/spec/openrpc.json | 2 +- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40c61f3cb041f..d47f271491979 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1854,7 +1854,7 @@ checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bin-version" -version = "1.32.1" +version = "1.32.2" dependencies = [ "const-str", "git-version", @@ -12434,7 +12434,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "sui" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anemo", "anyhow", @@ -12505,7 +12505,7 @@ dependencies = [ "sui-package-management", "sui-protocol-config", "sui-replay", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-simulator", "sui-source-validation", "sui-swarm", @@ -12649,7 +12649,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "arrow", @@ -12701,7 +12701,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer-derive" -version = "1.32.1" +version = "1.32.2" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -12710,7 +12710,7 @@ dependencies = [ [[package]] name = "sui-archival" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "byteorder", @@ -12818,7 +12818,7 @@ dependencies = [ "sui-macros", "sui-network", "sui-protocol-config", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-simulator", "sui-storage", "sui-surfer", @@ -12836,7 +12836,7 @@ dependencies = [ [[package]] name = "sui-bridge" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "arc-swap", @@ -12870,7 +12870,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-test-transaction-builder", "sui-types", "tap", @@ -12885,7 +12885,7 @@ dependencies = [ [[package]] name = "sui-bridge-cli" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "clap", @@ -12902,7 +12902,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", "telemetry-subscribers", "tokio", @@ -12933,7 +12933,7 @@ dependencies = [ "sui-data-ingestion-core", "sui-indexer-builder", "sui-json-rpc-types", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-test-transaction-builder", "sui-types", "tap", @@ -12945,7 +12945,7 @@ dependencies = [ [[package]] name = "sui-cluster-test" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -12969,7 +12969,7 @@ dependencies = [ "sui-json", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-swarm", "sui-swarm-config", "sui-test-transaction-builder", @@ -13142,7 +13142,7 @@ dependencies = [ [[package]] name = "sui-data-ingestion" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -13204,7 +13204,7 @@ dependencies = [ [[package]] name = "sui-e2e-tests" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "assert_cmd", @@ -13248,7 +13248,7 @@ dependencies = [ "sui-node", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-simulator", "sui-storage", "sui-swarm", @@ -13321,7 +13321,7 @@ dependencies = [ [[package]] name = "sui-faucet" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-recursion", @@ -13340,7 +13340,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", "tap", "telemetry-subscribers", @@ -13377,7 +13377,7 @@ dependencies = [ [[package]] name = "sui-framework-snapshot" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "bcs", @@ -13440,7 +13440,7 @@ dependencies = [ [[package]] name = "sui-graphql-config" -version = "1.32.1" +version = "1.32.2" dependencies = [ "quote 1.0.35", "syn 1.0.107", @@ -13517,7 +13517,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-swarm-config", "sui-test-transaction-builder", "sui-types", @@ -13557,7 +13557,7 @@ dependencies = [ [[package]] name = "sui-indexer" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -13600,7 +13600,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-test-transaction-builder", "sui-transaction-builder", "sui-types", @@ -13750,7 +13750,7 @@ dependencies = [ "sui-open-rpc", "sui-open-rpc-macros", "sui-protocol-config", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-simulator", "sui-swarm-config", "sui-test-transaction-builder", @@ -13811,7 +13811,7 @@ dependencies = [ [[package]] name = "sui-light-client" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -13828,7 +13828,7 @@ dependencies = [ "sui-json-rpc-types", "sui-package-resolver", "sui-rest-api", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", "tokio", ] @@ -13845,7 +13845,7 @@ dependencies = [ [[package]] name = "sui-metric-checker" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "backoff", @@ -13866,7 +13866,7 @@ dependencies = [ [[package]] name = "sui-move" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "assert_cmd", @@ -13908,7 +13908,7 @@ dependencies = [ [[package]] name = "sui-move-build" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "datatest-stable", @@ -13932,7 +13932,7 @@ dependencies = [ [[package]] name = "sui-move-lsp" -version = "1.32.1" +version = "1.32.2" dependencies = [ "bin-version", "clap", @@ -14062,7 +14062,7 @@ dependencies = [ [[package]] name = "sui-node" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anemo", "anemo-tower", @@ -14115,7 +14115,7 @@ dependencies = [ [[package]] name = "sui-open-rpc" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "bcs", @@ -14151,7 +14151,7 @@ dependencies = [ [[package]] name = "sui-oracle" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "bcs", @@ -14171,7 +14171,7 @@ dependencies = [ "sui-json-rpc-types", "sui-keys", "sui-move-build", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", "tap", "telemetry-subscribers", @@ -14181,7 +14181,7 @@ dependencies = [ [[package]] name = "sui-package-dump" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "bcs", @@ -14198,14 +14198,14 @@ dependencies = [ [[package]] name = "sui-package-management" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "move-core-types", "move-package", "move-symbol-pool", "sui-json-rpc-types", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", "thiserror", "tracing", @@ -14348,7 +14348,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-protocol-config", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-storage", "sui-transaction-checks", "sui-types", @@ -14393,7 +14393,7 @@ dependencies = [ [[package]] name = "sui-rosetta" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -14421,7 +14421,7 @@ dependencies = [ "sui-keys", "sui-move-build", "sui-node", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-swarm-config", "sui-types", "telemetry-subscribers", @@ -14435,7 +14435,7 @@ dependencies = [ [[package]] name = "sui-rpc-loadgen" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -14453,7 +14453,7 @@ dependencies = [ "sui-json-rpc", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", "telemetry-subscribers", "test-cluster", @@ -14484,7 +14484,7 @@ dependencies = [ [[package]] name = "sui-sdk" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-recursion", @@ -14520,7 +14520,7 @@ dependencies = [ [[package]] name = "sui-security-watchdog" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "arrow-array", @@ -14567,7 +14567,7 @@ dependencies = [ [[package]] name = "sui-single-node-benchmark" -version = "1.32.1" +version = "1.32.2" dependencies = [ "async-trait", "bcs", @@ -14630,7 +14630,7 @@ dependencies = [ [[package]] name = "sui-source-validation" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "colored", @@ -14648,7 +14648,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move-build", "sui-package-management", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-test-transaction-builder", "sui-types", "tar", @@ -14684,7 +14684,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move", "sui-move-build", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-source-validation", "telemetry-subscribers", "tempfile", @@ -14755,7 +14755,7 @@ dependencies = [ [[package]] name = "sui-surfer" -version = "1.32.1" +version = "1.32.2" dependencies = [ "async-trait", "bcs", @@ -14853,13 +14853,13 @@ dependencies = [ "shared-crypto", "sui-genesis-builder", "sui-move-build", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-types", ] [[package]] name = "sui-test-validator" -version = "1.32.1" +version = "1.32.2" [[package]] name = "sui-tls" @@ -14884,7 +14884,7 @@ dependencies = [ [[package]] name = "sui-tool" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anemo", "anemo-cli", @@ -14918,7 +14918,7 @@ dependencies = [ "sui-package-dump", "sui-protocol-config", "sui-replay", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-snapshot", "sui-storage", "sui-types", @@ -15170,7 +15170,7 @@ dependencies = [ [[package]] name = "suins-indexer" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "async-trait", @@ -15204,7 +15204,7 @@ dependencies = [ [[package]] name = "suiop-cli" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "axum 0.7.5", @@ -15549,7 +15549,7 @@ dependencies = [ "sui-macros", "sui-node", "sui-protocol-config", - "sui-sdk 1.32.1", + "sui-sdk 1.32.2", "sui-simulator", "sui-swarm", "sui-swarm-config", @@ -17372,7 +17372,7 @@ dependencies = [ [[package]] name = "x" -version = "1.32.1" +version = "1.32.2" dependencies = [ "anyhow", "camino", diff --git a/Cargo.toml b/Cargo.toml index f5f6e98767582..6c9976a5a554d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -201,7 +201,7 @@ members = [ [workspace.package] # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates. -version = "1.32.1" +version = "1.32.2" [profile.release] # debug = 1 means line charts only, which is minimum needed for good stack traces diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index 85a4c2c11a5ba..fae22c2e71eea 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -12,7 +12,7 @@ "name": "Apache-2.0", "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE" }, - "version": "1.32.1" + "version": "1.32.2" }, "methods": [ { From a5eab1a75fa883f003a931bd71ef02987ffff7e9 Mon Sep 17 00:00:00 2001 From: Lu Zhang <8418040+longbowlu@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:31:22 -0700 Subject: [PATCH 53/57] [bridge] [cheerypick to 1.32] enable bridge on mainnet (#19199) ## Description enable bridge creation on mainnet by setting `bridge` is true. Before this change, the value true for testnet and devnet, but not mainnet. So this only applies to mainnet. ## Test plan it creates a new version 56 and enables bridge feature flag on mainnet. This change creates * [sui_protocol_config__test__Mainnet_version_56.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_56.snap) and * [sui_protocol_config__test__Testnet_version_56.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_56.snap) and it does NOT change * [sui_protocol_config__test__Testnet_version_55.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_55.snap) and [sui_protocol_config__test__Mainnet_version_55.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_55.snap) I did the following checks: * [sui_protocol_config__test__Mainnet_version_56.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_56.snap) is different from existing [sui_protocol_config__test__Mainnet_version_55.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_55.snap) for bridge: [diff](https://www.diffchecker.com/50VcWjj8/) * [sui_protocol_config__test__Testnet_version_56.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_56.snap) and [sui_protocol_config__test__Testnet_version_55.snap](https://github.com/MystenLabs/sui/blob/4b2e1ab739cee34e4075717b52766eb3a07946df/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_55.snap) are the same: [diff](https://www.diffchecker.com/6NbvoYmk/) --- ## Release notes Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required. For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates. - [x] Protocol: - [x] Nodes (Validators and Full nodes): - [ ] Indexer: - [ ] JSON-RPC: - [ ] GraphQL: - [ ] CLI: - [ ] Rust SDK: - [ ] REST API: --- crates/sui-open-rpc/spec/openrpc.json | 2 +- crates/sui-protocol-config/src/lib.rs | 8 +- ...ocol_config__test__Mainnet_version_56.snap | 324 +++++++++++++++++ ...ocol_config__test__Testnet_version_56.snap | 324 +++++++++++++++++ ...sui_protocol_config__test__version_56.snap | 333 ++++++++++++++++++ ...ests__genesis_config_snapshot_matches.snap | 2 +- ..._populated_genesis_snapshot_matches-2.snap | 31 +- 7 files changed, 1006 insertions(+), 18 deletions(-) create mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_56.snap create mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_56.snap create mode 100644 crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_56.snap diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index fae22c2e71eea..fca82a4d4fe2b 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -1293,7 +1293,7 @@ "name": "Result", "value": { "minSupportedProtocolVersion": "1", - "maxSupportedProtocolVersion": "55", + "maxSupportedProtocolVersion": "56", "protocolVersion": "6", "featureFlags": { "accept_zklogin_in_multisig": false, diff --git a/crates/sui-protocol-config/src/lib.rs b/crates/sui-protocol-config/src/lib.rs index 370bb61286a09..5dd0524410fbc 100644 --- a/crates/sui-protocol-config/src/lib.rs +++ b/crates/sui-protocol-config/src/lib.rs @@ -16,7 +16,7 @@ use tracing::{info, warn}; /// The minimum and maximum protocol versions supported by this build. const MIN_PROTOCOL_VERSION: u64 = 1; -const MAX_PROTOCOL_VERSION: u64 = 55; +const MAX_PROTOCOL_VERSION: u64 = 56; // Record history of protocol version allocations here: // @@ -169,6 +169,7 @@ const MAX_PROTOCOL_VERSION: u64 = 55; // Enable soft bundle on mainnet. // Version 55: Enable enums on mainnet. // Rethrow serialization type layout errors instead of converting them. +// Version 56: Enable bridge on mainnet. #[derive(Copy, Clone, Debug, Hash, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] pub struct ProtocolVersion(u64); @@ -2683,6 +2684,11 @@ impl ProtocolConfig { cfg.feature_flags.rethrow_serialization_type_layout_errors = true; } + 56 => { + if chain == Chain::Mainnet { + cfg.feature_flags.bridge = true; + } + } // Use this template when making changes: // // // modify an existing constant. diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_56.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_56.snap new file mode 100644 index 0000000000000..235fecc0da919 --- /dev/null +++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Mainnet_version_56.snap @@ -0,0 +1,324 @@ +--- +source: crates/sui-protocol-config/src/lib.rs +expression: "ProtocolConfig::get_for_version(cur, *chain_id)" +--- +version: 56 +feature_flags: + package_upgrades: true + commit_root_state_digest: true + advance_epoch_start_time_in_safe_mode: true + loaded_child_objects_fixed: true + missing_type_is_compatibility_error: true + scoring_decision_with_validity_cutoff: true + consensus_order_end_of_epoch_last: true + disallow_adding_abilities_on_upgrade: true + disable_invariant_violation_check_in_swap_loc: true + advance_to_highest_supported_protocol_version: true + ban_entry_init: true + package_digest_hash_module: true + disallow_change_struct_type_params_on_upgrade: true + no_extraneous_module_bytes: true + narwhal_versioned_metadata: true + zklogin_auth: true + consensus_transaction_ordering: ByGasPrice + simplified_unwrap_then_delete: true + upgraded_multisig_supported: true + txn_base_cost_as_multiplier: true + shared_object_deletion: true + narwhal_new_leader_election_schedule: true + loaded_child_object_format: true + enable_jwk_consensus_updates: true + end_of_epoch_transaction_supported: true + simple_conservation_checks: true + loaded_child_object_format_type: true + receive_objects: true + random_beacon: true + bridge: true + enable_effects_v2: true + narwhal_certificate_v2: true + verify_legacy_zklogin_address: true + recompute_has_public_transfer_in_execution: true + accept_zklogin_in_multisig: true + include_consensus_digest_in_prologue: true + hardened_otw_check: true + allow_receiving_object_id: true + enable_coin_deny_list: true + enable_group_ops_native_functions: true + reject_mutable_random_on_entry_functions: true + per_object_congestion_control_mode: TotalTxCount + consensus_choice: Mysticeti + consensus_network: Tonic + zklogin_max_epoch_upper_bound_delta: 30 + mysticeti_leader_scoring_and_schedule: true + reshare_at_same_initial_version: true + resolve_abort_locations_to_package_id: true + mysticeti_use_committed_subdag_digest: true + record_consensus_determined_version_assignments_in_prologue: true + fresh_vm_on_framework_upgrade: true + prepend_prologue_tx_in_consensus_commit_in_checkpoints: true + mysticeti_num_leaders_per_round: 1 + soft_bundle: true + enable_coin_deny_list_v2: true + rethrow_serialization_type_layout_errors: true +max_tx_size_bytes: 131072 +max_input_objects: 2048 +max_size_written_objects: 5000000 +max_size_written_objects_system_tx: 50000000 +max_serialized_tx_effects_size_bytes: 524288 +max_serialized_tx_effects_size_bytes_system_tx: 8388608 +max_gas_payment_objects: 256 +max_modules_in_publish: 64 +max_package_dependencies: 32 +max_arguments: 512 +max_type_arguments: 16 +max_type_argument_depth: 16 +max_pure_argument_size: 16384 +max_programmable_tx_commands: 1024 +move_binary_format_version: 7 +min_move_binary_format_version: 6 +binary_module_handles: 100 +binary_struct_handles: 300 +binary_function_handles: 1500 +binary_function_instantiations: 750 +binary_signatures: 1000 +binary_constant_pool: 4000 +binary_identifiers: 10000 +binary_address_identifiers: 100 +binary_struct_defs: 200 +binary_struct_def_instantiations: 100 +binary_function_defs: 1000 +binary_field_handles: 500 +binary_field_instantiations: 250 +binary_friend_decls: 100 +max_move_object_size: 256000 +max_move_package_size: 102400 +max_publish_or_upgrade_per_ptb: 5 +max_tx_gas: 50000000000 +max_gas_price: 100000 +max_gas_computation_bucket: 5000000 +gas_rounding_step: 1000 +max_loop_depth: 5 +max_generic_instantiation_length: 32 +max_function_parameters: 128 +max_basic_blocks: 1024 +max_value_stack_size: 1024 +max_type_nodes: 256 +max_push_size: 10000 +max_struct_definitions: 200 +max_function_definitions: 1000 +max_fields_in_struct: 32 +max_dependency_depth: 100 +max_num_event_emit: 1024 +max_num_new_move_object_ids: 2048 +max_num_new_move_object_ids_system_tx: 32768 +max_num_deleted_move_object_ids: 2048 +max_num_deleted_move_object_ids_system_tx: 32768 +max_num_transferred_move_object_ids: 2048 +max_num_transferred_move_object_ids_system_tx: 32768 +max_event_emit_size: 256000 +max_event_emit_size_total: 65536000 +max_move_vector_len: 262144 +max_move_identifier_len: 128 +max_move_value_depth: 128 +max_back_edges_per_function: 10000 +max_back_edges_per_module: 10000 +max_verifier_meter_ticks_per_function: 16000000 +max_meter_ticks_per_module: 16000000 +max_meter_ticks_per_package: 16000000 +object_runtime_max_num_cached_objects: 1000 +object_runtime_max_num_cached_objects_system_tx: 16000 +object_runtime_max_num_store_entries: 1000 +object_runtime_max_num_store_entries_system_tx: 16000 +base_tx_cost_fixed: 1000 +package_publish_cost_fixed: 1000 +base_tx_cost_per_byte: 0 +package_publish_cost_per_byte: 80 +obj_access_cost_read_per_byte: 15 +obj_access_cost_mutate_per_byte: 40 +obj_access_cost_delete_per_byte: 40 +obj_access_cost_verify_per_byte: 200 +gas_model_version: 8 +obj_data_cost_refundable: 100 +obj_metadata_cost_non_refundable: 50 +storage_rebate_rate: 9900 +storage_fund_reinvest_rate: 500 +reward_slashing_rate: 10000 +storage_gas_price: 76 +max_transactions_per_checkpoint: 10000 +max_checkpoint_size_bytes: 31457280 +buffer_stake_for_protocol_upgrade_bps: 5000 +address_from_bytes_cost_base: 52 +address_to_u256_cost_base: 52 +address_from_u256_cost_base: 52 +config_read_setting_impl_cost_base: 100 +config_read_setting_impl_cost_per_byte: 40 +dynamic_field_hash_type_and_key_cost_base: 100 +dynamic_field_hash_type_and_key_type_cost_per_byte: 2 +dynamic_field_hash_type_and_key_value_cost_per_byte: 2 +dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2 +dynamic_field_add_child_object_cost_base: 100 +dynamic_field_add_child_object_type_cost_per_byte: 10 +dynamic_field_add_child_object_value_cost_per_byte: 10 +dynamic_field_add_child_object_struct_tag_cost_per_byte: 10 +dynamic_field_borrow_child_object_cost_base: 100 +dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10 +dynamic_field_borrow_child_object_type_cost_per_byte: 10 +dynamic_field_remove_child_object_cost_base: 100 +dynamic_field_remove_child_object_child_cost_per_byte: 2 +dynamic_field_remove_child_object_type_cost_per_byte: 2 +dynamic_field_has_child_object_cost_base: 100 +dynamic_field_has_child_object_with_ty_cost_base: 100 +dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2 +dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2 +event_emit_cost_base: 52 +event_emit_value_size_derivation_cost_per_byte: 2 +event_emit_tag_size_derivation_cost_per_byte: 5 +event_emit_output_cost_per_byte: 10 +object_borrow_uid_cost_base: 52 +object_delete_impl_cost_base: 52 +object_record_new_uid_cost_base: 52 +transfer_transfer_internal_cost_base: 52 +transfer_freeze_object_cost_base: 52 +transfer_share_object_cost_base: 52 +transfer_receive_object_cost_base: 52 +tx_context_derive_id_cost_base: 52 +types_is_one_time_witness_cost_base: 52 +types_is_one_time_witness_type_tag_cost_per_byte: 2 +types_is_one_time_witness_type_cost_per_byte: 2 +validator_validate_metadata_cost_base: 52 +validator_validate_metadata_data_cost_per_byte: 2 +crypto_invalid_arguments_cost: 100 +bls12381_bls12381_min_sig_verify_cost_base: 52 +bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2 +bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2 +bls12381_bls12381_min_pk_verify_cost_base: 52 +bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2 +bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2 +ecdsa_k1_ecrecover_keccak256_cost_base: 52 +ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2 +ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2 +ecdsa_k1_ecrecover_sha256_cost_base: 52 +ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2 +ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2 +ecdsa_k1_decompress_pubkey_cost_base: 52 +ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52 +ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2 +ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2 +ecdsa_k1_secp256k1_verify_sha256_cost_base: 52 +ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2 +ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2 +ecdsa_r1_ecrecover_keccak256_cost_base: 52 +ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2 +ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2 +ecdsa_r1_ecrecover_sha256_cost_base: 52 +ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2 +ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2 +ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52 +ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2 +ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2 +ecdsa_r1_secp256r1_verify_sha256_cost_base: 52 +ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2 +ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2 +ecvrf_ecvrf_verify_cost_base: 52 +ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2 +ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2 +ed25519_ed25519_verify_cost_base: 52 +ed25519_ed25519_verify_msg_cost_per_byte: 2 +ed25519_ed25519_verify_msg_cost_per_block: 2 +groth16_prepare_verifying_key_bls12381_cost_base: 52 +groth16_prepare_verifying_key_bn254_cost_base: 52 +groth16_verify_groth16_proof_internal_bls12381_cost_base: 52 +groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2 +groth16_verify_groth16_proof_internal_bn254_cost_base: 52 +groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2 +groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2 +hash_blake2b256_cost_base: 52 +hash_blake2b256_data_cost_per_byte: 2 +hash_blake2b256_data_cost_per_block: 2 +hash_keccak256_cost_base: 52 +hash_keccak256_data_cost_per_byte: 2 +hash_keccak256_data_cost_per_block: 2 +group_ops_bls12381_decode_scalar_cost: 52 +group_ops_bls12381_decode_g1_cost: 52 +group_ops_bls12381_decode_g2_cost: 52 +group_ops_bls12381_decode_gt_cost: 52 +group_ops_bls12381_scalar_add_cost: 52 +group_ops_bls12381_g1_add_cost: 52 +group_ops_bls12381_g2_add_cost: 52 +group_ops_bls12381_gt_add_cost: 52 +group_ops_bls12381_scalar_sub_cost: 52 +group_ops_bls12381_g1_sub_cost: 52 +group_ops_bls12381_g2_sub_cost: 52 +group_ops_bls12381_gt_sub_cost: 52 +group_ops_bls12381_scalar_mul_cost: 52 +group_ops_bls12381_g1_mul_cost: 52 +group_ops_bls12381_g2_mul_cost: 52 +group_ops_bls12381_gt_mul_cost: 52 +group_ops_bls12381_scalar_div_cost: 52 +group_ops_bls12381_g1_div_cost: 52 +group_ops_bls12381_g2_div_cost: 52 +group_ops_bls12381_gt_div_cost: 52 +group_ops_bls12381_g1_hash_to_base_cost: 52 +group_ops_bls12381_g2_hash_to_base_cost: 52 +group_ops_bls12381_g1_hash_to_cost_per_byte: 2 +group_ops_bls12381_g2_hash_to_cost_per_byte: 2 +group_ops_bls12381_g1_msm_base_cost: 52 +group_ops_bls12381_g2_msm_base_cost: 52 +group_ops_bls12381_g1_msm_base_cost_per_input: 52 +group_ops_bls12381_g2_msm_base_cost_per_input: 52 +group_ops_bls12381_msm_max_len: 32 +group_ops_bls12381_pairing_cost: 52 +hmac_hmac_sha3_256_cost_base: 52 +hmac_hmac_sha3_256_input_cost_per_byte: 2 +hmac_hmac_sha3_256_input_cost_per_block: 2 +check_zklogin_id_cost_base: 200 +check_zklogin_issuer_cost_base: 200 +bcs_per_byte_serialized_cost: 2 +bcs_legacy_min_output_size_cost: 1 +bcs_failure_cost: 52 +hash_sha2_256_base_cost: 52 +hash_sha2_256_per_byte_cost: 2 +hash_sha2_256_legacy_min_input_len_cost: 1 +hash_sha3_256_base_cost: 52 +hash_sha3_256_per_byte_cost: 2 +hash_sha3_256_legacy_min_input_len_cost: 1 +type_name_get_base_cost: 52 +type_name_get_per_byte_cost: 2 +string_check_utf8_base_cost: 52 +string_check_utf8_per_byte_cost: 2 +string_is_char_boundary_base_cost: 52 +string_sub_string_base_cost: 52 +string_sub_string_per_byte_cost: 2 +string_index_of_base_cost: 52 +string_index_of_per_byte_pattern_cost: 2 +string_index_of_per_byte_searched_cost: 2 +vector_empty_base_cost: 52 +vector_length_base_cost: 52 +vector_push_back_base_cost: 52 +vector_push_back_legacy_per_abstract_memory_unit_cost: 2 +vector_borrow_base_cost: 52 +vector_pop_back_base_cost: 52 +vector_destroy_empty_base_cost: 52 +vector_swap_base_cost: 52 +debug_print_base_cost: 52 +debug_print_stack_trace_base_cost: 52 +execution_version: 3 +consensus_bad_nodes_stake_threshold: 20 +max_jwk_votes_per_validator_per_epoch: 240 +max_age_of_jwk_in_epochs: 1 +random_beacon_reduction_allowed_delta: 800 +random_beacon_reduction_lower_bound: 1000 +random_beacon_dkg_timeout_round: 3000 +random_beacon_min_round_interval_ms: 500 +random_beacon_dkg_version: 1 +consensus_max_transaction_size_bytes: 262144 +consensus_max_transactions_in_block_bytes: 524288 +consensus_max_num_transactions_in_block: 512 +max_accumulated_txn_cost_per_object_in_narwhal_commit: 100 +max_deferral_rounds_for_congestion_control: 10 +min_checkpoint_interval_ms: 200 +checkpoint_summary_version_specific_data: 1 +max_soft_bundle_size: 5 +bridge_should_try_to_finalize_committee: false +max_accumulated_txn_cost_per_object_in_mysticeti_commit: 10 + diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_56.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_56.snap new file mode 100644 index 0000000000000..4a06336c6fde4 --- /dev/null +++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__Testnet_version_56.snap @@ -0,0 +1,324 @@ +--- +source: crates/sui-protocol-config/src/lib.rs +expression: "ProtocolConfig::get_for_version(cur, *chain_id)" +--- +version: 56 +feature_flags: + package_upgrades: true + commit_root_state_digest: true + advance_epoch_start_time_in_safe_mode: true + loaded_child_objects_fixed: true + missing_type_is_compatibility_error: true + scoring_decision_with_validity_cutoff: true + consensus_order_end_of_epoch_last: true + disallow_adding_abilities_on_upgrade: true + disable_invariant_violation_check_in_swap_loc: true + advance_to_highest_supported_protocol_version: true + ban_entry_init: true + package_digest_hash_module: true + disallow_change_struct_type_params_on_upgrade: true + no_extraneous_module_bytes: true + narwhal_versioned_metadata: true + zklogin_auth: true + consensus_transaction_ordering: ByGasPrice + simplified_unwrap_then_delete: true + upgraded_multisig_supported: true + txn_base_cost_as_multiplier: true + shared_object_deletion: true + narwhal_new_leader_election_schedule: true + loaded_child_object_format: true + enable_jwk_consensus_updates: true + end_of_epoch_transaction_supported: true + simple_conservation_checks: true + loaded_child_object_format_type: true + receive_objects: true + random_beacon: true + bridge: true + enable_effects_v2: true + narwhal_certificate_v2: true + verify_legacy_zklogin_address: true + recompute_has_public_transfer_in_execution: true + accept_zklogin_in_multisig: true + include_consensus_digest_in_prologue: true + hardened_otw_check: true + allow_receiving_object_id: true + enable_coin_deny_list: true + enable_group_ops_native_functions: true + reject_mutable_random_on_entry_functions: true + per_object_congestion_control_mode: TotalTxCount + consensus_choice: Mysticeti + consensus_network: Tonic + zklogin_max_epoch_upper_bound_delta: 30 + mysticeti_leader_scoring_and_schedule: true + reshare_at_same_initial_version: true + resolve_abort_locations_to_package_id: true + mysticeti_use_committed_subdag_digest: true + record_consensus_determined_version_assignments_in_prologue: true + fresh_vm_on_framework_upgrade: true + prepend_prologue_tx_in_consensus_commit_in_checkpoints: true + mysticeti_num_leaders_per_round: 1 + soft_bundle: true + enable_coin_deny_list_v2: true + rethrow_serialization_type_layout_errors: true +max_tx_size_bytes: 131072 +max_input_objects: 2048 +max_size_written_objects: 5000000 +max_size_written_objects_system_tx: 50000000 +max_serialized_tx_effects_size_bytes: 524288 +max_serialized_tx_effects_size_bytes_system_tx: 8388608 +max_gas_payment_objects: 256 +max_modules_in_publish: 64 +max_package_dependencies: 32 +max_arguments: 512 +max_type_arguments: 16 +max_type_argument_depth: 16 +max_pure_argument_size: 16384 +max_programmable_tx_commands: 1024 +move_binary_format_version: 7 +min_move_binary_format_version: 6 +binary_module_handles: 100 +binary_struct_handles: 300 +binary_function_handles: 1500 +binary_function_instantiations: 750 +binary_signatures: 1000 +binary_constant_pool: 4000 +binary_identifiers: 10000 +binary_address_identifiers: 100 +binary_struct_defs: 200 +binary_struct_def_instantiations: 100 +binary_function_defs: 1000 +binary_field_handles: 500 +binary_field_instantiations: 250 +binary_friend_decls: 100 +max_move_object_size: 256000 +max_move_package_size: 102400 +max_publish_or_upgrade_per_ptb: 5 +max_tx_gas: 50000000000 +max_gas_price: 100000 +max_gas_computation_bucket: 5000000 +gas_rounding_step: 1000 +max_loop_depth: 5 +max_generic_instantiation_length: 32 +max_function_parameters: 128 +max_basic_blocks: 1024 +max_value_stack_size: 1024 +max_type_nodes: 256 +max_push_size: 10000 +max_struct_definitions: 200 +max_function_definitions: 1000 +max_fields_in_struct: 32 +max_dependency_depth: 100 +max_num_event_emit: 1024 +max_num_new_move_object_ids: 2048 +max_num_new_move_object_ids_system_tx: 32768 +max_num_deleted_move_object_ids: 2048 +max_num_deleted_move_object_ids_system_tx: 32768 +max_num_transferred_move_object_ids: 2048 +max_num_transferred_move_object_ids_system_tx: 32768 +max_event_emit_size: 256000 +max_event_emit_size_total: 65536000 +max_move_vector_len: 262144 +max_move_identifier_len: 128 +max_move_value_depth: 128 +max_back_edges_per_function: 10000 +max_back_edges_per_module: 10000 +max_verifier_meter_ticks_per_function: 16000000 +max_meter_ticks_per_module: 16000000 +max_meter_ticks_per_package: 16000000 +object_runtime_max_num_cached_objects: 1000 +object_runtime_max_num_cached_objects_system_tx: 16000 +object_runtime_max_num_store_entries: 1000 +object_runtime_max_num_store_entries_system_tx: 16000 +base_tx_cost_fixed: 1000 +package_publish_cost_fixed: 1000 +base_tx_cost_per_byte: 0 +package_publish_cost_per_byte: 80 +obj_access_cost_read_per_byte: 15 +obj_access_cost_mutate_per_byte: 40 +obj_access_cost_delete_per_byte: 40 +obj_access_cost_verify_per_byte: 200 +gas_model_version: 8 +obj_data_cost_refundable: 100 +obj_metadata_cost_non_refundable: 50 +storage_rebate_rate: 9900 +storage_fund_reinvest_rate: 500 +reward_slashing_rate: 10000 +storage_gas_price: 76 +max_transactions_per_checkpoint: 10000 +max_checkpoint_size_bytes: 31457280 +buffer_stake_for_protocol_upgrade_bps: 5000 +address_from_bytes_cost_base: 52 +address_to_u256_cost_base: 52 +address_from_u256_cost_base: 52 +config_read_setting_impl_cost_base: 100 +config_read_setting_impl_cost_per_byte: 40 +dynamic_field_hash_type_and_key_cost_base: 100 +dynamic_field_hash_type_and_key_type_cost_per_byte: 2 +dynamic_field_hash_type_and_key_value_cost_per_byte: 2 +dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2 +dynamic_field_add_child_object_cost_base: 100 +dynamic_field_add_child_object_type_cost_per_byte: 10 +dynamic_field_add_child_object_value_cost_per_byte: 10 +dynamic_field_add_child_object_struct_tag_cost_per_byte: 10 +dynamic_field_borrow_child_object_cost_base: 100 +dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10 +dynamic_field_borrow_child_object_type_cost_per_byte: 10 +dynamic_field_remove_child_object_cost_base: 100 +dynamic_field_remove_child_object_child_cost_per_byte: 2 +dynamic_field_remove_child_object_type_cost_per_byte: 2 +dynamic_field_has_child_object_cost_base: 100 +dynamic_field_has_child_object_with_ty_cost_base: 100 +dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2 +dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2 +event_emit_cost_base: 52 +event_emit_value_size_derivation_cost_per_byte: 2 +event_emit_tag_size_derivation_cost_per_byte: 5 +event_emit_output_cost_per_byte: 10 +object_borrow_uid_cost_base: 52 +object_delete_impl_cost_base: 52 +object_record_new_uid_cost_base: 52 +transfer_transfer_internal_cost_base: 52 +transfer_freeze_object_cost_base: 52 +transfer_share_object_cost_base: 52 +transfer_receive_object_cost_base: 52 +tx_context_derive_id_cost_base: 52 +types_is_one_time_witness_cost_base: 52 +types_is_one_time_witness_type_tag_cost_per_byte: 2 +types_is_one_time_witness_type_cost_per_byte: 2 +validator_validate_metadata_cost_base: 52 +validator_validate_metadata_data_cost_per_byte: 2 +crypto_invalid_arguments_cost: 100 +bls12381_bls12381_min_sig_verify_cost_base: 52 +bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2 +bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2 +bls12381_bls12381_min_pk_verify_cost_base: 52 +bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2 +bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2 +ecdsa_k1_ecrecover_keccak256_cost_base: 52 +ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2 +ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2 +ecdsa_k1_ecrecover_sha256_cost_base: 52 +ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2 +ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2 +ecdsa_k1_decompress_pubkey_cost_base: 52 +ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52 +ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2 +ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2 +ecdsa_k1_secp256k1_verify_sha256_cost_base: 52 +ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2 +ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2 +ecdsa_r1_ecrecover_keccak256_cost_base: 52 +ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2 +ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2 +ecdsa_r1_ecrecover_sha256_cost_base: 52 +ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2 +ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2 +ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52 +ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2 +ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2 +ecdsa_r1_secp256r1_verify_sha256_cost_base: 52 +ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2 +ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2 +ecvrf_ecvrf_verify_cost_base: 52 +ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2 +ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2 +ed25519_ed25519_verify_cost_base: 52 +ed25519_ed25519_verify_msg_cost_per_byte: 2 +ed25519_ed25519_verify_msg_cost_per_block: 2 +groth16_prepare_verifying_key_bls12381_cost_base: 52 +groth16_prepare_verifying_key_bn254_cost_base: 52 +groth16_verify_groth16_proof_internal_bls12381_cost_base: 52 +groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2 +groth16_verify_groth16_proof_internal_bn254_cost_base: 52 +groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2 +groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2 +hash_blake2b256_cost_base: 52 +hash_blake2b256_data_cost_per_byte: 2 +hash_blake2b256_data_cost_per_block: 2 +hash_keccak256_cost_base: 52 +hash_keccak256_data_cost_per_byte: 2 +hash_keccak256_data_cost_per_block: 2 +group_ops_bls12381_decode_scalar_cost: 52 +group_ops_bls12381_decode_g1_cost: 52 +group_ops_bls12381_decode_g2_cost: 52 +group_ops_bls12381_decode_gt_cost: 52 +group_ops_bls12381_scalar_add_cost: 52 +group_ops_bls12381_g1_add_cost: 52 +group_ops_bls12381_g2_add_cost: 52 +group_ops_bls12381_gt_add_cost: 52 +group_ops_bls12381_scalar_sub_cost: 52 +group_ops_bls12381_g1_sub_cost: 52 +group_ops_bls12381_g2_sub_cost: 52 +group_ops_bls12381_gt_sub_cost: 52 +group_ops_bls12381_scalar_mul_cost: 52 +group_ops_bls12381_g1_mul_cost: 52 +group_ops_bls12381_g2_mul_cost: 52 +group_ops_bls12381_gt_mul_cost: 52 +group_ops_bls12381_scalar_div_cost: 52 +group_ops_bls12381_g1_div_cost: 52 +group_ops_bls12381_g2_div_cost: 52 +group_ops_bls12381_gt_div_cost: 52 +group_ops_bls12381_g1_hash_to_base_cost: 52 +group_ops_bls12381_g2_hash_to_base_cost: 52 +group_ops_bls12381_g1_hash_to_cost_per_byte: 2 +group_ops_bls12381_g2_hash_to_cost_per_byte: 2 +group_ops_bls12381_g1_msm_base_cost: 52 +group_ops_bls12381_g2_msm_base_cost: 52 +group_ops_bls12381_g1_msm_base_cost_per_input: 52 +group_ops_bls12381_g2_msm_base_cost_per_input: 52 +group_ops_bls12381_msm_max_len: 32 +group_ops_bls12381_pairing_cost: 52 +hmac_hmac_sha3_256_cost_base: 52 +hmac_hmac_sha3_256_input_cost_per_byte: 2 +hmac_hmac_sha3_256_input_cost_per_block: 2 +check_zklogin_id_cost_base: 200 +check_zklogin_issuer_cost_base: 200 +bcs_per_byte_serialized_cost: 2 +bcs_legacy_min_output_size_cost: 1 +bcs_failure_cost: 52 +hash_sha2_256_base_cost: 52 +hash_sha2_256_per_byte_cost: 2 +hash_sha2_256_legacy_min_input_len_cost: 1 +hash_sha3_256_base_cost: 52 +hash_sha3_256_per_byte_cost: 2 +hash_sha3_256_legacy_min_input_len_cost: 1 +type_name_get_base_cost: 52 +type_name_get_per_byte_cost: 2 +string_check_utf8_base_cost: 52 +string_check_utf8_per_byte_cost: 2 +string_is_char_boundary_base_cost: 52 +string_sub_string_base_cost: 52 +string_sub_string_per_byte_cost: 2 +string_index_of_base_cost: 52 +string_index_of_per_byte_pattern_cost: 2 +string_index_of_per_byte_searched_cost: 2 +vector_empty_base_cost: 52 +vector_length_base_cost: 52 +vector_push_back_base_cost: 52 +vector_push_back_legacy_per_abstract_memory_unit_cost: 2 +vector_borrow_base_cost: 52 +vector_pop_back_base_cost: 52 +vector_destroy_empty_base_cost: 52 +vector_swap_base_cost: 52 +debug_print_base_cost: 52 +debug_print_stack_trace_base_cost: 52 +execution_version: 3 +consensus_bad_nodes_stake_threshold: 20 +max_jwk_votes_per_validator_per_epoch: 240 +max_age_of_jwk_in_epochs: 1 +random_beacon_reduction_allowed_delta: 800 +random_beacon_reduction_lower_bound: 1000 +random_beacon_dkg_timeout_round: 3000 +random_beacon_min_round_interval_ms: 500 +random_beacon_dkg_version: 1 +consensus_max_transaction_size_bytes: 262144 +consensus_max_transactions_in_block_bytes: 524288 +consensus_max_num_transactions_in_block: 512 +max_accumulated_txn_cost_per_object_in_narwhal_commit: 100 +max_deferral_rounds_for_congestion_control: 10 +min_checkpoint_interval_ms: 200 +checkpoint_summary_version_specific_data: 1 +max_soft_bundle_size: 5 +bridge_should_try_to_finalize_committee: true +max_accumulated_txn_cost_per_object_in_mysticeti_commit: 10 + diff --git a/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_56.snap b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_56.snap new file mode 100644 index 0000000000000..a18a84ddf856b --- /dev/null +++ b/crates/sui-protocol-config/src/snapshots/sui_protocol_config__test__version_56.snap @@ -0,0 +1,333 @@ +--- +source: crates/sui-protocol-config/src/lib.rs +expression: "ProtocolConfig::get_for_version(cur, *chain_id)" +--- +version: 56 +feature_flags: + package_upgrades: true + commit_root_state_digest: true + advance_epoch_start_time_in_safe_mode: true + loaded_child_objects_fixed: true + missing_type_is_compatibility_error: true + scoring_decision_with_validity_cutoff: true + consensus_order_end_of_epoch_last: true + disallow_adding_abilities_on_upgrade: true + disable_invariant_violation_check_in_swap_loc: true + advance_to_highest_supported_protocol_version: true + ban_entry_init: true + package_digest_hash_module: true + disallow_change_struct_type_params_on_upgrade: true + no_extraneous_module_bytes: true + narwhal_versioned_metadata: true + zklogin_auth: true + consensus_transaction_ordering: ByGasPrice + simplified_unwrap_then_delete: true + upgraded_multisig_supported: true + txn_base_cost_as_multiplier: true + shared_object_deletion: true + narwhal_new_leader_election_schedule: true + loaded_child_object_format: true + enable_jwk_consensus_updates: true + end_of_epoch_transaction_supported: true + simple_conservation_checks: true + loaded_child_object_format_type: true + receive_objects: true + random_beacon: true + bridge: true + enable_effects_v2: true + narwhal_certificate_v2: true + verify_legacy_zklogin_address: true + recompute_has_public_transfer_in_execution: true + accept_zklogin_in_multisig: true + include_consensus_digest_in_prologue: true + hardened_otw_check: true + allow_receiving_object_id: true + enable_poseidon: true + enable_coin_deny_list: true + enable_group_ops_native_functions: true + enable_group_ops_native_function_msm: true + reject_mutable_random_on_entry_functions: true + per_object_congestion_control_mode: TotalTxCount + consensus_choice: Mysticeti + consensus_network: Tonic + zklogin_max_epoch_upper_bound_delta: 30 + mysticeti_leader_scoring_and_schedule: true + reshare_at_same_initial_version: true + resolve_abort_locations_to_package_id: true + mysticeti_use_committed_subdag_digest: true + enable_vdf: true + record_consensus_determined_version_assignments_in_prologue: true + fresh_vm_on_framework_upgrade: true + prepend_prologue_tx_in_consensus_commit_in_checkpoints: true + mysticeti_num_leaders_per_round: 1 + soft_bundle: true + enable_coin_deny_list_v2: true + passkey_auth: true + authority_capabilities_v2: true + rethrow_serialization_type_layout_errors: true +max_tx_size_bytes: 131072 +max_input_objects: 2048 +max_size_written_objects: 5000000 +max_size_written_objects_system_tx: 50000000 +max_serialized_tx_effects_size_bytes: 524288 +max_serialized_tx_effects_size_bytes_system_tx: 8388608 +max_gas_payment_objects: 256 +max_modules_in_publish: 64 +max_package_dependencies: 32 +max_arguments: 512 +max_type_arguments: 16 +max_type_argument_depth: 16 +max_pure_argument_size: 16384 +max_programmable_tx_commands: 1024 +move_binary_format_version: 7 +min_move_binary_format_version: 6 +binary_module_handles: 100 +binary_struct_handles: 300 +binary_function_handles: 1500 +binary_function_instantiations: 750 +binary_signatures: 1000 +binary_constant_pool: 4000 +binary_identifiers: 10000 +binary_address_identifiers: 100 +binary_struct_defs: 200 +binary_struct_def_instantiations: 100 +binary_function_defs: 1000 +binary_field_handles: 500 +binary_field_instantiations: 250 +binary_friend_decls: 100 +max_move_object_size: 256000 +max_move_package_size: 102400 +max_publish_or_upgrade_per_ptb: 5 +max_tx_gas: 50000000000 +max_gas_price: 100000 +max_gas_computation_bucket: 5000000 +gas_rounding_step: 1000 +max_loop_depth: 5 +max_generic_instantiation_length: 32 +max_function_parameters: 128 +max_basic_blocks: 1024 +max_value_stack_size: 1024 +max_type_nodes: 256 +max_push_size: 10000 +max_struct_definitions: 200 +max_function_definitions: 1000 +max_fields_in_struct: 32 +max_dependency_depth: 100 +max_num_event_emit: 1024 +max_num_new_move_object_ids: 2048 +max_num_new_move_object_ids_system_tx: 32768 +max_num_deleted_move_object_ids: 2048 +max_num_deleted_move_object_ids_system_tx: 32768 +max_num_transferred_move_object_ids: 2048 +max_num_transferred_move_object_ids_system_tx: 32768 +max_event_emit_size: 256000 +max_event_emit_size_total: 65536000 +max_move_vector_len: 262144 +max_move_identifier_len: 128 +max_move_value_depth: 128 +max_back_edges_per_function: 10000 +max_back_edges_per_module: 10000 +max_verifier_meter_ticks_per_function: 16000000 +max_meter_ticks_per_module: 16000000 +max_meter_ticks_per_package: 16000000 +object_runtime_max_num_cached_objects: 1000 +object_runtime_max_num_cached_objects_system_tx: 16000 +object_runtime_max_num_store_entries: 1000 +object_runtime_max_num_store_entries_system_tx: 16000 +base_tx_cost_fixed: 1000 +package_publish_cost_fixed: 1000 +base_tx_cost_per_byte: 0 +package_publish_cost_per_byte: 80 +obj_access_cost_read_per_byte: 15 +obj_access_cost_mutate_per_byte: 40 +obj_access_cost_delete_per_byte: 40 +obj_access_cost_verify_per_byte: 200 +gas_model_version: 8 +obj_data_cost_refundable: 100 +obj_metadata_cost_non_refundable: 50 +storage_rebate_rate: 9900 +storage_fund_reinvest_rate: 500 +reward_slashing_rate: 10000 +storage_gas_price: 76 +max_transactions_per_checkpoint: 10000 +max_checkpoint_size_bytes: 31457280 +buffer_stake_for_protocol_upgrade_bps: 5000 +address_from_bytes_cost_base: 52 +address_to_u256_cost_base: 52 +address_from_u256_cost_base: 52 +config_read_setting_impl_cost_base: 100 +config_read_setting_impl_cost_per_byte: 40 +dynamic_field_hash_type_and_key_cost_base: 100 +dynamic_field_hash_type_and_key_type_cost_per_byte: 2 +dynamic_field_hash_type_and_key_value_cost_per_byte: 2 +dynamic_field_hash_type_and_key_type_tag_cost_per_byte: 2 +dynamic_field_add_child_object_cost_base: 100 +dynamic_field_add_child_object_type_cost_per_byte: 10 +dynamic_field_add_child_object_value_cost_per_byte: 10 +dynamic_field_add_child_object_struct_tag_cost_per_byte: 10 +dynamic_field_borrow_child_object_cost_base: 100 +dynamic_field_borrow_child_object_child_ref_cost_per_byte: 10 +dynamic_field_borrow_child_object_type_cost_per_byte: 10 +dynamic_field_remove_child_object_cost_base: 100 +dynamic_field_remove_child_object_child_cost_per_byte: 2 +dynamic_field_remove_child_object_type_cost_per_byte: 2 +dynamic_field_has_child_object_cost_base: 100 +dynamic_field_has_child_object_with_ty_cost_base: 100 +dynamic_field_has_child_object_with_ty_type_cost_per_byte: 2 +dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte: 2 +event_emit_cost_base: 52 +event_emit_value_size_derivation_cost_per_byte: 2 +event_emit_tag_size_derivation_cost_per_byte: 5 +event_emit_output_cost_per_byte: 10 +object_borrow_uid_cost_base: 52 +object_delete_impl_cost_base: 52 +object_record_new_uid_cost_base: 52 +transfer_transfer_internal_cost_base: 52 +transfer_freeze_object_cost_base: 52 +transfer_share_object_cost_base: 52 +transfer_receive_object_cost_base: 52 +tx_context_derive_id_cost_base: 52 +types_is_one_time_witness_cost_base: 52 +types_is_one_time_witness_type_tag_cost_per_byte: 2 +types_is_one_time_witness_type_cost_per_byte: 2 +validator_validate_metadata_cost_base: 52 +validator_validate_metadata_data_cost_per_byte: 2 +crypto_invalid_arguments_cost: 100 +bls12381_bls12381_min_sig_verify_cost_base: 52 +bls12381_bls12381_min_sig_verify_msg_cost_per_byte: 2 +bls12381_bls12381_min_sig_verify_msg_cost_per_block: 2 +bls12381_bls12381_min_pk_verify_cost_base: 52 +bls12381_bls12381_min_pk_verify_msg_cost_per_byte: 2 +bls12381_bls12381_min_pk_verify_msg_cost_per_block: 2 +ecdsa_k1_ecrecover_keccak256_cost_base: 52 +ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte: 2 +ecdsa_k1_ecrecover_keccak256_msg_cost_per_block: 2 +ecdsa_k1_ecrecover_sha256_cost_base: 52 +ecdsa_k1_ecrecover_sha256_msg_cost_per_byte: 2 +ecdsa_k1_ecrecover_sha256_msg_cost_per_block: 2 +ecdsa_k1_decompress_pubkey_cost_base: 52 +ecdsa_k1_secp256k1_verify_keccak256_cost_base: 52 +ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte: 2 +ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block: 2 +ecdsa_k1_secp256k1_verify_sha256_cost_base: 52 +ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte: 2 +ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block: 2 +ecdsa_r1_ecrecover_keccak256_cost_base: 52 +ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte: 2 +ecdsa_r1_ecrecover_keccak256_msg_cost_per_block: 2 +ecdsa_r1_ecrecover_sha256_cost_base: 52 +ecdsa_r1_ecrecover_sha256_msg_cost_per_byte: 2 +ecdsa_r1_ecrecover_sha256_msg_cost_per_block: 2 +ecdsa_r1_secp256r1_verify_keccak256_cost_base: 52 +ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte: 2 +ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block: 2 +ecdsa_r1_secp256r1_verify_sha256_cost_base: 52 +ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte: 2 +ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block: 2 +ecvrf_ecvrf_verify_cost_base: 52 +ecvrf_ecvrf_verify_alpha_string_cost_per_byte: 2 +ecvrf_ecvrf_verify_alpha_string_cost_per_block: 2 +ed25519_ed25519_verify_cost_base: 52 +ed25519_ed25519_verify_msg_cost_per_byte: 2 +ed25519_ed25519_verify_msg_cost_per_block: 2 +groth16_prepare_verifying_key_bls12381_cost_base: 52 +groth16_prepare_verifying_key_bn254_cost_base: 52 +groth16_verify_groth16_proof_internal_bls12381_cost_base: 52 +groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input: 2 +groth16_verify_groth16_proof_internal_bn254_cost_base: 52 +groth16_verify_groth16_proof_internal_bn254_cost_per_public_input: 2 +groth16_verify_groth16_proof_internal_public_input_cost_per_byte: 2 +hash_blake2b256_cost_base: 52 +hash_blake2b256_data_cost_per_byte: 2 +hash_blake2b256_data_cost_per_block: 2 +hash_keccak256_cost_base: 52 +hash_keccak256_data_cost_per_byte: 2 +hash_keccak256_data_cost_per_block: 2 +poseidon_bn254_cost_base: 260 +poseidon_bn254_cost_per_block: 10 +group_ops_bls12381_decode_scalar_cost: 52 +group_ops_bls12381_decode_g1_cost: 52 +group_ops_bls12381_decode_g2_cost: 52 +group_ops_bls12381_decode_gt_cost: 52 +group_ops_bls12381_scalar_add_cost: 52 +group_ops_bls12381_g1_add_cost: 52 +group_ops_bls12381_g2_add_cost: 52 +group_ops_bls12381_gt_add_cost: 52 +group_ops_bls12381_scalar_sub_cost: 52 +group_ops_bls12381_g1_sub_cost: 52 +group_ops_bls12381_g2_sub_cost: 52 +group_ops_bls12381_gt_sub_cost: 52 +group_ops_bls12381_scalar_mul_cost: 52 +group_ops_bls12381_g1_mul_cost: 52 +group_ops_bls12381_g2_mul_cost: 52 +group_ops_bls12381_gt_mul_cost: 52 +group_ops_bls12381_scalar_div_cost: 52 +group_ops_bls12381_g1_div_cost: 52 +group_ops_bls12381_g2_div_cost: 52 +group_ops_bls12381_gt_div_cost: 52 +group_ops_bls12381_g1_hash_to_base_cost: 52 +group_ops_bls12381_g2_hash_to_base_cost: 52 +group_ops_bls12381_g1_hash_to_cost_per_byte: 2 +group_ops_bls12381_g2_hash_to_cost_per_byte: 2 +group_ops_bls12381_g1_msm_base_cost: 52 +group_ops_bls12381_g2_msm_base_cost: 52 +group_ops_bls12381_g1_msm_base_cost_per_input: 52 +group_ops_bls12381_g2_msm_base_cost_per_input: 52 +group_ops_bls12381_msm_max_len: 32 +group_ops_bls12381_pairing_cost: 52 +hmac_hmac_sha3_256_cost_base: 52 +hmac_hmac_sha3_256_input_cost_per_byte: 2 +hmac_hmac_sha3_256_input_cost_per_block: 2 +check_zklogin_id_cost_base: 200 +check_zklogin_issuer_cost_base: 200 +vdf_verify_vdf_cost: 1500 +vdf_hash_to_input_cost: 100 +bcs_per_byte_serialized_cost: 2 +bcs_legacy_min_output_size_cost: 1 +bcs_failure_cost: 52 +hash_sha2_256_base_cost: 52 +hash_sha2_256_per_byte_cost: 2 +hash_sha2_256_legacy_min_input_len_cost: 1 +hash_sha3_256_base_cost: 52 +hash_sha3_256_per_byte_cost: 2 +hash_sha3_256_legacy_min_input_len_cost: 1 +type_name_get_base_cost: 52 +type_name_get_per_byte_cost: 2 +string_check_utf8_base_cost: 52 +string_check_utf8_per_byte_cost: 2 +string_is_char_boundary_base_cost: 52 +string_sub_string_base_cost: 52 +string_sub_string_per_byte_cost: 2 +string_index_of_base_cost: 52 +string_index_of_per_byte_pattern_cost: 2 +string_index_of_per_byte_searched_cost: 2 +vector_empty_base_cost: 52 +vector_length_base_cost: 52 +vector_push_back_base_cost: 52 +vector_push_back_legacy_per_abstract_memory_unit_cost: 2 +vector_borrow_base_cost: 52 +vector_pop_back_base_cost: 52 +vector_destroy_empty_base_cost: 52 +vector_swap_base_cost: 52 +debug_print_base_cost: 52 +debug_print_stack_trace_base_cost: 52 +execution_version: 3 +consensus_bad_nodes_stake_threshold: 20 +max_jwk_votes_per_validator_per_epoch: 240 +max_age_of_jwk_in_epochs: 1 +random_beacon_reduction_allowed_delta: 800 +random_beacon_reduction_lower_bound: 1000 +random_beacon_dkg_timeout_round: 3000 +random_beacon_min_round_interval_ms: 500 +random_beacon_dkg_version: 1 +consensus_max_transaction_size_bytes: 262144 +consensus_max_transactions_in_block_bytes: 524288 +consensus_max_num_transactions_in_block: 512 +max_accumulated_txn_cost_per_object_in_narwhal_commit: 100 +max_deferral_rounds_for_congestion_control: 10 +min_checkpoint_interval_ms: 200 +checkpoint_summary_version_specific_data: 1 +max_soft_bundle_size: 5 +bridge_should_try_to_finalize_committee: true +max_accumulated_txn_cost_per_object_in_mysticeti_commit: 10 + diff --git a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap index c780c2c68a94a..4bf528401e530 100644 --- a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap +++ b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__genesis_config_snapshot_matches.snap @@ -6,7 +6,7 @@ ssfn_config_info: ~ validator_config_info: ~ parameters: chain_start_timestamp_ms: 0 - protocol_version: 55 + protocol_version: 56 allow_insertion_of_extra_objects: true epoch_duration_ms: 86400000 stake_subsidy_start_epoch: 0 diff --git a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap index 8dd452630584e..5447c9d000d0c 100644 --- a/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap +++ b/crates/sui-swarm-config/tests/snapshots/snapshot_tests__populated_genesis_snapshot_matches-2.snap @@ -3,7 +3,7 @@ source: crates/sui-swarm-config/tests/snapshot_tests.rs expression: genesis.sui_system_object().into_genesis_version_for_tooling() --- epoch: 0 -protocol_version: 55 +protocol_version: 56 system_state_version: 1 validators: total_stake: 20000000000000000 @@ -240,13 +240,13 @@ validators: next_epoch_worker_address: ~ extra_fields: id: - id: "0x5c69dd788c7563c072656a524608262510732d402034ca53215f41e32dc3db49" + id: "0x9df15aec1e3398f9894d68a8b9e419d66ff924991a376081456866c6528a2c72" size: 0 voting_power: 10000 - operation_cap_id: "0x5fa2be1df8bd48729b78bf6edd46a0e9ea28fb6c770cb50ac47f5df471f753b1" + operation_cap_id: "0xbd965c0ebe2a666754e13a1b9812beb608097e78494013237388535f8a227929" gas_price: 1000 staking_pool: - id: "0x21201b029962e18d8d5564676500afd842684e1e0c4f288c6eaa90e0b9a3c3ef" + id: "0x5fa1b7daa7553ca1025c1f5168650d13bfb2b0f626ed186649649ec24a57813f" activation_epoch: 0 deactivation_epoch: ~ sui_balance: 20000000000000000 @@ -254,14 +254,14 @@ validators: value: 0 pool_token_balance: 20000000000000000 exchange_rates: - id: "0x2424c3e08b4a40a728acf962554669000c48b6ba7691bfa260bd424fcd0c0834" + id: "0xbf9aa86783f7120325e8723deaaf863c36581193509fd84b48ee372de6588523" size: 1 pending_stake: 0 pending_total_sui_withdraw: 0 pending_pool_token_withdraw: 0 extra_fields: id: - id: "0x7100ddb5358349900beb5e8e8e046939e1c03eedd9f4709ae492ff4d0e0cf66c" + id: "0x3f21afb58ceeb5e2ce9f90698dfa697ba8a339998107863131f1a170b781eefd" size: 0 commission_rate: 200 next_epoch_stake: 20000000000000000 @@ -269,27 +269,27 @@ validators: next_epoch_commission_rate: 200 extra_fields: id: - id: "0xd791c0d0ddc2928045f1a5b2da7911cbdd83ba737e96c03550f39ce8e5643536" + id: "0x4a1e374de1e8276992f7394e0f26b7b3e6f417900dd2b2a45ebb848230f070ac" size: 0 pending_active_validators: contents: - id: "0xc24dd20b74615566bb9e91c83348fdc1e874124387dcfa094b9aff49e46c26be" + id: "0xbc0069fc9fe1841e10b1b11bc17fbdd8ec32e6c82a6e0a485c6ee1aea0c7ea0f" size: 0 pending_removals: [] staking_pool_mappings: - id: "0x771b57d70042c92903066603056006cd575cd2da9b47442da606f118f1c3fb19" + id: "0x949ea822e8280160fb7c7451c8ed7fbcb3df16341128b7e2755fe5d50d5b2e23" size: 1 inactive_validators: - id: "0x4ef8c9e72a5c6323eea95dc1de5531f71b801ff57f61b4b02f58b3ae144cc702" + id: "0xf369d485f7548ed0b8f83a3e4b9dc73789a9e979a7c44399bb2e4d2e96963327" size: 0 validator_candidates: - id: "0xdd4d1f847759e67723cb7b35c69ec7f8a87ad81e9d539c3167b63d5fb7cb6346" + id: "0x46f59e9e59177fb0cf7aa3ecf9ba3559e91aea74638db0b208182d82cf523227" size: 0 at_risk_validators: contents: [] extra_fields: id: - id: "0x444fd2bcbb8bd50ee5d444002ba287a733589cd276214698581cc68543629c61" + id: "0x742a57b52a250f0e271b053f69701bb8584494295bf7125431f6d75418854063" size: 0 storage_fund: total_object_storage_rebates: @@ -306,7 +306,7 @@ parameters: validator_low_stake_grace_period: 7 extra_fields: id: - id: "0x9dbd68e6ef30badec9e13354817d491d3414a7df56e5f81763d9ced438d94379" + id: "0x6b9f36ccd31f88afae0f3b97a7b8cd7602ce503c6cca9e21d5def22afb4aeeca" size: 0 reference_gas_price: 1000 validator_report_records: @@ -320,7 +320,7 @@ stake_subsidy: stake_subsidy_decrease_rate: 1000 extra_fields: id: - id: "0xd5a6a44eb3ef3395304533553789eff6c70c6f8d8e9aec3f4af09f23782f203b" + id: "0xfe2aef7de84880d24134dcc31990be0b8876a1bcfe380200c74150503aa85c7f" size: 0 safe_mode: false safe_mode_storage_rewards: @@ -332,5 +332,6 @@ safe_mode_non_refundable_storage_fee: 0 epoch_start_timestamp_ms: 10 extra_fields: id: - id: "0xc2c89825a972146e7131722bde266cefc18277894ca57c91616745924c8ff7fe" + id: "0x1e140e4970cac0e58e7b7ed01adbc11b64072eb10e20b3295dd483e7bd196f27" size: 0 + From c7590b12dc9b2e08b7e5eb27183e908231122aff Mon Sep 17 00:00:00 2001 From: Eugene Boguslavsky Date: Fri, 6 Sep 2024 16:44:53 +0000 Subject: [PATCH 54/57] test macos platform --- .github/workflows/release.yml | 26 ++++-- Cargo.lock | 116 +++++++++++++------------- Cargo.toml | 2 +- crates/sui-open-rpc/spec/openrpc.json | 2 +- 4 files changed, 80 insertions(+), 66 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1ec80c79b9c12..7b67afecbf45c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,9 @@ name: Attach Sui binaries to a release +run-name: Attach Sui binaries to a ${{ inputs.sui_tag }} release on: release: - types: [ published ] + types: [ published, prereleased ] workflow_dispatch: inputs: sui_tag: @@ -43,10 +44,10 @@ jobs: matrix: os: [ - ubuntu-ghcloud, # ubuntu-x86_64 - windows-ghcloud, # windows-x86_64 + # ubuntu-ghcloud, # ubuntu-x86_64 + # windows-ghcloud, # windows-x86_64 macos-latest-xl, # macos-x86_64 - macos-latest-xlarge # macos-arm64 + # macos-latest-xlarge # macos-arm64 ] fail-fast: false runs-on: ${{ matrix.os }} @@ -94,7 +95,7 @@ jobs: continue-on-error: true shell: bash run: | - echo "s3_archive_exist=$(curl -Is https://sui-releases.s3.us-east-1.amazonaws.com/releases/sui-${{ env.sui_tag }}-${{ env.os_type }}.tgz | head -n 1 | grep '200 OK')" >> $GITHUB_ENV + # echo "s3_archive_exist=$(curl -Is https://sui-releases.s3.us-east-1.amazonaws.com/releases/sui-${{ env.sui_tag }}-${{ env.os_type }}.tgz | head -n 1 | grep '200 OK')" >> $GITHUB_ENV - name: Download archive, if it exists if: ${{ env.s3_archive_exist != '' }} @@ -123,7 +124,7 @@ jobs: echo "PG_DATABASE_URL=postgres://postgres:root@localhost/" >> $GITHUB_ENV echo "PG_EXAMPLE_DATABASE_URL=postgres://postgres:root@localhost/diesel_example" >> $GITHUB_ENV - - name: Install postgres (Mac arm64) + - name: Install postgres (MacOS arm64) if: ${{ matrix.os == 'macos-latest-xlarge' && env.gcloud_archive_exist == '' }} shell: bash env: @@ -134,6 +135,19 @@ jobs: run: | brew install postgresql + - name: Remove unused apps (MacOS arm64) + if: ${{ startsWith(matrix.os, 'macos') && env.gcloud_archive_exist == '' }} + continue-on-error: true + shell: bash + run: | + # MacOS arm64 runner only has 14GB avaialble, which is too small for our builds, so removing unused softwared. + df -hI /dev/disk3s1s1 + sudo rm -rf /Applications/Xcode*.app + sudo rm -rf ~/Library/Developer/Xcode/DerivedData + sudo rm -rf ~/Library/Developer/CoreSimulator/Caches/* + sudo rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/* + df -hI /dev/disk3s1s1 + - name: Cargo build for ${{ matrix.os }} platform if: ${{ env.s3_archive_exist == '' }} shell: bash diff --git a/Cargo.lock b/Cargo.lock index d47f271491979..4118256759b7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1854,7 +1854,7 @@ checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bin-version" -version = "1.32.2" +version = "1.32.3" dependencies = [ "const-str", "git-version", @@ -12434,7 +12434,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "sui" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anemo", "anyhow", @@ -12505,7 +12505,7 @@ dependencies = [ "sui-package-management", "sui-protocol-config", "sui-replay", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-simulator", "sui-source-validation", "sui-swarm", @@ -12649,7 +12649,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "arrow", @@ -12701,7 +12701,7 @@ dependencies = [ [[package]] name = "sui-analytics-indexer-derive" -version = "1.32.2" +version = "1.32.3" dependencies = [ "proc-macro2 1.0.78", "quote 1.0.35", @@ -12710,7 +12710,7 @@ dependencies = [ [[package]] name = "sui-archival" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "byteorder", @@ -12818,7 +12818,7 @@ dependencies = [ "sui-macros", "sui-network", "sui-protocol-config", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-simulator", "sui-storage", "sui-surfer", @@ -12836,7 +12836,7 @@ dependencies = [ [[package]] name = "sui-bridge" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "arc-swap", @@ -12870,7 +12870,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-test-transaction-builder", "sui-types", "tap", @@ -12885,7 +12885,7 @@ dependencies = [ [[package]] name = "sui-bridge-cli" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "clap", @@ -12902,7 +12902,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", "telemetry-subscribers", "tokio", @@ -12933,7 +12933,7 @@ dependencies = [ "sui-data-ingestion-core", "sui-indexer-builder", "sui-json-rpc-types", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-test-transaction-builder", "sui-types", "tap", @@ -12945,7 +12945,7 @@ dependencies = [ [[package]] name = "sui-cluster-test" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -12969,7 +12969,7 @@ dependencies = [ "sui-json", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-swarm", "sui-swarm-config", "sui-test-transaction-builder", @@ -13142,7 +13142,7 @@ dependencies = [ [[package]] name = "sui-data-ingestion" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -13204,7 +13204,7 @@ dependencies = [ [[package]] name = "sui-e2e-tests" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "assert_cmd", @@ -13248,7 +13248,7 @@ dependencies = [ "sui-node", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-simulator", "sui-storage", "sui-swarm", @@ -13321,7 +13321,7 @@ dependencies = [ [[package]] name = "sui-faucet" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-recursion", @@ -13340,7 +13340,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", "tap", "telemetry-subscribers", @@ -13377,7 +13377,7 @@ dependencies = [ [[package]] name = "sui-framework-snapshot" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "bcs", @@ -13440,7 +13440,7 @@ dependencies = [ [[package]] name = "sui-graphql-config" -version = "1.32.2" +version = "1.32.3" dependencies = [ "quote 1.0.35", "syn 1.0.107", @@ -13517,7 +13517,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-swarm-config", "sui-test-transaction-builder", "sui-types", @@ -13557,7 +13557,7 @@ dependencies = [ [[package]] name = "sui-indexer" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -13600,7 +13600,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-test-transaction-builder", "sui-transaction-builder", "sui-types", @@ -13750,7 +13750,7 @@ dependencies = [ "sui-open-rpc", "sui-open-rpc-macros", "sui-protocol-config", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-simulator", "sui-swarm-config", "sui-test-transaction-builder", @@ -13811,7 +13811,7 @@ dependencies = [ [[package]] name = "sui-light-client" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -13828,7 +13828,7 @@ dependencies = [ "sui-json-rpc-types", "sui-package-resolver", "sui-rest-api", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", "tokio", ] @@ -13845,7 +13845,7 @@ dependencies = [ [[package]] name = "sui-metric-checker" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "backoff", @@ -13866,7 +13866,7 @@ dependencies = [ [[package]] name = "sui-move" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "assert_cmd", @@ -13908,7 +13908,7 @@ dependencies = [ [[package]] name = "sui-move-build" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "datatest-stable", @@ -13932,7 +13932,7 @@ dependencies = [ [[package]] name = "sui-move-lsp" -version = "1.32.2" +version = "1.32.3" dependencies = [ "bin-version", "clap", @@ -14062,7 +14062,7 @@ dependencies = [ [[package]] name = "sui-node" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anemo", "anemo-tower", @@ -14115,7 +14115,7 @@ dependencies = [ [[package]] name = "sui-open-rpc" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "bcs", @@ -14151,7 +14151,7 @@ dependencies = [ [[package]] name = "sui-oracle" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "bcs", @@ -14171,7 +14171,7 @@ dependencies = [ "sui-json-rpc-types", "sui-keys", "sui-move-build", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", "tap", "telemetry-subscribers", @@ -14181,7 +14181,7 @@ dependencies = [ [[package]] name = "sui-package-dump" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "bcs", @@ -14198,14 +14198,14 @@ dependencies = [ [[package]] name = "sui-package-management" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "move-core-types", "move-package", "move-symbol-pool", "sui-json-rpc-types", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", "thiserror", "tracing", @@ -14348,7 +14348,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-protocol-config", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-storage", "sui-transaction-checks", "sui-types", @@ -14393,7 +14393,7 @@ dependencies = [ [[package]] name = "sui-rosetta" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -14421,7 +14421,7 @@ dependencies = [ "sui-keys", "sui-move-build", "sui-node", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-swarm-config", "sui-types", "telemetry-subscribers", @@ -14435,7 +14435,7 @@ dependencies = [ [[package]] name = "sui-rpc-loadgen" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -14453,7 +14453,7 @@ dependencies = [ "sui-json-rpc", "sui-json-rpc-types", "sui-keys", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", "telemetry-subscribers", "test-cluster", @@ -14484,7 +14484,7 @@ dependencies = [ [[package]] name = "sui-sdk" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-recursion", @@ -14520,7 +14520,7 @@ dependencies = [ [[package]] name = "sui-security-watchdog" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "arrow-array", @@ -14567,7 +14567,7 @@ dependencies = [ [[package]] name = "sui-single-node-benchmark" -version = "1.32.2" +version = "1.32.3" dependencies = [ "async-trait", "bcs", @@ -14630,7 +14630,7 @@ dependencies = [ [[package]] name = "sui-source-validation" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "colored", @@ -14648,7 +14648,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move-build", "sui-package-management", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-test-transaction-builder", "sui-types", "tar", @@ -14684,7 +14684,7 @@ dependencies = [ "sui-json-rpc-types", "sui-move", "sui-move-build", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-source-validation", "telemetry-subscribers", "tempfile", @@ -14755,7 +14755,7 @@ dependencies = [ [[package]] name = "sui-surfer" -version = "1.32.2" +version = "1.32.3" dependencies = [ "async-trait", "bcs", @@ -14853,13 +14853,13 @@ dependencies = [ "shared-crypto", "sui-genesis-builder", "sui-move-build", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-types", ] [[package]] name = "sui-test-validator" -version = "1.32.2" +version = "1.32.3" [[package]] name = "sui-tls" @@ -14884,7 +14884,7 @@ dependencies = [ [[package]] name = "sui-tool" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anemo", "anemo-cli", @@ -14918,7 +14918,7 @@ dependencies = [ "sui-package-dump", "sui-protocol-config", "sui-replay", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-snapshot", "sui-storage", "sui-types", @@ -15170,7 +15170,7 @@ dependencies = [ [[package]] name = "suins-indexer" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "async-trait", @@ -15204,7 +15204,7 @@ dependencies = [ [[package]] name = "suiop-cli" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "axum 0.7.5", @@ -15549,7 +15549,7 @@ dependencies = [ "sui-macros", "sui-node", "sui-protocol-config", - "sui-sdk 1.32.2", + "sui-sdk 1.32.3", "sui-simulator", "sui-swarm", "sui-swarm-config", @@ -17372,7 +17372,7 @@ dependencies = [ [[package]] name = "x" -version = "1.32.2" +version = "1.32.3" dependencies = [ "anyhow", "camino", diff --git a/Cargo.toml b/Cargo.toml index 6c9976a5a554d..e81adee0b65b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -201,7 +201,7 @@ members = [ [workspace.package] # This version string will be inherited by sui-core, sui-faucet, sui-node, sui-tools, sui-sdk, sui-move-build, and sui crates. -version = "1.32.2" +version = "1.32.3" [profile.release] # debug = 1 means line charts only, which is minimum needed for good stack traces diff --git a/crates/sui-open-rpc/spec/openrpc.json b/crates/sui-open-rpc/spec/openrpc.json index fca82a4d4fe2b..ff9b82a332645 100644 --- a/crates/sui-open-rpc/spec/openrpc.json +++ b/crates/sui-open-rpc/spec/openrpc.json @@ -12,7 +12,7 @@ "name": "Apache-2.0", "url": "https://raw.githubusercontent.com/MystenLabs/sui/main/LICENSE" }, - "version": "1.32.2" + "version": "1.32.3" }, "methods": [ { From b1a66b66e5097a9d6e3cfbd4dbb9f4086248e388 Mon Sep 17 00:00:00 2001 From: Eugene Boguslavsky Date: Fri, 6 Sep 2024 16:45:21 +0000 Subject: [PATCH 55/57] fix name --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7b67afecbf45c..82e1dd641408d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -135,7 +135,7 @@ jobs: run: | brew install postgresql - - name: Remove unused apps (MacOS arm64) + - name: Remove unused apps (MacOS platform) if: ${{ startsWith(matrix.os, 'macos') && env.gcloud_archive_exist == '' }} continue-on-error: true shell: bash From 3576d332b0e58756a5a02c3933c4eb465632ecfe Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Fri, 6 Sep 2024 12:46:41 -0500 Subject: [PATCH 56/57] authority_aggregator: always request for events when asked (#19251) Change AuthorityAggregator to always pass through request_events flag, even to the validators we aren't sampling for objects. In addition, up the sample size of validators to 10 and log when we get unlucky and reach quorum without having recieved input or output objects. --- crates/sui-core/src/authority_aggregator.rs | 23 +++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/crates/sui-core/src/authority_aggregator.rs b/crates/sui-core/src/authority_aggregator.rs index 8365a2064fb3b..c5fc1e57d158f 100644 --- a/crates/sui-core/src/authority_aggregator.rs +++ b/crates/sui-core/src/authority_aggregator.rs @@ -104,6 +104,7 @@ pub struct AuthAggMetrics { pub cert_broadcasting_post_quorum_timeout: IntCounter, pub remaining_tasks_when_reaching_cert_quorum: Histogram, pub remaining_tasks_when_cert_broadcasting_post_quorum_timeout: Histogram, + pub quorum_reached_without_requested_objects: IntCounter, } impl AuthAggMetrics { @@ -188,7 +189,13 @@ impl AuthAggMetrics { "auth_agg_remaining_tasks_when_cert_broadcasting_post_quorum_timeout", "Number of remaining tasks when post quorum certificate broadcasting times out", registry, + ), + quorum_reached_without_requested_objects: register_int_counter_with_registry!( + "auth_agg_quorum_reached_without_requested_objects", + "Number of times quorum was reached without getting the requested objects back from at least 1 validator", + registry, ) + .unwrap(), } } @@ -454,6 +461,7 @@ struct ProcessCertificateState { input_objects: Option>, output_objects: Option>, auxiliary_data: Option>, + request: HandleCertificateRequestV3, } #[derive(Debug)] @@ -1497,13 +1505,14 @@ where input_objects: None, output_objects: None, auxiliary_data: None, + request: request.clone(), }; // create a set of validators that we should sample to request input/output objects from let validators_to_sample = if request.include_input_objects || request.include_output_objects { // Number of validators to request input/output objects from - const NUMBER_TO_SAMPLE: usize = 5; + const NUMBER_TO_SAMPLE: usize = 10; self.committee .choose_multiple_weighted_iter(NUMBER_TO_SAMPLE) @@ -1547,7 +1556,6 @@ where request_ref } else { HandleCertificateRequestV3 { - include_events: false, include_input_objects: false, include_output_objects: false, include_auxiliary_data: false, @@ -1583,6 +1591,7 @@ where // and return. match AuthorityAggregator::::handle_process_certificate_response( committee_clone, + &metrics, &tx_digest, &mut state, response, name) { Ok(Some(effects)) => ReduceOutput::Success(effects), @@ -1695,6 +1704,7 @@ where fn handle_process_certificate_response( committee: Arc, + metrics: &AuthAggMetrics, tx_digest: &TransactionDigest, state: &mut ProcessCertificateState, response: SuiResult, @@ -1758,6 +1768,15 @@ where signed_effects.into_data(), cert_sig, ); + + if (state.request.include_input_objects && state.input_objects.is_none()) + || (state.request.include_output_objects + && state.output_objects.is_none()) + { + metrics.quorum_reached_without_requested_objects.inc(); + debug!(?tx_digest, "Quorum Reached but requested input/output objects were not returned"); + } + ct.verify(&committee).map(|ct| { debug!(?tx_digest, "Got quorum for validators handle_certificate."); Some(QuorumDriverResponse { From f1c01f283b152107a3f6469f1e119e3eeee04ccb Mon Sep 17 00:00:00 2001 From: NB Date: Tue, 17 Sep 2024 09:05:22 +0200 Subject: [PATCH 57/57] temp --- Cargo.lock | 4865 +++++++--------- Cargo.toml | 20 +- .../Cargo.toml | 2 +- crates/sui-analytics-indexer/Cargo.toml | 4 +- crates/sui-cluster-test/Cargo.toml | 2 +- crates/sui-graphql-rpc/Cargo.toml | 4 +- crates/sui-indexer/logs.txt | 5000 +++++++++++++++++ .../src/handlers/checkpoint_handler.rs | 23 +- crates/sui-indexer/src/handlers/mod.rs | 4 +- crates/sui-indexer/src/indexer.rs | 1 + crates/sui-indexer/src/lib.rs | 2 +- crates/sui-indexer/src/schema/pg.rs | 2391 +++++++- .../sui-transactional-test-runner/Cargo.toml | 4 +- .../Cargo.toml | 2 +- fullnode.yaml | 2 +- 15 files changed, 9299 insertions(+), 3027 deletions(-) create mode 100644 crates/sui-indexer/logs.txt diff --git a/Cargo.lock b/Cargo.lock index a4305363ba311..43b41c5fc7206 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,11 +38,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aead" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", "generic-array", @@ -50,9 +56,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -61,9 +67,9 @@ dependencies = [ [[package]] name = "aes-gcm" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ "aead", "aes", @@ -130,9 +136,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" @@ -168,22 +174,17 @@ dependencies = [ "quinn", "quinn-proto", "rand 0.8.5", -<<<<<<< HEAD - "rcgen 0.13.1", - "ring 0.17.8", -======= "rcgen", - "ring 0.17.3", ->>>>>>> upstream/mainnet - "rustls 0.23.12", - "rustls-webpki 0.102.6", + "ring 0.17.8", + "rustls 0.23.13", + "rustls-webpki 0.102.8", "serde", "serde_json", - "socket2 0.5.6", + "socket2 0.5.7", "tap", "thiserror", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tower", "tracing", "x509-parser", @@ -208,9 +209,9 @@ version = "0.0.0" source = "git+https://github.com/mystenlabs/anemo.git?rev=dbb5a074c2d25660525ab5d36d65ff0cb8051949#dbb5a074c2d25660525ab5d36d65ff0cb8051949" dependencies = [ "prettyplease", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -244,7 +245,7 @@ dependencies = [ "tokio", "tower", "tracing", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -255,47 +256,48 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.0" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -303,27 +305,27 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "4e1496f8fb1fbf272686b8d37f523dab3e4a7443300055e74cdaa449f3114356" dependencies = [ "backtrace", ] [[package]] name = "arbitrary" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" dependencies = [ "derive_arbitrary", ] [[package]] name = "arc-swap" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" dependencies = [ "serde", ] @@ -371,9 +373,9 @@ dependencies = [ [[package]] name = "ark-ec" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c60370a92f8e1a5f053cad73a862e1b99bc642333cd676fa11c0c39f80f4ac2" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff", "ark-poly", @@ -399,7 +401,7 @@ dependencies = [ "derivative", "digest 0.10.7", "itertools 0.10.5", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", "paste", "rustc_version", @@ -412,8 +414,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "quote 1.0.35", - "syn 1.0.107", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -422,11 +424,11 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -446,9 +448,9 @@ dependencies = [ [[package]] name = "ark-poly" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6ec811462cabe265cfe1b102fcfe3df79d7d2929c2425673648ee9abfd0272" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ "ark-ff", "ark-serialize", @@ -488,7 +490,7 @@ dependencies = [ "ark-serialize-derive", "ark-std", "digest 0.10.7", - "num-bigint 0.4.4", + "num-bigint 0.4.6", ] [[package]] @@ -497,9 +499,9 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -526,9 +528,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" @@ -538,9 +540,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" @@ -574,7 +576,7 @@ dependencies = [ "arrow-data", "arrow-schema", "chrono", - "half 2.4.1", + "half", "num", ] @@ -589,7 +591,7 @@ dependencies = [ "arrow-data", "arrow-schema", "chrono", - "half 2.4.1", + "half", "hashbrown 0.14.5", "num", ] @@ -601,7 +603,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" dependencies = [ "bytes", - "half 2.4.1", + "half", "num", ] @@ -619,7 +621,7 @@ dependencies = [ "atoi", "base64 0.22.1", "chrono", - "half 2.4.1", + "half", "lexical-core", "num", "ryu", @@ -652,7 +654,7 @@ checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" dependencies = [ "arrow-buffer", "arrow-schema", - "half 2.4.1", + "half", "num", ] @@ -682,8 +684,8 @@ dependencies = [ "arrow-data", "arrow-schema", "chrono", - "half 2.4.1", - "indexmap 2.2.6", + "half", + "indexmap 2.5.0", "lexical-core", "num", "serde", @@ -701,7 +703,7 @@ dependencies = [ "arrow-data", "arrow-schema", "arrow-select", - "half 2.4.1", + "half", "num", ] @@ -716,7 +718,7 @@ dependencies = [ "arrow-buffer", "arrow-data", "arrow-schema", - "half 2.4.1", + "half", ] [[package]] @@ -757,8 +759,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= name = "ascii-canvas" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -768,17 +768,10 @@ dependencies = [ ] [[package]] -name = "ascii_utils" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" - -[[package]] ->>>>>>> upstream/mainnet name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -796,9 +789,9 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", "synstructure", ] @@ -808,167 +801,50 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "assert_cmd" -version = "2.0.7" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa3d466004a8b4cb1bc34044240a2fd29d17607e2e3bd613eb44fd48e8100da3" +checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "libc", + "predicates 3.1.2", "predicates-core", "predicates-tree", "wait-timeout", ] -[[package]] -name = "async-compression" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" -dependencies = [ - "brotli", - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", -<<<<<<< HEAD -] - [[package]] name = "async-compression" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" dependencies = [ + "brotli", "flate2", "futures-core", "memchr", "pin-project-lite", "tokio", + "zstd 0.13.2", + "zstd-safe 7.2.1", ] [[package]] -======= - "zstd 0.13.0", - "zstd-safe 7.0.0", -] - -[[package]] -name = "async-graphql" -version = "7.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16926f97f683ff3b47b035cc79622f3d6a374730b07a5d9051e81e88b5f1904" -dependencies = [ - "async-graphql-derive", - "async-graphql-parser", - "async-graphql-value", - "async-stream", - "async-trait", - "base64 0.13.1", - "bytes", - "chrono", - "fast_chemail", - "fnv", - "futures-channel", - "futures-timer", - "futures-util", - "handlebars", - "http 1.1.0", - "indexmap 2.2.6", - "lru 0.7.8", - "mime", - "multer", - "num-traits", - "once_cell", - "opentelemetry 0.21.0", - "pin-project-lite", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "static_assertions_next", - "tempfile", - "thiserror", - "tracing", - "tracing-futures", -] - -[[package]] -name = "async-graphql-axum" -version = "7.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3415c9dbaf54397292da0bb81a907e2b989661ce068e4ccfebac33dc9e245e" -dependencies = [ - "async-graphql", - "async-trait", - "axum 0.7.5", - "bytes", - "futures-util", - "serde_json", - "tokio", - "tokio-stream", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tower-service", -] - -[[package]] -name = "async-graphql-derive" -version = "7.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a7349168b79030e3172a620f4f0e0062268a954604e41475eff082380fe505" -dependencies = [ - "Inflector", - "async-graphql-parser", - "darling 0.20.3", - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "strum 0.25.0", - "syn 2.0.48", - "thiserror", -] - -[[package]] -name = "async-graphql-parser" -version = "7.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdc0adf9f53c2b65bb0ff5170cba1912299f248d0e48266f444b6f005deb1d" -dependencies = [ - "async-graphql-value", - "pest", - "serde", - "serde_json", -] - -[[package]] -name = "async-graphql-value" -version = "7.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf4d4e86208f4f9b81a503943c07e6e7f29ad3505e6c9ce6431fe64dc241681" -dependencies = [ - "bytes", - "indexmap 2.2.6", - "serde", - "serde_json", -] - -[[package]] ->>>>>>> upstream/mainnet name = "async-lock" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ "event-listener", - "futures-lite", ] [[package]] @@ -984,13 +860,13 @@ dependencies = [ "nkeys", "nuid", "once_cell", - "portable-atomic 1.7.0", + "portable-atomic", "rand 0.8.5", "regex", "ring 0.17.8", - "rustls-native-certs 0.7.1", - "rustls-pemfile 2.1.2", - "rustls-webpki 0.102.6", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", + "rustls-webpki 0.102.8", "serde", "serde_json", "serde_nanos", @@ -1006,34 +882,35 @@ dependencies = [ [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "async-stream" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", + "pin-project-lite", ] [[package]] name = "async-stream-impl" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -1043,13 +920,13 @@ source = "git+https://github.com/mystenmark/async-task?rev=4e45b26e11126b191701b [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -1109,21 +986,20 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7b2dbe9169059af0f821e811180fddc971fc210c776c133c7819ccd6e478db" dependencies = [ - "rustix 0.38.28", + "rustix", "tempfile", "windows-sys 0.52.0", ] [[package]] name = "auto_impl" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ - "proc-macro-error", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -1134,9 +1010,9 @@ checksum = "7460f7dd8e100147b82a63afca1a20eb6c231ee36b90ba7272e14951cb58af59" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "aws-config" @@ -1156,10 +1032,10 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "fastrand 2.0.0", + "fastrand", "hex", - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "ring 0.16.20", "time", "tokio", @@ -1176,7 +1052,7 @@ checksum = "70a66ac8ef5fa9cf01c2d999f39d16812e90ec1467bd382cbbb74ba23ea86201" dependencies = [ "aws-smithy-async", "aws-smithy-types", - "fastrand 2.0.0", + "fastrand", "tokio", "tracing", "zeroize", @@ -1193,8 +1069,8 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "http 0.2.9", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "lazy_static", "percent-encoding", "pin-project-lite", @@ -1216,11 +1092,11 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "aws-types", - "fastrand 2.0.0", - "http 0.2.9", + "fastrand", + "http 0.2.12", "percent-encoding", "tracing", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -1241,8 +1117,8 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "fastrand 2.0.0", - "http 0.2.9", + "fastrand", + "http 0.2.12", "regex", "tokio-stream", "tracing", @@ -1267,8 +1143,8 @@ dependencies = [ "aws-smithy-types", "aws-smithy-xml", "aws-types", - "fastrand 2.0.0", - "http 0.2.9", + "fastrand", + "http 0.2.12", "regex", "tokio-stream", "tracing", @@ -1296,8 +1172,8 @@ dependencies = [ "aws-smithy-xml", "aws-types", "bytes", - "http 0.2.9", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "once_cell", "percent-encoding", "regex", @@ -1324,7 +1200,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "http 0.2.9", + "http 0.2.12", "regex", "tokio-stream", "tracing", @@ -1349,7 +1225,7 @@ dependencies = [ "aws-smithy-types", "aws-smithy-xml", "aws-types", - "http 0.2.9", + "http 0.2.12", "regex", "tracing", ] @@ -1366,7 +1242,7 @@ dependencies = [ "form_urlencoded", "hex", "hmac 0.12.1", - "http 0.2.9", + "http 0.2.12", "once_cell", "percent-encoding", "regex", @@ -1399,8 +1275,8 @@ dependencies = [ "crc32c", "crc32fast", "hex", - "http 0.2.9", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "md-5 0.10.6", "pin-project-lite", "sha1", @@ -1419,11 +1295,11 @@ dependencies = [ "aws-smithy-http-tower", "aws-smithy-types", "bytes", - "fastrand 2.0.0", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", - "hyper-rustls 0.24.0", + "fastrand", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls 0.24.2", "lazy_static", "pin-project-lite", "rustls 0.21.12", @@ -1454,15 +1330,15 @@ dependencies = [ "bytes", "bytes-utils", "futures-core", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", "once_cell", "percent-encoding", "pin-project-lite", "pin-utils", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", ] @@ -1475,8 +1351,8 @@ dependencies = [ "aws-smithy-http", "aws-smithy-types", "bytes", - "http 0.2.9", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "pin-project-lite", "tower", "tracing", @@ -1513,9 +1389,9 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "bytes", - "fastrand 2.0.0", - "http 0.2.9", - "http-body 0.4.5", + "fastrand", + "http 0.2.12", + "http-body 0.4.6", "once_cell", "pin-project-lite", "pin-utils", @@ -1533,7 +1409,7 @@ dependencies = [ "aws-smithy-http", "aws-smithy-types", "bytes", - "http 0.2.9", + "http 0.2.12", "tokio", "tracing", ] @@ -1572,7 +1448,7 @@ dependencies = [ "aws-smithy-client", "aws-smithy-http", "aws-smithy-types", - "http 0.2.9", + "http 0.2.12", "rustc_version", "tracing", ] @@ -1588,11 +1464,11 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", "itoa", - "matchit 0.7.0", + "matchit 0.7.3", "memchr", "mime", "percent-encoding", @@ -1622,7 +1498,7 @@ dependencies = [ "hyper 1.4.1", "hyper-util", "itoa", - "matchit 0.7.0", + "matchit 0.7.3", "memchr", "mime", "percent-encoding", @@ -1633,17 +1509,12 @@ dependencies = [ "serde_path_to_error", "serde_urlencoded", "sha1", -<<<<<<< HEAD - "sync_wrapper", -======= "sync_wrapper 1.0.1", ->>>>>>> upstream/mainnet "tokio", "tokio-tungstenite 0.21.0", "tower", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -1655,8 +1526,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 0.2.9", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "mime", "rustversion", "tower-layer", @@ -1721,8 +1592,8 @@ dependencies = [ "hyper 1.4.1", "hyper-util", "pin-project-lite", - "rustls 0.23.12", - "rustls-pemfile 2.1.2", + "rustls 0.23.13", + "rustls-pemfile 2.1.3", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -1746,15 +1617,15 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", ] @@ -1816,9 +1687,9 @@ dependencies = [ [[package]] name = "base64-url" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5b0a88aa36e9f095ee2e2b13fb8c5e4313e022783aedacc123328c0084916d" +checksum = "fb9fb9fb058cc3063b5fc88d9a21eefa2735871498a04e1650da76ed511c8569" dependencies = [ "base64 0.21.7", ] @@ -1836,7 +1707,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" dependencies = [ "blowfish", - "pbkdf2 0.12.1", + "pbkdf2 0.12.2", "sha2 0.10.8", ] @@ -1867,9 +1738,9 @@ dependencies = [ [[package]] name = "bellpepper" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c91b2463f99a3a527a16a5b6862f257ee8188d3cf1fbc53af06fb61c09f4f" +checksum = "9ae286c2cb403324ab644c7cc68dceb25fe52ca9429908a726d7ed272c1edf7b" dependencies = [ "bellpepper-core", "byteorder", @@ -1904,9 +1775,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3deeecb812ca5300b7d3f66f730cc2ebd3511c3d36c691dd79c165d5b19a26e3" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -1917,11 +1788,7 @@ checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bin-version" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "const-str", "git-version", @@ -1949,12 +1816,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -2006,9 +1873,9 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -2034,9 +1901,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ "serde", ] @@ -2090,8 +1957,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.2", - "constant_time_eq 0.3.0", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] @@ -2101,8 +1968,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.2", - "constant_time_eq 0.3.0", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] @@ -2117,9 +1984,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -2132,9 +1999,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "block-padding" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ "generic-array", ] @@ -2151,9 +2018,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" dependencies = [ "cc", "glob", @@ -2185,9 +2052,9 @@ checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" [[package]] name = "brotli" -version = "3.3.4" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -2196,9 +2063,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.2" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -2230,20 +2097,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", -<<<<<<< HEAD - "once_cell", - "regex-automata 0.1.10", -======= "regex-automata 0.4.7", ->>>>>>> upstream/mainnet "serde", ] [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byte-slice-cast" @@ -2253,15 +2115,15 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytecount" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -2271,18 +2133,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] [[package]] name = "bytes-utils" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" dependencies = [ "bytes", "either", @@ -2344,53 +2206,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10ca87c81aaa3a949dbbe2b5e6c2c45dbc94ba4897e45ea31ff9ec5087be3dc" dependencies = [ "cached_proc_macro_types", - "darling 0.14.2", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "darling 0.14.4", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "cached_proc_macro_types" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "camino" -<<<<<<< HEAD -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" -======= version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" ->>>>>>> upstream/mainnet dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.23", "serde", - "serde_json", ] [[package]] @@ -2401,7 +2244,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver", "serde", "serde_json", "thiserror", @@ -2415,7 +2258,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver", "serde", "serde_json", "thiserror", @@ -2444,12 +2287,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.94" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -2463,15 +2307,9 @@ dependencies = [ [[package]] name = "cfg-expr" -<<<<<<< HEAD -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" -======= -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345c78335be0624ed29012dc10c49102196c6882c12dde65d9f35b02da2aada8" ->>>>>>> upstream/mainnet +checksum = "d0890061c4d3223e7267f3bad2ec40b997d64faac1c2815a4a9d95018e2b9e9c" dependencies = [ "smallvec", "target-lexicon", @@ -2506,14 +2344,14 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.0", + "windows-targets 0.52.6", ] [[package]] name = "ciborium" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", @@ -2522,18 +2360,18 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", - "half 1.8.2", + "half", ] [[package]] @@ -2548,9 +2386,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -2559,9 +2397,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -2569,9 +2407,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -2582,21 +2420,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clipboard-win" @@ -2640,7 +2478,7 @@ dependencies = [ "coins-core", "digest 0.10.7", "hmac 0.12.1", - "k256 0.13.1", + "k256 0.13.3", "serde", "sha2 0.10.8", "thiserror", @@ -2656,7 +2494,7 @@ dependencies = [ "coins-bip32", "hmac 0.12.1", "once_cell", - "pbkdf2 0.12.1", + "pbkdf2 0.12.2", "rand 0.8.5", "sha2 0.10.8", "thiserror", @@ -2678,7 +2516,7 @@ dependencies = [ "serde", "serde_derive", "sha2 0.10.8", - "sha3 0.10.6", + "sha3 0.10.8", "thiserror", ] @@ -2717,26 +2555,25 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "colored" -version = "2.0.4" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ - "is-terminal", "lazy_static", "windows-sys 0.48.0", ] [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -2787,7 +2624,7 @@ dependencies = [ "futures", "http 1.1.0", "hyper 1.4.1", - "hyper-rustls 0.27.2", + "hyper-rustls 0.27.3", "hyper-util", "itertools 0.10.5", "mockall", @@ -2795,13 +2632,13 @@ dependencies = [ "mysten-metrics", "mysten-network", "nom", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", - "prost 0.13.1", + "prost 0.13.2", "quinn-proto", "rand 0.8.5", "rstest", - "rustls 0.23.12", + "rustls 0.23.13", "serde", "shared-crypto", "strum_macros 0.24.3", @@ -2815,8 +2652,8 @@ dependencies = [ "tokio", "tokio-rustls 0.26.0", "tokio-stream", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "tonic 0.12.1", + "tokio-util 0.7.12", + "tonic 0.12.2", "tonic-build", "tower", "tower-http", @@ -2826,15 +2663,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.4" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b6515d269224923b26b5febea2ed42b2d5f2ce37284a4dd670fedd6cb8347a" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode 0.3.6", "lazy_static", "libc", "unicode-width", - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -2844,9 +2681,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787" dependencies = [ "futures-core", - "prost 0.12.3", - "prost-types 0.12.3", - "tonic 0.10.0", + "prost 0.12.6", + "prost-types 0.12.6", + "tonic 0.10.2", "tracing-core", ] @@ -2862,13 +2699,13 @@ dependencies = [ "futures-task", "hdrhistogram", "humantime", - "prost-types 0.12.3", + "prost-types 0.12.6", "serde", "serde_json", "thread_local", "tokio", "tokio-stream", - "tonic 0.10.0", + "tonic 0.10.2", "tracing", "tracing-core", "tracing-subscriber", @@ -2876,21 +2713,22 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.9.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c37be52ef5e3b394db27a2341010685ad5103c72ac15ce2e9420a7e8f93f342c" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ "cfg-if", "cpufeatures", "hex", + "proptest", "serde", ] [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const-random" @@ -2914,9 +2752,9 @@ dependencies = [ [[package]] name = "const-str" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aca749d3d3f5b87a0d6100509879f9cf486ab510803a4a4e1001da1ff61c2bd6" +checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" [[package]] name = "constant_time_eq" @@ -2926,9 +2764,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "containers-api" @@ -2939,8 +2777,8 @@ dependencies = [ "chrono", "flate2", "futures-util", - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "hyperlocal", "log", "mime", @@ -2962,9 +2800,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -2972,9 +2810,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core2" @@ -2987,9 +2825,9 @@ dependencies = [ [[package]] name = "coset" -version = "0.3.4" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c765a4e852cef25c69a48e9fcd60995a7fecabf0134a0021e7181452c4a60f95" +checksum = "f4c8cc80f631f8307b887faca24dcc3abc427cd0367f6eb6188f6e8f5b7ad8fb" dependencies = [ "ciborium", "ciborium-io", @@ -3016,36 +2854,36 @@ dependencies = [ [[package]] name = "cpp_demangle" -version = "0.4.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b446fd40bcc17eddd6a4a78f24315eb90afdb3334999ddfd4909985c47722442" +checksum = "96e58d342ad113c2b878f16d5d034c03be492ae460cdbc02b7f0f2284d310c7d" dependencies = [ "cfg-if", ] [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] [[package]] name = "crc32c" -version = "0.6.4" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74" +checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" dependencies = [ "rustc_version", ] [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -3164,8 +3002,8 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", - "parking_lot 0.12.1", + "mio 0.8.11", + "parking_lot 0.12.3", "signal-hook", "signal-hook-mio", "winapi", @@ -3180,8 +3018,8 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", - "parking_lot 0.12.1", + "mio 0.8.11", + "parking_lot 0.12.3", "signal-hook", "signal-hook-mio", "winapi", @@ -3189,9 +3027,9 @@ dependencies = [ [[package]] name = "crossterm_winapi" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ "winapi", ] @@ -3216,9 +3054,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -3249,9 +3087,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ "csv-core", "itoa", @@ -3261,23 +3099,13 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "ctr" version = "0.9.2" @@ -3309,9 +3137,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -3327,50 +3155,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "cxx" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2 1.0.78", - "quote 1.0.35", - "scratch", - "syn 1.0.107", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "cynic" version = "3.7.3" @@ -3379,7 +3163,7 @@ checksum = "478c02b53607e3f21c374f024c2cfc2154e554905bba478e8e09409f10ce3726" dependencies = [ "cynic-proc-macros", "ref-cast", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "static_assertions", @@ -3394,13 +3178,13 @@ checksum = "7c0ec86f960a00ce087e96ff6f073f6ff28b6876d69ce8caa06c03fb4143981c" dependencies = [ "counter", "cynic-parser", - "darling 0.20.3", + "darling 0.20.10", "once_cell", "ouroboros 0.18.4", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "strsim 0.10.0", - "syn 2.0.48", + "syn 2.0.77", "thiserror", ] @@ -3410,7 +3194,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "718f6cd8c54ae5249fd42b0c86639df0100b8a86eea2e5f1b915cde2e1481453" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "lalrpop-util", "logos", ] @@ -3422,9 +3206,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25a69ecdf4aa110fed1c0c8de290bc8ccb2835388733cf2f418f0abdf6ff3899" dependencies = [ "cynic-codegen", - "darling 0.20.3", - "quote 1.0.35", - "syn 2.0.48", + "darling 0.20.10", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -3439,12 +3223,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "darling_core 0.14.2", - "darling_macro 0.14.2", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] @@ -3465,24 +3249,24 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "strsim 0.10.0", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "darling_core" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "strsim 0.10.0", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -3493,10 +3277,10 @@ checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -3506,19 +3290,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core 0.13.4", - "quote 1.0.35", - "syn 1.0.107", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.14.2" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ - "darling_core 0.14.2", - "quote 1.0.35", - "syn 1.0.107", + "darling_core 0.14.4", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -3528,8 +3312,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", - "quote 1.0.35", - "syn 2.0.48", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -3542,20 +3326,20 @@ dependencies = [ "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", ] [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "data-encoding-macro" -version = "0.1.12" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" +checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -3563,12 +3347,12 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.10" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" +checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" dependencies = [ "data-encoding", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -3593,7 +3377,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -3609,9 +3393,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.5" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e58dffcdcc8ee7b22f0c1f71a69243d7c2d9ad87b5a14361f2424a1565c219" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", "pem-rfc7468 0.7.0", @@ -3620,14 +3404,14 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ "asn1-rs", "displaydoc", "nom", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", "rusticata-macros", ] @@ -3648,9 +3432,9 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -3659,20 +3443,20 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "derive_arbitrary" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -3690,10 +3474,10 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ - "darling 0.14.2", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "darling 0.14.4", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -3703,20 +3487,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" dependencies = [ "derive_builder_core", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "rustc_version", - "syn 1.0.107", + "syn 2.0.77", ] [[package]] @@ -3738,11 +3522,11 @@ dependencies = [ [[package]] name = "diesel" -version = "2.2.3" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e13bab2796f412722112327f3e575601a3e9cdcbe426f0d30dbf43f3f5dc71" +checksum = "158fe8e2e68695bd615d7e4f3227c0727b151330d3e253b525086c348d055d5e" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "byteorder", "chrono", "diesel_derives", @@ -3757,14 +3541,14 @@ dependencies = [ [[package]] name = "diesel-derive-enum" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b10c03b954333d05bfd5be1d8a74eae2c9ca77b86e0f1c3a1ea29c49da1d6c2" +checksum = "81c5131a2895ef64741dad1d483f358c2a229a3a2d1b256778cdc5e146db64d4" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -3775,9 +3559,9 @@ checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ "diesel_table_macro_syntax", "dsl_auto_type", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -3797,7 +3581,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -3833,7 +3617,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e616e59155c92257e84970156f506287853355f58cd4a6eb167385722c32b790" dependencies = [ - "nu-ansi-term", + "nu-ansi-term 0.46.0", +] + +[[package]] +name = "diffy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d3041965b7a63e70447ec818a46b1e5297f7fcae3058356d226c02750c4e6cb" +dependencies = [ + "nu-ansi-term 0.50.1", ] [[package]] @@ -3851,7 +3644,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", @@ -3921,20 +3714,20 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "dissimilar" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5f0c7e4bd266b8ab2550e6238d2e74977c23c15536ac7be45e9c95e2e3fbbb" +checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" [[package]] name = "doc-comment" @@ -3956,8 +3749,8 @@ dependencies = [ "containers-api", "docker-api-stubs", "futures-util", - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "log", "paste", "serde", @@ -3976,7 +3769,7 @@ dependencies = [ "chrono", "serde", "serde_json", - "serde_with 2.1.0", + "serde_with 2.3.3", ] [[package]] @@ -3993,9 +3786,9 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dsl_auto_type" @@ -4003,19 +3796,19 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" dependencies = [ - "darling 0.20.3", + "darling 0.20.10", "either", "heck 0.5.0", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[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 = "duration-str" @@ -4033,9 +3826,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" @@ -4051,15 +3844,16 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.6" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a48e5d537b8a30c0b023116d981b16334be1485af7ca68db3a2b7024cbc957fd" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.5", + "der 0.7.9", "digest 0.10.7", "elliptic-curve 0.13.8", "rfc6979 0.4.0", - "signature 2.0.0", + "signature 2.2.0", + "spki 0.7.3", ] [[package]] @@ -4080,7 +3874,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8 0.10.2", - "signature 2.0.0", + "signature 2.2.0", ] [[package]] @@ -4108,21 +3902,17 @@ dependencies = [ "ed25519 2.2.3", "rand_core 0.6.4", "serde", -<<<<<<< HEAD - "sha2 0.10.6", - "signature 2.0.0", - "subtle", -======= "sha2 0.10.8", ->>>>>>> upstream/mainnet + "signature 2.2.0", + "subtle", "zeroize", ] [[package]] name = "either" -version = "1.8.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -4151,7 +3941,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct 0.2.0", "base64ct", - "crypto-bigint 0.5.1", + "crypto-bigint 0.5.5", "digest 0.10.7", "ff 0.13.0", "generic-array", @@ -4159,7 +3949,7 @@ dependencies = [ "pem-rfc7468 0.7.0", "pkcs8 0.10.2", "rand_core 0.6.4", - "sec1 0.7.1", + "sec1 0.7.3", "serde_json", "serdect", "subtle", @@ -4189,9 +3979,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] @@ -4211,32 +4001,44 @@ dependencies = [ "base64 0.21.7", "bytes", "hex", - "k256 0.13.1", + "k256 0.13.3", "log", "rand 0.8.5", "rlp", "serde", - "sha3 0.10.6", + "sha3 0.10.8", "zeroize", ] +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", +] + [[package]] name = "enum-compat-util" version = "0.1.0" dependencies = [ - "serde_yaml", + "serde_yaml 0.8.26", ] [[package]] name = "enum_dispatch" -version = "0.3.9" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1693044dcf452888dd3a6a6a0dab67f0652094e3920dfe029a54d2f37d9b7394" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -4289,23 +4091,14 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - [[package]] name = "error-code" version = "2.3.1" @@ -4333,7 +4126,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "sha3 0.10.6", + "sha3 0.10.8", "thiserror", "uuid 0.8.2", ] @@ -4350,7 +4143,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha3 0.10.6", + "sha3 0.10.8", "thiserror", "uint", ] @@ -4445,21 +4238,15 @@ dependencies = [ "ethers-core", "ethers-etherscan", "eyre", -<<<<<<< HEAD - "getrandom 0.2.15", - "hex", - "prettyplease 0.1.25", -======= "prettyplease", ->>>>>>> upstream/mainnet - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "regex", - "reqwest 0.11.20", + "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.48", - "toml 0.8.16", + "syn 2.0.77", + "toml 0.8.19", "walkdir", ] @@ -4473,10 +4260,10 @@ dependencies = [ "const-hex", "ethers-contract-abigen", "ethers-core", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "serde_json", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -4485,7 +4272,7 @@ version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.6", "bytes", "cargo_metadata 0.18.1", "chrono", @@ -4493,12 +4280,7 @@ dependencies = [ "elliptic-curve 0.13.8", "ethabi", "generic-array", -<<<<<<< HEAD - "getrandom 0.2.15", - "hex", -======= ->>>>>>> upstream/mainnet - "k256 0.13.1", + "k256 0.13.3", "num_enum 0.7.3", "once_cell", "open-fastrlp", @@ -4507,11 +4289,11 @@ dependencies = [ "serde", "serde_json", "strum 0.26.3", - "syn 2.0.48", + "syn 2.0.77", "tempfile", "thiserror", "tiny-keccak", - "unicode-xid 0.2.4", + "unicode-xid 0.2.5", ] [[package]] @@ -4522,12 +4304,8 @@ checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" dependencies = [ "chrono", "ethers-core", -<<<<<<< HEAD - "getrandom 0.2.15", -======= ->>>>>>> upstream/mainnet - "reqwest 0.11.20", - "semver 1.0.23", + "reqwest 0.11.27", + "semver", "serde", "serde_json", "thiserror", @@ -4551,7 +4329,7 @@ dependencies = [ "futures-locks", "futures-util", "instant", - "reqwest 0.11.20", + "reqwest 0.11.27", "serde", "serde_json", "thiserror", @@ -4578,17 +4356,13 @@ dependencies = [ "futures-core", "futures-timer", "futures-util", -<<<<<<< HEAD - "getrandom 0.2.15", -======= ->>>>>>> upstream/mainnet "hashers", - "http 0.2.9", + "http 0.2.12", "instant", - "jsonwebtoken", + "jsonwebtoken 8.3.0", "once_cell", "pin-project", - "reqwest 0.11.20", + "reqwest 0.11.27", "serde", "serde_json", "thiserror", @@ -4641,7 +4415,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.23", + "semver", "serde", "serde_json", "solang-parser", @@ -4656,9 +4430,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.3.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0198b9d0078e0f30dedc7acbb21c974e838fc8fae3ee170128658a98cb2c1c04" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] name = "event-listener" @@ -4668,9 +4442,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "expect-test" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d9eafeadd538e68fb28016364c9732d78e420b9ff8853fa5e4058861e9f8d3" +checksum = "9e0be0a561335815e06dab7c62e50353134c796e7a6155402a64bcff66b6a5e0" dependencies = [ "dissimilar", "once_cell", @@ -4678,9 +4452,9 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -4720,7 +4494,7 @@ dependencies = [ "curve25519-dalek-ng", "derive_more", "digest 0.10.7", - "ecdsa 0.16.6", + "ecdsa 0.16.9", "ed25519-consensus", "elliptic-curve 0.13.8", "fastcrypto-derive", @@ -4729,7 +4503,7 @@ dependencies = [ "hex-literal 0.4.1", "hkdf", "lazy_static", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "once_cell", "p256", "rand 0.8.5", @@ -4742,8 +4516,8 @@ dependencies = [ "serde_json", "serde_with 3.9.0", "sha2 0.10.8", - "sha3 0.10.6", - "signature 2.0.0", + "sha3 0.10.8", + "signature 2.2.0", "static_assertions", "thiserror", "tokio", @@ -4756,8 +4530,8 @@ name = "fastcrypto-derive" version = "0.1.3" source = "git+https://github.com/MystenLabs/fastcrypto?rev=5f2c63266a065996d53f98156f0412782b468597#5f2c63266a065996d53f98156f0412782b468597" dependencies = [ - "quote 1.0.35", - "syn 1.0.107", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -4772,7 +4546,7 @@ dependencies = [ "itertools 0.10.5", "rand 0.8.5", "serde", - "sha3 0.10.6", + "sha3 0.10.8", "tap", "tracing", "typenum", @@ -4787,7 +4561,7 @@ dependencies = [ "bcs", "fastcrypto", "lazy_static", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-integer", "num-prime", "num-traits", @@ -4818,10 +4592,10 @@ dependencies = [ "itertools 0.12.1", "lazy_static", "neptune", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "once_cell", "regex", - "reqwest 0.12.4", + "reqwest 0.12.7", "schemars", "serde", "serde_json", @@ -4830,18 +4604,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fcm" @@ -4852,7 +4617,7 @@ dependencies = [ "chrono", "erased-serde", "log", - "reqwest 0.11.20", + "reqwest 0.11.27", "serde", "serde_json", ] @@ -4864,7 +4629,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix", "windows-sys 0.48.0", ] @@ -4911,9 +4676,9 @@ dependencies = [ "num-bigint 0.3.3", "num-integer", "num-traits", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -4929,21 +4694,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cca4fdab1b9b7e274e7de51202e37f9cfa542b28c77f8d09b817d77a726b4807" dependencies = [ "darling 0.13.4", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "filetime" -version = "0.2.22" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", - "windows-sys 0.48.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] @@ -4964,7 +4729,7 @@ version = "0.1.0" source = "git+ssh://git@github.com/nightly-labs/alexandria.git?rev=bd401bc3807bba5bb5203f42cc7b8cf836be83f5#bd401bc3807bba5bb5203f42cc7b8cf836be83f5" dependencies = [ "fcm", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "serde_json", "structs", @@ -5019,12 +4784,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -5059,9 +4824,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -5111,9 +4876,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -5126,9 +4891,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -5136,15 +4901,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -5153,24 +4918,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" - -[[package]] -name = "futures-lite" -version = "1.12.0" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand 1.8.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-locks" @@ -5184,32 +4934,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" dependencies = [ "gloo-timers", "send_wrapper 0.4.0", @@ -5217,9 +4967,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -5280,9 +5030,9 @@ dependencies = [ [[package]] name = "ghash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ "opaque-debug", "polyval", @@ -5296,24 +5046,22 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "git-version" -version = "0.3.5" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899" +checksum = "1ad568aa3db0fcbc81f2f116137f263d7304f512a1209b35b85150d3ef88ad19" dependencies = [ "git-version-macro", - "proc-macro-hack", ] [[package]] name = "git-version-macro" -version = "0.3.5" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" +checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ - "proc-macro-hack", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -5324,15 +5072,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", "log", "regex-automata 0.4.7", - "regex-syntax 0.8.2", + "regex-syntax 0.8.4", ] [[package]] @@ -5349,9 +5097,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.6.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "821239e5672ff23e2a7060901fa622950bbd80b649cdaadd78d1c1767ed14eb4" +checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" dependencies = [ "cfg-if", "dashmap", @@ -5359,10 +5107,12 @@ dependencies = [ "futures-timer", "no-std-compat", "nonzero_ext", - "parking_lot 0.12.1", + "parking_lot 0.12.3", + "portable-atomic", "quanta", "rand 0.8.5", "smallvec", + "spinning_top", ] [[package]] @@ -5403,14 +5153,14 @@ dependencies = [ "fixedbitset 0.4.2", "guppy-summaries", "guppy-workspace-hack", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.13.0", "nested", "once_cell", "pathdiff", "petgraph 0.6.5", "rayon", - "semver 1.0.23", + "semver", "serde", "serde_json", "smallvec", @@ -5429,7 +5179,7 @@ dependencies = [ "cfg-if", "diffus", "guppy-workspace-hack", - "semver 1.0.23", + "semver", "serde", "toml 0.5.11", ] @@ -5451,19 +5201,19 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.9", - "indexmap 2.2.6", + "http 0.2.12", + "indexmap 2.5.0", "slab", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", ] [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -5471,24 +5221,18 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.5.0", "slab", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", ] [[package]] name = "hakari" -<<<<<<< HEAD -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af0223111b69beda15417ad6a960bffb093c916f0eaa559036c7036efa2d199" -======= -version = "0.17.3" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bd2b14c094d2793daf279eb7624f4525e26f555fbc1647613756cf83f44755" ->>>>>>> upstream/mainnet +checksum = "f3db4569d65cb4bc06dbcd78e4dd9771e266e75e27de868fa369e995fbb8c267" dependencies = [ "ahash 0.8.11", "atomicwrites", @@ -5496,12 +5240,12 @@ dependencies = [ "camino", "cfg-if", "debug-ignore", - "diffy", + "diffy 0.4.0", "guppy", "guppy-workspace-hack", "include_dir", "indenter", - "itertools 0.12.1", + "itertools 0.13.0", "owo-colors 3.5.0", "pathdiff", "rayon", @@ -5513,12 +5257,6 @@ dependencies = [ "twox-hash", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "half" version = "2.4.1" @@ -5569,11 +5307,11 @@ dependencies = [ [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ - "base64 0.13.1", + "base64 0.21.7", "byteorder", "crossbeam-channel", "flate2", @@ -5619,9 +5357,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hex" @@ -5646,9 +5390,9 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "hkdf" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ "hmac 0.12.1", ] @@ -5689,9 +5433,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -5711,12 +5455,12 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http 0.2.9", + "http 0.2.12", "pin-project-lite", ] @@ -5751,15 +5495,15 @@ checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -5769,22 +5513,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", "h2 0.3.26", - "http 0.2.9", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -5800,7 +5544,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -5818,11 +5562,11 @@ version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "log", "rustls 0.20.9", - "rustls-native-certs 0.6.2", + "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.23.4", "webpki-roots 0.22.6", @@ -5830,34 +5574,37 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "http 0.2.9", - "hyper 0.14.26", + "futures-util", + "http 0.2.12", + "hyper 0.14.30", "log", "rustls 0.21.12", - "rustls-native-certs 0.6.2", + "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.24.1", ] [[package]] name = "hyper-rustls" -version = "0.26.0" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.22.4", + "rustls 0.23.13", + "rustls-native-certs 0.8.0", "rustls-pki-types", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls 0.26.0", "tower-service", + "webpki-roots 0.26.5", ] [[package]] @@ -5866,17 +5613,13 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.26", + "hyper 0.14.30", "pin-project-lite", "tokio", "tokio-io-timeout", ] [[package]] -<<<<<<< HEAD -name = "hyper-tls" -version = "0.5.0" -======= name = "hyper-timeout" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5890,14 +5633,13 @@ dependencies = [ ] [[package]] -name = "hyper-util" -version = "0.1.6" ->>>>>>> upstream/mainnet +name = "hyper-tls" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.26", + "hyper 0.14.30", "native-tls", "tokio", "tokio-native-tls", @@ -5921,9 +5663,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -5932,7 +5674,7 @@ dependencies = [ "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", - "socket2 0.5.6", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -5947,33 +5689,32 @@ checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c" dependencies = [ "futures-util", "hex", - "hyper 0.14.26", + "hyper 0.14.30", "pin-project", "tokio", ] [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows-core", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -5982,16 +5723,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "0.5.0" @@ -6037,7 +5768,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.6.5", + "parity-scale-codec 3.6.12", ] [[package]] @@ -6073,9 +5804,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -6094,8 +5825,8 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", ] [[package]] @@ -6117,9 +5848,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -6128,13 +5859,14 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.17.2" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4295cbb7573c16d310e99e713cf9e75101eb190ab31fccd35f2d2691b4352b19" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" dependencies = [ "console", + "instant", "number_prefix", - "portable-atomic 0.3.19", + "portable-atomic", "unicode-width", ] @@ -6164,7 +5896,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "block-padding 0.3.2", + "block-padding 0.3.3", "generic-array", ] @@ -6186,9 +5918,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.26.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f0f08b46e4379744de2ab67aa8f7de3ffd1da3e275adc41fcc82053ede46ff" +checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" dependencies = [ "console", "lazy_static", @@ -6197,14 +5929,13 @@ dependencies = [ "pest_derive", "serde", "similar", - "yaml-rust", ] [[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", "js-sys", @@ -6218,21 +5949,11 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" -[[package]] -name = "io-lifetimes" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" -dependencies = [ - "libc", - "windows-sys 0.42.0", -] - [[package]] name = "ipnet" -version = "2.7.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "ipnetwork" @@ -6245,9 +5966,9 @@ dependencies = [ [[package]] name = "iri-string" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f5f6c2df22c009ac44f6f1499308e7a3ac7ba42cd2378475cc691510e1eef1b" +checksum = "3e0f755bd3806e06ad4f366f92639415d99a339a2c7ecf8c26ccea2097c11cb6" dependencies = [ "memchr", "serde", @@ -6264,14 +5985,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi", - "io-lifetimes", - "rustix 0.37.7", - "windows-sys 0.48.0", + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", ] [[package]] @@ -6290,6 +6010,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.10.5" @@ -6328,15 +6054,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jemalloc-ctl" -version = "0.5.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1891c671f3db85d8ea8525dd43ab147f9977041911d24a03e5a36187a7bfde9" +checksum = "7cffc705424a344c054e135d12ee591402f4539245e8bbd64e6c9eaa9458b63c" dependencies = [ "jemalloc-sys", "libc", @@ -6345,29 +6071,28 @@ dependencies = [ [[package]] name = "jemalloc-sys" -version = "0.5.2+5.3.0-patched" +version = "0.5.4+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134163979b6eed9564c98637b710b40979939ba351f59952708234ea11b5f3f8" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" dependencies = [ "cc", - "fs_extra", "libc", ] [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -6418,16 +6143,16 @@ version = "0.16.2" source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcdf8f03081a9bc38bde8#b1b300784795f6a64d0fcdf8f03081a9bc38bde8" dependencies = [ "futures-util", - "http 0.2.9", + "http 0.2.12", "jsonrpsee-core", "jsonrpsee-types", "pin-project", - "rustls-native-certs 0.6.2", + "rustls-native-certs 0.6.3", "soketto", "thiserror", "tokio", "tokio-rustls 0.23.4", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", "webpki-roots 0.22.6", ] @@ -6438,7 +6163,7 @@ version = "0.16.2" source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcdf8f03081a9bc38bde8#b1b300784795f6a64d0fcdf8f03081a9bc38bde8" dependencies = [ "anyhow", - "arrayvec 0.7.2", + "arrayvec 0.7.6", "async-lock", "async-trait", "beef", @@ -6446,9 +6171,9 @@ dependencies = [ "futures-timer", "futures-util", "globset", - "hyper 0.14.26", + "hyper 0.14.30", "jsonrpsee-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rand 0.8.5", "rustc-hash 1.1.0", "serde", @@ -6465,7 +6190,7 @@ version = "0.16.2" source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcdf8f03081a9bc38bde8#b1b300784795f6a64d0fcdf8f03081a9bc38bde8" dependencies = [ "async-trait", - "hyper 0.14.26", + "hyper 0.14.30", "hyper-rustls 0.23.2", "jsonrpsee-core", "jsonrpsee-types", @@ -6483,10 +6208,10 @@ version = "0.16.2" source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcdf8f03081a9bc38bde8#b1b300784795f6a64d0fcdf8f03081a9bc38bde8" dependencies = [ "heck 0.4.1", - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -6496,8 +6221,8 @@ source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcd dependencies = [ "futures-channel", "futures-util", - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "jsonrpsee-core", "jsonrpsee-types", "serde", @@ -6505,7 +6230,7 @@ dependencies = [ "soketto", "tokio", "tokio-stream", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tower", "tracing", ] @@ -6528,28 +6253,36 @@ name = "jsonrpsee-ws-client" version = "0.16.2" source = "git+https://github.com/wlmyng/jsonrpsee.git?rev=b1b300784795f6a64d0fcdf8f03081a9bc38bde8#b1b300784795f6a64d0fcdf8f03081a9bc38bde8" dependencies = [ - "http 0.2.9", + "http 0.2.12", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", ] +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + [[package]] name = "jsonwebtoken" version = "9.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" dependencies = [ -<<<<<<< HEAD - "base64 0.21.2", + "base64 0.21.7", "js-sys", "pem 3.0.4", "ring 0.17.8", -======= - "base64 0.21.7", - "pem 1.1.0", - "ring 0.16.20", ->>>>>>> upstream/mainnet "serde", "serde_json", "simple_asn1", @@ -6565,28 +6298,28 @@ dependencies = [ "ecdsa 0.14.8", "elliptic-curve 0.12.3", "sha2 0.10.8", - "sha3 0.10.6", + "sha3 0.10.8", ] [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", - "ecdsa 0.16.6", + "ecdsa 0.16.9", "elliptic-curve 0.13.8", "once_cell", "sha2 0.10.8", - "signature 2.0.0", + "signature 2.2.0", ] [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -6624,11 +6357,11 @@ dependencies = [ "lalrpop-util", "petgraph 0.6.5", "regex", - "regex-syntax 0.8.2", + "regex-syntax 0.8.4", "string_cache", "term", "tiny-keccak", - "unicode-xid 0.2.4", + "unicode-xid 0.2.5", "walkdir", ] @@ -6643,11 +6376,11 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.5.2", + "spin 0.9.8", ] [[package]] @@ -6728,25 +6461,36 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "winapi", + "windows-targets 0.52.6", ] [[package]] name = "libm" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.4", +] [[package]] name = "librocksdb-sys" @@ -6777,24 +6521,15 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "pkg-config", "vcpkg", ] -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -6803,21 +6538,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - -[[package]] -name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -6825,9 +6554,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" dependencies = [ "serde", ] @@ -6850,10 +6579,10 @@ dependencies = [ "beef", "fnv", "lazy_static", - "proc-macro2 1.0.78", - "quote 1.0.35", - "regex-syntax 0.8.2", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "regex-syntax 0.8.4", + "syn 2.0.77", ] [[package]] @@ -6867,27 +6596,27 @@ dependencies = [ [[package]] name = "lru" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03f1160296536f10c833a82dca22267d5486734230d47bf00bf435885814ba1e" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" dependencies = [ "hashbrown 0.13.2", ] [[package]] name = "lru" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ "hashbrown 0.14.5", ] [[package]] name = "lsp-server" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095" +checksum = "550446e84739dcaf6d48a4a093973850669e13e8a34d8f8d64851041be267cd9" dependencies = [ "crossbeam-channel", "log", @@ -6910,23 +6639,14 @@ dependencies = [ [[package]] name = "lz4-sys" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +checksum = "109de74d5d2353660401699a4174a4ff23fcc649caf553df71933c7fb45ad868" dependencies = [ "cc", "libc", ] -[[package]] -name = "mach2" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" -dependencies = [ - "libc", -] - [[package]] name = "maplit" version = "1.0.2" @@ -6956,9 +6676,9 @@ checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "md-5" @@ -6995,9 +6715,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.5.8" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] @@ -7021,7 +6741,7 @@ dependencies = [ "backtrace-ext", "cfg-if", "miette-derive", - "owo-colors 4.0.0", + "owo-colors 4.1.0", "supports-color", "supports-hyperlinks", "supports-unicode", @@ -7037,9 +6757,9 @@ version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -7049,7 +6769,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" dependencies = [ "serde", - "toml 0.8.16", + "toml 0.8.19", ] [[package]] @@ -7059,8 +6779,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" dependencies = [ "migrations_internals", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", ] [[package]] @@ -7071,9 +6791,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", @@ -7087,13 +6807,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "0.8.11" @@ -7107,17 +6836,29 @@ dependencies = [ ] [[package]] -name = "mockall" -version = "0.11.4" +name = "mio" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mockall" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", "downcast", "fragile", "lazy_static", "mockall_derive", - "predicates", + "predicates 2.1.5", "predicates-tree", ] @@ -7128,29 +6869,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "moka" -version = "0.12.5" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1911e88d5831f748a4097a43862d129e3c6fca831eecac9b8db6d01d93c9de2" +checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "rustc_version", - "skeptic", "smallvec", "tagptr", "thiserror", "triomphe", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -7358,7 +7098,7 @@ dependencies = [ "move-vm-runtime", "move-vm-test-utils", "move-vm-types", - "serde_yaml", + "serde_yaml 0.8.26", "tempfile", "toml_edit 0.14.4", "walkdir", @@ -7375,7 +7115,7 @@ dependencies = [ "hex", "move-binary-format", "move-core-types", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "once_cell", "serde", "sha2 0.9.9", @@ -7581,7 +7321,7 @@ dependencies = [ "petgraph 0.5.1", "regex", "serde", - "serde_yaml", + "serde_yaml 0.8.26", "sha2 0.9.9", "tempfile", "toml 0.5.11", @@ -7597,8 +7337,8 @@ name = "move-proc-macros" version = "0.1.0" dependencies = [ "enum-compat-util", - "quote 1.0.35", - "syn 2.0.48", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -7892,9 +7632,9 @@ dependencies = [ "rand 0.8.5", "real_tokio", "serde", - "socket2 0.4.9", + "socket2 0.4.10", "tap", - "tokio-util 0.7.10 (git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1)", + "tokio-util 0.7.10", "toml 0.5.11", "tracing", "tracing-subscriber", @@ -7905,41 +7645,22 @@ name = "msim-macros" version = "0.1.0" source = "git+https://github.com/MystenLabs/mysten-sim.git?rev=b320996d8dfb99b273fe31c0222c659332283c99#b320996d8dfb99b273fe31c0222c659332283c99" dependencies = [ - "darling 0.14.2", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - -[[package]] -<<<<<<< HEAD -======= -name = "multer" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http 1.1.0", - "httparse", - "memchr", - "mime", - "spin 0.9.8", - "version_check", + "darling 0.14.4", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] ->>>>>>> upstream/mainnet name = "multiaddr" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ "arrayref", "byteorder", "data-encoding", + "log", "multibase", "multihash", "percent-encoding", @@ -7977,25 +7698,25 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", "synstructure", ] [[package]] name = "multimap" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "mysqlclient-sys" -version = "0.2.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61b381528ba293005c42a409dd73d034508e273bf90481f17ec2e964a6e969b" +checksum = "478e2040dbc35c73927b77a2be91a496de19deab376a6982ed61e89592434619" dependencies = [ "pkg-config", "vcpkg", @@ -8006,7 +7727,7 @@ name = "mysten-common" version = "0.1.0" dependencies = [ "futures", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "tokio", ] @@ -8019,7 +7740,7 @@ dependencies = [ "dashmap", "futures", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "prometheus-closure-metric", "scopeguard", @@ -8027,7 +7748,7 @@ dependencies = [ "tap", "tokio", "tracing", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -8046,7 +7767,7 @@ dependencies = [ "snap", "tokio", "tokio-stream", - "tonic 0.12.1", + "tonic 0.12.2", "tonic-health", "tower", "tower-http", @@ -8080,10 +7801,10 @@ dependencies = [ "fastcrypto-tbls", "hashbrown 0.12.3", "impl-trait-for-tuples", - "indexmap 2.2.6", + "indexmap 2.5.0", "mysten-util-mem-derive", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "roaring", "smallvec", ] @@ -8092,8 +7813,8 @@ dependencies = [ name = "mysten-util-mem-derive" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.78", - "syn 1.0.107", + "proc-macro2 1.0.86", + "syn 1.0.109", "synstructure", ] @@ -8111,7 +7832,7 @@ checksum = "40a3eb6b7c682b65d1f631ec3176829d72ab450b3aacdd3f719bf220822e59ac" dependencies = [ "libc", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "thiserror", "widestring", "winapi", @@ -8163,7 +7884,7 @@ dependencies = [ "bytes", "fastcrypto", "futures", - "indexmap 2.2.6", + "indexmap 2.5.0", "mockall", "mysten-metrics", "narwhal-config", @@ -8181,7 +7902,7 @@ dependencies = [ "tempfile", "thiserror", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tracing", "typed-store", ] @@ -8205,7 +7926,7 @@ dependencies = [ "narwhal-crypto", "narwhal-test-utils", "narwhal-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "quinn-proto", "rand 0.8.5", @@ -8243,9 +7964,9 @@ dependencies = [ "pretty_assertions", "prometheus", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde-reflection", - "serde_yaml", + "serde_yaml 0.8.26", "sui-keys", "sui-protocol-config", "sui-types", @@ -8277,7 +7998,7 @@ dependencies = [ "fastcrypto", "futures", "governor", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.10.5", "mockall", "mysten-common", @@ -8293,11 +8014,11 @@ dependencies = [ "narwhal-types", "narwhal-worker", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "proptest", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "sui-macros", "sui-protocol-config", "tap", @@ -8318,13 +8039,13 @@ dependencies = [ "fastcrypto", "fastcrypto-tbls", "futures", - "lru 0.10.0", + "lru 0.10.1", "mysten-common", "mysten-metrics", "narwhal-config", "narwhal-test-utils", "narwhal-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "sui-macros", "tap", @@ -8341,7 +8062,7 @@ dependencies = [ "anemo", "fastcrypto", "fdlimit", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.10.5", "mysten-metrics", "mysten-network", @@ -8361,7 +8082,7 @@ dependencies = [ "telemetry-subscribers", "tempfile", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tracing", "typed-store", ] @@ -8381,7 +8102,7 @@ dependencies = [ "enum_dispatch", "fastcrypto", "futures", - "indexmap 2.2.6", + "indexmap 2.5.0", "mockall", "mysten-common", "mysten-metrics", @@ -8394,7 +8115,7 @@ dependencies = [ "prometheus", "proptest", "proptest-derive", - "prost 0.13.1", + "prost 0.13.2", "rand 0.8.5", "roaring", "serde", @@ -8403,7 +8124,7 @@ dependencies = [ "sui-protocol-config", "thiserror", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tonic-build", "tracing", "typed-store", @@ -8437,14 +8158,14 @@ dependencies = [ "narwhal-types", "prometheus", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "sui-protocol-config", "tap", "telemetry-subscribers", "tempfile", "thiserror", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tower", "tracing", "typed-store", @@ -8529,7 +8250,7 @@ source = "git+https://github.com/nextest-rs/nexlint.git?rev=7ce56bd591242a57660e dependencies = [ "anyhow", "camino", - "diffy", + "diffy 0.3.0", "globset", "guppy", "nexlint", @@ -8635,7 +8356,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "crossbeam-channel", "filetime", "fsevent-sys", @@ -8643,7 +8364,7 @@ dependencies = [ "kqueue", "libc", "log", - "mio", + "mio 0.8.11", "walkdir", "windows-sys 0.48.0", ] @@ -8659,9 +8380,9 @@ dependencies = [ [[package]] name = "ntest" -version = "0.9.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da8ec6d2b73d45307e926f5af46809768581044384637af6b3f3fe7c3c88f512" +checksum = "fb183f0a1da7a937f672e5ee7b7edb727bf52b8a52d531374ba8ebb9345c0330" dependencies = [ "ntest_test_cases", "ntest_timeout", @@ -8669,25 +8390,25 @@ dependencies = [ [[package]] name = "ntest_test_cases" -version = "0.9.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be7d33be719c6f4d09e64e27c1ef4e73485dc4cc1f4d22201f89860a7fe22e22" +checksum = "16d0d3f2a488592e5368ebbe996e7f1d44aa13156efad201f5b4d84e150eaa93" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "ntest_timeout" -version = "0.9.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "066b468120587a402f0b47d8f80035c921f6a46f8209efd0632a89a16f5188a4" +checksum = "fcc7c92f190c97f79b4a332f5e81dcf68c8420af2045c936c9be0bc9de6f63b5" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -8700,6 +8421,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "nuid" version = "0.5.0" @@ -8711,11 +8441,11 @@ dependencies = [ [[package]] name = "num" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-complex", "num-integer", "num-iter", @@ -8736,11 +8466,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", "rand 0.8.5", @@ -8748,9 +8477,9 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ "byteorder", "lazy_static", @@ -8765,9 +8494,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -8784,26 +8513,25 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -8816,7 +8544,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64a5fe11d4135c3bcdf3a95b18b194afa9608a5f6ff034f5d857bc9a27fb0119" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-integer", "num-traits", ] @@ -8829,8 +8557,8 @@ checksum = "e238432a7881ec7164503ccc516c014bf009be7984cde1ba56837862543bdec3" dependencies = [ "bitvec 1.0.1", "either", - "lru 0.12.3", - "num-bigint 0.4.4", + "lru 0.12.4", + "num-bigint 0.4.6", "num-integer", "num-modular", "num-traits", @@ -8839,21 +8567,20 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -8865,7 +8592,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] @@ -8893,37 +8620,25 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] -<<<<<<< HEAD -======= name = "num_enum_derive" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] ->>>>>>> upstream/mainnet name = "number_prefix" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8953,11 +8668,11 @@ dependencies = [ "hyper 1.4.1", "itertools 0.13.0", "md-5 0.10.6", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "percent-encoding", "quick-xml", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "ring 0.17.8", "serde", "serde_json", @@ -8979,7 +8694,7 @@ dependencies = [ "futures", "serde", "serde_json", - "serde_with 3.8.1", + "serde_with 3.9.0", "structs", "tokio", "tracing", @@ -9003,15 +8718,15 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" -version = "11.1.3" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" @@ -9030,7 +8745,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.6", "auto_impl", "bytes", "ethereum-types", @@ -9044,9 +8759,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ "bytes", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -9054,7 +8769,7 @@ name = "openapiv3" version = "2.0.0" source = "git+https://github.com/bmwill/openapiv3.git?rev=ca4b4845b7c159a39f5c68ad8f7f76cb6f4d6963#ca4b4845b7c159a39f5c68ad8f7f76cb6f4d6963" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "schemars", "serde", "serde_json", @@ -9066,7 +8781,7 @@ version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -9081,9 +8796,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -9093,7 +8808,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] -<<<<<<< HEAD name = "openssl-sys" version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9106,8 +8820,6 @@ dependencies = [ ] [[package]] -======= ->>>>>>> upstream/mainnet name = "opentelemetry" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9115,25 +8827,6 @@ checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" dependencies = [ "opentelemetry_api", "opentelemetry_sdk", -<<<<<<< HEAD -======= -] - -[[package]] -name = "opentelemetry" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" -dependencies = [ - "futures-core", - "futures-sink", - "indexmap 2.2.6", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", ->>>>>>> upstream/mainnet ] [[package]] @@ -9144,7 +8837,7 @@ checksum = "7e5e5a5c4135864099f3faafbe939eb4d7f9b80ebf68a8448da961b32a7c1275" dependencies = [ "async-trait", "futures-core", - "http 0.2.9", + "http 0.2.12", "opentelemetry-proto", "opentelemetry-semantic-conventions", "opentelemetry_api", @@ -9173,11 +8866,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269" dependencies = [ -<<<<<<< HEAD "opentelemetry", -======= - "opentelemetry 0.20.0", ->>>>>>> upstream/mainnet ] [[package]] @@ -9209,11 +8898,7 @@ dependencies = [ "futures-util", "once_cell", "opentelemetry_api", -<<<<<<< HEAD "ordered-float", -======= - "ordered-float 3.9.1", ->>>>>>> upstream/mainnet "percent-encoding", "rand 0.8.5", "regex", @@ -9231,9 +8916,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" -version = "3.9.1" +version = "3.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a54938017eacd63036332b4ae5c8a49fc8c0c1d6d629893057e4f13609edd06" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" dependencies = [ "num-traits", ] @@ -9268,9 +8953,9 @@ checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -9281,19 +8966,10 @@ checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" dependencies = [ "heck 0.4.1", "itertools 0.12.1", - "proc-macro2 1.0.78", + "proc-macro2 1.0.86", "proc-macro2-diagnostics", - "quote 1.0.35", - "syn 2.0.48", -] - -[[package]] -name = "output_vt100" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" -dependencies = [ - "winapi", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -9316,9 +8992,9 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "owo-colors" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" +checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" [[package]] name = "p256" @@ -9326,7 +9002,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "ecdsa 0.16.6", + "ecdsa 0.16.9", "elliptic-curve 0.13.8", "primeorder", "sha2 0.10.8", @@ -9358,7 +9034,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.6", "bitvec 0.20.4", "byte-slice-cast", "impl-trait-for-tuples", @@ -9368,15 +9044,15 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.6", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.6.5", + "parity-scale-codec-derive 3.6.12", "serde", ] @@ -9386,30 +9062,24 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - [[package]] name = "parking_lot" version = "0.11.2" @@ -9423,12 +9093,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", ] [[package]] @@ -9447,54 +9117,18 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.4", "smallvec", - "windows-targets 0.48.0", -] - -[[package]] -<<<<<<< HEAD -======= -name = "parquet" -version = "52.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f22ba0d95db56dde8685e3fadcb915cdaadda31ab8abbe3ff7f0ad1ef333267" -dependencies = [ - "ahash 0.8.11", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-ipc", - "arrow-schema", - "arrow-select", - "base64 0.22.1", - "brotli 6.0.0", - "bytes", - "chrono", - "flate2", - "half 2.3.1", - "hashbrown 0.14.1", - "lz4_flex", - "num", - "num-bigint 0.4.4", - "paste", - "seq-macro", - "snap", - "thrift", - "twox-hash", - "zstd 0.13.0", - "zstd-sys", + "windows-targets 0.52.6", ] [[package]] ->>>>>>> upstream/mainnet name = "passkey-authenticator" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9516,7 +9150,7 @@ checksum = "f14d42b14749cc7927add34a9932b3b3cc5349a633384850baa67183061439dd" dependencies = [ "ciborium", "coset", - "idna 0.5.0", + "idna", "passkey-authenticator", "passkey-types", "public-suffix", @@ -9532,11 +9166,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "ciborium", "coset", "data-encoding", - "indexmap 2.2.6", + "indexmap 2.5.0", "rand 0.8.5", "serde", "serde_json", @@ -9575,9 +9209,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "path-slash" @@ -9608,9 +9242,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", "hmac 0.12.1", @@ -9624,9 +9258,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ "base64 0.13.1", ] @@ -9661,15 +9295,15 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" dependencies = [ "memchr", "thiserror", @@ -9678,9 +9312,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.2" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96504449aa860c8dcde14f9fba5c58dc6658688ca1fe363589d6327b8662c603" +checksum = "664d22978e2815783adbdd2c588b455b1bd625299ce36b2a99881ac9627e6d8d" dependencies = [ "pest", "pest_generator", @@ -9688,26 +9322,26 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.2" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798e0220d1111ae63d66cb66a5dcb3fc2d986d520b98e49e1852bfdb11d7c5e7" +checksum = "a2d5487022d5d33f4c30d91c22afa240ce2a644e87fe08caad974d4eab6badbe" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "pest_meta" -version = "2.5.2" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984298b75898e30a843e278a9f2452c31e349a073a0ce6fd950a12a74464e065" +checksum = "0091754bbd0ea592c4deb3a122ce8ecbb0753b738aa82bc055fcc2eccc8d8174" dependencies = [ "once_cell", "pest", - "sha1", + "sha2 0.10.8", ] [[package]] @@ -9727,7 +9361,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.2.6", + "indexmap 2.5.0", ] [[package]] @@ -9742,35 +9376,35 @@ dependencies = [ [[package]] name = "phf" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", - "phf_shared 0.11.1", + "phf_shared 0.11.2", ] [[package]] name = "phf_generator" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ - "phf_shared 0.11.1", + "phf_shared 0.11.2", "rand 0.8.5", ] [[package]] name = "phf_macros" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", - "phf_shared 0.11.1", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "phf_shared 0.11.2", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -9784,9 +9418,9 @@ dependencies = [ [[package]] name = "phf_shared" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ "siphasher", ] @@ -9806,16 +9440,16 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -9841,9 +9475,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der 0.7.5", + "der 0.7.9", "pkcs8 0.10.2", - "spki 0.7.1", + "spki 0.7.3", ] [[package]] @@ -9862,21 +9496,21 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.5", - "spki 0.7.1", + "der 0.7.9", + "spki 0.7.3", ] [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plotters" -version = "0.3.4" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" dependencies = [ "num-traits", "plotters-backend", @@ -9887,15 +9521,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.4" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" [[package]] name = "plotters-svg" -version = "0.3.3" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" dependencies = [ "plotters-backend", ] @@ -9913,9 +9547,9 @@ dependencies = [ [[package]] name = "polyval" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", "cpufeatures", @@ -9923,12 +9557,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" - [[package]] name = "portable-atomic" version = "1.7.0" @@ -9954,7 +9582,7 @@ dependencies = [ "log", "nix 0.26.4", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "smallvec", "symbolic-demangle", "tempfile", @@ -9963,15 +9591,18 @@ dependencies = [ [[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 = "pq-sys" -version = "0.4.7" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b845d6d8ec554f972a2c5298aad68953fd64e7441e846075450b44656a016d1" +checksum = "a92c30dd81695321846d4dfe348da67b1752ebb61cd1549d203a7b57e323c435" dependencies = [ "vcpkg", ] @@ -9996,17 +9627,28 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +dependencies = [ + "anstyle", + "difflib", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -10014,24 +9656,22 @@ dependencies = [ [[package]] name = "pretty_assertions" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" dependencies = [ - "ctor", "diff", - "output_vt100", "yansi 0.5.1", ] [[package]] name = "prettyplease" -version = "0.2.17" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ - "proc-macro2 1.0.78", - "syn 2.0.48", + "proc-macro2 1.0.86", + "syn 2.0.77", ] [[package]] @@ -10050,9 +9690,9 @@ dependencies = [ [[package]] name = "primeorder" -version = "0.13.0" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ "elliptic-curve 0.13.8", ] @@ -10093,6 +9733,15 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.20", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -10100,9 +9749,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", "version_check", ] @@ -10112,17 +9761,11 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" version = "0.4.30" @@ -10134,9 +9777,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -10147,24 +9790,24 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", "version_check", "yansi 1.0.1", ] [[package]] name = "prometheus" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "protobuf", "thiserror", ] @@ -10178,6 +9821,20 @@ dependencies = [ "protobuf", ] +[[package]] +name = "prometheus-http-query" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcebfa99f03ae51220778316b37d24981e36322c82c24848f48c5bd0f64cbdb" +dependencies = [ + "enum-as-inner", + "mime", + "reqwest 0.12.7", + "serde", + "time", + "url", +] + [[package]] name = "prometheus-parse" version = "0.2.3" @@ -10191,20 +9848,19 @@ dependencies = [ [[package]] name = "proptest" -version = "1.1.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f1b898011ce9595050a68e60f90bad083ff2987a695a42357134c8381fba70" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" dependencies = [ "bit-set", - "bitflags 1.3.2", - "byteorder", + "bit-vec", + "bitflags 2.6.0", "lazy_static", "num-traits", - "quick-error 2.0.1", "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.6.28", + "regex-syntax 0.8.4", "rusty-fork", "tempfile", "unarray", @@ -10233,29 +9889,29 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.3", + "prost-derive 0.12.6", ] [[package]] name = "prost" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" +checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" dependencies = [ "bytes", - "prost-derive 0.13.1", + "prost-derive 0.13.2", ] [[package]] name = "prost-build" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb182580f71dd070f88d01ce3de9f4da5021db7115d2e1c3605a754153b77c1" +checksum = "f8650aabb6c35b860610e9cff5dc1af886c9e25073b7b1712a68972af4281302" dependencies = [ "bytes", "heck 0.5.0", @@ -10265,10 +9921,10 @@ dependencies = [ "once_cell", "petgraph 0.6.5", "prettyplease", - "prost 0.13.1", - "prost-types 0.13.1", + "prost 0.13.2", + "prost-types 0.13.2", "regex", - "syn 2.0.48", + "syn 2.0.77", "tempfile", ] @@ -10280,53 +9936,53 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools 0.10.5", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "prost-derive" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "itertools 0.12.1", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "prost-derive" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" +checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" dependencies = [ "anyhow", "itertools 0.13.0", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "prost-types" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost 0.12.3", + "prost 0.12.6", ] [[package]] name = "prost-types" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee5168b05f49d4b0ca581206eb14a7b22fafd963efe729ac48eb03266e25cc2" +checksum = "60caa6738c7369b940c3d49246a8d1749323674c65cb13010134f5c9bad5b519" dependencies = [ - "prost 0.13.1", + "prost 0.13.2", ] [[package]] @@ -10340,9 +9996,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" dependencies = [ "cc", ] @@ -10353,26 +10009,14 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca346b8ff0739660876c8d96a6f9de5cd9b4cd87500bb0ce92485318c674afe" -[[package]] -name = "pulldown-cmark" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" -dependencies = [ - "bitflags 2.4.1", - "memchr", - "unicase", -] - [[package]] name = "quanta" -version = "0.11.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" dependencies = [ "crossbeam-utils", "libc", - "mach2", "once_cell", "raw-cpuid", "wasi 0.11.0+wasi-snapshot-preview1", @@ -10386,12 +10030,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quick-xml" version = "0.36.1" @@ -10404,9 +10042,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" dependencies = [ "bytes", "futures-io", @@ -10414,8 +10052,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.12", - "socket2 0.5.6", + "rustls 0.23.13", + "socket2 0.5.7", "thiserror", "tokio", "tracing", @@ -10423,15 +10061,15 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" dependencies = [ "bytes", "rand 0.8.5", "ring 0.17.8", "rustc-hash 2.0.0", - "rustls 0.23.12", + "rustls 0.23.13", "slab", "thiserror", "tinyvec", @@ -10440,15 +10078,15 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" dependencies = [ "libc", "once_cell", - "socket2 0.5.6", + "socket2 0.5.7", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -10462,11 +10100,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "proc-macro2 1.0.78", + "proc-macro2 1.0.86", ] [[package]] @@ -10476,7 +10114,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" dependencies = [ "log", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "scheduled-thread-pool", ] @@ -10593,11 +10231,11 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "10.6.0" +version = "11.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6823ea29436221176fe662da99998ad3b4db2c7f31e7b6f5fe43adccd6320bb" +checksum = "cb9ee317cfe3fbd54b36a511efc1edd42e216903c9cd575e686dd68a2ba90d8d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] @@ -10618,21 +10256,6 @@ checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", -<<<<<<< HEAD -] - -[[package]] -name = "rcgen" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" -dependencies = [ - "pem 1.1.0", - "ring 0.16.20", - "time", - "yasna", -======= ->>>>>>> upstream/mainnet ] [[package]] @@ -10650,13 +10273,13 @@ dependencies = [ [[package]] name = "readonly" -version = "0.2.3" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78725e4e53781014168628ef49b2dc2fc6ae8d01a08769a5064685d34ee116c" +checksum = "a25d631e41bfb5fdcde1d4e2215f62f7f0afa3ff11e26563765bd6ea1d229aeb" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -10667,13 +10290,13 @@ dependencies = [ "backtrace", "bytes", "libc", - "mio", + "mio 0.8.11", "num_cpus", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.6", - "tokio-macros 2.2.0 (git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1)", + "socket2 0.5.7", + "tokio-macros 2.2.0", "windows-sys 0.48.0", ] @@ -10688,30 +10311,21 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", - "redox_syscall 0.2.16", + "libredox", "thiserror", ] @@ -10730,32 +10344,21 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "regex" -<<<<<<< HEAD -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" -======= version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" ->>>>>>> upstream/mainnet dependencies = [ "aho-corasick", "memchr", -<<<<<<< HEAD - "regex-automata 0.3.7", - "regex-syntax 0.7.5", -======= "regex-automata 0.4.7", - "regex-syntax 0.8.2", ->>>>>>> upstream/mainnet + "regex-syntax 0.8.4", ] [[package]] @@ -10764,35 +10367,25 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax 0.6.28", + "regex-syntax 0.6.29", ] [[package]] name = "regex-automata" -<<<<<<< HEAD -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" -dependencies = [ - "aho-corasick 1.0.2", - "memchr", - "regex-syntax 0.7.5", -======= version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", ->>>>>>> upstream/mainnet + "regex-syntax 0.8.4", ] [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" @@ -10808,9 +10401,9 @@ checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64 0.21.7", "bytes", @@ -10818,9 +10411,10 @@ dependencies = [ "futures-core", "futures-util", "h2 0.3.26", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls 0.24.2", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -10830,46 +10424,44 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", "tokio", -<<<<<<< HEAD "tokio-native-tls", -======= "tokio-rustls 0.24.1", ->>>>>>> upstream/mainnet "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.50.0", + "webpki-roots 0.25.4", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.4" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ -<<<<<<< HEAD - "async-compression 0.4.12", -======= "async-compression", ->>>>>>> upstream/mainnet "base64 0.22.1", "bytes", "encoding_rs", "futures-channel", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", "hyper 1.4.1", - "hyper-rustls 0.26.0", + "hyper-rustls 0.27.3", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -10880,27 +10472,28 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.22.4", - "rustls-native-certs 0.7.1", - "rustls-pemfile 2.1.2", + "quinn", + "rustls 0.23.13", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", - "system-configuration", + "sync_wrapper 1.0.1", + "system-configuration 0.6.1", "tokio", "tokio-native-tls", - "tokio-rustls 0.25.0", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-rustls 0.26.0", + "tokio-util 0.7.12", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.3", - "winreg 0.52.0", + "webpki-roots 0.26.5", + "windows-registry", ] [[package]] @@ -10912,7 +10505,7 @@ dependencies = [ "anyhow", "async-trait", "http 1.1.0", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "thiserror", "tower-service", @@ -10932,7 +10525,7 @@ dependencies = [ "http 1.1.0", "hyper 1.4.1", "parking_lot 0.11.2", - "reqwest 0.12.4", + "reqwest 0.12.7", "reqwest-middleware", "retry-policies", "tokio", @@ -11028,9 +10621,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -11059,8 +10652,8 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ - "base64 0.21.2", - "bitflags 2.4.1", + "base64 0.21.7", + "bitflags 2.6.0", "serde", "serde_derive", ] @@ -11081,28 +10674,27 @@ dependencies = [ "pkcs8 0.9.0", "rand_core 0.6.4", "sha2 0.10.8", - "signature 2.0.0", + "signature 2.2.0", "subtle", "zeroize", ] [[package]] name = "rsa" -version = "0.9.1" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f1471dbb4be5de45050e8ef7040625298ccb9efe941419ac2697088715925f" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" dependencies = [ - "byteorder", "const-oid", "digest 0.10.7", "num-bigint-dig", "num-integer", - "num-iter", "num-traits", "pkcs1 0.7.5", "pkcs8 0.10.2", "rand_core 0.6.4", - "signature 2.0.0", + "signature 2.2.0", + "spki 0.7.3", "subtle", "zeroize", ] @@ -11126,10 +10718,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7229b505ae0706e64f37ffc54a9c163e11022a6636d58fe1f3f52018257ff9f7" dependencies = [ "cfg-if", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "rustc_version", - "syn 1.0.107", + "syn 1.0.109", "unicode-ident", ] @@ -11144,8 +10736,8 @@ dependencies = [ "bytes", "crc32fast", "futures", - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "hyper-rustls 0.23.2", "lazy_static", "log", @@ -11168,7 +10760,7 @@ dependencies = [ "chrono", "dirs-next", "futures", - "hyper 0.14.26", + "hyper 0.14.30", "serde", "serde_json", "shlex", @@ -11203,8 +10795,8 @@ dependencies = [ "futures", "hex", "hmac 0.11.0", - "http 0.2.9", - "hyper 0.14.26", + "http 0.2.12", + "hyper 0.14.30", "log", "md-5 0.9.1", "percent-encoding", @@ -11225,7 +10817,7 @@ dependencies = [ "aes", "aes-gcm", "async-trait", - "bitflags 2.4.1", + "bitflags 2.6.0", "byteorder", "chacha20", "ctr", @@ -11237,7 +10829,7 @@ dependencies = [ "hex-literal 0.4.1", "hmac 0.12.1", "log", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "once_cell", "poly1305", "rand 0.8.5", @@ -11248,7 +10840,7 @@ dependencies = [ "subtle", "thiserror", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", ] [[package]] @@ -11271,7 +10863,7 @@ dependencies = [ "async-trait", "bcrypt-pbkdf", "bit-vec", - "block-padding 0.3.2", + "block-padding 0.3.3", "byteorder", "cbc", "ctr", @@ -11283,7 +10875,7 @@ dependencies = [ "inout", "log", "md5", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-integer", "pbkdf2 0.11.0", "rand 0.7.3", @@ -11299,19 +10891,19 @@ 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.2", + "arrayvec 0.7.6", "num-traits", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -11333,11 +10925,11 @@ 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 1.0.23", + "semver", ] [[package]] @@ -11351,28 +10943,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.1", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.12", + "linux-raw-sys", "windows-sys 0.52.0", ] @@ -11402,53 +10980,52 @@ dependencies = [ [[package]] name = "rustls" -version = "0.22.4" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "log", + "once_cell", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.6", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] [[package]] -name = "rustls" -version = "0.23.12" +name = "rustls-native-certs" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ - "log", - "once_cell", - "ring 0.17.8", - "rustls-pki-types", - "rustls-webpki 0.102.6", - "subtle", - "zeroize", + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", ] [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", - "rustls-pemfile 1.0.2", + "rustls-pemfile 2.1.3", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] name = "rustls-native-certs" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", "rustls-pki-types", "schannel", "security-framework", @@ -11456,18 +11033,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ "base64 0.21.7", ] [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -11475,9 +11052,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" @@ -11491,9 +11068,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -11502,9 +11079,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-fork" @@ -11513,7 +11090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" dependencies = [ "fnv", - "quick-error 1.2.3", + "quick-error", "tempfile", "wait-timeout", ] @@ -11548,9 +11125,9 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "107c3d5d7f370ac09efa62a78375f94d94b8a33c61d8c278b96683fb4dbf2d8d" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -11579,44 +11156,44 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.10.0" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "cfg-if", "derive_more", - "parity-scale-codec 3.6.5", + "parity-scale-codec 3.6.12", "scale-info-derive", ] [[package]] name = "scale-info-derive" -version = "2.10.0" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro-crate 3.2.0", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.59.0", ] [[package]] name = "scheduled-thread-pool" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf" +checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ - "parking_lot 0.12.1", + "parking_lot 0.12.3", ] [[package]] @@ -11638,23 +11215,17 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "serde_derive_internals", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" @@ -11670,12 +11241,12 @@ dependencies = [ [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] @@ -11693,12 +11264,12 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", - "der 0.7.5", + "der 0.7.9", "generic-array", "pkcs8 0.10.2", "serdect", @@ -11737,11 +11308,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.7.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -11750,23 +11321,14 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", ] -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.23" @@ -11776,15 +11338,6 @@ dependencies = [ "serde", ] -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - [[package]] name = "send_wrapper" version = "0.4.0" @@ -11799,9 +11352,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.208" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -11829,22 +11382,22 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -11853,19 +11406,20 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "itoa", + "memchr", "ryu", "serde", ] @@ -11881,10 +11435,11 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.9" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b04f22b563c91331a10074bda3dd5492e3cc39d56bd557e91c0af42b6c7341" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ + "itoa", "serde", ] @@ -11894,9 +11449,9 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -11910,9 +11465,9 @@ dependencies = [ [[package]] name = "serde_test" -version = "1.0.152" +version = "1.0.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3611210d2d67e3513204742004d6ac6f589e521861dabb0f649b070eea8bed9e" +checksum = "7f901ee573cab6b3060453d2d5f0bae4e6d628c23c0a962ff9b5f1d7c8d4f1ed" dependencies = [ "serde", ] @@ -11931,9 +11486,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "2.1.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bf4a5a814902cd1014dbccfa4d4560fb8432c779471e96e035602519f82eef" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ "base64 0.13.1", "chrono", @@ -11941,7 +11496,7 @@ dependencies = [ "indexmap 1.9.3", "serde", "serde_json", - "serde_with_macros 2.1.0", + "serde_with_macros 2.3.3", "time", ] @@ -11955,7 +11510,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -11965,14 +11520,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "2.1.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3452b4c0f6c1e357f73fdb87cd1efabaa12acf328c7a528e252893baeb3f4aa" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.14.2", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "darling 0.20.10", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -11982,9 +11537,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ "darling 0.20.10", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -11999,6 +11554,19 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.5.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "serdect" version = "0.2.0" @@ -12035,9 +11603,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -12082,9 +11650,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.7", "keccak", @@ -12092,9 +11660,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -12122,7 +11690,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" dependencies = [ - "dirs 4.0.0", + "dirs 5.0.1", ] [[package]] @@ -12133,9 +11701,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" dependencies = [ "libc", "signal-hook-registry", @@ -12143,20 +11711,20 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", - "mio", + "mio 0.8.11", "signal-hook", ] [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -12169,7 +11737,7 @@ checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31" dependencies = [ "pkcs8 0.10.2", "rand_core 0.6.4", - "signature 2.0.0", + "signature 2.2.0", "zeroize", ] @@ -12185,9 +11753,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -12195,9 +11763,9 @@ dependencies = [ [[package]] name = "similar" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" [[package]] name = "simple-server-timing-header" @@ -12211,7 +11779,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", "thiserror", "time", @@ -12260,9 +11828,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "sized-chunks" @@ -12274,26 +11842,11 @@ dependencies = [ "typenum", ] -[[package]] -name = "skeptic" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" -dependencies = [ - "bytecount", - "cargo_metadata 0.14.2", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] - [[package]] name = "slab" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -12321,9 +11874,9 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "snafu" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" dependencies = [ "doc-comment", "snafu-derive", @@ -12331,21 +11884,21 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] name = "snap" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "snowflake-api" @@ -12362,7 +11915,7 @@ dependencies = [ "log", "object_store", "regex", - "reqwest 0.12.4", + "reqwest 0.12.7", "reqwest-middleware", "reqwest-retry", "serde", @@ -12371,7 +11924,7 @@ dependencies = [ "thiserror", "tokio", "url", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -12380,13 +11933,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f1c0c8818bb7400e821b166075ec771c8e8a012af41a8982b34eefaad4739fd" dependencies = [ -<<<<<<< HEAD "base64 0.22.1", -======= - "base64 0.21.7", ->>>>>>> upstream/mainnet - "jsonwebtoken", - "rsa 0.9.1", + "jsonwebtoken 9.3.0", + "rsa 0.9.6", "serde", "sha2 0.10.8", "thiserror", @@ -12395,9 +11944,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -12405,9 +11954,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", @@ -12422,7 +11971,7 @@ dependencies = [ "base64 0.13.1", "bytes", "futures", - "http 0.2.9", + "http 0.2.12", "httparse", "log", "rand 0.8.5", @@ -12440,7 +11989,7 @@ dependencies = [ "lalrpop-util", "phf", "thiserror", - "unicode-xid 0.2.4", + "unicode-xid 0.2.5", ] [[package]] @@ -12466,6 +12015,15 @@ dependencies = [ "strum 0.24.1", ] +[[package]] +name = "spinning_top" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" +dependencies = [ + "lock_api", +] + [[package]] name = "spki" version = "0.6.0" @@ -12478,12 +12036,12 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.5", + "der 0.7.9", ] [[package]] @@ -12494,15 +12052,15 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -12511,12 +12069,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "static_assertions_next" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7beae5182595e9a8b683fa98c4317f956c9a2dec3b9716990d20023cc60c766" - [[package]] name = "str-buf" version = "1.0.6" @@ -12531,7 +12083,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "phf_shared 0.10.0", "precomputed-hash", ] @@ -12568,7 +12120,7 @@ dependencies = [ "rayon", "serde", "serde_json", - "serde_with 3.8.1", + "serde_with 3.9.0", "strum 0.26.3", "typeshare", ] @@ -12588,7 +12140,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "strum_macros 0.25.2", + "strum_macros 0.25.3", ] [[package]] @@ -12607,23 +12159,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "rustversion", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "strum_macros" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "rustversion", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -12633,10 +12185,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck 0.5.0", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "rustversion", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -12651,9 +12203,9 @@ dependencies = [ [[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 = "subtle-ng" @@ -12663,11 +12215,7 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "sui" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anemo", "anyhow", @@ -12705,18 +12253,18 @@ dependencies = [ "move-vm-config", "move-vm-profiler", "msim", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "prometheus", "rand 0.8.5", "regex", - "reqwest 0.12.4", + "reqwest 0.12.7", "rusoto_core", "rusoto_kms", "rustyline", "rustyline-derive", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.8.26", "shared-crypto", "shell-words", "shlex", @@ -12736,11 +12284,7 @@ dependencies = [ "sui-package-management", "sui-protocol-config", "sui-replay", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-simulator", "sui-source-validation", "sui-swarm", @@ -12755,13 +12299,13 @@ dependencies = [ "test-cluster", "thiserror", "tokio", - "toml 0.7.4", + "toml 0.7.8", "tower", "tower-http", "tracing", "unescape", "url", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -12782,7 +12326,7 @@ dependencies = [ "move-vm-runtime", "move-vm-types", "mysten-metrics", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "serde", "sui-macros", "sui-move-natives-latest", @@ -12810,7 +12354,7 @@ dependencies = [ "move-vm-runtime-v0", "move-vm-types", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "serde", "sui-macros", "sui-move-natives-v0", @@ -12837,7 +12381,7 @@ dependencies = [ "move-vm-profiler", "move-vm-runtime-v1", "move-vm-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "serde", "sui-macros", "sui-move-natives-v1", @@ -12864,7 +12408,7 @@ dependencies = [ "move-vm-profiler", "move-vm-runtime-v2", "move-vm-types", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "serde", "sui-macros", "sui-move-natives-v2", @@ -12874,75 +12418,9 @@ dependencies = [ "tracing", ] -[[package]] -<<<<<<< HEAD -name = "sui-archival" -version = "1.30.1" -======= -name = "sui-analytics-indexer" -version = "1.32.3" -dependencies = [ - "anyhow", - "arrow", - "arrow-array", - "async-trait", - "axum 0.7.5", - "bcs", - "byteorder", - "bytes", - "chrono", - "clap", - "csv", - "eyre", - "fastcrypto", - "gcp-bigquery-client", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "mysten-metrics", - "num_enum 0.6.1", - "object_store", - "parquet", - "prometheus", - "serde", - "serde_json", - "simulacrum", - "snowflake-api", - "strum 0.24.1", - "strum_macros 0.24.3", - "sui-analytics-indexer-derive", - "sui-config", - "sui-data-ingestion-core", - "sui-indexer", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-rest-api", - "sui-storage", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "typed-store", - "url", -] - -[[package]] -name = "sui-analytics-indexer-derive" -version = "1.32.3" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "sui-archival" version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "byteorder", @@ -13002,7 +12480,7 @@ dependencies = [ "narwhal-config", "prettytable-rs", "prometheus-parse", - "reqwest 0.12.4", + "reqwest 0.12.7", "russh", "russh-keys", "serde", @@ -13050,11 +12528,7 @@ dependencies = [ "sui-macros", "sui-network", "sui-protocol-config", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-simulator", "sui-storage", "sui-surfer", @@ -13065,18 +12539,14 @@ dependencies = [ "telemetry-subscribers", "test-cluster", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", "typed-store", ] [[package]] name = "sui-bridge" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "arc-swap", @@ -13092,7 +12562,7 @@ dependencies = [ "fastcrypto", "futures", "hex-literal 0.3.4", - "lru 0.10.0", + "lru 0.10.1", "maplit", "move-core-types", "mysten-metrics", @@ -13100,12 +12570,7 @@ dependencies = [ "once_cell", "prometheus", "rand 0.8.5", -<<<<<<< HEAD - "reqwest 0.12.4", - "rocksdb", -======= - "reqwest 0.12.5", ->>>>>>> upstream/mainnet + "reqwest 0.12.7", "serde", "serde_json", "serde_with 3.9.0", @@ -13115,11 +12580,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-keys", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-test-transaction-builder", "sui-types", "tap", @@ -13134,11 +12595,7 @@ dependencies = [ [[package]] name = "sui-bridge-cli" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "clap", @@ -13146,7 +12603,7 @@ dependencies = [ "fastcrypto", "futures", "move-core-types", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "serde_json", "serde_with 3.9.0", @@ -13155,11 +12612,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", "telemetry-subscribers", "tokio", @@ -13184,17 +12637,13 @@ dependencies = [ "prometheus", "rayon", "serde", - "serde_yaml", + "serde_yaml 0.8.26", "sui-bridge", "sui-config", "sui-data-ingestion-core", "sui-indexer-builder", "sui-json-rpc-types", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-test-transaction-builder", "sui-types", "tap", @@ -13205,74 +12654,27 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= -name = "sui-cluster-test" -version = "1.32.3" +name = "sui-config" +version = "0.0.0" dependencies = [ + "anemo", "anyhow", - "async-trait", + "bcs", "clap", - "derivative", - "diesel", + "consensus-config", + "csv", + "dirs 4.0.0", "fastcrypto", - "futures", - "jsonrpsee", - "move-core-types", - "prometheus", - "regex", - "reqwest 0.12.5", - "serde_json", - "shared-crypto", - "sui-config", - "sui-core", - "sui-faucet", - "sui-graphql-rpc", - "sui-indexer", - "sui-json", - "sui-json-rpc-types", - "sui-keys", - "sui-sdk 1.32.3", - "sui-swarm", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "tokio", - "tracing", - "uuid 1.2.2", -] - -[[package]] ->>>>>>> upstream/mainnet -name = "sui-config" -version = "0.0.0" -dependencies = [ - "anemo", - "anyhow", - "bcs", - "clap", - "consensus-config", - "csv", - "dirs 4.0.0", - "fastcrypto", - "insta", - "narwhal-config", - "object_store", - "once_cell", + "insta", + "narwhal-config", + "object_store", + "once_cell", "prometheus", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "sui-keys", "sui-protocol-config", "sui-types", @@ -13298,7 +12700,7 @@ dependencies = [ "count-min-sketch", "criterion", "dashmap", - "diffy", + "diffy 0.3.0", "either", "enum_dispatch", "expect-test", @@ -13309,10 +12711,10 @@ dependencies = [ "fs_extra", "futures", "im", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.10.5", "jsonrpsee", - "lru 0.10.0", + "lru 0.10.1", "mockall", "moka", "more-asserts", @@ -13333,30 +12735,25 @@ dependencies = [ "narwhal-types", "narwhal-worker", "nonempty", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num_cpus", "object_store", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pprof", "pretty_assertions", "prometheus", "rand 0.8.5", "rayon", - "reqwest 0.12.4", + "reqwest 0.12.7", "roaring", "rstest", "scopeguard", "serde", "serde-reflection", "serde_json", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "shared-crypto", "signature 1.6.4", "static_assertions", @@ -13416,11 +12813,7 @@ dependencies = [ [[package]] name = "sui-data-ingestion" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-trait", @@ -13440,7 +12833,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.8.26", "sui-archival", "sui-data-ingestion-core", "sui-storage", @@ -13483,11 +12876,7 @@ dependencies = [ [[package]] name = "sui-e2e-tests" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "assert_cmd", @@ -13500,7 +12889,7 @@ dependencies = [ "fastcrypto-zkp", "fs_extra", "futures", - "indexmap 2.2.6", + "indexmap 2.5.0", "insta", "jsonrpsee", "move-binary-format", @@ -13531,11 +12920,7 @@ dependencies = [ "sui-node", "sui-protocol-config", "sui-rest-api", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-simulator", "sui-storage", "sui-swarm", @@ -13555,7 +12940,7 @@ dependencies = [ name = "sui-enum-compat-util" version = "0.1.0" dependencies = [ - "serde_yaml", + "serde_yaml 0.8.26", ] [[package]] @@ -13602,17 +12987,13 @@ dependencies = [ "expect-test", "tempfile", "thiserror", - "toml 0.7.4", - "toml_edit 0.19.10", + "toml 0.7.8", + "toml_edit 0.19.15", ] [[package]] name = "sui-faucet" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-recursion", @@ -13623,7 +13004,7 @@ dependencies = [ "futures", "http 1.1.0", "mysten-metrics", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "scopeguard", "serde", @@ -13631,11 +13012,7 @@ dependencies = [ "sui-config", "sui-json-rpc-types", "sui-keys", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", "tap", "telemetry-subscribers", @@ -13648,7 +13025,7 @@ dependencies = [ "tracing", "ttl_cache", "typed-store", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -13672,11 +13049,7 @@ dependencies = [ [[package]] name = "sui-framework-snapshot" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "bcs", @@ -13723,13 +13096,8 @@ dependencies = [ "prometheus", "rand 0.8.5", "serde", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "shared-crypto", "sui-config", "sui-execution", @@ -13742,131 +13110,9 @@ dependencies = [ "tracing", ] -[[package]] -<<<<<<< HEAD -name = "sui-indexer" -version = "1.30.1" -======= -name = "sui-graphql-config" -version = "1.32.3" -dependencies = [ - "quote 1.0.35", - "syn 1.0.107", -] - -[[package]] -name = "sui-graphql-e2e-tests" -version = "0.1.0" -dependencies = [ - "datatest-stable", - "msim", - "sui-graphql-rpc", - "sui-transactional-test-runner", - "tokio", -] - -[[package]] -name = "sui-graphql-rpc" -version = "2024.7.0" -dependencies = [ - "anyhow", - "async-graphql", - "async-graphql-axum", - "async-graphql-value", - "async-trait", - "axum 0.7.5", - "axum-extra", - "bcs", - "bin-version", - "chrono", - "clap", - "const-str", - "diesel", - "downcast", - "either", - "expect-test", - "fastcrypto", - "fastcrypto-zkp", - "futures", - "hex", - "http 1.1.0", - "hyper 1.4.1", - "im", - "insta", - "itertools 0.10.5", - "lru 0.10.0", - "move-binary-format", - "move-bytecode-utils", - "move-core-types", - "move-disassembler", - "move-ir-types", - "mysten-metrics", - "mysten-network", - "once_cell", - "prometheus", - "rand 0.8.5", - "regex", - "reqwest 0.12.5", - "serde", - "serde_json", - "serde_with 3.9.0", - "serde_yaml 0.8.26", - "serial_test", - "shared-crypto", - "similar", - "simulacrum", - "sui-framework", - "sui-graphql-config", - "sui-graphql-rpc-client", - "sui-graphql-rpc-headers", - "sui-indexer", - "sui-json-rpc", - "sui-json-rpc-types", - "sui-package-resolver", - "sui-protocol-config", - "sui-rest-api", - "sui-sdk 1.32.3", - "sui-swarm-config", - "sui-test-transaction-builder", - "sui-types", - "tap", - "telemetry-subscribers", - "tempfile", - "test-cluster", - "thiserror", - "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", - "toml 0.7.4", - "tower", - "tower-http", - "tracing", - "uuid 1.2.2", -] - -[[package]] -name = "sui-graphql-rpc-client" -version = "0.1.0" -dependencies = [ - "async-graphql", - "axum 0.7.5", - "hyper 1.4.1", - "reqwest 0.12.5", - "serde_json", - "sui-graphql-rpc-headers", - "thiserror", -] - -[[package]] -name = "sui-graphql-rpc-headers" -version = "0.1.0" -dependencies = [ - "axum 0.7.5", -] - [[package]] name = "sui-indexer" version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-trait", @@ -13910,11 +13156,7 @@ dependencies = [ "sui-package-resolver", "sui-protocol-config", "sui-rest-api", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-test-transaction-builder", "sui-transaction-builder", "sui-types", @@ -13924,7 +13166,7 @@ dependencies = [ "test-cluster", "thiserror", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", "url", ] @@ -13978,9 +13220,9 @@ dependencies = [ "eyre", "fastcrypto", "futures", - "http-body 0.4.5", + "http-body 0.4.6", "hyper 1.4.1", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.10.5", "jsonrpsee", "mockall", @@ -13989,11 +13231,8 @@ dependencies = [ "move-core-types", "move-package", "mysten-metrics", -<<<<<<< HEAD - "odin", -======= "mysten-service", ->>>>>>> upstream/mainnet + "odin", "once_cell", "prometheus", "serde", @@ -14016,7 +13255,7 @@ dependencies = [ "telemetry-subscribers", "thiserror", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tower", "tower-http", "tracing", @@ -14055,7 +13294,7 @@ dependencies = [ "move-package", "prometheus", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "sui-config", "sui-core", "sui-json", @@ -14068,11 +13307,7 @@ dependencies = [ "sui-open-rpc", "sui-open-rpc-macros", "sui-protocol-config", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-simulator", "sui-swarm-config", "sui-test-transaction-builder", @@ -14133,11 +13368,7 @@ dependencies = [ [[package]] name = "sui-light-client" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-trait", @@ -14148,17 +13379,13 @@ dependencies = [ "move-core-types", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.8.26", "sui-config", "sui-json", "sui-json-rpc-types", "sui-package-resolver", "sui-rest-api", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", "tokio", ] @@ -14174,10 +13401,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -name = "sui-move" -version = "1.30.1" -======= name = "sui-metric-checker" version = "1.32.3" dependencies = [ @@ -14189,9 +13412,9 @@ dependencies = [ "humantime", "once_cell", "prometheus-http-query", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", - "serde_yaml 0.9.21", + "serde_yaml 0.9.34+deprecated", "strum_macros 0.24.3", "telemetry-subscribers", "tokio", @@ -14201,7 +13424,6 @@ dependencies = [ [[package]] name = "sui-move" version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "assert_cmd", @@ -14226,7 +13448,7 @@ dependencies = [ "prometheus", "rand 0.8.5", "serde_json", - "serde_yaml", + "serde_yaml 0.8.26", "sui-core", "sui-macros", "sui-move-build", @@ -14243,11 +13465,7 @@ dependencies = [ [[package]] name = "sui-move-build" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "datatest-stable", @@ -14271,11 +13489,7 @@ dependencies = [ [[package]] name = "sui-move-lsp" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "bin-version", "clap", @@ -14292,7 +13506,7 @@ dependencies = [ "fastcrypto", "fastcrypto-vdf", "fastcrypto-zkp", - "indexmap 2.2.6", + "indexmap 2.5.0", "move-binary-format", "move-core-types", "move-stdlib-natives", @@ -14353,7 +13567,7 @@ dependencies = [ "better_any", "fastcrypto", "fastcrypto-zkp", - "indexmap 2.2.6", + "indexmap 2.5.0", "move-binary-format", "move-core-types", "move-stdlib-natives-v2", @@ -14397,7 +13611,7 @@ dependencies = [ "telemetry-subscribers", "tempfile", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tonic-build", "tower", "tracing", @@ -14405,11 +13619,7 @@ dependencies = [ [[package]] name = "sui-node" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anemo", "anemo-tower", @@ -14431,9 +13641,9 @@ dependencies = [ "mysten-service", "narwhal-network", "narwhal-worker", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "snap", "sui-archival", @@ -14462,11 +13672,7 @@ dependencies = [ [[package]] name = "sui-open-rpc" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "bcs", @@ -14494,19 +13700,15 @@ version = "0.1.0" dependencies = [ "derive-syn-parse", "itertools 0.10.5", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", "unescape", ] [[package]] name = "sui-oracle" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "bcs", @@ -14518,7 +13720,7 @@ dependencies = [ "once_cell", "prometheus", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "serde_json", "shared-crypto", @@ -14526,11 +13728,7 @@ dependencies = [ "sui-json-rpc-types", "sui-keys", "sui-move-build", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", "tap", "telemetry-subscribers", @@ -14548,7 +13746,7 @@ dependencies = [ "cynic-codegen", "fastcrypto", "move-core-types", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "sui-types", @@ -14557,22 +13755,14 @@ dependencies = [ [[package]] name = "sui-package-management" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "move-core-types", "move-package", "move-symbol-pool", "sui-json-rpc-types", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", "thiserror", "tracing", @@ -14587,7 +13777,7 @@ dependencies = [ "eyre", "hyper 1.4.1", "insta", - "lru 0.10.0", + "lru 0.10.1", "move-binary-format", "move-command-line-common", "move-compiler", @@ -14607,10 +13797,10 @@ name = "sui-proc-macros" version = "0.7.0" dependencies = [ "msim-macros", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "sui-enum-compat-util", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -14631,9 +13821,9 @@ dependencies = [ name = "sui-protocol-config-macros" version = "0.1.0" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -14658,27 +13848,17 @@ dependencies = [ "mysten-metrics", "once_cell", "prometheus", - "prost 0.13.1", + "prost 0.13.2", "prost-build", "protobuf", "rand 0.8.5", -<<<<<<< HEAD - "reqwest 0.12.4", - "rustls 0.21.12", - "rustls-pemfile 1.0.2", - "serde", - "serde_json", - "serde_with 3.8.1", - "serde_yaml", -======= - "reqwest 0.12.5", - "rustls 0.23.12", - "rustls-pemfile 2.1.2", + "reqwest 0.12.7", + "rustls 0.23.13", + "rustls-pemfile 2.1.3", "serde", "serde_json", "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "snap", "sui-tls", "sui-types", @@ -14701,24 +13881,19 @@ dependencies = [ "futures", "http 1.1.0", "jsonrpsee", - "lru 0.10.0", + "lru 0.10.1", "move-binary-format", "move-bytecode-utils", "move-core-types", "move-vm-config", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus", "rand 0.8.5", "regex", "serde", "serde_json", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "shared-crypto", "shellexpand", "similar", @@ -14730,11 +13905,7 @@ dependencies = [ "sui-json-rpc-api", "sui-json-rpc-types", "sui-protocol-config", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-storage", "sui-transaction-checks", "sui-types", @@ -14742,7 +13913,7 @@ dependencies = [ "tempfile", "thiserror", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tracing", ] @@ -14754,7 +13925,7 @@ dependencies = [ "async-trait", "axum 0.7.5", "bcs", - "diffy", + "diffy 0.3.0", "fastcrypto", "itertools 0.10.5", "mime", @@ -14762,17 +13933,12 @@ dependencies = [ "openapiv3", "prometheus", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "schemars", "serde", "serde_json", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "sui-protocol-config", "sui-sdk 0.0.0", "sui-types", @@ -14784,11 +13950,7 @@ dependencies = [ [[package]] name = "sui-rosetta" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-trait", @@ -14804,7 +13966,7 @@ dependencies = [ "mysten-metrics", "once_cell", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "serde_json", "shared-crypto", @@ -14816,11 +13978,7 @@ dependencies = [ "sui-keys", "sui-move-build", "sui-node", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-swarm-config", "sui-types", "telemetry-subscribers", @@ -14834,11 +13992,7 @@ dependencies = [ [[package]] name = "sui-rpc-loadgen" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-trait", @@ -14856,16 +14010,12 @@ dependencies = [ "sui-json-rpc", "sui-json-rpc-types", "sui-keys", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", "telemetry-subscribers", "test-cluster", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tracing", ] @@ -14891,11 +14041,7 @@ dependencies = [ [[package]] name = "sui-sdk" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-recursion", @@ -14911,7 +14057,7 @@ dependencies = [ "jsonrpsee", "move-core-types", "rand 0.8.5", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "serde_json", "serde_with 3.9.0", @@ -14931,11 +14077,7 @@ dependencies = [ [[package]] name = "sui-security-watchdog" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "arrow-array", @@ -14946,7 +14088,7 @@ dependencies = [ "lexical-util", "mysten-metrics", "prometheus", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "serde_json", "snowflake-api", @@ -14954,7 +14096,7 @@ dependencies = [ "tokio", "tokio-cron-scheduler", "tracing", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -14965,7 +14107,7 @@ dependencies = [ "anemo-tower", "bcs", "fastcrypto", - "lru 0.10.0", + "lru 0.10.1", "move-package", "msim", "narwhal-network", @@ -14982,11 +14124,7 @@ dependencies = [ [[package]] name = "sui-single-node-benchmark" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "async-trait", "bcs", @@ -15049,11 +14187,7 @@ dependencies = [ [[package]] name = "sui-source-validation" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "colored", @@ -15070,12 +14204,8 @@ dependencies = [ "rand 0.8.5", "sui-json-rpc-types", "sui-move-build", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-package-management", "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-test-transaction-builder", "sui-types", "tar", @@ -15105,23 +14235,19 @@ dependencies = [ "move-symbol-pool", "mysten-metrics", "prometheus", - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "sui", "sui-json-rpc-types", "sui-move", "sui-move-build", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-source-validation", "telemetry-subscribers", "tempfile", "test-cluster", "tokio", - "toml 0.7.4", + "toml 0.7.8", "tower", "tower-http", "tracing", @@ -15147,11 +14273,11 @@ dependencies = [ "fastcrypto", "futures", "hyper 1.4.1", - "hyper-rustls 0.27.2", + "hyper-rustls 0.27.3", "indicatif", "integer-encoding", "itertools 0.10.5", - "lru 0.10.0", + "lru 0.10.1", "move-binary-format", "move-bytecode-utils", "move-core-types", @@ -15160,16 +14286,11 @@ dependencies = [ "num_enum 0.6.1", "object_store", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "percent-encoding", "pretty_assertions", "prometheus", -<<<<<<< HEAD - "reqwest 0.12.4", - "rocksdb", -======= - "reqwest 0.12.5", ->>>>>>> upstream/mainnet + "reqwest 0.12.7", "serde", "serde_json", "sui-config", @@ -15186,22 +14307,18 @@ dependencies = [ "tracing", "typed-store", "url", - "zstd", + "zstd 0.12.4", ] [[package]] name = "sui-surfer" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "async-trait", "bcs", "clap", "futures", - "indexmap 2.2.6", + "indexmap 2.5.0", "move-binary-format", "move-core-types", "move-package", @@ -15260,13 +14377,8 @@ dependencies = [ "prometheus", "rand 0.8.5", "serde", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "shared-crypto", "sui-config", "sui-execution", @@ -15283,7 +14395,7 @@ dependencies = [ name = "sui-telemetry" version = "0.1.0" dependencies = [ - "reqwest 0.12.4", + "reqwest 0.12.7", "serde", "sui-core", "tracing", @@ -15298,21 +14410,13 @@ dependencies = [ "shared-crypto", "sui-genesis-builder", "sui-move-build", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-types", ] [[package]] name = "sui-test-validator" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet [[package]] name = "sui-tls" @@ -15325,17 +14429,10 @@ dependencies = [ "fastcrypto", "pkcs8 0.9.0", "rand 0.8.5", -<<<<<<< HEAD - "rcgen 0.9.3", - "reqwest 0.12.4", - "rustls 0.21.12", - "rustls-webpki 0.101.7", -======= "rcgen", - "reqwest 0.12.5", - "rustls 0.23.12", - "rustls-webpki 0.102.6", ->>>>>>> upstream/mainnet + "reqwest 0.12.7", + "rustls 0.23.13", + "rustls-webpki 0.102.8", "tokio", "tokio-rustls 0.26.0", "tower-layer", @@ -15344,11 +14441,7 @@ dependencies = [ [[package]] name = "sui-tool" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anemo", "anemo-cli", @@ -15382,11 +14475,7 @@ dependencies = [ "sui-package-dump", "sui-protocol-config", "sui-replay", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-snapshot", "sui-storage", "sui-types", @@ -15428,56 +14517,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= -name = "sui-transactional-test-runner" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bcs", - "bimap", - "clap", - "criterion", - "eyre", - "fastcrypto", - "futures", - "move-binary-format", - "move-bytecode-utils", - "move-command-line-common", - "move-compiler", - "move-core-types", - "move-stdlib", - "move-symbol-pool", - "move-transactional-test-runner", - "move-vm-runtime", - "msim", - "once_cell", - "rand 0.8.5", - "regex", - "serde_json", - "simulacrum", - "sui-config", - "sui-core", - "sui-framework", - "sui-framework-snapshot", - "sui-graphql-rpc", - "sui-json-rpc", - "sui-json-rpc-api", - "sui-json-rpc-types", - "sui-protocol-config", - "sui-rest-api", - "sui-storage", - "sui-swarm-config", - "sui-types", - "telemetry-subscribers", - "tempfile", - "tokio", - "typed-store", -] - -[[package]] ->>>>>>> upstream/mainnet name = "sui-types" version = "0.1.0" dependencies = [ @@ -15501,10 +14540,10 @@ dependencies = [ "fastcrypto-tbls", "fastcrypto-zkp", "im", - "indexmap 2.2.6", + "indexmap 2.5.0", "itertools 0.10.5", "jsonrpsee", - "lru 0.10.0", + "lru 0.10.1", "move-binary-format", "move-bytecode-utils", "move-command-line-common", @@ -15519,13 +14558,13 @@ dependencies = [ "narwhal-config", "narwhal-crypto", "nonempty", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", "num_enum 0.6.1", "odin", "once_cell", "p256", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "passkey-authenticator", "passkey-client", "passkey-types", @@ -15538,13 +14577,8 @@ dependencies = [ "serde", "serde-name", "serde_json", -<<<<<<< HEAD - "serde_with 3.8.1", - "serde_yaml", -======= "serde_with 3.9.0", "serde_yaml 0.8.26", ->>>>>>> upstream/mainnet "shared-crypto", "signature 1.6.4", "static_assertions", @@ -15557,7 +14591,7 @@ dependencies = [ "tap", "thiserror", "tokio", - "tonic 0.12.1", + "tonic 0.12.2", "tracing", "typed-store-error", "url", @@ -15593,6 +14627,13 @@ dependencies = [ "sui-types", ] +[[package]] +name = "sui-verifier-transactional-tests" +version = "0.1.0" +dependencies = [ + "datatest-stable", +] + [[package]] name = "sui-verifier-v0" version = "0.1.0" @@ -15639,11 +14680,7 @@ dependencies = [ [[package]] name = "suins-indexer" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "async-trait", @@ -15663,7 +14700,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", - "serde_yaml", + "serde_yaml 0.8.26", "sui-data-ingestion-core", "sui-json-rpc", "sui-storage", @@ -15694,36 +14731,27 @@ dependencies = [ "prettytable-rs", "rand 0.8.5", "regex", -<<<<<<< HEAD - "reqwest 0.12.4", - "semver 1.0.16", - "serde", - "serde_json", - "serde_yaml", - "sha2 0.10.6", -======= - "reqwest 0.12.5", - "semver 1.0.23", + "reqwest 0.12.7", + "semver", "serde", "serde_json", "serde_yaml 0.8.26", "sha2 0.10.8", ->>>>>>> upstream/mainnet "spinners", "strum 0.24.1", "tabled", "tempfile", "tokio", - "toml_edit 0.19.10", + "toml_edit 0.19.15", "tracing", "tracing-subscriber", ] [[package]] name = "supports-color" -version = "3.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9829b314621dfc575df4e409e79f9d6a66a3bd707ab73f23cb4aa3a854ac854f" +checksum = "8775305acf21c96926c900ad056abeef436701108518cf890020387236ac5a77" dependencies = [ "is_ci", ] @@ -15750,8 +14778,8 @@ dependencies = [ "fs2", "hex", "once_cell", - "reqwest 0.11.20", - "semver 1.0.23", + "reqwest 0.11.27", + "semver", "serde", "serde_json", "sha2 0.10.8", @@ -15762,21 +14790,21 @@ dependencies = [ [[package]] name = "symbolic-common" -version = "12.1.1" +version = "12.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26212dc7aeb75abb4cc84320a50dd482977089402f7b4043b454d6d79d8536e7" +checksum = "9c1db5ac243c7d7f8439eb3b8f0357888b37cf3732957e91383b0ad61756374e" dependencies = [ "debugid", "memmap2", "stable_deref_trait", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] name = "symbolic-demangle" -version = "12.1.1" +version = "12.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f1b0155f588568b2df0d693b30aeedb59360b647b85fc3c23942e81e8cc97a" +checksum = "ea26e430c27d4a8a5dea4c4b81440606c7c1a415bd611451ef6af8c81416afc3" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -15796,23 +14824,23 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.48" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "unicode-ident", ] @@ -15822,16 +14850,25 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", - "unicode-xid 0.2.4", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", + "unicode-xid 0.2.5", ] [[package]] @@ -15857,7 +14894,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -15870,6 +14918,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 = "tabled" version = "0.12.2" @@ -15889,9 +14947,9 @@ checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4" dependencies = [ "heck 0.4.1", "proc-macro-error", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -15935,15 +14993,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "target-spec" -<<<<<<< HEAD -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf4306559bd50cb358e7af5692694d6f6fad95cf2c0bea2571dd419f5298e12" -======= -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419ccf3482090c626619fa2574290aaa00b696f9ab73af08fbf48260565431bf" ->>>>>>> upstream/mainnet +checksum = "4c5743abbf7bc7d5296ae61368b50cd218ac09432281cb5d48b97308d5c27909" dependencies = [ "cfg-expr", "guppy-workspace-hack", @@ -15981,15 +15033,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", - "fastrand 2.0.0", - "redox_syscall 0.3.5", - "rustix 0.38.34", - "windows-sys 0.48.0", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -16018,15 +15070,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ - "rustix 0.38.34", + "rustix", "windows-sys 0.48.0", ] [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-cluster" @@ -16052,11 +15104,7 @@ dependencies = [ "sui-macros", "sui-node", "sui-protocol-config", -<<<<<<< HEAD - "sui-sdk 1.30.1", -======= "sui-sdk 1.32.3", ->>>>>>> upstream/mainnet "sui-simulator", "sui-swarm", "sui-swarm-config", @@ -16068,9 +15116,9 @@ dependencies = [ [[package]] name = "test-fuzz" -version = "3.0.5" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd4a3a7f00909d5a1d1f83b86b65d91e4c94f80b0c2d0ae37e2ef44da7b7a0a0" +checksum = "857e884d611b1f26e63f00559975d348491e66b1271a8144a9806c9bd4a791cf" dependencies = [ "serde", "test-fuzz-internal", @@ -16080,40 +15128,40 @@ dependencies = [ [[package]] name = "test-fuzz-internal" -version = "3.0.5" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9186daca5c58cb307d09731e0ba06b13fd6c036c90672b9bfc31cecf76cf689" +checksum = "48db3bbc562408b2111f3a0c96ec416ffa3ab66f8a6ab42579b608b9f74744e1" dependencies = [ "cargo_metadata 0.15.4", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "serde", "strum_macros 0.24.3", ] [[package]] name = "test-fuzz-macro" -version = "3.0.5" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d187b450bfb5b7939f82f9747dc1ebb15a7a9c4a93cd304a41aece7149608b" +checksum = "e17cd05c077c7b9c5d0045c539f9c5e911187bf65cd1b407d28239efc7b54880" dependencies = [ - "darling 0.14.2", + "darling 0.20.10", "if_chain", + "itertools 0.10.5", "lazy_static", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "subprocess", - "syn 1.0.107", + "syn 2.0.77", "test-fuzz-internal", "toolchain_find", - "unzip-n", ] [[package]] name = "test-fuzz-runtime" -version = "3.0.5" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d69068569b9b7311095823fe0e49eedfd05ad4277eb64fc334cf1a5bc5116" +checksum = "53d68728ca22d1a96a71645fd2327e37821b8979a7e75e44ad24a72e8051513d" dependencies = [ "bincode", "hex", @@ -16136,30 +15184,31 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ + "cfg-if", "once_cell", ] @@ -16180,12 +15229,7 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", -<<<<<<< HEAD -======= - "libc", "num-conv", - "num_threads", ->>>>>>> upstream/mainnet "powerfmt", "serde", "time-core", @@ -16248,37 +15292,36 @@ dependencies = [ [[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", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", - "parking_lot 0.12.1", + "mio 1.0.2", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.6", - "tokio-macros 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "socket2 0.5.7", + "tokio-macros 2.4.0", "tracing", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -16293,7 +15336,7 @@ dependencies = [ "num-traits", "tokio", "tracing", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] @@ -16309,22 +15352,22 @@ dependencies = [ [[package]] name = "tokio-macros" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1#e47aafebf98e9c1734a8848a1876d5946c44bdd1" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "tokio-macros" -version = "2.2.0" -source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1#e47aafebf98e9c1734a8848a1876d5946c44bdd1" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -16369,38 +15412,27 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", ] [[package]] @@ -16415,7 +15447,7 @@ dependencies = [ "tokio", "tokio-rustls 0.24.1", "tungstenite 0.20.1", - "webpki-roots 0.25.2", + "webpki-roots 0.25.4", ] [[package]] @@ -16433,8 +15465,7 @@ dependencies = [ [[package]] name = "tokio-util" version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1#e47aafebf98e9c1734a8848a1876d5946c44bdd1" dependencies = [ "bytes", "futures-core", @@ -16443,14 +15474,16 @@ dependencies = [ "futures-util", "hashbrown 0.14.5", "pin-project-lite", - "tokio", + "real_tokio", + "slab", "tracing", ] [[package]] name = "tokio-util" -version = "0.7.10" -source = "git+https://github.com/mystenmark/tokio-madsim-fork.git?rev=e47aafebf98e9c1734a8848a1876d5946c44bdd1#e47aafebf98e9c1734a8848a1876d5946c44bdd1" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -16459,9 +15492,7 @@ dependencies = [ "futures-util", "hashbrown 0.14.5", "pin-project-lite", - "real_tokio", - "slab", - "tracing", + "tokio", ] [[package]] @@ -16476,27 +15507,27 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.4" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ - "indexmap 1.9.3", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime 0.6.8", - "toml_edit 0.19.10", + "toml_edit 0.19.15", ] [[package]] name = "toml" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81967dd0dd2c1ab0bc3468bd7caecc32b8a4aa47d0c8c695d8c2b2108168d62c" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime 0.6.8", - "toml_edit 0.22.17", + "toml_edit 0.22.20", ] [[package]] @@ -16540,24 +15571,24 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.10" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 1.9.3", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime 0.6.8", - "winnow 0.4.6", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.17" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9f8729f5aea9562aac1cc0441f5d6de3cff1ee0c5d67293eeca5eb36ee7c16" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime 0.6.8", @@ -16577,9 +15608,9 @@ dependencies = [ "futures-core", "futures-util", "h2 0.3.26", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", "hyper-timeout 0.4.1", "percent-encoding", "pin-project", @@ -16594,9 +15625,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5469afaf78a11265c343a88969045c1568aa8ecc6c787dbf756e92e70f199861" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" dependencies = [ "async-stream", "async-trait", @@ -16604,13 +15635,13 @@ dependencies = [ "base64 0.21.7", "bytes", "h2 0.3.26", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", "hyper-timeout 0.4.1", "percent-encoding", "pin-project", - "prost 0.12.3", + "prost 0.12.6", "tokio", "tokio-stream", "tower", @@ -16621,16 +15652,16 @@ dependencies = [ [[package]] name = "tonic" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +checksum = "c6f6ba989e4b2c58ae83d862d3a3e27690b6e3ae630d0deb59f3697f32aa88ad" dependencies = [ "async-stream", "async-trait", "axum 0.7.5", "base64 0.22.1", "bytes", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", @@ -16639,8 +15670,8 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.1", - "socket2 0.5.6", + "prost 0.13.2", + "socket2 0.5.7", "tokio", "tokio-stream", "tower", @@ -16651,40 +15682,40 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568392c5a2bd0020723e3f387891176aabafe36fd9fcd074ad309dfa0c8eb964" +checksum = "fe4ee8877250136bd7e3d2331632810a4df4ea5e004656990d8d66d2f5ee8a67" dependencies = [ "prettyplease", - "proc-macro2 1.0.78", + "proc-macro2 1.0.86", "prost-build", - "quote 1.0.35", - "syn 2.0.48", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "tonic-health" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e10e6a96ee08b6ce443487d4368442d328d0e746f3681f81127f7dc41b4955" +checksum = "ec0a34e6f706bae26b2b490e1da5c3f6a6ff87cae442bcbc7c881bab9631b5a7" dependencies = [ "async-stream", - "prost 0.13.1", + "prost 0.13.2", "tokio", "tokio-stream", - "tonic 0.12.1", + "tonic 0.12.2", ] [[package]] name = "toolchain_find" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e85654a10e7a07a47c6f19d93818f3f343e22927f2fa280c84f7c8042743413" +checksum = "fa8c746c4e8d786ff304a6a73d7b406420d9a7c7d8292e090979dc85213113ed" dependencies = [ "home", - "lazy_static", + "once_cell", "regex", - "semver 0.11.0", + "semver", "walkdir", ] @@ -16703,7 +15734,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tower-layer", "tower-service", "tracing", @@ -16717,7 +15748,7 @@ checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "async-compression", "base64 0.21.7", - "bitflags 2.4.1", + "bitflags 2.6.0", "bytes", "futures-core", "futures-util", @@ -16732,25 +15763,25 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-util 0.7.12", "tower", "tower-layer", "tower-service", "tracing", - "uuid 1.2.2", + "uuid 1.10.0", ] [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -16766,11 +15797,12 @@ dependencies = [ [[package]] name = "tracing-appender" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", + "thiserror", "time", "tracing-subscriber", ] @@ -16781,9 +15813,9 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -16818,12 +15850,23 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", "tracing-core", ] @@ -16834,16 +15877,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8" dependencies = [ "once_cell", -<<<<<<< HEAD "opentelemetry", -======= - "opentelemetry 0.20.0", ->>>>>>> upstream/mainnet "opentelemetry_sdk", "smallvec", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.1.4", "tracing-subscriber", ] @@ -16859,12 +15898,12 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", - "nu-ansi-term", + "nu-ansi-term 0.46.0", "once_cell", "regex", "serde", @@ -16875,7 +15914,7 @@ dependencies = [ "time", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", "tracing-serde", ] @@ -16885,9 +15924,9 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -16921,9 +15960,9 @@ checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tryhard" @@ -16967,7 +16006,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 0.2.9", + "http 0.2.12", "httparse", "log", "rand 0.8.5", @@ -17023,15 +16062,15 @@ dependencies = [ "msim", "once_cell", "ouroboros 0.17.2", - "proc-macro2 1.0.78", + "proc-macro2 1.0.86", "prometheus", - "quote 1.0.35", + "quote 1.0.37", "rand 0.8.5", "rocksdb", "rstest", "serde", "sui-macros", - "syn 1.0.107", + "syn 1.0.109", "tap", "tempfile", "thiserror", @@ -17048,9 +16087,9 @@ name = "typed-store-derive" version = "0.3.0" dependencies = [ "itertools 0.10.5", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -17070,19 +16109,19 @@ dependencies = [ "libc", "memchr", "nom", - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", "regex", - "regex-syntax 0.7.2", - "syn 2.0.48", + "regex-syntax 0.7.5", + "syn 2.0.77", "zstd-sys", ] [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "typeshare" @@ -17102,15 +16141,15 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" dependencies = [ - "quote 1.0.35", - "syn 2.0.48", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -17138,9 +16177,9 @@ checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] @@ -17153,9 +16192,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-linebreak" @@ -17165,24 +16204,24 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" @@ -17192,9 +16231,9 @@ checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "universal-hash" @@ -17207,19 +16246,16 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= name = "unsafe-libyaml" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] ->>>>>>> upstream/mainnet name = "unsigned-varint" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" [[package]] name = "untrusted" @@ -17233,54 +16269,39 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "unzip-n" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7e85a0596447f0f2ac090e16bc4c516c6fe91771fb0c0ccf7fa3dae896b9c" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", -] - [[package]] name = "ureq" version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" dependencies = [ -<<<<<<< HEAD "base64 0.22.1", -======= - "base64 0.21.7", ->>>>>>> upstream/mainnet "flate2", "log", "once_cell", - "rustls 0.23.12", + "rustls 0.23.13", "rustls-pki-types", "url", - "webpki-roots 0.26.3", + "webpki-roots 0.26.5", ] [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna", "percent-encoding", "serde", ] [[package]] name = "urlencoding" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf-8" @@ -17290,9 +16311,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[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" @@ -17306,9 +16327,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.2.2" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom 0.2.15", "rand 0.8.5", @@ -17326,8 +16347,8 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" dependencies = [ - "quote 1.0.35", - "syn 1.0.107", + "quote 1.0.37", + "syn 1.0.109", ] [[package]] @@ -17338,9 +16359,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[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 = "versions" @@ -17381,8 +16402,8 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", + "proc-macro2 1.0.86", + "quote 1.0.37", ] [[package]] @@ -17394,12 +16415,6 @@ dependencies = [ "libc", ] -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - [[package]] name = "walkdir" version = "2.5.0" @@ -17412,11 +16427,10 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -17458,17 +16472,17 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -17482,7 +16496,7 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ - "quote 1.0.35", + "quote 1.0.37", "wasm-bindgen-macro-support", ] @@ -17492,9 +16506,9 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -17535,9 +16549,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -17549,7 +16563,7 @@ version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring 0.17.3", + "ring 0.17.8", "untrusted 0.9.0", ] @@ -17564,35 +16578,26 @@ dependencies = [ [[package]] name = "webpki-roots" -<<<<<<< HEAD -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" -dependencies = [ - "rustls-webpki 0.100.3", -] -======= -version = "0.25.2" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" ->>>>>>> upstream/mainnet +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" dependencies = [ "rustls-pki-types", ] [[package]] name = "whoami" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fec781d48b41f8163426ed18e8fc2864c12937df9ce54c88ede7bd47270893e" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall 0.5.4", "wasite", "web-sys", ] @@ -17621,11 +16626,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -17635,27 +16640,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.6", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-targets 0.42.2", + "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]] @@ -17664,7 +16684,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] @@ -17673,185 +16693,144 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.6", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_i686_gnu" -version = "0.52.0" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.4.6" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -17875,16 +16854,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -17921,11 +16890,7 @@ dependencies = [ [[package]] name = "x" -<<<<<<< HEAD -version = "1.30.1" -======= version = "1.32.3" ->>>>>>> upstream/mainnet dependencies = [ "anyhow", "camino", @@ -17959,21 +16924,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", - "linux-raw-sys 0.4.12", - "rustix 0.38.34", + "linux-raw-sys", + "rustix", ] [[package]] name = "xml-rs" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" [[package]] name = "xmlparser" -version = "0.13.5" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] name = "yaml-rust" @@ -18003,7 +16968,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ "bit-vec", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "time", ] @@ -18013,6 +16978,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -18022,50 +16988,29 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", -] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 2.0.48", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.78", - "quote 1.0.35", - "syn 1.0.107", - "synstructure", + "proc-macro2 1.0.86", + "quote 1.0.37", + "syn 2.0.77", ] [[package]] @@ -18099,11 +17044,20 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "zstd-safe", + "zstd-safe 6.0.6", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe 7.2.1", ] [[package]] @@ -18118,14 +17072,23 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + [[package]] name = "zstd-sys" version = "2.0.12+zstd.1.5.6" diff --git a/Cargo.toml b/Cargo.toml index 17acd58aae594..3256120421a86 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -83,9 +83,9 @@ members = [ "crates/shared-crypto", "crates/simulacrum", "crates/sui", - "crates/sui-adapter-transactional-tests", - "crates/sui-analytics-indexer", - "crates/sui-analytics-indexer-derive", + # "crates/sui-adapter-transactional-tests", + # "crates/sui-analytics-indexer", + # "crates/sui-analytics-indexer-derive", "crates/sui-archival", "crates/sui-authority-aggregation", "crates/sui-aws-orchestrator", @@ -93,7 +93,7 @@ members = [ "crates/sui-bridge", "crates/sui-bridge-cli", "crates/sui-bridge-indexer", - "crates/sui-cluster-test", + # "crates/sui-cluster-test", "crates/sui-config", "crates/sui-core", "crates/sui-cost", @@ -106,11 +106,11 @@ members = [ "crates/sui-framework-snapshot", "crates/sui-framework-tests", "crates/sui-genesis-builder", - "crates/sui-graphql-config", - "crates/sui-graphql-e2e-tests", - "crates/sui-graphql-rpc", - "crates/sui-graphql-rpc-client", - "crates/sui-graphql-rpc-headers", + # "crates/sui-graphql-config", + # "crates/sui-graphql-e2e-tests", + # "crates/sui-graphql-rpc", + # "crates/sui-graphql-rpc-client", + # "crates/sui-graphql-rpc-headers", "crates/sui-indexer", "crates/sui-indexer-builder", "crates/sui-json", @@ -159,7 +159,7 @@ members = [ "crates/sui-tool", "crates/sui-transaction-builder", "crates/sui-transaction-checks", - "crates/sui-transactional-test-runner", + # "crates/sui-transactional-test-runner", "crates/sui-types", "crates/sui-upgrade-compatibility-transactional-tests", "crates/sui-verifier-transactional-tests", diff --git a/crates/sui-adapter-transactional-tests/Cargo.toml b/crates/sui-adapter-transactional-tests/Cargo.toml index 25538480c9d2e..2b1797440573e 100644 --- a/crates/sui-adapter-transactional-tests/Cargo.toml +++ b/crates/sui-adapter-transactional-tests/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" [dev-dependencies] datatest-stable.workspace = true -sui-transactional-test-runner.workspace = true +# sui-transactional-test-runner.workspace = true [[test]] name = "tests" diff --git a/crates/sui-analytics-indexer/Cargo.toml b/crates/sui-analytics-indexer/Cargo.toml index 227d38b32315a..7a21cc191b6ec 100644 --- a/crates/sui-analytics-indexer/Cargo.toml +++ b/crates/sui-analytics-indexer/Cargo.toml @@ -34,7 +34,7 @@ parquet.workspace = true arrow-array.workspace = true fastcrypto = { workspace = true, features = ["copy_key"] } mysten-metrics.workspace = true -sui-analytics-indexer-derive.workspace = true +# sui-analytics-indexer-derive.workspace = true sui-data-ingestion-core.workspace = true sui-indexer.workspace = true eyre.workspace = true @@ -51,7 +51,7 @@ sui-json-rpc-types.workspace = true sui-package-resolver.workspace = true simulacrum.workspace = true arrow.workspace = true -gcp-bigquery-client = "0.18.0" +# gcp-bigquery-client = "0.18.0" snowflake-api.workspace = true tap.workspace = true diff --git a/crates/sui-cluster-test/Cargo.toml b/crates/sui-cluster-test/Cargo.toml index 9186b9ea56db2..ed9b467c1a3ce 100644 --- a/crates/sui-cluster-test/Cargo.toml +++ b/crates/sui-cluster-test/Cargo.toml @@ -28,7 +28,7 @@ regex.workspace = true sui-indexer.workspace = true sui-faucet.workspace = true -sui-graphql-rpc.workspace = true +# sui-graphql-rpc.workspace = true sui-swarm.workspace = true sui-swarm-config.workspace = true sui-json-rpc-types.workspace = true diff --git a/crates/sui-graphql-rpc/Cargo.toml b/crates/sui-graphql-rpc/Cargo.toml index 6284038ea56fe..78a7bc5aef2ae 100644 --- a/crates/sui-graphql-rpc/Cargo.toml +++ b/crates/sui-graphql-rpc/Cargo.toml @@ -70,8 +70,8 @@ im.workspace = true downcast = "0.11.0" sui-graphql-config.workspace = true -sui-graphql-rpc-headers.workspace = true -sui-graphql-rpc-client.workspace = true +# sui-graphql-rpc-headers.workspace = true +# sui-graphql-rpc-client.workspace = true # TODO: put these behind feature flag to prevent leakage diff --git a/crates/sui-indexer/logs.txt b/crates/sui-indexer/logs.txt new file mode 100644 index 0000000000000..87a45b8b9affd --- /dev/null +++ b/crates/sui-indexer/logs.txt @@ -0,0 +1,5000 @@ +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456213Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95141 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456216Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95142 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456217Z INFO sui_types::nats_queue: Received checkpoint with seq number 95124 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456218Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95133 for workflow primary in 67.296µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456218Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456219Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456219Z INFO sui_types::nats_queue: Received checkpoint with seq number 95133 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456220Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456221Z INFO sui_types::nats_queue: Received checkpoint with seq number 95124 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456223Z INFO sui_types::nats_queue: Received checkpoint with seq number 95133 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456223Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95137 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456224Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456226Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456224Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95140 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456226Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95138 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456226Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456228Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95131 with time now 1726138825456 and checkpoint time 1681502931527 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456229Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95127 with time now 1726138825456 and checkpoint time 1681502927526 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456229Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456232Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95138: 44635886918 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456232Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456232Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95140: 44635884975 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456233Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95138 with time now 1726138825456 and checkpoint time 1681502938538 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456234Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95127 for workflow primary in 73.728µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456234Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95140 with time now 1726138825456 and checkpoint time 1681502940481 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456237Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95131 for workflow primary in 86.982µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456238Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95138 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456239Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456240Z INFO sui_types::nats_queue: Received checkpoint with seq number 95127 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456242Z INFO sui_types::nats_queue: Received checkpoint with seq number 95131 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456242Z INFO sui_types::nats_queue: Received checkpoint with seq number 95127 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456244Z INFO sui_types::nats_queue: Received checkpoint with seq number 95131 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456243Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95140 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456244Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456245Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95136 with time now 1726138825456 and checkpoint time 1681502936516 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456247Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456247Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95134 with time now 1726138825456 and checkpoint time 1681502934570 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456248Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95139 with time now 1726138825456 and checkpoint time 1681502939570 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456249Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456250Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95135 with time now 1726138825456 and checkpoint time 1681502935535 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456253Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95132 with time now 1726138825456 and checkpoint time 1681502932529 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456253Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95129 with time now 1726138825456 and checkpoint time 1681502929565 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456255Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456256Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95136 for workflow primary in 70.271µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456258Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95139 for workflow primary in 58.489µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456261Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95135 for workflow primary in 74.569µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456262Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456264Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95145 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456264Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95134 for workflow primary in 117.981µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456266Z INFO sui_types::nats_queue: Received checkpoint with seq number 95136 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456265Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95132 for workflow primary in 111.167µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456265Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95129 for workflow primary in 100.749µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456267Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95145: 44635879878 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456267Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95130 with time now 1726138825456 and checkpoint time 1681502930569 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456268Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95145 with time now 1726138825456 and checkpoint time 1681502945578 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456268Z INFO sui_types::nats_queue: Received checkpoint with seq number 95139 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456269Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95142 with time now 1726138825456 and checkpoint time 1681502942502 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456270Z INFO sui_types::nats_queue: Received checkpoint with seq number 95135 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456270Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95147 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456271Z INFO sui_types::nats_queue: Received checkpoint with seq number 95134 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456268Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95149 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456272Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95146 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456273Z INFO sui_types::nats_queue: Received checkpoint with seq number 95129 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456274Z INFO sui_types::nats_queue: Received checkpoint with seq number 95132 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456275Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95147: 44635877902 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456275Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95148 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456276Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95147 with time now 1726138825456 and checkpoint time 1681502947554 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456277Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95146: 44635878913 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456274Z INFO sui_types::nats_queue: Received checkpoint with seq number 95136 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456277Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456277Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95149: 44635875941 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456278Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95146 with time now 1726138825456 and checkpoint time 1681502946543 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456279Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95145 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456280Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95149 with time now 1726138825456 and checkpoint time 1681502949515 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456280Z INFO sui_types::nats_queue: Received checkpoint with seq number 95139 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456280Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95147 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456281Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95143 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456281Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95148: 44635876902 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456282Z INFO sui_types::nats_queue: Received checkpoint with seq number 95135 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456283Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95148 with time now 1726138825456 and checkpoint time 1681502948554 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456283Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456284Z INFO sui_types::nats_queue: Received checkpoint with seq number 95134 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456284Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95142 for workflow primary in 79.869µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456285Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95143: 44635881898 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456285Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95137 with time now 1726138825456 and checkpoint time 1681502937556 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456285Z INFO sui_types::nats_queue: Received checkpoint with seq number 95129 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456286Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95143 with time now 1726138825456 and checkpoint time 1681502943558 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456286Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95146 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456285Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95141 with time now 1726138825456 and checkpoint time 1681502941536 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456287Z INFO sui_types::nats_queue: Received checkpoint with seq number 95132 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456286Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95130 for workflow primary in 111.709µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456286Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456288Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95138 with time now 1726138825456 and checkpoint time 1681502938538 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456289Z INFO sui_types::nats_queue: Received checkpoint with seq number 95142 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456291Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95151 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456292Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95144 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456290Z INFO sui_types::nats_queue: Received checkpoint with seq number 95130 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456293Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95149 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456294Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456294Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95151: 44635873831 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456294Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95148 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456295Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95143 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456296Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95151 with time now 1726138825456 and checkpoint time 1681502951625 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456296Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95150 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456298Z INFO sui_types::nats_queue: Received checkpoint with seq number 95142 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456299Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456299Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456299Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95144: 44635880909 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456300Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95137 for workflow primary in 109.645µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456300Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95138 for workflow primary in 72.185µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456300Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95144 with time now 1726138825456 and checkpoint time 1681502944547 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456301Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456301Z INFO sui_types::nats_queue: Received checkpoint with seq number 95130 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456303Z INFO sui_types::nats_queue: Received checkpoint with seq number 95137 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456304Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95151 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456304Z INFO sui_types::nats_queue: Received checkpoint with seq number 95138 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456302Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95141 for workflow primary in 105.066µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456304Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456304Z INFO sui_types::nats_queue: Received checkpoint with seq number 95138 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456303Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95150: 44635874847 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456305Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95144 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456306Z INFO sui_types::nats_queue: Received checkpoint with seq number 95141 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456306Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456306Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95150 with time now 1726138825456 and checkpoint time 1681502950609 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456307Z INFO sui_types::nats_queue: Received checkpoint with seq number 95137 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456309Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456309Z INFO sui_types::nats_queue: Received checkpoint with seq number 95141 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456310Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95152 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456312Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456312Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456313Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95145 with time now 1726138825456 and checkpoint time 1681502945578 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456313Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456314Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95150 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456315Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95152: 44635872905 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456317Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95140 with time now 1726138825456 and checkpoint time 1681502940481 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456317Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95152 with time now 1726138825456 and checkpoint time 1681502952551 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456319Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95145 for workflow primary in 54.682µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456323Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95155 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456325Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456326Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95147 with time now 1726138825456 and checkpoint time 1681502947554 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456326Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95155: 44635869912 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456327Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456328Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95155 with time now 1726138825456 and checkpoint time 1681502955544 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456327Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456327Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95152 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456328Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456329Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456330Z INFO sui_types::nats_queue: Received checkpoint with seq number 95145 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456332Z INFO sui_types::nats_queue: Received checkpoint with seq number 95140 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456332Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95140 for workflow primary in 104.135µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456336Z INFO sui_types::nats_queue: Received checkpoint with seq number 95145 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456336Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95147 for workflow primary in 64.751µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456337Z INFO sui_types::nats_queue: Received checkpoint with seq number 95140 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456337Z INFO sui_types::nats_queue: Received checkpoint with seq number 95147 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456337Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456338Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95155 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456339Z INFO sui_types::nats_queue: Received checkpoint with seq number 95147 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456338Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95154 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456340Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95153 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456344Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95151 with time now 1726138825456 and checkpoint time 1681502951625 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456344Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95153: 44635871867 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456345Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95153 with time now 1726138825456 and checkpoint time 1681502953589 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456344Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456347Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95154: 44635870852 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456349Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95154 with time now 1726138825456 and checkpoint time 1681502954604 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456349Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95143 with time now 1726138825456 and checkpoint time 1681502943558 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456351Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95156 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456351Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95146 with time now 1726138825456 and checkpoint time 1681502946543 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456352Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95153 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456352Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95157 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456352Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95151 for workflow primary in 60.253µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456352Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95158 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456355Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95143 for workflow primary in 72.275µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456354Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95154 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456355Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456355Z INFO sui_types::nats_queue: Received checkpoint with seq number 95151 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456356Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95156: 44635868920 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456356Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95157: 44635865405 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456356Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456357Z INFO sui_types::nats_queue: Received checkpoint with seq number 95143 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456358Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95156 with time now 1726138825456 and checkpoint time 1681502956536 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456358Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95157 with time now 1726138825456 and checkpoint time 1681502960051 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456358Z INFO sui_types::nats_queue: Received checkpoint with seq number 95151 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456358Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456357Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95158: 44635863443 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456358Z INFO sui_types::nats_queue: Received checkpoint with seq number 95146 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456360Z INFO sui_types::nats_queue: Received checkpoint with seq number 95143 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456358Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95146 for workflow primary in 84.197µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456360Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95158 with time now 1726138825456 and checkpoint time 1681502962013 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456361Z INFO sui_types::nats_queue: Received checkpoint with seq number 95146 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456360Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95144 with time now 1726138825456 and checkpoint time 1681502944547 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456362Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456365Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95157 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456367Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95149 with time now 1726138825456 and checkpoint time 1681502949515 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456369Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456372Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95156 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456372Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95159 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456373Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95158 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456374Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95159: 44635862999 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456374Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456375Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95159 with time now 1726138825456 and checkpoint time 1681502962457 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456376Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456376Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456376Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95144 for workflow primary in 82.986µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456376Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95150 with time now 1726138825456 and checkpoint time 1681502950609 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456379Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456378Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95160 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456380Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456380Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95148 with time now 1726138825456 and checkpoint time 1681502948554 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456381Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95159 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456383Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95160: 44635861956 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456385Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95160 with time now 1726138825456 and checkpoint time 1681502963500 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456384Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95149 for workflow primary in 110.657µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456386Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95153 with time now 1726138825456 and checkpoint time 1681502953589 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456386Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456386Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95150 for workflow primary in 87.974µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456389Z INFO sui_types::nats_queue: Received checkpoint with seq number 95144 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456389Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95160 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456390Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456391Z INFO sui_types::nats_queue: Received checkpoint with seq number 95149 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456390Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456390Z INFO sui_types::nats_queue: Received checkpoint with seq number 95144 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456392Z INFO sui_types::nats_queue: Received checkpoint with seq number 95150 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456392Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95153 for workflow primary in 51.526µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456393Z INFO sui_types::nats_queue: Received checkpoint with seq number 95153 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456393Z INFO sui_types::nats_queue: Received checkpoint with seq number 95148 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456393Z INFO sui_types::nats_queue: Received checkpoint with seq number 95149 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456393Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95148 for workflow primary in 115.456µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456395Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456395Z INFO sui_types::nats_queue: Received checkpoint with seq number 95150 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456395Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456394Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95152 with time now 1726138825456 and checkpoint time 1681502952551 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456396Z INFO sui_types::nats_queue: Received checkpoint with seq number 95148 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456397Z INFO sui_types::nats_queue: Received checkpoint with seq number 95153 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456400Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456400Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95161 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456404Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95163 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456405Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95162 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456405Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456405Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95161: 44635859592 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456407Z INFO sui_types::nats_queue: Received checkpoint with seq number 95152 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456406Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95152 for workflow primary in 93.424µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456407Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95161 with time now 1726138825456 and checkpoint time 1681502965864 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456408Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95163: 44635858089 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456409Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95163 with time now 1726138825456 and checkpoint time 1681502967367 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456410Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95156 with time now 1726138825456 and checkpoint time 1681502956536 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456410Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95162: 44635859171 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456411Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95162 with time now 1726138825456 and checkpoint time 1681502966285 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456416Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95157 with time now 1726138825456 and checkpoint time 1681502960051 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456417Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95165 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456417Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95156 for workflow primary in 65.563µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456417Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95161 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456419Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95165: 44635855454 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456418Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95162 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456419Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95165 with time now 1726138825456 and checkpoint time 1681502970002 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456418Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95154 with time now 1726138825456 and checkpoint time 1681502954604 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456418Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95163 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456420Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95155 with time now 1726138825456 and checkpoint time 1681502955544 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456421Z INFO sui_types::nats_queue: Received checkpoint with seq number 95156 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456423Z INFO sui_types::nats_queue: Received checkpoint with seq number 95157 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456422Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95157 for workflow primary in 69.37µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456423Z INFO sui_types::nats_queue: Received checkpoint with seq number 95152 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456424Z INFO sui_types::nats_queue: Received checkpoint with seq number 95156 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456425Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95164 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456425Z INFO sui_types::nats_queue: Received checkpoint with seq number 95157 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456427Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95164: 44635855873 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456428Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95164 with time now 1726138825456 and checkpoint time 1681502969583 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456430Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95165 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456431Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95164 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456431Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456430Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456431Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95159 with time now 1726138825456 and checkpoint time 1681502962457 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456431Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456433Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95160 with time now 1726138825456 and checkpoint time 1681502963500 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456433Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95158 with time now 1726138825456 and checkpoint time 1681502962013 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456435Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456435Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95167 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456437Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456436Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95154 for workflow primary in 95.528µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456437Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95167: 44635853490 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456436Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95155 for workflow primary in 111.528µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456439Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95167 with time now 1726138825456 and checkpoint time 1681502971966 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456439Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95160 for workflow primary in 58.9µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456438Z INFO sui_types::nats_queue: Received checkpoint with seq number 95154 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456441Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95158 for workflow primary in 86.702µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456441Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95159 for workflow primary in 68.098µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456443Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95167 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456442Z INFO sui_types::nats_queue: Received checkpoint with seq number 95155 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456444Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456444Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456445Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456445Z INFO sui_types::nats_queue: Received checkpoint with seq number 95154 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456445Z INFO sui_types::nats_queue: Received checkpoint with seq number 95160 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456446Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95166 for workflow primary +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456447Z INFO sui_types::nats_queue: Received checkpoint with seq number 95155 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456448Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456447Z INFO sui_types::nats_queue: Received checkpoint with seq number 95159 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456449Z INFO sui_types::nats_queue: Received checkpoint with seq number 95160 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456449Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 95166: 44635854479 ms +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456450Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456450Z INFO sui_types::nats_queue: Received checkpoint with seq number 95158 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456450Z INFO sui_types::nats_queue: Received checkpoint with seq number 95159 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456450Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 95166 with time now 1726138825456 and checkpoint time 1681502970977 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456451Z INFO sui_types::nats_queue: Received checkpoint with seq number 95158 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456463Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456467Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95165 with time now 1726138825456 and checkpoint time 1681502970002 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456468Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95164 with time now 1726138825456 and checkpoint time 1681502969583 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456469Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456473Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95164 for workflow primary in 47.749µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456473Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=95166 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456474Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95165 for workflow primary in 56.746µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456478Z INFO sui_types::nats_queue: Received checkpoint with seq number 95165 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456480Z INFO sui_types::nats_queue: Received checkpoint with seq number 95164 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456481Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456484Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95167 with time now 1726138825456 and checkpoint time 1681502971966 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456483Z INFO sui_types::nats_queue: Received checkpoint with seq number 95165 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456486Z INFO sui_types::nats_queue: Received checkpoint with seq number 95164 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456487Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95162 with time now 1726138825456 and checkpoint time 1681502966285 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456489Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95163 with time now 1726138825456 and checkpoint time 1681502967367 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456490Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95161 with time now 1726138825456 and checkpoint time 1681502965864 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456491Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95167 for workflow primary in 55.023µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456492Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95162 for workflow primary in 85.901µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456496Z INFO sui_types::nats_queue: Received checkpoint with seq number 95167 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456497Z INFO sui_types::nats_queue: Received checkpoint with seq number 95162 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456497Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95163 for workflow primary in 90.169µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456497Z INFO sui_types::nats_queue: Received checkpoint with seq number 95167 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456498Z INFO sui_types::nats_queue: Received checkpoint with seq number 95163 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456497Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456498Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95161 for workflow primary in 95.959µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456499Z INFO sui_types::nats_queue: Received checkpoint with seq number 95161 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456500Z INFO sui_types::nats_queue: Received checkpoint with seq number 95162 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456501Z INFO sui_types::nats_queue: Received checkpoint with seq number 95163 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456502Z INFO sui_types::nats_queue: Received checkpoint with seq number 95161 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456521Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: indexed checkpoint 95166 with time now 1726138825456 and checkpoint time 1681502970977 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456532Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95166 for workflow primary in 84.758µs +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456538Z INFO sui_types::nats_queue: Received checkpoint with seq number 95166 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.456542Z INFO sui_types::nats_queue: Received checkpoint with seq number 95166 but expected 85168 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.557136Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.658171Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.759153Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.860336Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:25 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:25.961510Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.061741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.162947Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.264135Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.365341Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.466503Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.567684Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.668848Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.770019Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.871217Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:26 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:26.972378Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.073559Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.173716Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.274886Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.376079Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.477236Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.578110Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.679262Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.780439Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.881609Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:27 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:27.981775Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.082951Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.184108Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.285306Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.350510Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 85168: 44647223649 ms +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.350515Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 85168 with time now 1726138828350 and checkpoint time 1681491604701 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.350544Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=85168 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.351801Z INFO sui_data_ingestion_core::worker_pool: transient worker execution error `Failed to get network total transactions in epoch`: `Indexer failed to read PostgresDB with error: `Record not found`` for checkpoint 85168 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.385906Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.487124Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.588317Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.689537Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.789791Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.891005Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:28 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:28.992246Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.093478Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.194711Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.295968Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.397134Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.498360Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.599553Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.699786Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.801005Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:29 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:29.902233Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.003500Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.104713Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.205960Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.307176Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.408410Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.509611Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.609805Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.711027Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.812217Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:30 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:30.913448Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.014670Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.116190Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.217448Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.318704Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.420102Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.521285Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.622527Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.722752Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.823957Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:31 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:31.925206Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.026422Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.127665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.228888Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.330125Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.431388Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.532589Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.633685Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.734871Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.836105Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:32 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:32.937323Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.038551Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.138805Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.240025Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.341272Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.442495Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.543709Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.644906Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.746415Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.847637Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:33 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:33.948821Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.050033Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.151223Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.252490Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.352832Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.454055Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.555278Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.656471Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.757686Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.858880Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:34 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:34.960077Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.061301Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.162489Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.263736Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.364952Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.466165Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.567417Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.668640Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.770273Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.871503Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:35 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:35.971745Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.072973Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.174206Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.275480Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.376714Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.477941Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.579130Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.680364Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.781591Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.881818Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:36 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:36.983071Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.084288Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.185533Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.285755Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.386989Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.488225Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.589255Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.690487Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.791689Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.892927Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:37 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:37.994150Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.095380Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.196640Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.297856Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.399100Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.500296Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.601500Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.673721Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 85168: 44647233972 ms +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.673728Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 85168 with time now 1726138838673 and checkpoint time 1681491604701 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.673775Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=85168 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.674779Z INFO sui_data_ingestion_core::worker_pool: transient worker execution error `Failed to get network total transactions in epoch`: `Indexer failed to read PostgresDB with error: `Record not found`` for checkpoint 85168 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.701823Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.803002Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:38 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:38.904199Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.005354Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.106545Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.207705Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.308880Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.409975Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.511156Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.612346Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.713499Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.814686Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:39 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:39.915857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.017026Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.118216Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.219371Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.320553Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.420707Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.521880Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.623076Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.724238Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.825432Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:40 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:40.926588Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.026768Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.127927Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.229099Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.330326Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.431513Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.531732Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.632923Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.734159Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.835384Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:41 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:41.936615Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.036865Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.138079Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.239325Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.340537Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.440849Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.542017Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.642904Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.744153Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.845369Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:42 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:42.946614Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.046773Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.147937Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.249115Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.350300Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.451528Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.551766Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.652949Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.754129Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.855315Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:43 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:43.956531Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.057429Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.158610Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.258760Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.360684Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.461824Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.563014Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.664233Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.765385Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.866554Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:44 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:44.967715Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.068917Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.170143Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.271665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.372908Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.474302Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.574857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.676057Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.777243Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.878799Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:45 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:45.980792Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.082054Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.183274Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.284487Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.385059Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.486224Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.586927Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.688114Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.789312Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.890492Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:46 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:46.991679Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.092912Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.194652Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.295871Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.397061Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.498270Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.599020Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.700219Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.801444Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:47 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:47.902643Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.003857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.105064Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.206298Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.307558Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.407782Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.509190Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.610684Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.712302Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.813483Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:48 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:48.914665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.015873Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.117043Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.218241Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.319414Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.420367Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.521581Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.621760Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.722964Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.824135Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:49 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:49.925349Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.025944Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.127131Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.228343Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.329518Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.429720Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.530891Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.632138Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.733325Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.834859Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:50 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:50.936083Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.037271Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.138487Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.239678Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.340881Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.442112Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.543305Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.644535Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.744713Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.846302Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:51 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:51.946914Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.048114Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.149324Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.250497Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.351697Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.452867Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.554052Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.654971Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.756154Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.856790Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:52 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:52.957969Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.059242Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.160433Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.261635Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.362864Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.464057Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.565274Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.666448Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.767667Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.868848Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:53 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:53.970028Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.071234Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.172403Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.273598Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.374544Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.474748Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.575969Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.677155Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.778381Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.879566Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:54 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:54.979810Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.081055Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.182268Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.283495Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.325634Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 85168: 44647250624 ms +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.325640Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 85168 with time now 1726138855325 and checkpoint time 1681491604701 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.325676Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=85168 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.326629Z INFO sui_data_ingestion_core::worker_pool: transient worker execution error `Failed to get network total transactions in epoch`: `Indexer failed to read PostgresDB with error: `Record not found`` for checkpoint 85168 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.383778Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.485289Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.586509Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.686751Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.787978Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.889206Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:55 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:55.990474Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.091691Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.192938Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.294146Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.395382Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.496618Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.597802Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.699055Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.799741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:56 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:56.901413Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.002635Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.103865Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.205123Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.306343Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.407590Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.507791Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.608813Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.710319Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.811515Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:57 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:57.911741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.013019Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.114414Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.215782Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.317185Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.418617Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.520004Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.621427Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.722709Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.823976Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:58 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:58.925179Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.026398Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.126826Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.228219Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.329633Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.430932Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.532331Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.633766Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.735162Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.836588Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:00:59 sui-mainnet-node cargo[3499927]: 2024-09-12T11:00:59.936968Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.038374Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.139765Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.241165Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.342593Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.442899Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.544191Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.645579Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.745994Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.847261Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:00 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:00.948674Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.050101Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.151401Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.252815Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.354218Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.455621Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.557033Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.658334Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.737621Z INFO sui_indexer::db::setup_postgres: DB connection pool size: 100, with idle conn: 100. +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.758844Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.860146Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:01 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:01.961555Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.062827Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.164137Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.265391Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.366754Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.468148Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.569534Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.669857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.771291Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.872559Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:02 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:02.972980Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.074365Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.175688Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.277088Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.378501Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.478833Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.580220Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.681634Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.783029Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.884435Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:03 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:03.984871Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.086263Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.187690Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.289078Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.390494Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.490873Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.592247Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.693651Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.795038Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.896451Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:04 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:04.996814Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.098221Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.199600Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.299997Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.401419Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.502789Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.604195Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.705588Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.805909Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:05 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:05.907336Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.008645Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.109975Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.211363Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.312687Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.413948Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.515255Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.616681Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.718073Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.819324Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:06 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:06.920638Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.022207Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.123555Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.223952Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.325376Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.426766Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.528092Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.629440Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.729852Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.831277Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:07 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:07.932670Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.034058Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.135472Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.235882Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.337316Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.438712Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.540127Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.641514Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.741926Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.843325Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:08 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:08.944727Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.046158Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.147550Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.247969Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.349357Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.450496Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.550741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.652130Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.753557Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.853945Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.939399Z INFO sui_indexer::handlers::checkpoint_handler: checkpoint download lag for cp 85168: 44647265238 ms +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.939408Z INFO sui_indexer::handlers::checkpoint_handler: Indexer lag: downloaded checkpoint 85168 with time now 1726138869939 and checkpoint time 1681491604701 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.939487Z INFO sui_indexer::handlers::checkpoint_handler: Indexing checkpoint data blob checkpoint_seq=85168 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.940990Z INFO sui_data_ingestion_core::worker_pool: transient worker execution error `Failed to get network total transactions in epoch`: `Indexer failed to read PostgresDB with error: `Record not found`` for checkpoint 85168 +Sep 12 13:01:09 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:09.955124Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.056519Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.156920Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.258178Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.359572Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.459990Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.561371Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.662770Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.764166Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.865363Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:10 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:10.966588Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.066861Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.168252Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.269618Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.369998Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.471406Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.572778Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.673998Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.775372Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.876590Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:11 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:11.976913Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.078108Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.179365Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.280676Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.382092Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.483495Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.584671Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.685844Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.787240Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.888665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:12 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:12.990051Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.091476Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.191864Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.293267Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.394695Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.496090Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.597509Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.698807Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.800216Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:13 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:13.901601Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.001911Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.103334Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.204704Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.306116Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.407156Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.508561Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.608918Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.710308Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.811732Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:14 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:14.913119Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.014531Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.114923Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.216497Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.316839Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.418234Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.519665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.621054Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.722473Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.822740Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:15 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:15.924139Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.025563Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.125950Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.227365Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.328757Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.430159Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.531595Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.631993Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.733413Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.834692Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:16 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:16.935890Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.037121Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.138431Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.238857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.340157Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.441572Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.541961Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.643518Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.743946Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.845343Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:17 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:17.946764Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.048147Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.149558Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.249950Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.351353Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.452781Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.554174Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.655505Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.755844Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.857249Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:18 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:18.958513Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.058911Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.160335Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.261718Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.363117Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.464510Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.564846Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.666272Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.767578Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.868000Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:19 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:19.969383Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.070792Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.172187Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.273586Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.374013Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.475404Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.576818Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.678205Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.779607Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.880038Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:20 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:20.981435Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.081857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.183242Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.284667Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.386059Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.487476Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.587903Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.689292Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.790709Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.892095Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:21 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:21.993347Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.094543Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.194783Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.296046Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.397434Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.497845Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.599075Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.700494Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.800923Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:22 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:22.902316Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.003651Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.105038Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.206361Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.307604Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.408159Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.509585Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.609982Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.711397Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.812786Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:23 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:23.914195Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.015630Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.117022Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.218440Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.318842Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.420130Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.521522Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node cargo[3499927]: 2024-09-12T11:01:24.621923Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 95168, pruning watermark: 85168, new updates: 0 +Sep 12 13:01:24 sui-mainnet-node systemd[1]: Stopping sui-indexer.service - Sui indexer... +Sep 12 13:01:24 sui-mainnet-node systemd[1]: sui-indexer.service: Deactivated successfully. +Sep 12 13:01:24 sui-mainnet-node systemd[1]: Stopped sui-indexer.service - Sui indexer. +Sep 12 13:01:24 sui-mainnet-node systemd[1]: sui-indexer.service: Consumed 57.035s CPU time. +Sep 12 13:25:37 sui-mainnet-node systemd[1]: Started sui-indexer.service - Sui indexer. +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: /root/sui/crates/sui-indexer/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: /root/sui/crates/sui-data-ingestion-core/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: /root/sui/crates/sui-types/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: /root/sui/crates/sui-json-rpc/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused macro definition: `debug_print_format` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:99:14 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 99 | macro_rules! debug_print_format { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(unused_macros)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused import: `debug_print_format` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:117:16 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 117 | pub(crate) use debug_print_format; +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused macro definition: `debug_print_internal` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:127:14 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 127 | macro_rules! debug_print_internal { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused import: `debug_print_internal` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:168:16 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 168 | pub(crate) use debug_print_internal; +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused import: `AstDebug` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/typing/expand.rs:12:61 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 12 | shared::{ide::IDEAnnotation, string_utils::debug_print, AstDebug}, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused import: `ast_debug::AstDebug` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/typing/match_analysis.rs:11:9 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 11 | ast_debug::AstDebug, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: fields `match_variant_translation`, `match_translation`, `match_specialization`, `match_work_queue`, `function_translation`, and `eval_order` are never read +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/hlir/translate.rs:122:16 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 121 | pub(super) struct HLIRDebugFlags { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | -------------- fields in this struct +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 122 | pub(super) match_variant_translation: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 123 | pub(super) match_translation: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 124 | pub(super) match_specialization: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 125 | pub(super) match_work_queue: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 126 | pub(super) function_translation: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 127 | pub(super) eval_order: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(dead_code)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: field `debug` is never read +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/hlir/translate.rs:133:9 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 130 | pub(super) struct Context<'env> { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ------- field in this struct +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: ... +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 133 | pub debug: HLIRDebugFlags, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: fields `match_counterexample`, `autocomplete_resolution`, `function_translation`, and `type_elaboration` are never read +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/typing/core.rs:85:16 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 84 | pub(super) struct TypingDebugFlags { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ---------------- fields in this struct +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 85 | pub(super) match_counterexample: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 86 | pub(super) autocomplete_resolution: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 87 | pub(super) function_translation: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 88 | pub(super) type_elaboration: bool, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: field `debug` is never read +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> external-crates/move/crates/move-compiler/src/typing/core.rs:95:16 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 91 | pub struct Context<'env> { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ------- field in this struct +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: ... +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 95 | pub(super) debug: TypingDebugFlags, +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: `move-compiler` (lib) generated 10 warnings (run `cargo fix --lib -p move-compiler` to apply 4 suggestions) +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused import: `ClientOptions` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> crates/sui-config/src/object_storage_config.rs:8:20 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 8 | use object_store::{ClientOptions, DynObjectStore}; +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused imports: `HeaderMap`, `HeaderName`, and `HeaderValue` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> crates/sui-config/src/object_storage_config.rs:9:23 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 9 | use reqwest::header::{HeaderMap, HeaderName, HeaderValue}; +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: `sui-config` (lib) generated 2 warnings (run `cargo fix --lib -p sui-config` to apply 2 suggestions) +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: use of deprecated method `tonic::transport::server::Router::::into_router`: Use `Routes::into_axum_router` instead. +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> consensus/core/src/network/tonic_network.rs:696:14 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 696 | .into_router(); +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(deprecated)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: `consensus-core` (lib) generated 1 warning +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused import: `sui_types::nats_queue::NatsQueueSender` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> crates/sui-data-ingestion-core/src/executor.rs:19:5 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 19 | use sui_types::nats_queue::NatsQueueSender; +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: `sui-data-ingestion-core` (lib) generated 1 warning (run `cargo fix --lib -p sui-data-ingestion-core` to apply 1 suggestion) +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: unused variable: `ccp_digest` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: --> crates/sui-core/src/checkpoints/mod.rs:1106:22 +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: 1106 | if let Some((ccp_digest, ccp_effects)) = consensus_commit_prologue { +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ccp_digest` +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: = note: `#[warn(unused_variables)]` on by default +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: warning: `sui-core` (lib) generated 1 warning +Sep 12 13:25:37 sui-mainnet-node cargo[3519529]: Compiling sui-indexer v1.32.3 (/root/sui/crates/sui-indexer) +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: warning: unused import: `sui_package_resolver::PackageStore` +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: --> crates/sui-indexer/src/handlers/tx_processor.rs:14:5 +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: 14 | use sui_package_resolver::PackageStore; +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: warning: unused import: `sui_package_resolver::Resolver` +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: --> crates/sui-indexer/src/handlers/tx_processor.rs:15:5 +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: 15 | use sui_package_resolver::Resolver; +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: warning: unused import: `sui_types::base_types::SuiAddress` +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: --> crates/sui-indexer/src/handlers/tx_processor.rs:17:5 +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: 17 | use sui_types::base_types::SuiAddress; +Sep 12 13:25:46 sui-mainnet-node cargo[3519529]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:31:48 sui-mainnet-node cargo[3519529]: warning: `sui-indexer` (lib) generated 3 warnings (run `cargo fix --lib -p sui-indexer` to apply 3 suggestions) +Sep 12 13:35:04 sui-mainnet-node systemd[1]: Stopping sui-indexer.service - Sui indexer... +Sep 12 13:35:04 sui-mainnet-node systemd[1]: sui-indexer.service: Deactivated successfully. +Sep 12 13:35:04 sui-mainnet-node systemd[1]: Stopped sui-indexer.service - Sui indexer. +Sep 12 13:35:04 sui-mainnet-node systemd[1]: sui-indexer.service: Consumed 9min 28.040s CPU time. +Sep 12 13:35:04 sui-mainnet-node systemd[1]: Started sui-indexer.service - Sui indexer. +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: /root/sui/crates/sui-data-ingestion-core/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: /root/sui/crates/sui-types/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: /root/sui/crates/sui-indexer/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: /root/sui/crates/sui-json-rpc/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused macro definition: `debug_print_format` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:99:14 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 99 | macro_rules! debug_print_format { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(unused_macros)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `debug_print_format` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:117:16 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 117 | pub(crate) use debug_print_format; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused macro definition: `debug_print_internal` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:127:14 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 127 | macro_rules! debug_print_internal { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `debug_print_internal` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:168:16 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 168 | pub(crate) use debug_print_internal; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `AstDebug` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/typing/expand.rs:12:61 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 12 | shared::{ide::IDEAnnotation, string_utils::debug_print, AstDebug}, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `ast_debug::AstDebug` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/typing/match_analysis.rs:11:9 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 11 | ast_debug::AstDebug, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: fields `match_variant_translation`, `match_translation`, `match_specialization`, `match_work_queue`, `function_translation`, and `eval_order` are never read +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/hlir/translate.rs:122:16 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 121 | pub(super) struct HLIRDebugFlags { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | -------------- fields in this struct +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 122 | pub(super) match_variant_translation: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 123 | pub(super) match_translation: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 124 | pub(super) match_specialization: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 125 | pub(super) match_work_queue: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 126 | pub(super) function_translation: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 127 | pub(super) eval_order: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(dead_code)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: field `debug` is never read +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/hlir/translate.rs:133:9 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 130 | pub(super) struct Context<'env> { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ------- field in this struct +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: ... +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 133 | pub debug: HLIRDebugFlags, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: fields `match_counterexample`, `autocomplete_resolution`, `function_translation`, and `type_elaboration` are never read +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/typing/core.rs:85:16 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 84 | pub(super) struct TypingDebugFlags { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ---------------- fields in this struct +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 85 | pub(super) match_counterexample: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 86 | pub(super) autocomplete_resolution: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 87 | pub(super) function_translation: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 88 | pub(super) type_elaboration: bool, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: field `debug` is never read +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> external-crates/move/crates/move-compiler/src/typing/core.rs:95:16 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 91 | pub struct Context<'env> { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ------- field in this struct +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: ... +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 95 | pub(super) debug: TypingDebugFlags, +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: `move-compiler` (lib) generated 10 warnings (run `cargo fix --lib -p move-compiler` to apply 4 suggestions) +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `ClientOptions` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-config/src/object_storage_config.rs:8:20 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 8 | use object_store::{ClientOptions, DynObjectStore}; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused imports: `HeaderMap`, `HeaderName`, and `HeaderValue` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-config/src/object_storage_config.rs:9:23 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 9 | use reqwest::header::{HeaderMap, HeaderName, HeaderValue}; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: `sui-config` (lib) generated 2 warnings (run `cargo fix --lib -p sui-config` to apply 2 suggestions) +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: use of deprecated method `tonic::transport::server::Router::::into_router`: Use `Routes::into_axum_router` instead. +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> consensus/core/src/network/tonic_network.rs:696:14 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 696 | .into_router(); +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(deprecated)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: `consensus-core` (lib) generated 1 warning +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `sui_types::nats_queue::NatsQueueSender` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-data-ingestion-core/src/executor.rs:19:5 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 19 | use sui_types::nats_queue::NatsQueueSender; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: `sui-data-ingestion-core` (lib) generated 1 warning (run `cargo fix --lib -p sui-data-ingestion-core` to apply 1 suggestion) +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused variable: `ccp_digest` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-core/src/checkpoints/mod.rs:1106:22 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 1106 | if let Some((ccp_digest, ccp_effects)) = consensus_commit_prologue { +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ccp_digest` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(unused_variables)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: `sui-core` (lib) generated 1 warning +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `sui_package_resolver::PackageStore` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-indexer/src/handlers/tx_processor.rs:14:5 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 14 | use sui_package_resolver::PackageStore; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `sui_package_resolver::Resolver` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-indexer/src/handlers/tx_processor.rs:15:5 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 15 | use sui_package_resolver::Resolver; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: unused import: `sui_types::base_types::SuiAddress` +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: --> crates/sui-indexer/src/handlers/tx_processor.rs:17:5 +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: 17 | use sui_types::base_types::SuiAddress; +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: warning: `sui-indexer` (lib) generated 3 warnings (run `cargo fix --lib -p sui-indexer` to apply 3 suggestions) +Sep 12 13:35:05 sui-mainnet-node cargo[3519948]: Compiling sui-indexer v1.32.3 (/root/sui/crates/sui-indexer) +Sep 12 13:37:40 sui-mainnet-node systemd[1]: Stopping sui-indexer.service - Sui indexer... +Sep 12 13:37:41 sui-mainnet-node systemd[1]: sui-indexer.service: Deactivated successfully. +Sep 12 13:37:41 sui-mainnet-node systemd[1]: Stopped sui-indexer.service - Sui indexer. +Sep 12 13:37:41 sui-mainnet-node systemd[1]: sui-indexer.service: Consumed 2min 36.407s CPU time. +Sep 12 13:37:41 sui-mainnet-node systemd[1]: Started sui-indexer.service - Sui indexer. +Sep 12 13:37:41 sui-mainnet-node cargo[3520474]: warning: /root/sui/crates/sui-json-rpc/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:37:41 sui-mainnet-node cargo[3520474]: warning: /root/sui/crates/sui-data-ingestion-core/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:37:41 sui-mainnet-node cargo[3520474]: warning: /root/sui/crates/sui-types/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:37:41 sui-mainnet-node cargo[3520474]: warning: /root/sui/crates/sui-indexer/Cargo.toml: unused manifest key: dependencies.odin.version +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused macro definition: `debug_print_format` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:99:14 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 99 | macro_rules! debug_print_format { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(unused_macros)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `debug_print_format` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:117:16 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 117 | pub(crate) use debug_print_format; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused macro definition: `debug_print_internal` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:127:14 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 127 | macro_rules! debug_print_internal { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `debug_print_internal` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/shared/string_utils.rs:168:16 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 168 | pub(crate) use debug_print_internal; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `AstDebug` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/typing/expand.rs:12:61 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 12 | shared::{ide::IDEAnnotation, string_utils::debug_print, AstDebug}, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `ast_debug::AstDebug` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/typing/match_analysis.rs:11:9 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 11 | ast_debug::AstDebug, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: fields `match_variant_translation`, `match_translation`, `match_specialization`, `match_work_queue`, `function_translation`, and `eval_order` are never read +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/hlir/translate.rs:122:16 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 121 | pub(super) struct HLIRDebugFlags { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | -------------- fields in this struct +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 122 | pub(super) match_variant_translation: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 123 | pub(super) match_translation: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 124 | pub(super) match_specialization: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 125 | pub(super) match_work_queue: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 126 | pub(super) function_translation: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 127 | pub(super) eval_order: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(dead_code)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: field `debug` is never read +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/hlir/translate.rs:133:9 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 130 | pub(super) struct Context<'env> { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ------- field in this struct +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: ... +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 133 | pub debug: HLIRDebugFlags, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: fields `match_counterexample`, `autocomplete_resolution`, `function_translation`, and `type_elaboration` are never read +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/typing/core.rs:85:16 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 84 | pub(super) struct TypingDebugFlags { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ---------------- fields in this struct +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 85 | pub(super) match_counterexample: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 86 | pub(super) autocomplete_resolution: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 87 | pub(super) function_translation: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 88 | pub(super) type_elaboration: bool, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: field `debug` is never read +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> external-crates/move/crates/move-compiler/src/typing/core.rs:95:16 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 91 | pub struct Context<'env> { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ------- field in this struct +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: ... +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 95 | pub(super) debug: TypingDebugFlags, +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: `move-compiler` (lib) generated 10 warnings (run `cargo fix --lib -p move-compiler` to apply 4 suggestions) +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `ClientOptions` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-config/src/object_storage_config.rs:8:20 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 8 | use object_store::{ClientOptions, DynObjectStore}; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused imports: `HeaderMap`, `HeaderName`, and `HeaderValue` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-config/src/object_storage_config.rs:9:23 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 9 | use reqwest::header::{HeaderMap, HeaderName, HeaderValue}; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: `sui-config` (lib) generated 2 warnings (run `cargo fix --lib -p sui-config` to apply 2 suggestions) +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: use of deprecated method `tonic::transport::server::Router::::into_router`: Use `Routes::into_axum_router` instead. +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> consensus/core/src/network/tonic_network.rs:696:14 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 696 | .into_router(); +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(deprecated)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: `consensus-core` (lib) generated 1 warning +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `sui_types::nats_queue::NatsQueueSender` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-data-ingestion-core/src/executor.rs:19:5 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 19 | use sui_types::nats_queue::NatsQueueSender; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: `sui-data-ingestion-core` (lib) generated 1 warning (run `cargo fix --lib -p sui-data-ingestion-core` to apply 1 suggestion) +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused variable: `ccp_digest` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-core/src/checkpoints/mod.rs:1106:22 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 1106 | if let Some((ccp_digest, ccp_effects)) = consensus_commit_prologue { +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ccp_digest` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(unused_variables)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: `sui-core` (lib) generated 1 warning +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `sui_package_resolver::PackageStore` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-indexer/src/handlers/tx_processor.rs:14:5 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 14 | use sui_package_resolver::PackageStore; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: = note: `#[warn(unused_imports)]` on by default +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `sui_package_resolver::Resolver` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-indexer/src/handlers/tx_processor.rs:15:5 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 15 | use sui_package_resolver::Resolver; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: unused import: `sui_types::base_types::SuiAddress` +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: --> crates/sui-indexer/src/handlers/tx_processor.rs:17:5 +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: 17 | use sui_types::base_types::SuiAddress; +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: warning: `sui-indexer` (lib) generated 3 warnings (run `cargo fix --lib -p sui-indexer` to apply 3 suggestions) +Sep 12 13:37:42 sui-mainnet-node cargo[3520474]: Compiling sui-indexer v1.32.3 (/root/sui/crates/sui-indexer) +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: Finished `release` profile [optimized + debuginfo] target(s) in 3m 51s +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: Running `/root/sui/target/release/sui-indexer --db-url 'postgres://postgres:postgres@localhost/sui_indexer_v2' --rpc-client-url 'http://0.0.0.0:9000' --fullnode-sync-worker --reset-db` +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:32.951608Z WARN sui_indexer: WARNING: Sui indexer is still experimental and we expect occasional breaking changes that require backfills. +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:32.951715Z INFO sui_indexer: Parsed indexer config: IndexerConfig { +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: db_url: Some( +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: Secret([REDACTED alloc::string::String]), +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: ), +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: db_user_name: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: db_password: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: db_host: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: db_port: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: db_name: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: rpc_client_url: "http://0.0.0.0:9000", +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: remote_store_url: Some( +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: "https://checkpoints.mainnet.sui.io", +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: ), +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: client_metric_host: "0.0.0.0", +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: client_metric_port: 9184, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: rpc_server_url: "0.0.0.0", +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: rpc_server_port: 9000, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: reset_db: true, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: fullnode_sync_worker: true, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: rpc_server_worker: false, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: data_ingestion_path: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: name_service_package_address: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: name_service_registry_id: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: name_service_reverse_registry_id: None, +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: } +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:32.951800Z WARN sui_indexer::metrics: Failed to convert full node url http://0.0.0.0:9000 to a shorter version +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:32.951810Z INFO sui_indexer::metrics: Starting prometheus server with labels: {"indexer_fullnode": "unknown_url"} +Sep 12 13:41:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:32.954521Z INFO async_nats: event: connected +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.339265Z INFO sui_indexer::db::setup_postgres: Postgres database connection pool is created at postgres://postgres:postgres@localhost/sui_indexer_v2 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.339727Z INFO sui_indexer::db::setup_postgres: Resetting PG database ... +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.436418Z INFO sui_indexer::db::setup_postgres: Dropped all tables. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.437832Z INFO sui_indexer::db::setup_postgres: Dropped all procedures. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.438450Z INFO sui_indexer::db::setup_postgres: Dropped all functions. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.440543Z INFO sui_indexer::db::setup_postgres: Created __diesel_schema_migrations table. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.767319Z INFO sui_indexer::db::setup_postgres: Reset database complete. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.767328Z INFO sui_indexer::db::setup_postgres: Reset Postgres database complete. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.767540Z INFO sui_indexer::db::setup_postgres: DB connection pool size: 100, with idle conn: 99. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.769394Z INFO sui_indexer::store::pg_partition_manager: Found 4 tables with partitions : [{"events": (0, 0), "objects_history": (0, 0), "objects_version": (0, 99), "transactions": (0, 0)}] +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.769477Z INFO sui_indexer::indexer: Sui Indexer Writer (version "1.32.3") started... +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.769482Z INFO sui_indexer::handlers::objects_snapshot_processor: Starting object snapshot processor... +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.770452Z INFO sui_indexer::indexer: Starting indexer pruner with epochs to keep: 1 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.770490Z INFO sui_indexer::handlers::objects_snapshot_processor: Starting objects snapshot committer... +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.771603Z INFO sui_indexer::store::pg_partition_manager: Found 4 tables with partitions : [{"events": (0, 0), "objects_history": (0, 0), "objects_version": (0, 99), "transactions": (0, 0)}] +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.771964Z INFO sui_types::nats_queue: Nats queue init checkpoint: 56614153 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.771968Z INFO sui_types::nats_queue: Nats notifications queue init checkpoint: 56614153 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.771974Z INFO sui_indexer::indexer: Starting data ingestion executor... +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.771984Z INFO sui_indexer::handlers::committer: Indexer checkpoint commit task started... +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.771986Z INFO sui_indexer::handlers::committer: Using checkpoint commit batch size 100 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.772204Z INFO sui_data_ingestion_core::worker_pool: Starting indexing pipeline primary with concurrency 200. Current watermark is 56614153. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.772204Z INFO sui_data_ingestion_core::worker_pool: Starting indexing pipeline object_snapshot with concurrency 200. Current watermark is 0. +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.772353Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 0 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.894569Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 0, pruning watermark: 0, new updates: 0 +Sep 12 13:41:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:33.995586Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 0, pruning watermark: 0, new updates: 0 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.096850Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 0, pruning watermark: 0, new updates: 0 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.197631Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 0, pruning watermark: 0, new updates: 0 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.299487Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 0, pruning watermark: 0, new updates: 4 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301078Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 3 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301080Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 0 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301089Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 1 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301126Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301126Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301124Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 2 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.301141Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.302371Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 9. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.302531Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 3 for workflow object_snapshot in 1.447546ms +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.303290Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 2 for workflow object_snapshot in 2.158915ms +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.303423Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 1 for workflow object_snapshot in 2.328532ms +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.304723Z INFO sui_types::object::bounded_visitor: Using default value for 'MAX_ANNOTATED_VALUE_SIZE' -- max bound: 1048576 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.330787Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 0 for workflow object_snapshot in 29.699977ms +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.331033Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 4 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.432620Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4, pruning watermark: 4, new updates: 32 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433068Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 7 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433086Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433087Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 22 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433099Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433105Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 7 for workflow object_snapshot in 29.344µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433111Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 4 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433119Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433120Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 22 for workflow object_snapshot in 28.312µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433135Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 4 for workflow object_snapshot in 22.232µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433139Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 8 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433143Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 6 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433147Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433145Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 5 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433150Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433159Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 8 for workflow object_snapshot in 17.683µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433161Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 6 for workflow object_snapshot in 16.18µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433163Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 9 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433165Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 24 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433167Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433171Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433174Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433176Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 9 for workflow object_snapshot in 11.742µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433178Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 24 for workflow object_snapshot in 11.061µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433173Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 26 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433183Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 23 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433185Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 10 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433188Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433189Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433190Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433196Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 23 for workflow object_snapshot in 11.041µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433195Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 35 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433201Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 10 for workflow object_snapshot in 14.568µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433199Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 5 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433202Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 30 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433201Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 5 for workflow object_snapshot in 50.775µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433208Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433208Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 26 for workflow object_snapshot in 27.25µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433211Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 11 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433211Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 25 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433212Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433212Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 32 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433216Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 33 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433217Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433217Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 30 for workflow object_snapshot in 13.355µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433222Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 27 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433223Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433223Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433228Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433228Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433229Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 11 for workflow object_snapshot in 15.539µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433233Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 35 for workflow object_snapshot in 33.302µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433235Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 12 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433235Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 11 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433238Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 27 for workflow object_snapshot in 14.117µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433241Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433242Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 28 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433242Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 32 for workflow object_snapshot in 27.151µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433243Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 31 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433247Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433246Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 33 for workflow object_snapshot in 28.444µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433246Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 25 for workflow object_snapshot in 32.16µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433249Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 12 for workflow object_snapshot in 11.992µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433250Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433250Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 12 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433253Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 13 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433249Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 34 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433254Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 17 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433253Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 29 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433256Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 28 for workflow object_snapshot in 13.024µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433257Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433259Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433260Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433262Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 19 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433263Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 31 for workflow object_snapshot in 17.213µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433263Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 13 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433263Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 15 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433264Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433267Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433269Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 29 for workflow object_snapshot in 13.736µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433269Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 17 for workflow object_snapshot in 14.096µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433269Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 18 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433270Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 13 for workflow object_snapshot in 15.73µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433274Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433275Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 16 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433275Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 20 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433275Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 19 for workflow object_snapshot in 11.932µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433276Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433279Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 21 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433280Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433282Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 14 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433284Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 34 for workflow object_snapshot in 28.714µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433287Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433287Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433289Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 18 for workflow object_snapshot in 17.373µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433290Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433291Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 20 for workflow object_snapshot in 14.397µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433295Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 15 for workflow object_snapshot in 29.365µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433296Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 16 for workflow object_snapshot in 19.617µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433296Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 14 for workflow object_snapshot in 13.245µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433296Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 14 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433308Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 21 for workflow object_snapshot in 27.331µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433363Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 21 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.433382Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 36 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.533770Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 36, pruning watermark: 36, new updates: 0 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.635620Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 36, pruning watermark: 36, new updates: 200 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636014Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 56 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636027Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 45 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636033Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 57 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636041Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636041Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636043Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636048Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 79 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636056Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 45 for workflow object_snapshot in 24.796µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636057Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636063Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 36 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636065Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 57 for workflow object_snapshot in 28.654µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636069Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 80 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636072Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636074Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636075Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 79 for workflow object_snapshot in 22.312µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636078Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 58 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636075Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 90 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636082Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636083Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 80 for workflow object_snapshot in 12.213µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636081Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 56 for workflow object_snapshot in 57.998µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636085Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 91 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636086Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636088Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 58 for workflow object_snapshot in 8.916µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636089Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636091Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 46 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636093Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 59 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636094Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 36 for workflow object_snapshot in 30.106µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636096Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 91 for workflow object_snapshot in 9.187µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636096Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636099Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 37 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636099Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 92 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636099Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 51 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636102Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 59 for workflow object_snapshot in 7.895µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636103Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636104Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636103Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 90 for workflow object_snapshot in 23.654µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636107Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636107Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 60 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636109Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 81 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636110Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636115Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636115Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 92 for workflow object_snapshot in 14.687µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636118Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 93 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636118Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 60 for workflow object_snapshot in 10.23µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636119Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 37 for workflow object_snapshot in 18.535µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636122Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636124Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 38 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636124Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 81 for workflow object_snapshot in 14.066µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636127Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 61 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636127Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 82 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636126Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636129Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636126Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 53 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636128Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 46 for workflow object_snapshot in 34.284µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636130Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636130Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636132Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 93 for workflow object_snapshot in 12.935µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636136Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 61 for workflow object_snapshot in 7.764µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636136Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 94 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636135Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 54 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636136Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636138Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 62 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636138Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 82 for workflow object_snapshot in 10.259µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636138Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 38 for workflow object_snapshot in 13.024µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636139Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636141Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636143Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 83 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636143Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636146Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 94 for workflow object_snapshot in 8.746µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636146Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636148Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 95 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636149Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 62 for workflow object_snapshot in 9.838µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636151Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636152Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 63 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636152Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 53 for workflow object_snapshot in 22.112µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636151Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 51 for workflow object_snapshot in 48.841µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636153Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 83 for workflow object_snapshot in 9.387µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636152Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 55 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636155Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636156Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 39 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636157Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 95 for workflow object_snapshot in 7.634µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636157Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 52 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636162Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636162Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636164Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 54 for workflow object_snapshot in 26.199µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636164Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 47 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636170Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 52 for workflow object_snapshot in 11.01µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636170Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 39 for workflow object_snapshot in 12.133µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636169Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 84 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636171Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 63 for workflow object_snapshot in 18.113µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636173Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 98 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636173Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636175Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 72 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636175Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636175Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 67 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636175Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 40 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636179Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636180Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636181Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636181Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636182Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 84 for workflow object_snapshot in 11.12µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636185Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 85 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636186Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636187Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 40 for workflow object_snapshot in 10.289µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636188Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 67 for workflow object_snapshot in 11.592µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636188Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636189Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 72 for workflow object_snapshot in 13.264µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636190Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 41 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636189Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 47 for workflow object_snapshot in 23.373µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636192Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 73 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636192Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 66 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636194Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636194Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636194Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 98 for workflow object_snapshot in 18.745µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636196Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 85 for workflow object_snapshot in 9.588µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636198Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636200Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 73 for workflow object_snapshot in 6.633µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636200Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 41 for workflow object_snapshot in 8.416µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636200Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 86 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636200Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 96 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636196Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 71 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636202Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 74 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636203Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636200Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 65 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636206Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636206Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 55 for workflow object_snapshot in 49.944µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636207Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 66 for workflow object_snapshot in 12.974µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636209Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 86 for workflow object_snapshot in 7.975µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636209Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636211Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 74 for workflow object_snapshot in 6.532µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636210Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 49 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636212Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 42 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636213Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 75 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636213Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 50 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636215Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636217Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636218Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636219Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 87 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636219Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636221Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 42 for workflow object_snapshot in 8.205µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636222Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636220Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 64 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636219Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636224Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 43 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636223Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 96 for workflow object_snapshot in 19.756µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636225Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 75 for workflow object_snapshot in 10.79µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636226Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 49 for workflow object_snapshot in 13.605µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636228Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 87 for workflow object_snapshot in 7.764µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636229Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636228Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 50 for workflow object_snapshot in 13.595µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636231Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 48 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636231Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 69 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636227Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636234Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 88 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636235Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 78 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636235Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 43 for workflow object_snapshot in 10.439µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636235Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 77 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636237Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636238Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636239Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 44 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636241Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636242Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636243Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636239Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 97 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636243Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 78 for workflow object_snapshot in 6.803µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636243Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 88 for workflow object_snapshot in 7.885µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636245Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636244Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 65 for workflow object_snapshot in 39.964µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636246Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 89 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636245Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636250Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636255Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 44 for workflow object_snapshot in 14.848µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636257Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 89 for workflow object_snapshot in 9.488µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636257Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 77 for workflow object_snapshot in 19.787µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636260Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 69 for workflow object_snapshot in 26.82µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636260Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 70 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636263Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 76 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636266Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 68 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636267Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 48 for workflow object_snapshot in 34.825µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636268Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 71 for workflow object_snapshot in 64.19µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636263Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636273Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 37 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636273Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 64 for workflow object_snapshot in 48.741µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636275Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636275Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636281Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636287Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 68 for workflow object_snapshot in 19.667µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636288Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 76 for workflow object_snapshot in 23.615µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636300Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 97 for workflow object_snapshot in 55.374µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636302Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 38 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636308Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 70 for workflow object_snapshot in 44.673µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636310Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 99 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636328Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636334Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 39 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636340Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 123 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636343Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 99 for workflow object_snapshot in 27.822µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636344Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636348Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 136 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636348Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 132 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636347Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 135 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636349Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 133 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636349Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 129 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636351Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 134 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636352Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 123 for workflow object_snapshot in 10.23µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636352Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 141 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636355Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636355Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 40 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636355Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 100 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636357Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636359Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636360Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636359Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636360Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636361Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636363Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636364Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 100 for workflow object_snapshot in 7.734µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636366Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 136 for workflow object_snapshot in 16.762µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636368Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 101 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636369Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 142 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636370Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 134 for workflow object_snapshot in 17.433µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636371Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636372Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 41 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636373Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 135 for workflow object_snapshot in 21.77µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636374Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636374Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 138 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636375Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 141 for workflow object_snapshot in 21.38µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636375Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 133 for workflow object_snapshot in 23.594µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636377Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 101 for workflow object_snapshot in 8.125µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636377Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 132 for workflow object_snapshot in 26.79µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636379Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636379Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 139 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636379Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 102 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636380Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 144 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636381Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 130 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636382Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636383Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636383Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 142 for workflow object_snapshot in 12.864µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636385Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636386Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636387Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 138 for workflow object_snapshot in 11.732µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636388Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 102 for workflow object_snapshot in 7.173µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636386Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 129 for workflow object_snapshot in 34.084µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636390Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 103 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636392Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 137 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636393Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636392Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 139 for workflow object_snapshot in 11.812µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636394Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 144 for workflow object_snapshot in 12.934µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636395Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 124 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636396Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 130 for workflow object_snapshot in 13.576µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636396Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 140 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636397Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636398Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 103 for workflow object_snapshot in 7.414µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636398Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 143 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636399Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 131 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636401Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 104 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636401Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636403Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636404Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636403Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636404Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636410Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 104 for workflow object_snapshot in 8.496µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636411Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 140 for workflow object_snapshot in 12.433µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636414Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 114 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636415Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 143 for workflow object_snapshot in 14.888µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636416Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 137 for workflow object_snapshot in 22.852µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636418Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 131 for workflow object_snapshot in 17.753µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636419Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 109 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636419Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 124 for workflow object_snapshot in 21.39µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636421Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636412Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 105 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636425Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 125 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636430Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636431Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 114 for workflow object_snapshot in 15.72µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636432Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636434Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636435Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 147 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636436Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 110 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636432Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 148 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636438Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 112 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636440Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636440Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636440Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 109 for workflow object_snapshot in 19.747µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636443Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 150 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636439Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 152 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636443Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 145 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636444Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 107 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636445Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 108 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636444Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 105 for workflow object_snapshot in 20.418µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636447Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636447Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 125 for workflow object_snapshot in 20.408µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636450Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636450Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636449Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 115 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636451Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 147 for workflow object_snapshot in 14.668µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636451Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636452Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636466Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 150 for workflow object_snapshot in 21.85µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636451Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 110 for workflow object_snapshot in 13.656µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636468Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636468Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 113 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636470Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 149 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636470Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636470Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 126 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636470Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 119 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636472Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 42 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636472Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 106 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636472Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 108 for workflow object_snapshot in 25.608µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636451Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 151 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636475Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636469Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 146 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636476Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 107 for workflow object_snapshot in 29.395µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636475Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 111 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636478Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636478Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636478Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636479Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636487Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 149 for workflow object_snapshot in 15.288µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636488Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636490Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 127 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636489Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 148 for workflow object_snapshot in 50.595µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636490Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 145 for workflow object_snapshot in 43.611µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636492Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636494Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636493Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636493Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 152 for workflow object_snapshot in 47.759µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636495Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 113 for workflow object_snapshot in 24.075µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636495Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 106 for workflow object_snapshot in 21.139µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636497Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 112 for workflow object_snapshot in 55.484µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636500Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 128 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636501Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 165 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636501Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 161 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636500Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 126 for workflow object_snapshot in 27.912µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636501Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 111 for workflow object_snapshot in 22.963µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636503Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 163 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636499Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636504Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 43 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636505Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636505Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 164 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636507Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636506Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 115 for workflow object_snapshot in 54.492µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636507Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636507Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 119 for workflow object_snapshot in 33.843µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636508Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 127 for workflow object_snapshot in 16.321µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636509Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636509Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636508Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 159 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636507Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 156 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636511Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 116 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636511Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 120 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636516Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 165 for workflow object_snapshot in 14.166µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636517Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636512Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 160 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636517Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 44 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636518Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636517Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636519Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 161 for workflow object_snapshot in 16.05µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636518Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 151 for workflow object_snapshot in 42.82µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636519Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 164 for workflow object_snapshot in 12.734µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636520Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 128 for workflow object_snapshot in 18.204µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636518Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 158 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636520Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 166 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636523Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 157 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636525Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 169 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636525Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 173 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636525Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 117 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636521Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 163 for workflow object_snapshot in 17.002µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636526Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 171 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636527Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636528Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636529Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 170 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636529Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636530Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636530Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636531Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 48 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636531Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636531Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 162 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636532Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 172 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636532Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 116 for workflow object_snapshot in 18.956µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636533Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636533Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 159 for workflow object_snapshot in 21.51µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636534Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636534Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 167 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636537Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636537Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 118 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636537Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 120 for workflow object_snapshot in 23.334µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636536Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636539Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 169 for workflow object_snapshot in 12.563µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636539Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 168 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636540Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 154 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636541Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 121 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636542Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636542Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 64 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636542Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636538Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636543Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636546Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 117 for workflow object_snapshot in 19.296µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636546Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 166 for workflow object_snapshot in 23.774µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636547Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636547Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636548Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 155 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636548Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636548Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 156 for workflow object_snapshot in 36.028µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636548Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 146 for workflow object_snapshot in 69.74µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636551Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 122 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636552Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 174 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636552Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 173 for workflow object_snapshot in 25.147µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636554Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636556Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636556Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 153 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636556Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 171 for workflow object_snapshot in 28.083µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636557Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 68 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636558Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 178 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636558Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 177 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636560Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636562Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 176 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636564Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636562Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 167 for workflow object_snapshot in 25.297µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636566Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 168 for workflow object_snapshot in 25.217µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636566Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 118 for workflow object_snapshot in 27.702µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636568Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636569Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 70 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636569Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 155 for workflow object_snapshot in 18.915µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636569Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 121 for workflow object_snapshot in 26.259µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636569Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636570Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 157 for workflow object_snapshot in 45.175µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636569Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 170 for workflow object_snapshot in 38.822µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636568Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 179 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636570Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 175 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636574Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636572Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 180 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636569Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 162 for workflow object_snapshot in 35.606µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636573Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 160 for workflow object_snapshot in 53.791µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636575Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 172 for workflow object_snapshot in 41.838µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636577Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 174 for workflow object_snapshot in 24.526µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636579Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 181 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636579Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 153 for workflow object_snapshot in 20.618µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636580Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 154 for workflow object_snapshot in 37.801µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636581Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 99 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636581Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 158 for workflow object_snapshot in 58.85µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636582Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 183 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636582Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 182 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636584Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 184 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636584Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 122 for workflow object_snapshot in 31.579µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636585Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636587Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636587Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 178 for workflow object_snapshot in 27.712µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636587Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636588Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 176 for workflow object_snapshot in 24.225µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636591Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 186 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636591Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636590Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 177 for workflow object_snapshot in 29.876µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636592Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636593Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636595Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 100 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636597Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636598Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 185 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636595Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636601Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 179 for workflow object_snapshot in 28.753µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636602Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 184 for workflow object_snapshot in 16.581µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636604Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636605Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 188 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636605Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 183 for workflow object_snapshot in 21.821µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636605Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 187 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636607Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 189 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636607Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 101 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636609Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636609Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 186 for workflow object_snapshot in 16.841µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636610Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 190 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636610Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 181 for workflow object_snapshot in 28.563µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636611Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636613Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 180 for workflow object_snapshot in 36.979µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636612Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 191 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636614Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636615Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 188 for workflow object_snapshot in 9.658µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636615Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 185 for workflow object_snapshot in 15.399µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636616Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636614Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 182 for workflow object_snapshot in 29.155µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636617Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 192 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636617Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 189 for workflow object_snapshot in 9.218µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636617Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 175 for workflow object_snapshot in 42.519µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636619Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 193 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636621Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636622Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 102 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636623Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 187 for workflow object_snapshot in 15.549µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636624Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636625Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 190 for workflow object_snapshot in 14.577µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636625Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636630Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 194 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636633Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 195 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636632Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 191 for workflow object_snapshot in 17.242µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636634Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 196 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636634Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 103 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636636Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 192 for workflow object_snapshot in 17.343µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636638Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636639Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636640Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636640Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 193 for workflow object_snapshot in 18.956µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636640Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 198 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636642Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 199 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636644Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 196 for workflow object_snapshot in 9.377µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636644Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 197 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636645Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636645Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 104 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636646Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 200 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636646Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636649Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 201 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636651Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636651Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636652Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 198 for workflow object_snapshot in 9.928µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636652Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 195 for workflow object_snapshot in 17.884µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636653Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 199 for workflow object_snapshot in 10.449µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636653Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 202 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636657Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 105 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636657Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636658Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 200 for workflow object_snapshot in 11.332µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636660Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636662Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 197 for workflow object_snapshot in 16.21µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636664Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 194 for workflow object_snapshot in 31.338µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636668Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 106 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636669Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 202 for workflow object_snapshot in 13.726µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636672Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 204 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636673Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 201 for workflow object_snapshot in 21.741µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636678Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 111 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636682Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 203 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636682Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636686Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 115 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636686Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 205 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636687Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636688Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 210 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636690Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636691Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 207 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636694Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 116 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636694Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636695Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 203 for workflow object_snapshot in 11.452µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636695Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 204 for workflow object_snapshot in 20.198µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636699Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 213 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636702Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636697Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636704Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 117 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636703Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 210 for workflow object_snapshot in 14.076µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636702Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 208 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636709Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 205 for workflow object_snapshot in 21.861µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636711Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 211 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636712Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 207 for workflow object_snapshot in 19.146µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636712Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 213 for workflow object_snapshot in 12.533µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636712Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636715Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 209 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636712Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 212 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636717Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636718Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 206 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636718Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 214 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636720Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636722Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636722Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636722Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 215 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636725Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636725Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 208 for workflow object_snapshot in 20.438µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636727Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 216 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636728Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 211 for workflow object_snapshot in 14.727µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636729Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 214 for workflow object_snapshot in 9.689µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636729Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636730Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 212 for workflow object_snapshot in 14.046µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636731Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636731Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 206 for workflow object_snapshot in 12.103µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636734Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 217 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636734Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 209 for workflow object_snapshot in 18.505µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636735Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 218 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636740Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636741Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 219 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636741Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636740Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 215 for workflow object_snapshot in 15.96µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636741Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 216 for workflow object_snapshot in 13.005µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636744Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 220 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636745Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636747Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 221 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636749Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636750Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 217 for workflow object_snapshot in 14.747µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636750Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 218 for workflow object_snapshot in 13.265µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636752Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 219 for workflow object_snapshot in 10.059µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636752Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636753Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 222 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636757Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 220 for workflow object_snapshot in 12.283µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636759Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 223 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636762Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636762Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 221 for workflow object_snapshot in 13.976µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636765Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636773Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 224 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636775Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 223 for workflow object_snapshot in 14.748µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636777Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636779Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 222 for workflow object_snapshot in 22.902µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636786Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 224 for workflow object_snapshot in 11.641µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636808Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 118 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636852Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 121 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636859Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 225 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636865Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636865Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 226 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636871Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636875Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 122 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636876Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 225 for workflow object_snapshot in 14.888µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636880Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 227 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636880Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 226 for workflow object_snapshot in 13.294µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636884Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636884Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 228 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636887Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 175 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636888Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636889Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 227 for workflow object_snapshot in 7.915µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636889Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 231 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636892Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 230 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636895Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 228 for workflow object_snapshot in 9.828µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636895Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636896Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636896Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 229 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636902Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 230 for workflow object_snapshot in 8.847µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636906Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636907Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 231 for workflow object_snapshot in 15.92µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636926Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 187 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636926Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 233 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636926Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 229 for workflow object_snapshot in 26.159µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636930Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 232 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636930Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636935Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636939Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 233 for workflow object_snapshot in 10.96µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636944Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 232 for workflow object_snapshot in 12.834µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636945Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 235 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636948Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 190 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636951Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 234 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636953Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636957Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636962Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 191 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636968Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 234 for workflow object_snapshot in 14.728µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636968Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 235 for workflow object_snapshot in 20.629µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636972Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 192 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636985Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 193 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.636996Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 194 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637007Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 201 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637036Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 203 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637052Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 204 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637062Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 205 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637071Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 206 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637083Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 209 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637093Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 215 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637120Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 216 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637133Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 217 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637143Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 218 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637153Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 219 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637165Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 220 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637175Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 221 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637185Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 222 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637201Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 224 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637211Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 225 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637223Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 226 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637234Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 227 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637243Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 228 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637255Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 229 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637263Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 232 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637272Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 234 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637280Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 235 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.637289Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 236 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738075Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 236, pruning watermark: 236, new updates: 2 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738144Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 237 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738152Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 236 for workflow object_snapshot +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738155Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738160Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738171Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 237 for workflow object_snapshot in 21.81µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738176Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 236 for workflow object_snapshot in 22.011µs +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.738201Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 238 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.838970Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 238, pruning watermark: 238, new updates: 0 +Sep 12 13:41:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:34.939905Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 238, pruning watermark: 238, new updates: 0 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041165Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 238, pruning watermark: 238, new updates: 200 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041258Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 239 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041258Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 238 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041273Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 245 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041274Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041275Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041282Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041301Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 238 for workflow object_snapshot in 36.538µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041301Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 245 for workflow object_snapshot in 24.456µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041304Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 239 for workflow object_snapshot in 39.414µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041308Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 240 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041310Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 242 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041312Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 241 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041317Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041317Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041321Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041327Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 243 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041333Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 240 for workflow object_snapshot in 22.162µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041333Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 242 for workflow object_snapshot in 19.867µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041331Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 239 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041339Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 241 for workflow object_snapshot in 24.927µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041340Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 244 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041347Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041346Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041346Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 253 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041355Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 249 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041363Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041363Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 244 for workflow object_snapshot in 21.039µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041364Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041363Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 251 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041370Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 252 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041373Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 243 for workflow object_snapshot in 40.566µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041377Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041379Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 249 for workflow object_snapshot in 21.29µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041381Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 240 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041385Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 246 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041385Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 253 for workflow object_snapshot in 35.327µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041389Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 252 for workflow object_snapshot in 16.41µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041394Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041396Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 254 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041396Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 247 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041398Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 250 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041404Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041405Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041406Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 246 for workflow object_snapshot in 18.735µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041417Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 254 for workflow object_snapshot in 18.896µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041418Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041419Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 247 for workflow object_snapshot in 20.308µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041424Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 248 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041429Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 257 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041430Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 258 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041431Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041432Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 256 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041437Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041437Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 250 for workflow object_snapshot in 34.675µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041438Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041440Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041444Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 248 for workflow object_snapshot in 18.024µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041446Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 259 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041446Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041451Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 257 for workflow object_snapshot in 19.296µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041452Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041465Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 258 for workflow object_snapshot in 32.33µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041468Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 261 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041471Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 241 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041472Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 262 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041473Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 263 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041474Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 264 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041477Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041479Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 259 for workflow object_snapshot in 31.97µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041477Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 260 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041479Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 256 for workflow object_snapshot in 41.958µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041481Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041480Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 251 for workflow object_snapshot in 112.089µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041485Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041488Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 243 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041487Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 255 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041491Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 261 for workflow object_snapshot in 19.978µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041491Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041494Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041493Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 265 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041494Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 263 for workflow object_snapshot in 18.986µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041499Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041501Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 246 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041503Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 264 for workflow object_snapshot in 25.688µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041505Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 255 for workflow object_snapshot in 15.579µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041509Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 266 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041510Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 260 for workflow object_snapshot in 28.704µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041511Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041514Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 247 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041516Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 262 for workflow object_snapshot in 42.229µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041518Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041526Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 268 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041525Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 267 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041528Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 270 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041529Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 248 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041531Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 266 for workflow object_snapshot in 19.556µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041533Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041534Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041535Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041535Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 265 for workflow object_snapshot in 38.992µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041534Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 269 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041544Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 251 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041544Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 268 for workflow object_snapshot in 16.391µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041547Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 270 for workflow object_snapshot in 16.1µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041547Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 267 for workflow object_snapshot in 18.996µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041547Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041553Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 271 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041555Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 272 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041560Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041562Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 255 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041565Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 269 for workflow object_snapshot in 26.9µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041573Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041575Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 271 for workflow object_snapshot in 19.006µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041581Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 273 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041586Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 275 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041588Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041590Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 272 for workflow object_snapshot in 32.461µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041594Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041597Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 274 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041597Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 273 for workflow object_snapshot in 14.076µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041604Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 275 for workflow object_snapshot in 15.89µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041607Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 260 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041610Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041609Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 276 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041611Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 279 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041611Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 278 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041612Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 277 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041618Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041619Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041621Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041621Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041621Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 274 for workflow object_snapshot in 21.971µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041624Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 262 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041626Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 279 for workflow object_snapshot in 13.936µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041634Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 280 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041634Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 278 for workflow object_snapshot in 20.318µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041637Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 265 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041637Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 276 for workflow object_snapshot in 25.879µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041637Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 277 for workflow object_snapshot in 22.783µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041640Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041651Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 280 for workflow object_snapshot in 15.018µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041653Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 267 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041661Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 283 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041661Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 281 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041666Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041668Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 269 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041669Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041677Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 283 for workflow object_snapshot in 14.117µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041679Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 281 for workflow object_snapshot in 16.05µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041680Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 282 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041681Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 271 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041686Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041686Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 284 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041689Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 285 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041691Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041696Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041697Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 272 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041699Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 282 for workflow object_snapshot in 17.012µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041702Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 284 for workflow object_snapshot in 14.517µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041706Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 285 for workflow object_snapshot in 15.739µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041707Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 287 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041713Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 273 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041714Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 288 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041715Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041722Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 286 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041723Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041726Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 289 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041727Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 274 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041729Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041729Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 290 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041730Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 287 for workflow object_snapshot in 20.889µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041731Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041742Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 276 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041741Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 291 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041742Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 289 for workflow object_snapshot in 15.179µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041738Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 288 for workflow object_snapshot in 20.699µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041746Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 286 for workflow object_snapshot in 22.121µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041752Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041757Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041759Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 280 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041766Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 291 for workflow object_snapshot in 21.289µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041772Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 281 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041772Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 292 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041775Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 290 for workflow object_snapshot in 43.401µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041779Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041784Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 295 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041786Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 282 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041790Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 292 for workflow object_snapshot in 15.419µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041790Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041795Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 293 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041799Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 294 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041799Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 295 for workflow object_snapshot in 13.736µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041800Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 284 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041803Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041805Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041811Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 294 for workflow object_snapshot in 10.89µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041816Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 285 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041816Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 296 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041820Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 293 for workflow object_snapshot in 22.612µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041824Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 297 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041825Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041828Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 299 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041828Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 286 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041831Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041834Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041834Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 298 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041834Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 301 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041836Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 296 for workflow object_snapshot in 18.554µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041839Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 300 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041841Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 290 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041841Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 297 for workflow object_snapshot in 14.788µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041841Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 299 for workflow object_snapshot in 11.442µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041842Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041843Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041853Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 292 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041854Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 302 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041856Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041856Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 298 for workflow object_snapshot in 19.376µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041858Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 301 for workflow object_snapshot in 21.149µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041862Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041868Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 293 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041871Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 302 for workflow object_snapshot in 14.998µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041873Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 300 for workflow object_snapshot in 31.959µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041883Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 296 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041890Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 303 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041895Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041895Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 306 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041900Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 297 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041903Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 303 for workflow object_snapshot in 12.143µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041909Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041909Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 305 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041913Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 304 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041915Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041922Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041925Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 305 for workflow object_snapshot in 13.886µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041935Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 306 for workflow object_snapshot in 36.729µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041936Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 298 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041936Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 304 for workflow object_snapshot in 20.398µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041943Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 307 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041954Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 300 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041954Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041969Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 308 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041972Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 303 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041974Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 310 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041975Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 307 for workflow object_snapshot in 29.305µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041976Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 311 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041978Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041986Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 304 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041986Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041988Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041992Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 308 for workflow object_snapshot in 21.34µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041994Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 315 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041996Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 314 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.041999Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 313 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042001Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 307 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042001Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 310 for workflow object_snapshot in 25.457µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042003Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042004Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042004Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 311 for workflow object_snapshot in 24.946µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042008Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042009Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 312 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042012Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 320 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042014Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 308 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042016Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 314 for workflow object_snapshot in 18.164µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042018Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042019Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 317 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042018Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 315 for workflow object_snapshot in 21.04µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042014Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 319 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042020Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 313 for workflow object_snapshot in 18.665µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042022Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042026Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 309 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042028Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042030Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 318 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042032Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 312 for workflow object_snapshot in 20.308µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042033Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 316 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042037Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042037Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 320 for workflow object_snapshot in 22.812µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042039Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 309 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042040Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042043Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 322 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042044Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042045Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 318 for workflow object_snapshot in 12.644µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042048Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 317 for workflow object_snapshot in 27.391µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042046Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 321 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042050Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042050Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042052Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 316 for workflow object_snapshot in 17.493µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042053Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 309 for workflow object_snapshot in 12.754µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042062Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042067Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 322 for workflow object_snapshot in 22.222µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042071Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 319 for workflow object_snapshot in 49.823µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042074Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 321 for workflow object_snapshot in 24.105µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042080Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 323 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042085Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 324 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042089Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 325 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042089Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042090Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042097Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042098Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 316 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042100Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 324 for workflow object_snapshot in 12.814µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042100Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 326 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042105Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 323 for workflow object_snapshot in 21.801µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042107Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 325 for workflow object_snapshot in 15.068µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042108Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 327 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042109Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042112Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042120Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 327 for workflow object_snapshot in 10.67µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042127Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 326 for workflow object_snapshot in 24.796µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042151Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 319 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042158Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 331 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042165Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 328 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042166Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 329 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042167Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042168Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 321 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042172Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042172Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042181Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 323 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042181Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 330 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042181Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 331 for workflow object_snapshot in 20.539µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042182Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 328 for workflow object_snapshot in 15.289µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042182Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 329 for workflow object_snapshot in 14.948µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042188Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042193Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 325 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042205Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 326 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042206Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 330 for workflow object_snapshot in 22.612µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042208Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 334 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042207Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 332 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042214Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 333 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042220Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 328 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042220Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042220Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042220Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042222Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 335 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042226Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042231Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 333 for workflow object_snapshot in 14.948µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042232Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 336 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042232Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 329 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042235Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 335 for workflow object_snapshot in 12.483µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042236Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 332 for workflow object_snapshot in 24.767µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042239Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042236Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 334 for workflow object_snapshot in 24.676µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042241Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 338 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042243Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 337 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042246Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 330 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042246Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042245Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 340 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042253Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042255Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042255Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 338 for workflow object_snapshot in 12.383µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042258Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 343 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042257Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 336 for workflow object_snapshot in 22.932µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042259Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 332 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042265Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042264Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 341 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042265Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 339 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042270Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 337 for workflow object_snapshot in 24.556µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042270Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 340 for workflow object_snapshot in 22.252µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042272Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042272Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 342 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042275Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 334 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042275Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 343 for workflow object_snapshot in 16.16µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042279Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042281Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 339 for workflow object_snapshot in 14.107µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042281Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042280Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 345 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042285Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 344 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042288Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042291Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042293Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 336 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042297Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 346 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042297Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 341 for workflow object_snapshot in 29.815µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042302Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 344 for workflow object_snapshot in 14.687µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042302Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 342 for workflow object_snapshot in 28.493µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042304Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042306Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 337 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042305Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 345 for workflow object_snapshot in 22.111µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042311Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 347 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042316Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 346 for workflow object_snapshot in 16.521µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042316Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042320Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 339 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042324Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 348 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042328Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 347 for workflow object_snapshot in 15.108µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042329Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042335Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 349 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042334Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 341 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042337Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 348 for workflow object_snapshot in 11.893µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042340Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042348Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 349 for workflow object_snapshot in 11.611µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042349Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 342 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042357Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 350 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042362Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 345 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042367Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042374Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 346 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042381Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 350 for workflow object_snapshot in 21.871µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042387Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 347 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042388Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 351 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042394Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042396Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 355 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042399Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 348 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042399Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 352 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042402Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 351 for workflow object_snapshot in 11.521µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042402Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 354 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042404Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042407Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 353 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042408Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042409Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042410Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 349 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042413Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042419Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 355 for workflow object_snapshot in 19.907µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042420Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 352 for workflow object_snapshot in 17.914µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042422Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 354 for workflow object_snapshot in 17.733µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042422Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 350 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042426Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 353 for workflow object_snapshot in 17.573µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042435Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 351 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042435Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 356 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042447Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 357 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042448Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 352 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042452Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042476Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 353 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042477Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 359 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042476Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 357 for workflow object_snapshot in 27.681µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042484Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042485Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042487Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 358 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042489Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 356 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042494Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042495Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 359 for workflow object_snapshot in 15.719µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042494Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 361 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042504Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042504Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 356 for workflow object_snapshot in 66.153µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042510Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 360 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042517Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 358 for workflow object_snapshot in 27.381µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042517Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 361 for workflow object_snapshot in 19.767µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042519Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042525Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 363 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042530Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042532Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 365 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042532Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 360 for workflow object_snapshot in 19.927µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042535Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 358 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042537Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042540Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 363 for workflow object_snapshot in 12.944µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042542Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 362 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042543Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 364 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042546Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 365 for workflow object_snapshot in 12.343µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042552Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042553Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042560Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 367 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042566Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 362 for workflow object_snapshot in 20.418µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042566Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 366 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042569Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042568Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 364 for workflow object_snapshot in 23.033µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042577Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042580Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 367 for workflow object_snapshot in 17.833µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042583Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 360 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042589Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 368 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042592Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 366 for workflow object_snapshot in 23.373µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042595Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042600Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 369 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042603Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 362 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042604Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 372 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042613Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042615Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042617Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 364 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042621Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 371 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042622Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 370 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042622Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 374 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042624Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 368 for workflow object_snapshot in 32.982µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042626Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042629Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042628Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 372 for workflow object_snapshot in 19.967µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042629Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042631Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 366 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042631Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 369 for workflow object_snapshot in 27.221µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042635Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 371 for workflow object_snapshot in 12.383µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042637Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 373 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042640Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 370 for workflow object_snapshot in 16.481µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042645Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 374 for workflow object_snapshot in 20.348µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042646Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042646Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 375 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042647Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 376 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042651Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 368 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042652Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042655Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 373 for workflow object_snapshot in 16.2µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042655Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042657Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 377 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042661Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 375 for workflow object_snapshot in 13.104µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042665Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042667Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 376 for workflow object_snapshot in 18.164µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042670Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 378 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042671Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 369 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042676Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042681Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 377 for workflow object_snapshot in 21.45µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042686Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 379 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042690Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 370 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042692Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042693Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 378 for workflow object_snapshot in 22.452µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042700Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 379 for workflow object_snapshot in 11.512µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042708Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 373 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042716Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 380 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042726Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042728Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 375 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042727Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 382 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042728Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 383 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042734Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042736Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042739Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 380 for workflow object_snapshot in 20.599µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042741Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 381 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042741Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 384 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042744Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 383 for workflow object_snapshot in 13.685µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042746Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 376 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042749Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042751Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042753Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 382 for workflow object_snapshot in 22.793µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042758Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 384 for workflow object_snapshot in 14.007µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042761Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 381 for workflow object_snapshot in 17.663µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042765Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 377 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042776Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 385 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042781Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042780Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 386 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042783Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 378 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042785Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042793Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 386 for workflow object_snapshot in 10.59µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042793Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 387 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042801Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042800Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 385 for workflow object_snapshot in 22.451µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042804Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 379 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042809Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 389 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042813Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042815Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 387 for workflow object_snapshot in 19.376µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042820Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 389 for workflow object_snapshot in 9.487µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042824Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 380 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042826Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 390 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042826Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 391 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042827Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 388 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042832Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042834Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 392 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042836Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042836Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042844Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042843Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 381 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042847Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 390 for workflow object_snapshot in 18.856µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042848Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 388 for workflow object_snapshot in 18.444µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042849Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 394 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042849Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 391 for workflow object_snapshot in 19.828µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042850Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 393 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042857Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042858Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 392 for workflow object_snapshot in 21.52µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042862Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 385 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042866Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 394 for workflow object_snapshot in 14.808µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042873Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042878Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 387 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042882Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 395 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042887Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042891Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 393 for workflow object_snapshot in 34.244µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042894Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 396 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042896Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 395 for workflow object_snapshot in 12.052µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042896Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 388 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042896Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 397 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042896Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 399 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042904Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042903Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042908Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 398 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042910Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042915Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 397 for workflow object_snapshot in 16.04µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042914Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 391 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042917Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042918Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 396 for workflow object_snapshot in 21.531µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042922Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 399 for workflow object_snapshot in 21.32µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042926Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 400 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042928Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 401 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042930Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 398 for workflow object_snapshot in 20.108µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042934Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042934Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 392 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042936Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 402 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042936Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042944Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042944Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 401 for workflow object_snapshot in 15.068µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042948Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 400 for workflow object_snapshot in 19.997µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042949Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 403 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042953Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 393 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042955Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 402 for workflow object_snapshot in 18.074µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042956Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042966Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 403 for workflow object_snapshot in 15.379µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042971Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 395 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.042988Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 396 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043004Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 398 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043005Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 405 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043008Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 408 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043008Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 407 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043015Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043015Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043017Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043023Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 400 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043025Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 408 for workflow object_snapshot in 14.748µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043028Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 406 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043029Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 409 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043032Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 404 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043032Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 405 for workflow object_snapshot in 24.846µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043033Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 407 for workflow object_snapshot in 23.574µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043035Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043035Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043042Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 413 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043042Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043042Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 402 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043045Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 406 for workflow object_snapshot in 14.598µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043047Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043046Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 411 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043047Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 409 for workflow object_snapshot in 16.892µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043051Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 412 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043049Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 410 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043056Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043055Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 404 for workflow object_snapshot in 19.466µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043056Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 413 for workflow object_snapshot in 12.594µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043056Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043064Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 403 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043064Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043064Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 414 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043064Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 412 for workflow object_snapshot in 11.632µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043065Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 415 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043070Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043072Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043072Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 411 for workflow object_snapshot in 23.354µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043074Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 416 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043080Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 414 for workflow object_snapshot in 14.226µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043081Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043078Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 417 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043080Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 410 for workflow object_snapshot in 26.94µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043084Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 404 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043086Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 415 for workflow object_snapshot in 18.705µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043090Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043091Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 416 for workflow object_snapshot in 15.278µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043103Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 410 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043104Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 417 for workflow object_snapshot in 21.61µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043117Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 418 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043123Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043128Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 421 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043131Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 418 for workflow object_snapshot in 12.323µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043130Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 415 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043134Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043149Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 424 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043150Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 421 for workflow object_snapshot in 20.187µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043151Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 422 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043156Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 419 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043159Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043160Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043162Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043168Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 416 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043171Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 419 for workflow object_snapshot in 14.026µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043172Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 425 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043175Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 422 for workflow object_snapshot in 21.099µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043178Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 426 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043178Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 424 for workflow object_snapshot in 26.86µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043180Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 423 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043181Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043185Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043185Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 427 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043186Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 417 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043187Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043187Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 428 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043192Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 420 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043193Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043194Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 429 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043195Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 425 for workflow object_snapshot in 20.038µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043197Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 423 for workflow object_snapshot in 14.377µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043199Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043199Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 426 for workflow object_snapshot in 19.918µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043201Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043204Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 418 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043203Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043206Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 427 for workflow object_snapshot in 19.416µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043207Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 429 for workflow object_snapshot in 11.732µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043216Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 430 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043218Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 432 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043219Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 419 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043219Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 431 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043220Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043221Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 420 for workflow object_snapshot in 25.939µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043223Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 428 for workflow object_snapshot in 30.306µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043227Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043227Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043228Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 430 for workflow object_snapshot in 11.341µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043234Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 420 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043234Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 433 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043240Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043241Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 431 for workflow object_snapshot in 19.116µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043246Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 432 for workflow object_snapshot in 26.659µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043249Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 433 for workflow object_snapshot in 12.624µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043249Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 428 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043255Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 434 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043257Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 435 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043262Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043265Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 430 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043268Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043270Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 435 for workflow object_snapshot in 11.311µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043278Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 437 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043281Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 431 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043282Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 434 for workflow object_snapshot in 24.095µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043281Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 436 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043285Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043294Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043296Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 437 for workflow object_snapshot in 16.791µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043297Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 432 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043305Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 436 for workflow object_snapshot in 20.208µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043312Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 433 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043327Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 434 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043341Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 436 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.043356Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 438 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.143600Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 438, pruning watermark: 438, new updates: 0 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245363Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 438, pruning watermark: 438, new updates: 19 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245472Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 438 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245484Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 445 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245488Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245496Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245506Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 438 for workflow object_snapshot in 27.261µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245520Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 441 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245523Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 439 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245533Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 450 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245533Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 445 for workflow object_snapshot in 46.487µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245539Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245539Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245540Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 442 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245552Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245559Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 443 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245563Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 439 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245563Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 441 for workflow object_snapshot in 38.272µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245570Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 450 for workflow object_snapshot in 34.574µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245570Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 440 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245574Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 446 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245575Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245577Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245577Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 442 for workflow object_snapshot in 35.035µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245579Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245583Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 444 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245585Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 456 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245588Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 446 for workflow object_snapshot in 13.004µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245590Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 440 for workflow object_snapshot in 18.695µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245593Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245595Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 449 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245595Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 447 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245594Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245598Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245600Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245600Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245601Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 439 for workflow object_snapshot in 34.975µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245598Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 448 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245608Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 444 for workflow object_snapshot in 23.223µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245610Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 449 for workflow object_snapshot in 14.086µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245614Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 447 for workflow object_snapshot in 17.603µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245614Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 451 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245615Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 452 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245618Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 443 for workflow object_snapshot in 53.801µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245619Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 455 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245622Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245621Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 456 for workflow object_snapshot in 33.102µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245622Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 454 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245624Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245626Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 443 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245628Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245629Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245631Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 452 for workflow object_snapshot in 14.857µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245635Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245636Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 451 for workflow object_snapshot in 20.589µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245590Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 453 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245645Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 455 for workflow object_snapshot in 23.684µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245654Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 448 for workflow object_snapshot in 44.032µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245654Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 454 for workflow object_snapshot in 29.084µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245662Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245670Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 448 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245674Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 453 for workflow object_snapshot in 29.535µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245685Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 453 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.245697Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 457 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.347571Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 457, pruning watermark: 457, new updates: 72 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348081Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 459 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348094Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 468 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348097Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348117Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 459 for workflow object_snapshot in 28.433µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348119Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348130Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 457 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348135Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 458 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348143Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 463 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348144Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348146Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348150Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 468 for workflow object_snapshot in 50.865µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348160Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348167Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 457 for workflow object_snapshot in 32.721µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348170Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 464 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348175Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 458 for workflow object_snapshot in 37.6µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348180Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348183Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 463 for workflow object_snapshot in 37.249µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348184Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 466 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348188Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 477 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348189Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 478 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348193Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 458 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348193Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348199Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348205Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 464 for workflow object_snapshot in 32.941µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348209Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348209Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 466 for workflow object_snapshot in 22.692µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348211Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 467 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348216Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 465 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348221Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 478 for workflow object_snapshot in 30.627µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348222Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348223Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 460 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348226Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348223Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 473 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348228Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 475 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348236Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348239Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 465 for workflow object_snapshot in 20.779µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348238Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 476 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348246Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 475 for workflow object_snapshot in 15.94µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348246Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 460 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348246Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 467 for workflow object_snapshot in 32.641µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348248Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348250Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 461 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348254Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 462 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348255Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348255Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348255Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348255Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 474 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348260Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 477 for workflow object_snapshot in 68.889µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348263Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348267Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 470 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348269Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 461 for workflow object_snapshot in 18.084µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348273Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 460 for workflow object_snapshot in 24.235µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348272Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 473 for workflow object_snapshot in 43.321µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348274Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 481 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348274Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348276Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 476 for workflow object_snapshot in 31.799µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348281Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348280Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 471 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348281Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348283Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 469 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348285Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 462 for workflow object_snapshot in 29.926µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348285Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 482 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348289Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348289Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 472 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348293Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 481 for workflow object_snapshot in 17.523µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348294Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348295Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348296Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 484 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348300Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 474 for workflow object_snapshot in 40.035µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348301Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 487 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348302Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 470 for workflow object_snapshot in 33.041µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348303Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 471 for workflow object_snapshot in 20.078µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348303Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348309Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 482 for workflow object_snapshot in 21.75µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348311Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 486 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348311Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 469 for workflow object_snapshot in 25.477µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348312Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348311Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348313Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 479 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348320Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348320Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348321Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 485 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348324Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 472 for workflow object_snapshot in 30.266µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348324Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 480 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348327Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 483 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348329Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348331Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 479 for workflow object_snapshot in 16.26µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348332Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 488 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348332Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 487 for workflow object_snapshot in 27.381µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348335Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348337Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348337Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 486 for workflow object_snapshot in 23.333µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348339Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348340Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 485 for workflow object_snapshot in 17.223µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348340Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 489 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348342Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 484 for workflow object_snapshot in 44.703µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348347Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 483 for workflow object_snapshot in 18.315µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348349Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 488 for workflow object_snapshot in 15.559µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348349Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 462 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348350Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 490 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348351Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348356Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 491 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348357Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 492 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348359Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 480 for workflow object_snapshot in 30.697µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348360Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348364Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 489 for workflow object_snapshot in 21.37µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348372Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348373Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 493 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348374Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348377Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348377Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 490 for workflow object_snapshot in 24.716µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348380Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 469 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348385Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 491 for workflow object_snapshot in 26.74µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348388Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 493 for workflow object_snapshot in 13.715µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348390Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 492 for workflow object_snapshot in 30.176µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348399Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 472 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348410Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 495 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348415Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348415Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 479 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348417Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 494 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348423Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 495 for workflow object_snapshot in 11.912µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348426Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348434Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 480 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348438Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 496 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348441Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 494 for workflow object_snapshot in 22.031µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348443Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348451Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 496 for workflow object_snapshot in 11.892µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348464Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 497 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348465Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 498 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348467Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 489 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348469Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 499 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348472Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348475Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348475Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 500 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348476Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 502 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348478Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348482Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348484Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 498 for workflow object_snapshot in 16.911µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348485Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 497 for workflow object_snapshot in 18.745µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348485Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348488Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 490 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348491Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 499 for workflow object_snapshot in 20.067µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348494Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 501 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348500Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 503 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348500Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 500 for workflow object_snapshot in 22.722µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348504Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 502 for workflow object_snapshot in 26.109µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348508Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348509Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348512Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 491 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348511Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 504 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348520Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348521Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 503 for workflow object_snapshot in 19.757µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348524Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 505 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348528Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 509 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348529Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 492 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348530Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348530Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 507 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348530Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 501 for workflow object_snapshot in 32.911µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348535Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348535Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 504 for workflow object_snapshot in 20.949µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348537Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 508 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348538Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348540Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 505 for workflow object_snapshot in 14.206µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348544Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 506 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348546Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348544Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 509 for workflow object_snapshot in 14.567µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348547Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 494 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348549Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 507 for workflow object_snapshot in 17.353µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348553Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348555Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 510 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348562Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 512 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348562Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 508 for workflow object_snapshot in 21.871µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348564Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 496 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348565Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 506 for workflow object_snapshot in 18.775µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348569Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 511 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348570Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348572Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348576Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348578Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 513 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348581Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 497 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348585Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348586Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 510 for workflow object_snapshot in 27.462µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348588Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 511 for workflow object_snapshot in 16.791µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348590Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 512 for workflow object_snapshot in 25.538µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348599Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 499 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348598Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 513 for workflow object_snapshot in 18.525µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348605Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 514 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348613Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 515 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348615Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348617Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 500 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348624Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348626Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 517 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348631Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348630Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 514 for workflow object_snapshot in 21.891µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348634Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 501 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348641Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 515 for workflow object_snapshot in 23.925µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348647Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 517 for workflow object_snapshot in 18.976µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348650Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 516 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348651Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 504 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348656Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 518 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348658Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 519 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348658Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 520 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348660Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348665Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348666Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 521 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348668Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348667Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348672Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 505 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348673Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348673Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 516 for workflow object_snapshot in 21.32µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348678Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 518 for workflow object_snapshot in 19.276µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348680Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 519 for workflow object_snapshot in 19.185µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348680Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 520 for workflow object_snapshot in 19.035µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348681Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 523 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348685Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 521 for workflow object_snapshot in 17.102µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348689Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 522 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348689Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 506 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348698Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348705Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 510 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348706Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 522 for workflow object_snapshot in 14.988µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348713Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 524 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348712Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348714Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 526 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348716Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 511 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348717Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348718Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 527 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348719Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348723Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348724Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 524 for workflow object_snapshot in 10.41µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348730Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 523 for workflow object_snapshot in 47.188µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348730Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 528 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348732Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 527 for workflow object_snapshot in 12.012µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348732Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 512 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348732Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 525 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348733Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 526 for workflow object_snapshot in 17.893µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348741Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348748Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 513 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348757Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 525 for workflow object_snapshot in 22.262µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348763Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 514 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348771Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348779Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 515 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348783Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 528 for workflow object_snapshot in 50.615µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348791Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 516 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348802Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 518 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348813Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 519 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348824Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 520 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348835Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 521 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348846Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 522 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348857Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 523 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348867Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 525 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348878Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 528 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.348888Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 529 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.450075Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 529, pruning watermark: 529, new updates: 0 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.550926Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 529, pruning watermark: 529, new updates: 200 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551007Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 533 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551022Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551046Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 533 for workflow object_snapshot in 32.49µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551102Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 549 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551125Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551144Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 549 for workflow object_snapshot in 36.117µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551155Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 534 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551166Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551179Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 534 for workflow object_snapshot in 21.12µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551186Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 535 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551198Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551214Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 535 for workflow object_snapshot in 26.199µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551233Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 536 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551247Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551265Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 536 for workflow object_snapshot in 29.926µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551274Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 529 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551283Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 537 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551293Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551294Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551306Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 537 for workflow object_snapshot in 19.567µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551305Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 529 for workflow object_snapshot in 29.615µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551326Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 530 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551334Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551346Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 530 for workflow object_snapshot in 18.425µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551353Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 531 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551359Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551370Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 531 for workflow object_snapshot in 15.018µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551370Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 538 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551387Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 532 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551387Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551390Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 544 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551394Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551404Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551404Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 538 for workflow object_snapshot in 31.86µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551405Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 532 for workflow object_snapshot in 16.06µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551423Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 544 for workflow object_snapshot in 28.574µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551428Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 548 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551429Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 539 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551426Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 547 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551436Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551443Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551445Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 539 for workflow object_snapshot in 14.718µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551445Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551449Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 540 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551469Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551473Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 548 for workflow object_snapshot in 43.411µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551478Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 540 for workflow object_snapshot in 27.19µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551483Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 541 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551483Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 542 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551483Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 547 for workflow object_snapshot in 52.078µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551488Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551486Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 545 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551492Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 530 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551493Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551503Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 541 for workflow object_snapshot in 19.176µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551506Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 542 for workflow object_snapshot in 20.278µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551507Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 543 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551513Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551513Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551516Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 546 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551523Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 543 for workflow object_snapshot in 13.996µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551527Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551532Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 556 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551533Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 545 for workflow object_snapshot in 42.8µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551537Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551537Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 531 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551534Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 552 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551541Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 560 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551545Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 556 for workflow object_snapshot in 11.632µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551545Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 546 for workflow object_snapshot in 25.377µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551549Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551545Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 554 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551549Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551553Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 532 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551560Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 560 for workflow object_snapshot in 17.022µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551565Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 539 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551565Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 555 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551566Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 557 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551568Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 552 for workflow object_snapshot in 28.263µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551569Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551571Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551572Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551573Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 553 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551577Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 540 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551580Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 555 for workflow object_snapshot in 13.556µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551582Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 557 for workflow object_snapshot in 14.046µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551588Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 558 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551589Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 541 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551588Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551590Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 550 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551592Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 554 for workflow object_snapshot in 41.497µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551594Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551592Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 559 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551598Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 551 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551599Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551601Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 542 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551602Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 568 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551602Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 558 for workflow object_snapshot in 11.993µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551604Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551608Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 573 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551609Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551608Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 553 for workflow object_snapshot in 32.541µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551613Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 543 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551614Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551613Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 551 for workflow object_snapshot in 13.575µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551614Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 550 for workflow object_snapshot in 22.102µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551616Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 566 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551617Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551623Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 568 for workflow object_snapshot in 19.617µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551624Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 573 for workflow object_snapshot in 14.968µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551624Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 545 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551625Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 565 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551631Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551631Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 562 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551632Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 569 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551633Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551637Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551638Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 546 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551640Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551646Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 562 for workflow object_snapshot in 12.714µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551610Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 564 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551650Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 569 for workflow object_snapshot in 16.701µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551649Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 565 for workflow object_snapshot in 21.981µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551651Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 550 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551654Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 561 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551652Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 559 for workflow object_snapshot in 53.911µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551651Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 563 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551654Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 566 for workflow object_snapshot in 35.837µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551659Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 570 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551659Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551659Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551663Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 567 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551665Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551658Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 581 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551669Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 561 for workflow object_snapshot in 13.666µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551671Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551674Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 570 for workflow object_snapshot in 13.485µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551674Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 571 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551676Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 564 for workflow object_snapshot in 28.032µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551677Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 577 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551678Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 582 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551679Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 575 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551682Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551682Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 572 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551682Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551688Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551689Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551690Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 567 for workflow object_snapshot in 25.598µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551691Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 579 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551692Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 580 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551693Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551696Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 576 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551695Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 571 for workflow object_snapshot in 18.725µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551697Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 572 for workflow object_snapshot in 12.403µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551697Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 589 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551697Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551697Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551700Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 585 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551701Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551703Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551703Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 587 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551704Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551700Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 574 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551707Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551707Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 577 for workflow object_snapshot in 27.622µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551709Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551714Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 589 for workflow object_snapshot in 15.218µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551715Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551716Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 588 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551715Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 581 for workflow object_snapshot in 47.138µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551717Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 580 for workflow object_snapshot in 22.402µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551718Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 575 for workflow object_snapshot in 36.829µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551719Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 582 for workflow object_snapshot in 37.781µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551720Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 592 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551719Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 563 for workflow object_snapshot in 62.216µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551720Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 587 for workflow object_snapshot in 15.338µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551720Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551721Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 585 for workflow object_snapshot in 19.116µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551722Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 576 for workflow object_snapshot in 24.105µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551722Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 586 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551724Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551725Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551727Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 590 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551733Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551733Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 574 for workflow object_snapshot in 27.001µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551734Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 594 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551735Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 592 for workflow object_snapshot in 14.056µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551735Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551738Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 591 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551741Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 588 for workflow object_snapshot in 23.303µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551741Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 579 for workflow object_snapshot in 47.739µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551744Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 593 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551743Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551745Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551746Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 578 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551749Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551749Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 590 for workflow object_snapshot in 19.136µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551749Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 583 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551750Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 584 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551754Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 591 for workflow object_snapshot in 14.498µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551755Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551756Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 595 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551758Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 593 for workflow object_snapshot in 12.614µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551758Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551759Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551760Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 594 for workflow object_snapshot in 23.534µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551765Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551767Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 578 for workflow object_snapshot in 18.274µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551768Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 597 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551768Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 586 for workflow object_snapshot in 41.828µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551763Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 596 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551773Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 584 for workflow object_snapshot in 21.019µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551772Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 583 for workflow object_snapshot in 20.709µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551774Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 598 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551776Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 599 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551779Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551779Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551779Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 595 for workflow object_snapshot in 20.088µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551781Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 600 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551785Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551786Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 601 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551787Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 559 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551788Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 598 for workflow object_snapshot in 12.283µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551790Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551792Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 597 for workflow object_snapshot in 22.412µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551795Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 602 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551795Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551797Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551800Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551801Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 603 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551803Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 604 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551803Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 600 for workflow object_snapshot in 19.486µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551804Z INFO sui_data_ingestion_core::worker_pool: finished checkpoint processing 596 for workflow object_snapshot in 32.24µs +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551808Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551812Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 606 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551814Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551819Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551822Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 607 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551823Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 608 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551824Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 561 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551811Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 605 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551829Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551830Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551835Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 609 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551839Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 563 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551838Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551844Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551851Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 611 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551853Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 612 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551853Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 610 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551855Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 613 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551858Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551859Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551860Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 615 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551861Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551862Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551862Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 616 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551866Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551867Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 617 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551868Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551868Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 618 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551869Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 614 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551874Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551874Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551874Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 619 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551875Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551877Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 620 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551882Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551885Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 621 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551886Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551891Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 574 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551892Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 623 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551895Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 622 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551899Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551898Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 624 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551901Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551900Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551905Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551910Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 625 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551916Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551916Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 626 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551919Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 578 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551926Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551928Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 628 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551928Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 627 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551934Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 583 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551934Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551933Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 629 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551936Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551940Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 630 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551943Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551944Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 631 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551947Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 584 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551947Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 632 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551950Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551951Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551953Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 633 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551955Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551958Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551965Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 634 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551970Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 595 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551973Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551976Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 635 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551981Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 636 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551982Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551982Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 637 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551989Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551990Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551995Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 639 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551995Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 641 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551997Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 638 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.551999Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 648 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552002Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552005Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552006Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552005Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 596 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552005Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 644 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552006Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552010Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 640 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552011Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 642 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552014Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552016Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552016Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552018Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 645 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552019Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 643 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552022Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 649 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552023Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552026Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 650 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552026Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552026Z INFO sui_data_ingestion_core::reader: cleaning processed files, watermark is 599 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552027Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 651 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552027Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 652 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552030Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 647 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552031Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552031Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 646 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552032Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552034Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552037Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552038Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552040Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552049Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 653 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552052Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 654 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552053Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 656 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552053Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 655 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552057Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552058Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552059Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552060Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552073Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 658 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552073Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 657 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552078Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552080Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552084Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 659 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552091Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552100Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 661 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552102Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 660 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552106Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552109Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552125Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 662 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552132Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552132Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 666 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552139Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552143Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 664 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552144Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 663 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552148Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552149Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 665 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552150Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 669 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552154Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552155Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552164Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552164Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 667 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552166Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 671 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552167Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 670 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552167Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 668 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552169Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552170Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552171Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552172Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552181Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 673 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552182Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 672 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552185Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552186Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 674 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552187Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552191Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552195Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 675 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552199Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552199Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 676 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552202Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552207Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 677 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552212Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552215Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 678 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552220Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552223Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 680 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552225Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 679 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552227Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552231Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552235Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 682 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552237Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 681 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552240Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552242Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552247Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 683 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552248Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 684 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552252Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552254Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552255Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 685 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552257Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552261Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 686 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552265Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552267Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 687 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552270Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552278Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 689 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552280Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 688 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552282Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552285Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552294Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 691 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552295Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 690 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552296Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552298Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552302Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 692 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552304Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552310Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 693 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552313Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552324Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 694 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552328Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552335Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 695 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552339Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552347Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 697 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552353Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552354Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 696 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552358Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 698 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552361Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552363Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552370Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 699 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552372Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552375Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 700 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552379Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 701 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552382Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552383Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552384Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 702 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552387Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552389Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 703 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552389Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 705 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552391Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552392Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 704 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552394Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552394Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552412Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 706 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552412Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 709 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552416Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552418Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552425Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 707 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552426Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 710 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552427Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 708 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552428Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 712 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552431Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552431Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552431Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552437Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 711 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552439Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552442Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552444Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 713 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552449Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 714 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552449Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 715 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552452Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552452Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552461Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552486Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 718 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552494Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552494Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 716 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552496Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 721 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552499Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 717 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552502Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552502Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 722 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552504Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552506Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552507Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552508Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 719 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552510Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 724 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552510Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 723 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552511Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552512Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552515Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552518Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 720 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552520Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 726 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552521Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 725 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552525Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 727 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552524Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552525Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552525Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552527Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552537Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 728 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.552539Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653388Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 729, pruning watermark: 599, new updates: 41 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653508Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 740 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653519Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 742 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653522Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653521Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 734 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653526Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653534Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653537Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 735 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653540Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 741 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653541Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653546Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653549Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 729 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653550Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 736 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653554Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653555Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653559Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 743 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653559Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 745 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653562Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 730 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653565Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653567Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653569Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 746 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653572Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 731 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653572Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 737 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653572Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 744 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653573Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653575Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653577Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653578Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653581Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653582Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 732 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653585Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653589Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 747 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653592Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 733 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653592Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 738 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653593Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 739 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653593Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 748 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653594Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653597Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653599Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653599Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653598Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 751 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653599Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653605Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653609Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 750 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653612Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 753 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653613Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 752 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653615Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653608Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 749 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653619Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 754 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653619Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653621Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653624Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653627Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653648Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 759 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653650Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 755 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653648Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 756 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653653Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 757 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653656Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653659Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653661Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653662Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653666Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 758 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653672Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653671Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 763 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653672Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 761 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653677Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653678Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653678Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 760 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653683Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653684Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 762 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653688Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 764 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653690Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653692Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 765 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653692Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 766 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653693Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653697Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653699Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653711Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 767 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653713Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 769 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653716Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653717Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 768 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653721Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.653722Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.753697Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 770, pruning watermark: 599, new updates: 0 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.855439Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 770, pruning watermark: 599, new updates: 0 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956261Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 770, pruning watermark: 599, new updates: 200 +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956338Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 772 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956349Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956370Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 770 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956378Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956374Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 777 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956388Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956389Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 771 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956394Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956406Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 774 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956410Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 775 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956412Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956412Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 782 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956417Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956420Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 773 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956425Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956425Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956432Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 776 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956437Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956437Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 783 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956443Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956441Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 785 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956448Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 778 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956452Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956465Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956471Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 780 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956470Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 784 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956474Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 786 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956476Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956473Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 788 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956479Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 781 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956480Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956484Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956483Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956486Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956487Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 779 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956495Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956496Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 789 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956502Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956503Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 791 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956505Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 790 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956504Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 787 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956508Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956510Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956510Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 792 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956519Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956521Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 794 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956523Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 795 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956523Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 793 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956526Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956529Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956532Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956536Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 797 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956536Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 798 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956537Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956538Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 796 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956544Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956548Z INFO sui_data_ingestion_core::worker_pool: received checkpoint for processing 799 for workflow object_snapshot +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956549Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956553Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:35.956554Z INFO sui_indexer::handlers::checkpoint_handler: Resolving Move struct layouts for struct tags of size 1. +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.057196Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 970, pruning watermark: 599, new updates: 5 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.158435Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 975, pruning watermark: 599, new updates: 27 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.259421Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1002, pruning watermark: 599, new updates: 58 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.360395Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1060, pruning watermark: 599, new updates: 151 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.460846Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1211, pruning watermark: 599, new updates: 49 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.562153Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1260, pruning watermark: 599, new updates: 113 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.663250Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1373, pruning watermark: 599, new updates: 96 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.763647Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1469, pruning watermark: 599, new updates: 107 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.865045Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1576, pruning watermark: 599, new updates: 67 +Sep 12 13:41:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:36.966365Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1643, pruning watermark: 599, new updates: 101 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.066983Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1744, pruning watermark: 599, new updates: 144 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.168314Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1888, pruning watermark: 599, new updates: 102 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.269400Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 1990, pruning watermark: 599, new updates: 157 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.370348Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2147, pruning watermark: 599, new updates: 76 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.471198Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2223, pruning watermark: 599, new updates: 0 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.572193Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2223, pruning watermark: 599, new updates: 0 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.673099Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2223, pruning watermark: 599, new updates: 200 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.774117Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2423, pruning watermark: 599, new updates: 0 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.875434Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2423, pruning watermark: 599, new updates: 4 +Sep 12 13:41:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:37.976574Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2427, pruning watermark: 599, new updates: 196 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.077568Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2623, pruning watermark: 599, new updates: 61 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.179251Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2684, pruning watermark: 599, new updates: 145 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.280416Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2829, pruning watermark: 599, new updates: 47 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.380641Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 2876, pruning watermark: 599, new updates: 153 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.482202Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3029, pruning watermark: 599, new updates: 90 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.583082Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3119, pruning watermark: 599, new updates: 117 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.683784Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3236, pruning watermark: 599, new updates: 111 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.784885Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3347, pruning watermark: 599, new updates: 109 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.885824Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3456, pruning watermark: 599, new updates: 125 +Sep 12 13:41:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:38.986659Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3581, pruning watermark: 599, new updates: 112 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.088532Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3693, pruning watermark: 599, new updates: 17 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.190056Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3710, pruning watermark: 599, new updates: 153 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.290694Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3863, pruning watermark: 599, new updates: 30 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.391676Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3893, pruning watermark: 599, new updates: 105 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.493002Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 3998, pruning watermark: 599, new updates: 85 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.593916Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4083, pruning watermark: 599, new updates: 6 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.695469Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4089, pruning watermark: 599, new updates: 200 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.796750Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4289, pruning watermark: 599, new updates: 5 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.897853Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4294, pruning watermark: 599, new updates: 119 +Sep 12 13:41:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:39.999029Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4413, pruning watermark: 599, new updates: 81 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.099742Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4494, pruning watermark: 599, new updates: 24 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.200601Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4518, pruning watermark: 599, new updates: 97 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.301651Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4615, pruning watermark: 599, new updates: 105 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.403040Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4720, pruning watermark: 599, new updates: 41 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.504238Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4761, pruning watermark: 599, new updates: 87 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.605122Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4848, pruning watermark: 599, new updates: 105 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.706105Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 4953, pruning watermark: 599, new updates: 97 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.806745Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5050, pruning watermark: 599, new updates: 103 +Sep 12 13:41:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:40.908475Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5153, pruning watermark: 599, new updates: 167 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.009712Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5320, pruning watermark: 599, new updates: 143 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.110733Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5463, pruning watermark: 599, new updates: 9 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.212271Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5472, pruning watermark: 599, new updates: 99 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.312672Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5571, pruning watermark: 599, new updates: 108 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.413576Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5679, pruning watermark: 599, new updates: 97 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.515013Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5776, pruning watermark: 599, new updates: 154 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.615557Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 5930, pruning watermark: 599, new updates: 81 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.716553Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6011, pruning watermark: 599, new updates: 0 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.818476Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6011, pruning watermark: 599, new updates: 0 +Sep 12 13:41:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:41.919158Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6011, pruning watermark: 599, new updates: 200 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.020096Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6211, pruning watermark: 599, new updates: 0 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.120827Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6211, pruning watermark: 599, new updates: 12 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.222418Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6223, pruning watermark: 599, new updates: 5 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.323390Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6228, pruning watermark: 599, new updates: 200 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.423655Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6428, pruning watermark: 599, new updates: 3 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.524797Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6431, pruning watermark: 599, new updates: 199 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.626339Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6630, pruning watermark: 599, new updates: 129 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.727408Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6759, pruning watermark: 599, new updates: 78 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.827955Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 6837, pruning watermark: 599, new updates: 196 +Sep 12 13:41:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:42.928570Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7033, pruning watermark: 599, new updates: 35 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.030548Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7068, pruning watermark: 599, new updates: 138 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.131741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7206, pruning watermark: 599, new updates: 70 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.233546Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7276, pruning watermark: 599, new updates: 187 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.334627Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7463, pruning watermark: 599, new updates: 44 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.435798Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7507, pruning watermark: 599, new updates: 172 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.536713Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7679, pruning watermark: 599, new updates: 114 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.638263Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7793, pruning watermark: 599, new updates: 0 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.739308Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7793, pruning watermark: 599, new updates: 187 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.840115Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7980, pruning watermark: 599, new updates: 19 +Sep 12 13:41:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:43.940624Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 7999, pruning watermark: 599, new updates: 196 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.041719Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8195, pruning watermark: 599, new updates: 52 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.143439Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8247, pruning watermark: 599, new updates: 0 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.243737Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8247, pruning watermark: 599, new updates: 200 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.344942Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8447, pruning watermark: 599, new updates: 43 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.446489Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8490, pruning watermark: 599, new updates: 174 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.548310Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8664, pruning watermark: 599, new updates: 128 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.649491Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8792, pruning watermark: 599, new updates: 99 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.751218Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8891, pruning watermark: 599, new updates: 0 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.851795Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 8891, pruning watermark: 599, new updates: 200 +Sep 12 13:41:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:44.952652Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9091, pruning watermark: 599, new updates: 81 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.053748Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9172, pruning watermark: 599, new updates: 124 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.154759Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9296, pruning watermark: 599, new updates: 197 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.256047Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9493, pruning watermark: 599, new updates: 9 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.357619Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9502, pruning watermark: 599, new updates: 200 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.459008Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9702, pruning watermark: 599, new updates: 51 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.560018Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9753, pruning watermark: 599, new updates: 58 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.660802Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9811, pruning watermark: 599, new updates: 0 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.762231Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 9811, pruning watermark: 599, new updates: 200 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.863395Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10011, pruning watermark: 599, new updates: 200 +Sep 12 13:41:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:45.964099Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10211, pruning watermark: 599, new updates: 6 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.065603Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10217, pruning watermark: 599, new updates: 194 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.166559Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10411, pruning watermark: 599, new updates: 6 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.268530Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10417, pruning watermark: 599, new updates: 182 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.369671Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.471295Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.571776Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.672772Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.774179Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.875549Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:46.976964Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.078264Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.179675Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.281069Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.382484Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.482823Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.584212Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.685607Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.786922Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.888305Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:47.988563Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.089964Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.191304Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.292690Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.394101Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.495494Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.595894Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.697302Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.798542Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:48.899959Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.001344Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.101752Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.203061Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.304474Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.404862Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.506088Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.607439Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.707677Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.809079Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:49.910511Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.011905Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.113322Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.214705Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.316118Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.417512Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.518826Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.620233Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.721598Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.822993Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:50.924364Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.024748Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.126159Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.227535Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.328936Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.430301Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.531692Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.633068Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.734443Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.834864Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:51.936249Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.037670Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.139063Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.240489Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.340755Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.442152Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.543580Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.644952Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.746339Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.846616Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:52.947994Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.049397Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.149765Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.251160Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.352471Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.452874Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.554269Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.655647Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.757064Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.858305Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:53.958719Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.060108Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.161511Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.262941Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.364335Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.465562Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.566770Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.668078Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.769392Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.869796Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:54.971141Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.072533Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.173955Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.275345Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.375756Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.477190Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.578590Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.679998Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.781363Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.881755Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:55.983148Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.084487Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.184922Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.286318Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.386748Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.488138Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.589550Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.690931Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.792310Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.892716Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:56.994014Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.095408Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.195793Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.297201Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.398606Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.499941Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.601513Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.702874Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.804272Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:57.905679Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.007077Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.108501Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.208802Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.310227Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.411614Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.513017Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.614433Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.714805Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.816297Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:58.917661Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.019071Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.120481Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.220797Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.322225Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.423614Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.524819Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.625982Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.727364Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.828545Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:41:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:41:59.929943Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.031365Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.131749Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.233162Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.334551Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.435951Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.537380Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.637755Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.739147Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.840508Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:00.941905Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.043301Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.144698Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.246122Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.347503Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.447916Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.549306Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.650596Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.752002Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.853371Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:01.953777Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.055161Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.156569Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.257964Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.359363Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.459789Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.561091Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.662488Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.762852Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.864232Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:02.965583Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.066970Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.168391Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.268777Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.370100Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.471491Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.571813Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.673133Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.774519Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.875844Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:03.977144Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.078480Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.178877Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.280274Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.381615Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.482915Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.584226Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.685681Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.787084Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.888349Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:04.988744Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.090164Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.191554Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.292962Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.394355Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.494757Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.596183Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.697564Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.799137Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:05.900547Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.001741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.103175Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.204575Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.306096Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.407136Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.508044Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.609344Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.709746Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.811178Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:06.912566Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.013820Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.115130Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.216471Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.316733Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.418129Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.519555Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.620923Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.722311Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.823680Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:07.925059Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.026499Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.126895Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.228314Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.329700Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.431105Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.532371Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.632660Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.734057Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.834857Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:08.936278Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.037669Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.139073Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.240421Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.340813Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.442144Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.543426Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.643836Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.745059Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.846480Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:09.946907Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.048304Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.148720Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.250104Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.351432Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.452715Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.554108Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.655532Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.756916Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.858327Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:10.958674Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.060000Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.161426Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.261819Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.363237Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.464622Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.566029Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.667426Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.767823Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.869247Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:11.970609Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.072031Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.173333Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.273736Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.375165Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.476559Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.577876Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.679236Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.780643Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.882039Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:12.983352Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.083785Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.185106Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.286520Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.387909Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.489312Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.589654Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.691050Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.792028Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.893393Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:13.993961Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.095350Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.195755Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.297188Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.398579Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.499995Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.601380Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.701778Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.803022Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:14.904426Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.004690Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.106080Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.207498Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.307887Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.409204Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.510634Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.611924Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.713319Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.814678Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:15.915976Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.017360Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.117759Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.219186Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.320576Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.421906Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.523193Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.624569Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.725976Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.827259Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:16.928658Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.030038Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.131452Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.231859Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.333259Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.434686Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.535988Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.637386Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.737749Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.839132Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:17.940377Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.040765Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.142187Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.243574Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.344985Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.446375Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.546777Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.648010Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.749290Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.849791Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:18.951150Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.052504Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.153907Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.255131Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.356555Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.457943Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.559356Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.659723Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.761101Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.862336Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:19.963665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.065083Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.166388Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.266800Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.368192Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.469590Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.571015Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.672399Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.772814Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.874202Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:20.975609Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.077041Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.178434Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.278860Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.380246Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.481585Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.582977Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.684371Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.784799Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.886190Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:21.987531Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.088916Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.190390Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.290786Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.392184Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.493598Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.594983Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.696389Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.796776Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.898178Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:22.999609Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.101000Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.202420Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.302802Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.404210Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.505604Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.607002Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.708405Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.809132Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:23.910555Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.011945Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.113356Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.213784Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.315179Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.416600Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.517984Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.619394Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.720613Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.822013Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:24.923255Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.024566Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.125832Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.227131Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.328537Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.429967Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.531362Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.631783Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.733167Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.834579Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:25.935971Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.037292Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.137723Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.239021Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.340437Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.440837Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.542244Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.643641Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.745035Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.846471Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:26.946860Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.048274Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.149680Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.251084Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.352514Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.453905Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.555323Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.656708Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.758118Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.859514Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:27.960911Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.062340Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.162724Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.264137Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.365526Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.466926Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.568354Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.668747Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.770161Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.871630Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:28 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:28.973040Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.074439Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.174848Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.276272Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.377673Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.478999Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.580389Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.680792Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.782048Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.883427Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:29 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:29.983673Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.084901Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.186315Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.287707Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.389271Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.490587Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.591946Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.693245Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.794627Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.896030Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:30 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:30.997475Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.097741Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.199078Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.300483Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.400899Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.502290Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.603627Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.705056Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.806450Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:31 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:31.906885Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.008269Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.109581Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.210893Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.312204Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.413609Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.514908Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.616143Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.717356Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.817759Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:32 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:32.919190Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.020559Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.121959Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.223318Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.323699Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.425069Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.526477Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.626899Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.728285Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.769639Z INFO sui_indexer::db::setup_postgres: DB connection pool size: 100, with idle conn: 100. +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.829103Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:33 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:33.930507Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.031912Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.133340Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.233633Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.335058Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.436438Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.536867Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.638256Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.739572Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.840999Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:34 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:34.942391Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.043577Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.144804Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.245850Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.347246Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.448646Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.550041Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.651426Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.751841Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.853232Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:35 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:35.954635Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.055893Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.157285Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.258703Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.360088Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.461496Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.561890Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.663289Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.764665Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.866052Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:36 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:36.967486Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.067688Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.169068Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.270485Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.370853Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.472232Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.573583Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.674967Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.776336Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.876727Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:37 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:37.978155Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.079544Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.180960Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.282346Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.382752Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.484006Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.585403Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.685826Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.787207Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.887851Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:38 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:38.989239Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.090643Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.192070Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.293376Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.393708Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.495092Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.596501Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.696893Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.798290Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:39 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:39.898716Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.000105Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.101329Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.202618Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.303940Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.405374Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.505770Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.607191Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.708578Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.809988Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:40 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:40.911378Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.011782Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.113208Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.214515Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.315931Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.417229Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.518638Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.619903Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.721299Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.821636Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:41 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:41.923022Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.024436Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.124764Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.226170Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.327604Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.428996Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.530328Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.631708Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.733117Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.834510Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:42 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:42.935908Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.037331Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.137720Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.239134Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.340523Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.441927Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.543358Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.643750Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.745171Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.846635Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:43 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:43.948044Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.049438Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.149856Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.251109Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.352499Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.452915Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.554284Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.655697Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.757124Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.858522Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:44 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:44.959746Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.061119Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.162411Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.262639Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.364171Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.465600Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.566994Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.668392Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.768766Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.870088Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:45 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:45.971504Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.071904Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.173335Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.273723Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.375143Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.476531Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.577938Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.679342Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.779713Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.881113Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:46 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:46.982485Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.082896Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.184207Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.285412Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.385819Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.487188Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.588600Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.689968Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.791278Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.892548Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:47 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:47.993946Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.095375Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.195766Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.297181Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.398490Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.498895Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.600327Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.701593Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.803337Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:48 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:48.903719Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.005127Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.106521Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.207924Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.309351Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.409739Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.511153Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.612543Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.713924Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.815356Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:49 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:49.915748Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.017006Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.118321Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.219565Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.320767Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.422164Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.523512Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.624884Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.726289Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.827671Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:50 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:50.929073Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.030507Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.131902Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.233324Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.334705Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.436028Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.537335Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.637715Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.739034Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.840398Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:51 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:51.940790Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.042165Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.143569Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.245004Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.346396Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.446817Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.548115Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.649521Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.750825Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.852222Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:52 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:52.953565Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.054957Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.156374Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.256763Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.358169Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.459566Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.560874Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.662277Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.763666Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.865451Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:53 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:53.965860Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.067267Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.168702Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.269989Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.371311Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.472697Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.574106Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.675492Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.775882Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.877300Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:54 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:54.978602Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.080021Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.181415Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.281685Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.382953Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.484346Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.585578Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.686944Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.788328Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.889608Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:55 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:55.990983Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.092357Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.192744Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.294161Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.395546Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.496949Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.598299Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.699584Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.800928Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:56 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:56.902287Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.003672Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.105059Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.206449Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.306895Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.408284Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.509566Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.610830Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.712201Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.813650Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:57 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:57.915013Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.016398Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.116762Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.218155Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.319523Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.420902Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.522310Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.623678Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.725072Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.826666Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:58 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:58.928070Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.029599Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.130989Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.232411Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.332709Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.434118Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.535505Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.636886Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.738286Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.839663Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:42:59 sui-mainnet-node cargo[3520474]: 2024-09-12T11:42:59.941079Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.042482Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.142888Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.244148Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.345470Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.445737Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.547133Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.648368Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.748740Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.850151Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:00 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:00.951578Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.052970Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.154391Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.254773Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.356179Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.457571Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.558881Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.660285Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.761649Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.863037Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:01 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:01.964401Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.064799Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.166227Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.267622Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.369040Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.470314Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.570723Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.672096Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.773479Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.873880Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:02 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:02.975246Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.076672Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.178059Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.279476Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.380736Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.482045Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.583479Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.683775Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.785179Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.886685Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:03 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:03.988091Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.089570Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.190946Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.292262Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.393653Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.495060Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.596325Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.696614Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.798014Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.899378Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:04 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:04.999698Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.101093Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.202502Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.302931Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.404221Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.505488Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.605881Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.707298Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.808694Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:05 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:05.909922Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.011349Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.111745Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.213167Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.314555Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.415963Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.517381Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.617765Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.719117Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.820504Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:06 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:06.920915Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.022274Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.123601Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.224993Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.326383Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.426805Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.528057Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.629470Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.729840Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.831141Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:07 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:07.932568Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.033872Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.135206Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.236598Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.338005Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.439436Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.539847Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.641250Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.742629Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.844272Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:08 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:08.945679Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.047075Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.148498Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.248886Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.350304Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.451693Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.553099Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.654498Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.754867Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.856263Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:09 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:09.957625Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.059028Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.160423Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.260830Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.362258Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.463664Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.564888Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.666291Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.767616Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.869042Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:10 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:10.970440Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.070878Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.172267Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.273677Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.375066Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.476485Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.576911Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.678287Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.779681Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.880940Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:11 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:11.982324Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.083706Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.185104Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.286527Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.387912Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.489235Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.590541Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.691931Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.793358Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.893653Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:12 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:12.995075Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.096475Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.196885Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.298194Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.399594Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.501023Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.602410Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.702809Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.804183Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:13 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:13.904814Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.006247Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.107649Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.208995Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.310376Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.410790Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.512185Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.613584Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.714992Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.816380Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:14 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:14.916798Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.018186Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.119597Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.221033Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.322433Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.422994Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.524325Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.625548Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.726927Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.828224Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:15 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:15.929670Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.031061Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.132498Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.232802Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.334209Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.435521Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.536923Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.638329Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.739693Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.841101Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:16 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:16.942495Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.042899Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.144333Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.244718Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.346139Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.447524Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.548933Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.650298Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.751674Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.853093Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:17 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:17.954497Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.054721Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.156100Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.257419Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.357850Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.459248Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.560672Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.662045Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.763447Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.863849Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:18 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:18.965247Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.066674Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.167898Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.269231Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.370621Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.471939Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.573370Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.673745Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.775143Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.876504Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:19 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:19.976895Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.078276Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.179681Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.281110Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.382499Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.482919Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.584273Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.685499Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.785814Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.887216Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:20 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:20.988641Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.090029Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.191446Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.291775Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.393178Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.494612Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.596006Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.697324Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.798683Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:21 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:21.900067Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.001435Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.101828Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.203257Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.304649Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.406063Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.507453Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.607872Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.709303Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.810669Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:22 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:22.912093Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.013405Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.113731Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.215124Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.316524Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.417950Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.519345Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.619892Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.721251Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.821802Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:23 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:23.923198Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.024599Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.126026Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.227415Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.327753Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.429146Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.530478Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.630890Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.732261Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.833659Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:24 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:24.935037Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.036447Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.136772Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.238175Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.339604Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.440996Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.542243Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.643619Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.744856Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.846298Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:25 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:25.947628Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.048973Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.150362Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.250776Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.352171Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.453573Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.555005Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.656383Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.756780Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.858143Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:26 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:26.959525Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:27.060937Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:27.162224Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:27 sui-mainnet-node cargo[3520474]: 2024-09-12T11:43:27.263624Z INFO sui_data_ingestion_core::reader: Read from remote. Current checkpoint number: 10599, pruning watermark: 599, new updates: 0 +Sep 12 13:43:27 sui-mainnet-node systemd[1]: Stopping sui-indexer.service - Sui indexer... +Sep 12 13:43:27 sui-mainnet-node systemd[1]: sui-indexer.service: Deactivated successfully. +Sep 12 13:43:27 sui-mainnet-node systemd[1]: Stopped sui-indexer.service - Sui indexer. +Sep 12 13:43:27 sui-mainnet-node systemd[1]: sui-indexer.service: Consumed 3min 55.279s CPU time. diff --git a/crates/sui-indexer/src/handlers/checkpoint_handler.rs b/crates/sui-indexer/src/handlers/checkpoint_handler.rs index 2d1deb98978d1..009df30c1cfe3 100644 --- a/crates/sui-indexer/src/handlers/checkpoint_handler.rs +++ b/crates/sui-indexer/src/handlers/checkpoint_handler.rs @@ -5,25 +5,35 @@ use std::collections::{BTreeMap, HashMap}; use std::sync::{Arc, Mutex}; use async_trait::async_trait; +use chrono::Utc; use diesel::r2d2::R2D2Connection; use itertools::Itertools; +use odin::structs::sui_notifications::{ + CoinReceived, CoinSent, CoinSwap, NftBurned, NftMinted, NftReceived, NftSent, + SuiIndexerNotification, +}; +use odin::sui_ws::{ + AccountObjectsUpdate, CoinCreated, CoinMutated, CoinObjectUpdateStatus, ObjectChangeUpdate, + ObjectUpdateStatus, SuiWsApiMsg, TokenBalanceUpdate, TokenUpdate, +}; +use sui_types::gas_coin::GAS; use tap::tap::TapFallible; use tokio::sync::watch; use tokio_util::sync::CancellationToken; -use tracing::{info, warn}; +use tracing::{error, info, warn}; use move_core_types::annotated_value::{MoveStructLayout, MoveTypeLayout}; use move_core_types::language_storage::{StructTag, TypeTag}; use mysten_metrics::{get_metrics, spawn_monitored_task}; use sui_data_ingestion_core::Worker; -use sui_json_rpc_types::SuiMoveValue; +use sui_json_rpc_types::{ObjectStatus, SuiMoveValue}; use sui_package_resolver::{PackageStore, PackageStoreWithLruCache, Resolver}; use sui_rest_api::{CheckpointData, CheckpointTransaction}; use sui_types::base_types::ObjectID; use sui_types::dynamic_field::DynamicFieldInfo; use sui_types::dynamic_field::DynamicFieldName; use sui_types::dynamic_field::DynamicFieldType; -use sui_types::effects::TransactionEffectsAPI; +use sui_types::effects::{TransactionEffects, TransactionEffectsAPI}; use sui_types::event::SystemEpochInfoEvent; use sui_types::messages_checkpoint::{ CertifiedCheckpointSummary, CheckpointContents, CheckpointSequenceNumber, @@ -44,15 +54,16 @@ use crate::models::display::StoredDisplay; use crate::store::package_resolver::{IndexerStorePackageResolver, InterimPackageResolver}; use crate::store::{IndexerStore, PgIndexerStore}; use crate::types::{ - EventIndex, IndexedCheckpoint, IndexedDeletedObject, IndexedEpochInfo, IndexedEvent, - IndexedObject, IndexedPackage, IndexedTransaction, IndexerResult, TransactionKind, TxIndex, + CustomIndexedTransaction, EventIndex, IndexedCheckpoint, IndexedDeletedObject, + IndexedEpochInfo, IndexedEvent, IndexedObject, IndexedPackage, IndexerResult, TransactionKind, + TxIndex, }; use super::tx_processor::EpochEndIndexingObjectStore; use super::tx_processor::TxChangesProcessor; -use super::CheckpointDataToCommit; use super::EpochToCommit; use super::TransactionObjectChangesToCommit; +use super::{CheckpointDataToCommit, CustomCheckpointDataToCommit}; const CHECKPOINT_QUEUE_SIZE: usize = 100; diff --git a/crates/sui-indexer/src/handlers/mod.rs b/crates/sui-indexer/src/handlers/mod.rs index ce2d0d07cc64d..376a74043abb7 100644 --- a/crates/sui-indexer/src/handlers/mod.rs +++ b/crates/sui-indexer/src/handlers/mod.rs @@ -6,8 +6,8 @@ use std::collections::BTreeMap; use crate::{ models::display::StoredDisplay, types::{ - EventIndex, IndexedCheckpoint, IndexedDeletedObject, IndexedEpochInfo, IndexedEvent, - IndexedObject, IndexedPackage, IndexedTransaction, TxIndex, + CustomIndexedTransaction, EventIndex, IndexedCheckpoint, IndexedDeletedObject, + IndexedEpochInfo, IndexedEvent, IndexedObject, IndexedPackage, IndexedTransaction, TxIndex, }, }; diff --git a/crates/sui-indexer/src/indexer.rs b/crates/sui-indexer/src/indexer.rs index fff48c69ac843..32435cf8e98ba 100644 --- a/crates/sui-indexer/src/indexer.rs +++ b/crates/sui-indexer/src/indexer.rs @@ -82,6 +82,7 @@ impl Indexer { .expect("Failed to get latest tx checkpoint sequence number from DB") .map(|seq| seq + 1) .unwrap_or_default(); + // let primary_watermark = 56614153; let download_queue_size = env::var("DOWNLOAD_QUEUE_SIZE") .unwrap_or_else(|_| DOWNLOAD_QUEUE_SIZE.to_string()) .parse::() diff --git a/crates/sui-indexer/src/lib.rs b/crates/sui-indexer/src/lib.rs index 6c1794c5f340a..c2d6b4e91e4a7 100644 --- a/crates/sui-indexer/src/lib.rs +++ b/crates/sui-indexer/src/lib.rs @@ -1,6 +1,6 @@ // Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 -#![recursion_limit = "256"] +#![recursion_limit = "512"] use std::net::SocketAddr; use std::time::Duration; diff --git a/crates/sui-indexer/src/schema/pg.rs b/crates/sui-indexer/src/schema/pg.rs index c1720c94b37a1..cbb24fcf8d6ce 100644 --- a/crates/sui-indexer/src/schema/pg.rs +++ b/crates/sui-indexer/src/schema/pg.rs @@ -1,5 +1,3 @@ -// Copyright (c) Mysten Labs, Inc. -// SPDX-License-Identifier: Apache-2.0 // @generated automatically by Diesel CLI. diesel::table! { @@ -27,7 +25,7 @@ diesel::table! { validator_signature -> Bytea, end_of_epoch_data -> Nullable, min_tx_sequence_number -> Nullable, - max_tx_sequence_number -> Nullable + max_tx_sequence_number -> Nullable, } } @@ -268,10 +266,2050 @@ diesel::table! { } diesel::table! { - protocol_configs (protocol_version, config_name) { - protocol_version -> Int8, - config_name -> Text, - config_value -> Nullable, + objects_version_00 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_01 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_02 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_03 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_04 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_05 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_06 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_07 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_08 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_09 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_0a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_0b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_0c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_0d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_0e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_0f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_10 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_11 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_12 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_13 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_14 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_15 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_16 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_17 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_18 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_19 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_1a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_1b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_1c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_1d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_1e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_1f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_20 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_21 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_22 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_23 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_24 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_25 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_26 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_27 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_28 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_29 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_2a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_2b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_2c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_2d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_2e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_2f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_30 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_31 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_32 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_33 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_34 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_35 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_36 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_37 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_38 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_39 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_3a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_3b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_3c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_3d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_3e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_3f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_40 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_41 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_42 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_43 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_44 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_45 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_46 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_47 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_48 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_49 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_4a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_4b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_4c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_4d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_4e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_4f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_50 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_51 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_52 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_53 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_54 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_55 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_56 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_57 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_58 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_59 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_5a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_5b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_5c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_5d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_5e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_5f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_60 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_61 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_62 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_63 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_64 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_65 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_66 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_67 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_68 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_69 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_6a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_6b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_6c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_6d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_6e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_6f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_70 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_71 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_72 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_73 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_74 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_75 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_76 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_77 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_78 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_79 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_7a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_7b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_7c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_7d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_7e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_7f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_80 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_81 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_82 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_83 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_84 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_85 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_86 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_87 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_88 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_89 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_8a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_8b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_8c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_8d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_8e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_8f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_90 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_91 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_92 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_93 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_94 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_95 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_96 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_97 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_98 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_99 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_9a (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_9b (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_9c (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_9d (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_9e (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_9f (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a0 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a1 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a2 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a3 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a4 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a5 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a6 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a7 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a8 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_a9 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_aa (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ab (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ac (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ad (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ae (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_af (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b0 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b1 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b2 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b3 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b4 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b5 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b6 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b7 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b8 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_b9 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ba (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_bb (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_bc (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_bd (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_be (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_bf (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c0 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c1 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c2 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c3 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c4 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c5 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c6 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c7 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c8 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_c9 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ca (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_cb (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_cc (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_cd (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ce (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_cf (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d0 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d1 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d2 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d3 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d4 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d5 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d6 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d7 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d8 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_d9 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_da (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_db (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_dc (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_dd (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_de (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_df (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e0 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e1 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e2 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e3 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e4 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e5 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e6 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e7 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e8 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_e9 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ea (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_eb (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ec (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ed (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ee (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ef (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f0 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f1 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f2 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f3 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f4 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f5 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f6 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f7 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f8 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_f9 (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_fa (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_fb (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_fc (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_fd (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_fe (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + objects_version_ff (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, } } @@ -285,6 +2323,14 @@ diesel::table! { } } +diesel::table! { + protocol_configs (protocol_version, config_name) { + protocol_version -> Int8, + config_name -> Text, + config_value -> Nullable, + } +} + diesel::table! { pruner_cp_watermark (checkpoint_sequence_number) { checkpoint_sequence_number -> Int8, @@ -397,43 +2443,294 @@ diesel::table! { } } -#[macro_export] -macro_rules! for_all_tables { - ($action:path) => { - $action!( - chain_identifier, - checkpoints, - display, - epochs, - event_emit_module, - event_emit_package, - event_senders, - event_struct_instantiation, - event_struct_module, - event_struct_name, - event_struct_package, - events, - feature_flags, - objects_history, - objects_snapshot, - objects_version, - packages, - protocol_configs, - pruner_cp_watermark, - transactions, - tx_calls_fun, - tx_calls_mod, - tx_calls_pkg, - tx_changed_objects, - tx_digests, - tx_input_objects, - tx_kinds, - tx_recipients, - tx_senders - ); - }; -} - -pub use for_all_tables; - -for_all_tables!(diesel::allow_tables_to_appear_in_same_query); +diesel::allow_tables_to_appear_in_same_query!( + chain_identifier, + checkpoints, + display, + epochs, + event_emit_module, + event_emit_package, + event_senders, + event_struct_instantiation, + event_struct_module, + event_struct_name, + event_struct_package, + events, + events_partition_0, + feature_flags, + objects, + objects_history, + objects_history_partition_0, + objects_snapshot, + objects_version, + objects_version_00, + objects_version_01, + objects_version_02, + objects_version_03, + objects_version_04, + objects_version_05, + objects_version_06, + objects_version_07, + objects_version_08, + objects_version_09, + objects_version_0a, + objects_version_0b, + objects_version_0c, + objects_version_0d, + objects_version_0e, + objects_version_0f, + objects_version_10, + objects_version_11, + objects_version_12, + objects_version_13, + objects_version_14, + objects_version_15, + objects_version_16, + objects_version_17, + objects_version_18, + objects_version_19, + objects_version_1a, + objects_version_1b, + objects_version_1c, + objects_version_1d, + objects_version_1e, + objects_version_1f, + objects_version_20, + objects_version_21, + objects_version_22, + objects_version_23, + objects_version_24, + objects_version_25, + objects_version_26, + objects_version_27, + objects_version_28, + objects_version_29, + objects_version_2a, + objects_version_2b, + objects_version_2c, + objects_version_2d, + objects_version_2e, + objects_version_2f, + objects_version_30, + objects_version_31, + objects_version_32, + objects_version_33, + objects_version_34, + objects_version_35, + objects_version_36, + objects_version_37, + objects_version_38, + objects_version_39, + objects_version_3a, + objects_version_3b, + objects_version_3c, + objects_version_3d, + objects_version_3e, + objects_version_3f, + objects_version_40, + objects_version_41, + objects_version_42, + objects_version_43, + objects_version_44, + objects_version_45, + objects_version_46, + objects_version_47, + objects_version_48, + objects_version_49, + objects_version_4a, + objects_version_4b, + objects_version_4c, + objects_version_4d, + objects_version_4e, + objects_version_4f, + objects_version_50, + objects_version_51, + objects_version_52, + objects_version_53, + objects_version_54, + objects_version_55, + objects_version_56, + objects_version_57, + objects_version_58, + objects_version_59, + objects_version_5a, + objects_version_5b, + objects_version_5c, + objects_version_5d, + objects_version_5e, + objects_version_5f, + objects_version_60, + objects_version_61, + objects_version_62, + objects_version_63, + objects_version_64, + objects_version_65, + objects_version_66, + objects_version_67, + objects_version_68, + objects_version_69, + objects_version_6a, + objects_version_6b, + objects_version_6c, + objects_version_6d, + objects_version_6e, + objects_version_6f, + objects_version_70, + objects_version_71, + objects_version_72, + objects_version_73, + objects_version_74, + objects_version_75, + objects_version_76, + objects_version_77, + objects_version_78, + objects_version_79, + objects_version_7a, + objects_version_7b, + objects_version_7c, + objects_version_7d, + objects_version_7e, + objects_version_7f, + objects_version_80, + objects_version_81, + objects_version_82, + objects_version_83, + objects_version_84, + objects_version_85, + objects_version_86, + objects_version_87, + objects_version_88, + objects_version_89, + objects_version_8a, + objects_version_8b, + objects_version_8c, + objects_version_8d, + objects_version_8e, + objects_version_8f, + objects_version_90, + objects_version_91, + objects_version_92, + objects_version_93, + objects_version_94, + objects_version_95, + objects_version_96, + objects_version_97, + objects_version_98, + objects_version_99, + objects_version_9a, + objects_version_9b, + objects_version_9c, + objects_version_9d, + objects_version_9e, + objects_version_9f, + objects_version_a0, + objects_version_a1, + objects_version_a2, + objects_version_a3, + objects_version_a4, + objects_version_a5, + objects_version_a6, + objects_version_a7, + objects_version_a8, + objects_version_a9, + objects_version_aa, + objects_version_ab, + objects_version_ac, + objects_version_ad, + objects_version_ae, + objects_version_af, + objects_version_b0, + objects_version_b1, + objects_version_b2, + objects_version_b3, + objects_version_b4, + objects_version_b5, + objects_version_b6, + objects_version_b7, + objects_version_b8, + objects_version_b9, + objects_version_ba, + objects_version_bb, + objects_version_bc, + objects_version_bd, + objects_version_be, + objects_version_bf, + objects_version_c0, + objects_version_c1, + objects_version_c2, + objects_version_c3, + objects_version_c4, + objects_version_c5, + objects_version_c6, + objects_version_c7, + objects_version_c8, + objects_version_c9, + objects_version_ca, + objects_version_cb, + objects_version_cc, + objects_version_cd, + objects_version_ce, + objects_version_cf, + objects_version_d0, + objects_version_d1, + objects_version_d2, + objects_version_d3, + objects_version_d4, + objects_version_d5, + objects_version_d6, + objects_version_d7, + objects_version_d8, + objects_version_d9, + objects_version_da, + objects_version_db, + objects_version_dc, + objects_version_dd, + objects_version_de, + objects_version_df, + objects_version_e0, + objects_version_e1, + objects_version_e2, + objects_version_e3, + objects_version_e4, + objects_version_e5, + objects_version_e6, + objects_version_e7, + objects_version_e8, + objects_version_e9, + objects_version_ea, + objects_version_eb, + objects_version_ec, + objects_version_ed, + objects_version_ee, + objects_version_ef, + objects_version_f0, + objects_version_f1, + objects_version_f2, + objects_version_f3, + objects_version_f4, + objects_version_f5, + objects_version_f6, + objects_version_f7, + objects_version_f8, + objects_version_f9, + objects_version_fa, + objects_version_fb, + objects_version_fc, + objects_version_fd, + objects_version_fe, + objects_version_ff, + packages, + protocol_configs, + pruner_cp_watermark, + transactions, + transactions_partition_0, + tx_calls_fun, + tx_calls_mod, + tx_calls_pkg, + tx_changed_objects, + tx_digests, + tx_input_objects, + tx_kinds, + tx_recipients, + tx_senders, +); diff --git a/crates/sui-transactional-test-runner/Cargo.toml b/crates/sui-transactional-test-runner/Cargo.toml index d602aea50457a..fed0ee7ef631c 100644 --- a/crates/sui-transactional-test-runner/Cargo.toml +++ b/crates/sui-transactional-test-runner/Cargo.toml @@ -40,14 +40,14 @@ move-stdlib = { path = "../../external-crates/move/crates/move-stdlib" } move-vm-runtime = { path = "../../external-crates/move/crates/move-vm-runtime" } simulacrum.workspace = true -sui-graphql-rpc.workspace = true +# sui-graphql-rpc.workspace = true sui-rest-api.workspace = true sui-swarm-config.workspace = true sui-config.workspace = true sui-core = { workspace = true, features = ["test-utils"] } sui-framework.workspace = true sui-protocol-config.workspace = true -sui-types = { workspace = true, features = ["test-utils"]} +sui-types = { workspace = true, features = ["test-utils"] } sui-json-rpc-types.workspace = true sui-json-rpc.workspace = true sui-json-rpc-api.workspace = true diff --git a/crates/sui-verifier-transactional-tests/Cargo.toml b/crates/sui-verifier-transactional-tests/Cargo.toml index 12d9944ec1e9a..302b64e93c033 100644 --- a/crates/sui-verifier-transactional-tests/Cargo.toml +++ b/crates/sui-verifier-transactional-tests/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" [dev-dependencies] datatest-stable.workspace = true -sui-transactional-test-runner.workspace = true +# sui-transactional-test-runner.workspace = true [[test]] name = "tests" diff --git a/fullnode.yaml b/fullnode.yaml index 54be2d3192e3a..18f0be5f16fea 100644 --- a/fullnode.yaml +++ b/fullnode.yaml @@ -28,7 +28,7 @@ genesis: genesis-file-location: "/root/sui/genesis.blob" authority-store-pruning-config: - num-latest-epoch-dbs-to-retain: 3 + num-latest-epoch-dbs-to-retain: 0 epoch-db-pruning-period-secs: 3600 num-epochs-to-retain: 0 max-checkpoints-in-batch: 10