From f39ede9869a47388d3e4c8fa86cb64ed1c21b344 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Sat, 16 Jan 2021 00:16:42 +0300 Subject: [PATCH 1/2] opcode: add CALLT opcode, move ABORT/ASSERT Refs. #1644. Hash compatibility test temporarily disabled, to be enabled when it's up to date with current C# master. --- cli/testdata/chain50x2.acc | Bin 45874 -> 45874 bytes pkg/core/native/compatibility_test.go | 21 +- pkg/core/state/contract_test.go | 4 +- pkg/rpc/server/server_test.go | 6 +- pkg/rpc/server/testdata/testblocks.acc | Bin 7665 -> 7665 bytes pkg/vm/opcode/opcode.go | 5 +- pkg/vm/opcode/opcode_string.go | 272 +++++++++++++------------ 7 files changed, 156 insertions(+), 152 deletions(-) diff --git a/cli/testdata/chain50x2.acc b/cli/testdata/chain50x2.acc index 3c320249034f91fad7254b088a263a702973e234..0cb4f546c0037417ab841efcbd1d2d5b9fa615cd 100644 GIT binary patch literal 45874 zcmd44by!qU!}dEg3`2KFN{4jE&>)C(cXxL;h;+9!(ug!jsR$|^f^;Jd(s|%{_5IFy zk9=qR&OdTp%v``?@45GV|JK^8X4nA$fYaSKBwwnA3rerZh%V?9>-CI!-<(XfUM&q$ ziYztnG>f^d@+d@X66~o${nwH7Fxy{yZ6#}joSYAMNJM>Y_F+ke0zhFv0UlK__}rJt zgZrp&c|#C@}TP!yLIt;o@YJf>)7v$=T7GhElEI@UvJPG6B=OqAY{Qm7H(5KcUJsdW^QCfSBF@>{$16XW z9$8rzC*aGp{b`SC^R2&3wfVUSv0RHs&2_b z34y_2ySpMKZK^k6AqyC(7Q?VDES}mky=DX(CY2+GYEDAKq5Vd8Mcx`Q96@={FXMfT z+|ieF6(+OxZAyW)FZt%u`k})=x*J3eGX+AJH(rYyaF1t3FITMS6K}9Ep!7C~dLA2$ zv`(^?j*TpW6}?vt15k(kFB|{!*g0A9pJz;8vHv_n-#tS8(G-9-GBjZE7!HID8XrI_ ze@fDW%fQ8RG&98?faPHh!v51gVRw>(5M7)M?VQa_oj};Ld{^C=w*7-C0`{b=2J(d$ znM9}}M!wogyij+R+lGWX7JOuGAnBaPf0HfKG1OiBSOt$}akF3lARUai!?a0Hpn>@< zxE|+*)ukx-$vY3xv`BKN)WuDtRr|)bG$3&Khy83P7G42IgSW=Ap5<}sk8)WpI+(&) zPDV_uko1(|y9RilWfvrW?4o%s0!?42gQAEA%Nfj0Gio25zqBI=0`Ho1D6^yWHbIZh zk`xJR|FmbvQIoN=B0pR5hGG0Fnf+6n(f=`gGqTEywwBqRpN$dN#R&*~+u*uoji1Bq zl@LoH6P7P)Ki0hj+ zE2_nTG6|8`U`difXPP5*FWml|;?U<=V-OggZ|DoB2<y>iO@o8@zGLb*of+(=eK z{Ya*niU@*z$C4{N`A-Vvit3eywTXc8D`#c?wdK=YTJaDUs#Cas(ro`qYK||-h*g#N`_3p%d-+Y_K@Ac*+7ADQV*nrg&-kws1;8qM{ZB1jOJ%rjj4Qr~m zm;mQK_;O4<-lIL=mN6061UH2`m(_ zVf(q7);=mt{UJxbgz0QdU&~kbggmjL%4Kk&(Fz29+fA){{PhDZvPLkWSgEdaM6;X+ z6Dzetf-6w~e2lC)Fi#rFJzs$XtvQF?!Pp1C7)8;L+ z;;yz1V)k}-Rj{!O1tW!_ktGG6H-)XKi-o<3GXO#TC!bss@=yZ1|7gMME;<}6!PNpudPIfMy4)=#wv$r(4EADJ)cK4H+p^dYtFXMk7 z(!urql)n$f`ah5L-{q`LJ@3l>I-;nji>Zi{lc6WY|LsU_hBmJEFYEtZ27(uKSH#rK z)XwEUuiuxE!raN;)!~;I2U90oOJ`?Gd%OR-7{NLREV3qyA3_d}xqN?)dDp_io0vM- z*n5JodEaNd;G)YGX}Lb-&NGR}NczC?@jq2Al;|BOLWhUmDz~S@aB&?5B%r_?PVtMN zJ{^{pwK*`Rh=oCTDf=tYF4t9(Et?+&)MGQ|D09RjhwUa!rEj0yO&-iGy{f4 zC@nl@eYWlYaS92S#s>#CaSct}f&m1MES1)GNUHWi>?4ZaQ6Dp5%dWEykw!SPES`m> zP5K@g73P-}AFsY5Tu~WiED+QCo{`~0l4w@!g%%OV_xSB)5css5Qg1KKo=*ZlT9QU{ z?>lu!U3W`wUhX>#uwX7+(VU@1WEqM zD(L@qpZK2+0+Qf=JO%uEzV`&`PgM{UfFA^m4$EH&L|7%1;06Kn*7tsDIk_LYr`=~2 z=B`!%VH@Nz>G(H=yWjM~?$Jj&{j38EvHo{ZlP`tG(C5*(i1$9g)(stA#|>zApJEBlS$SXrVi`LpNp z4tV%%+4IGen73FN7tg#CHE3kVXg^icGoE|0GY{!AJ`?X@Dj*(|E-m&+!|DXSiKkMMfmI+t|;(Jd~p)jWrX2!ltRT+rNG+A zi)Z~jB;(CEtjluFLcRXe9LGuQg4q8;3IzlvW88iZh{TN#Bn~7hN#UUQ#Mb{rlezco zTTmdp5!+Lor!|ee+Sk(5{A0NMbe#0bYWYl6Rw*-C`TH2JxeXLW}#_>(rTfyL8g3TjJCkE?Der9a}5 zEI<0!5&Tb$`acl7_vB#&;cC_DQQE&cL?45IlbsCgiyGd~R;3^eDm--kX_={3R%@-1 zkgKt_wPW&;_%dAk9^ZGRzQ>o*n_};2XtBq|b%HdkJlW@DX9V*#B<7*feP5a)m~Z1n z3qu}Mz<+L6|4JFRxU;}^F!GLxKL`kqeW9EyOBTQafKXYcujFQjxQ)7u-;W+)89H2< zIh7oK^%dC(fu77=Nx>O{M0D2g`Zv2{vUM+SS$a`(gp7vYA#S58Mh|AgkI5{I9akwY8+4wA zSic!U5WI1NvKCUD2mM0ue(>cX1Z6zGl+J%Tr9P%tf##4q@CA_4_SVGn7|Jd1;k6so zXM?U`x}_CDw9_iQ#Gffdv|=x=syaYb7f4e{d17cZnkP3@eKnc_+f3Z7msu!>An-i* zOQ2j-)1H9Bf`W&L`Hl9|554m(7^=n%z)&hIB#QTVOc)Lx;w{$guB>nJM=tY0OS~|Y zEsF=l#DztxB5Z<*F4eN44SC_?X+Z7N7wSa($ z?|T)(qXVRQ0}rU@q3_YL_6OmQgWJ^=Yo_=B8qYy&sew4PNotn}*_!-*Jhu*8=l{L3R;;~{&4D3OUX^Tpkw4XhgyXjO@{ZDLeO|mHEbp}{7`244ATeElvs)8 zAZSx322XUuPGY8GGf$LKwopEQSR6{*QjAcl(vBviS7PX0Ew}FHax~6zDs>RJt?&%t zLyczJcT}s3s|k^;OW?(XO#9S2^@sg#s(_1UGu$;I3}T6a?BI)@N{}$xOhgw60+BMg zMwqyHQN&M85cm}(kBrnI$y4?Z-Uog<%U0JI3tzp*C&_~p!+rUWwQq0JK(htUpqxRN zR+jj#sT4+9POJkwmz69=UEGf+m#qGE1QGra)O$}JMsN(P*yj1G9J3fg5YPhOB{?7; zj%S_=!l3HXm(rZiv;92aks??1`rv+y$3t{@Iw$1oE%n-<&`S9!qYIz$1?&q#f*A9#jD0Un|q)VNHl`4EGEr0s$Y@5H^FfRJFc-gismm zk+qUYsM(c{-++=22de)!!@cLH87xPK3V2*142&PtL#O&PcVW{AretcqSnNSn1jF|+ zaObuoW-8@a3p(jRuIx90SQGX$LAAyGuT#szB+>SmiK+~rl>WW># zH{)p6a^NlS!hzbH2*3Sm_KFO4T;|J~S38V;#mT6*ZP1QEoaRa(m1zGX&Vx--co0}e zK+)b6E^ND{)_7orYMX|<0VO(gW2~+z`*M$J^(dJWWfuE{_ED&UD(@a+(mU4u;O(YP zMR$h);?~(IZmu*CxHq?pnYzk&5$Gin`+n_8N@-h3G-u*^$k$j3!yR^hA&{wkDO=dZ za&f23kc}if=hn-{((W^Q=(hKyzu9Y@<$oPPq(21p-jjzBWS|~olk;plx8VQ*L$;U5 zoU;wIUXDT-)YD{aE3x(`2!}N}bGkn*cd>0TR2v6$`Vz1X9i29{(3Zyct};}j&%Z-W zh&f?XQBsi}N{=?xygbi~NKezDPk}tB0N`IMBl}Fke>ESQK>Zj5bg6mlZctzSnUEYp zWkD(P2GAVhjQwu*-`+Uz;m>lNo1{CVz-}3d0`=X$h%Z)iqmF09F^QkAIEa;7ekrh# zpj6~iq{V1;yXko0Rsy-Q-v|;7Uj#j}*=AY9)$M(&Mbj?wbpA#5E2YOhDI*m_J2z}> z$2`xY-<|rGP$%~->lY!B(itaDPH-$bNlSXz`_?v~{X+1*u6hW;o9FN!tD#)Bz{&R7 zJzP}WXhkmkI4g$pAf`(*Wj!Ve$3;1?E^@&=)qG)eUly#z>UEdCO?^0CG!^2xH z0fCSD)|o^huyd_alTnyCDO z?Cae658#tro}Rd!(fNenrdr6A{YG#`;IM+u`kT2vksd;o5qGz2?m@5c^#>&(GM3^> z`nTVZY{VSlHl7I?g_mpveOhe$r~%k5Mm|N#(J8MSi}eMf|3dJ-7Jdl9IUA*=&LP3> zX@)0-vjFmMY<5d`48-_cKCLrS}tg3y8cmhQm=z+ z-=V=XHkmXIZL}iDF(Hm~EIEO|`=RdxJh|47mfN@7Cgl0r`h(=3x?n_HlM8+9TFt+N zXKW7Tc-ym|wqh7jnTjO?_1Nk0knTjruGuqZ=N#uF-+vuJls^RZ-jjzB)YWUAcyaO+ z>nsxltP`!J_}U;AlUxR2P%p4@p>VW2gXy`FcreE%w%h+_xa20=8*WSpC2SXlI0P0^Wn|cfXz4@aYd^i*ccymF& zt&p9n`4Q6g-7%(e;0sDd*v*O{)l3=IZBiBouQ!byr$Hg&zxX9-4fKD zu|0>p`ZacvHi!IZ+&7V;lrjkBpFpncH-hdg^=&DuysTdE=Hp#ar44Ne)SI#i)z4w= z1CO4N6w{yvoYXVwQ&hZSd>_mE;pqv5e{TslNi3=BK;{goF3k$YF9h#z7al?o?WY_& z6YGY{be`e1o_pI7oSR#_!Am^#UEJd83eWhBbgk=l?3es$K`5PbN#Bl-pn{7FJ+XHI z9JfaG%H|SrAaLwG)9d)P8?~`wGV-Y79H)QKz)~n;q<3t5TS8)#SpP zW7!Kds7bGvD(vJqG3#Fbh2KJHE(Gq@LQM0*1k2#LN6ThfU&dh0eCaXhb$KHc&tWed z;YIgV_OZe)OG<&>T?ZHT#q}0JD{|7Ai3&xX)Z=TnNYd1`qkkPiv_Ay(-jjzBJW_b( z#c`eA;x_{VQXh=N4$$i0JC;C*pwYGn5o)h99N&~M0zPqAHVFUX*-I$DcF+=fP1)%ZaVvR5^)lWo5{uw~^R1xzRg7-H<4!mY4OiMZ*x5wT|1O z20zI`9{jO$2OYi;y!!jr$awvM02KEIPWWZsz`MRKx8j*KrU&D{jv&S#f_m@C!w62| zmPVdFUz>p@0|8-}TJ2dt$a5jjAPnkpGRMhA(}i2@PfM(_@$+Ykn}t10}&&^-Y2ua%X2oXyxYb`!d} z8|y9TJ=4w&Y9yIQhfvw4L+@AH&0n|j`<=5u>kaXGNrD_US5LR+f`9TH`RZ}TDlpfb z7H%GeP%bo1|Lj*hlYG&a^o;A#8}IzaXi(w#-y^6q{YWQV^*U^~ykod@8A~A|%E3vJ zP8dm^+8h+we5iV&~b9Fnoz1K^j448d>%1!c2LrUkKjcu|I?$ z@)H$5>OJTw@P)k-dxoHr9tNK|r*aehNs+=bk_^qlh?*_2|F>Sxq4&{D`)eqvO{vqH zEc%$J*~(uU>qVd6%?lQ4JPpH2FFf3DLMbSX)YwEdH9!owI$^qWSuFhz^ZcukQ zhf>4}+bxU+wI%E?+R#lm48M!+B^yDd*IomGHI&jDINVWzB_7VHs>E(2?@{s>w4myf zdeW9FYkkf(RgmXwNOD+f>cZL%YW?7xHcZsNlLpj1Pn*e9D}p{``PUJ|`a@9fJ$V>G zJ>_y0vV7%Jj;|n~*w}1AF*bv;h$VzUt@ExtKS!oncT%~&%)R!v8A`|jp^RAkaO0zZ zfx?VpJIF~675u*7EP(Jf%yVcHg(mNDpGu~#s3@I1#=U!2WAxbrO}#!<}Lc zICrfes`Ee%Es6>rHl))n>Wq}GfoEdg@b-Qe7#K=+N&7%7bXTER(#*(?nuHax?(e{; zM}3Y;^mB?SFdxme0&saN{b=(OygD45O=K67Ay@Xh6=Wtga!ruwqAE}6;n+Xe;y7l4 zt~4QHHmSwz#nev|(bdMWFskOzkvJI z4-!d2cu}M=HLt~D0dBaVPk$;{^wxle|8)d${t(oA zPaZ~)+?bu#MwN6T&*UypvoxS}x;Y{U^$SklPmc|h4Tb63 z7QgS)5!r>SS&3dLUJa6#(j>>Qaf*rI-BOZS(Y~Lmm1nb)P}9oykdDW8PZ$p$J+RlI9B%@m_M6jluMB^7^s~b(PPy$mDrEcD5ybmL zQ13l?7(vSe{??L<7IkEA5Kt3l5YK;t{EMd-gh35+8_MCo+)q-GRVyN{@wH~UK`t?? zcFw9?5P3_!A#9CV_F@zl?-?;SFJ_67`#OLahM3ClbvKgtgq||iE_x>9K?UIdwX$^3 zCjz8)&T=k25U|P2DYV9Gs!T}~LS;?TPZ?>?m*yIoJk{B^nc*#mO)!4KO7MdEIZjwh91d0R z?QLzXN!LtG0}~!=J(UdM;s|v{G+Z2h9L_UNnpT|O=RSbIy3LP~@Ea@CzRg;b8=`z^ ztY*(n5c$ltZBld8J}UZyDbRIdSWl>hYU$bqVaz!Oc~+a8fTWL-yT`DD^P6FM2^hg;5I)k*1Ad1w;sgid$}!md<`t(NtuVB=}=-$!x2aesrHI@+$QfC{=k zrqUXuqkjHG_JCYixxCclqQRxJ{gSzl6CI#k#P3|f5$jSc3AwW02u|jnU?t+%l!0i} z%38tMY%zd-an3me^a={+2_~CyI6*TG!Z0V@+X@jrb^UME6de&?jf7PzM>ep2fUgU= zWAT0=ct39S5Q297+2h3xqV+^dw!tG%0=_u7P_U*J-ECqSA7Kx~>`OZhBTiH7DsW3ge& zJ>WRrHh66%nd&2V8aw<9XK1*&+qbXPX(=0H#fSnfgI%?F0tC)Kq@U6d@01GYN-_=Q zzj>K_=2VJb}j)eqesdg-dIPdGsJiJ5v%Y-ap(Y}9v zbqvuTf_m@C!w3#&Tb<3(hrJ=1009*jZcC?AMs+cAAPg!yIRXB_)+Ml9Bym4UKbJOZ zQI6Z_q;n+82F*3!5$A;~>z>7#xiVbiB{s3Rl*Ek8Xka)3rc@WjyFtpuH25sYg9;%2 zYh~`OjWIF~_>4~?LBJ6t>lqyE-rVkS2$i92jom~gp4(lzCRPEkncHB!XtFcVU+Nuq zVpDbBiWIxayquqq=`^q*%Fk!DKOm__)>tAT(d-BG)Jm2Z+ipXy>^Fk%TLvE6kwtS2 zIqY)d@yO{m%6P^xUk+byEhr3}6X?pYvfnsh^a9j~bkXR|>xNmqGCm0gVaVM`-((X# z@w{Te|ApZFh}=U68m4ubk6w_5Q%A)-^6}s}X#zaApV0RU96^L>_cjG$FVQEqjIMG=n=2pAOnI2j%V4zmW*of1A{UcPRGD<$|FoZ~_g zP_$3kEOus?34d&UDmK^1d7`5=r~N(cwlzXN%%H!9mR0KLWiE#PBf_{Xu%N8#eCz_` zK?RWfwX&uNk?F|4rFcjW#`Yfdfvh9|SN`{y|9`>9caqk~Lv12RUl>`3D+R3Q~PWDrq{2M$mAe1R1WEr8)O$}JMlkyo=meb$JGf6HuRPn4xfAIu@Ga4H|61s45U7iC)X zt!V}FpaRJLTG{9)sRcwvJ*|!&5KwaV-8A*&r70yggv!47lm~lgy!8jm$qnP9dsV#%6=m# z6YE!2KmRN)JBtRDh!XL&KOJ8k(r8m~NE6KWa#7Do?%tqx7h2BJ#Gb0*>)og~XzFfu zPK5|s;s?730w>f|~Ij8z1c zRHhuFBY`WcF>srizCp?`Fy7OIxIQK~{tZ-rjJ z85|O`00qj_=YJhR@;?Oi-jjzB45H&48|$CJ+El*_>M-4Vl$8p0=Tr!T>I}W}^N=VO zyIoD>XDYtxl&?UXkT0nh}W!W7z`SN zB!bB>V|@YrE7mA1Xdj4vA$UJ~^ALjg?V{B?A#+PeyO+A>M_JqUyPjAb%O z;9C7>Hqxr6G%=#o9x3Rxj{3EIn({>XwG2T$GsXD9yNe%Ix#X0Ak?<5oo{oCB&;5c< z>^WtiTt%@uAP*|w@n0+RojW|Mw2Hq7yi*o?ZDT_f4X5oA4WY7$PrT+0tGM0$aI_a2 zL&?TnN+UZ_3fmP@Ap_>s+V~TvFuN6=pGZM$PpGviycNVT;`X}2>rEt|yMqa%ol?P& zEBlQgp|Qhi%4OgO;>jKzwCeV!2jX1fmbVfx=@O+{xaJehc$iVdh=|5!m96>mK-=Jm z&sJZIhGa>~$<5SaafbJ!iGLw@KQHwVf?vkO+UjrCb9Zu=_+-0t0q>`|@PxD`lS0i0%jGAVuT^ibj+Yt_mrt9O;F}0a3;;5Sin=WyG-q;mD@C2CEQ zs!U%JI+E9%!az6PXtw`4f>eJ9>b)lqBlwuvWjk=dy)Wtr1dKD+oRj*7toPLu!k{wh zSg37K>z)r!jwQIcXAKt(qaRh$NeUMmJbtDWDs>ivuSi#tB&N_`vZLFE`e8^_qRUEY z+lwUJxwsanc={K!X8`KIR)#I;&81Ed*}?Dy1T^VYD0V&@E#+^8P#FgFz-yUSx^cmp zW}o$Az_`D2oHdcn0%ah|ZO#P&??U)`KY;OLh(q6CUhFJf`JpFev&P;Fs&gK_IaFWN zke0tkFx^ZVV{!39Tq2S36|Fa**h=-{)uszWf4{x)yiWcbaOK&ho=AU&`TiJgN45?1 z%byALNyw{;)E?zfKquB%&PTrxyq`dQ2*ISA38ZHseE3lE}u-{qY7tHi*5@> z-!>4KvhGK69F7mKo*YYkIkpeCjwe;q-ZKLqvOlZO$E9n58({C0`H)Cd9&AeUOB5}=nzL;Cg( z1X#Oi=}>lO;rj9XYL2t#yhHpZ^qw{mv_+i=Wm@bfY9R_bODkOvh&``5~-*Ta+GTQVuMzkz@_d{$o{g(-~BYCwpfKz2j)D!$s| zh57e#0*l8ZOw@s+u?O-gA-yF>4L^igZjeH`ExQKz>kezCmtSBoc)ph5(*UrIU4p5p zGOpSF5Bh@ex9+@Gk}V%T1edpv4!$cwhsPao?DrHt@DVdgAW0Thw^za&zIIOG>;Ec8 z8NnW*LJwaiTN0zrMc6a`_OmM&$u9)&r-mOwkdZv=5>SB@PrR4S^Tr!{i%nb-^<#Z< zc+0`qv#9CwgCgvvbe)yXpau?!p3(_8_A`?TZ7Ntqi&4y z4KG@>geEL%R@=+yd0!LOqxu+y%2F~?{3L#RdwWgicQ=6akw5dA<=Ihvs}0*vA;FH( zZw-=DAn-JGZ`_SPXyuA+Z`%87c*@+5walTcNVbj>)s3#;JZSGitw$2;$#c0W0`J%m zt<6jxcYk|RE}Gv0U+V+c>o5JUBS`m$px%4(FoMgEjjDl&=T0~!cN5sd#$h-<;M0v^ z2!rZnVrp%w%z>QPUToAFg{C`vR)B!x!NAo@5KjkK4gB<|e6k9=^1JHcP7Lc$HLk)! z1I8D$tawM7I0~)R#oQ!+fgt@~D|^8z?$&5?!9gZ-x9C9P6|q4_4<%+Xgvx|lkX)aR zI5Fq<>^5ZS;i9lW!9?XTZbX{}B!7_k!l`rik$>OwI+MQaX;Z={GV{+#vSHXwr7m~l z8%KDic0r2<+|4M&mdiY#3`xdUO<%~{JE;{c4CwBbX*-(j zQ32%WLi{o`r_ewz7$2!SI&Q3iouQ>DwVXbIQBzC2op^cJa<$64v=ejK9rmK0F8;QWKe&J+;4!qYt8 zx&TYW6w(x+d^n0gNWd+*NG!C{&lCU8@04KpLs0KMc^JV-%9W`jUS{|gA3;EjhG&b$ ziv5p-4IvDw#W!fc58FslKgw@}bhSKr1h*#Cr76_SS1T~ajy&&gDa0m7cl}lT<7+#- zc8qjIr}G&(2*#H4)DOyg_hHtNAP*{l@voH`pE~Yzx%rifIDmlNNJ>R`P1IQh9S|zx zkR~u^rf8iPrnJHAyo#E0NncrW5m6DN6`HU91V$1n#oaktSb2r@%K5o3B_^XP;)o_w z5#b}%7Y5}hwxWo)kSqI*AdU>$;gW<`L(wbOYo;G3iJ~(Zn*ns6G1@JCACn`usi$`W z=0WgJpdGefr*$z_J{Cq^YBzPIg+700mjOp7QcU&>!TZ%24Fcde|=qQ z9=Kk0?n2z=LLTKMyb2!VS8bGy?HX zv1c8s5F>`QAKkXva;aTkmQCSD<}g_k=iJ2n>#ZQuAA)-C$-@XbY-38u+t$Y$$$@}A z+Bn@+==lKedI*CWkI-PwLGl&0tan;+qqujOFk;#Mx)1jx@r9K9SHgGjC^^fzE_P25 zyeWs~LtOyIbZ`B#>wT+h^a0;-$tJO^ArC5m`LC6M(y$)Soe#JdAIMh?8ocojhd8+gK z47x=9X3Cd0?{O4qNvNh1Ay@VrK~qDZp>y~yTyjvTLwN-zRn^vDzm&zQ>x_^%Bhj*Q z)eiqRW>&5zg;iUi&j&(0RDHd$Vw~VQE>^39(t(c%GUUGyykAE25Q3S!YSlO{)Sq@@ zJm;V-4Qg+Xs}Rphn*D#G*x2E4T1E?S2aj>VRL=*~TB(Pgc{wl#bCITwiCV+@eA`P{ zyJ`l3^zcf@ zK)}t$?6d;n525mV9(Zvkn&aOh?&s*5k+l|LG*7LA^n^!ub^e*@?bjBl z`tjFvpBcZR8_9Ofsqwp;lw^_ZDl=myVk-X4a16^|E4$n3Lg2#piL;R%1Z;KuN;g;c zks`txLS?81lT5YxQbtb-4*7#7p~l0VXiX8Si6yU6d$?;~<_U^*;?3+Ysf!cMJxP2% z+J#|VQZBE0Y5h3{F-q~u8BgW!5hTv*nr@feuq#g4ad<`2Pa0IH8>{Iz$=t1}?n#uY z26nAK(OjjC6QY_cEb0g%9Lp+r-hotMMeN#t5wOFzs!s6>!TSYL4)~dr${&dKnH>SB+fMZyyG-te?FC8#8-Lwcv(|NDv+1gFejX65=DM* z^ljLoklIh@l(Vl^d(zmgTI@il4kIh4vV$Jo0K>Dse;q;AKLqvOlZO$EBg%gCg&nu} zb_xV!Ap-Vkbi6oND1dwCJ*N{7ahtKe+KB*;DFtf8mxS6Nc=7h8G&Y=5onk?8nPEAQ)*SNb4ejvvG8 zmIEc{*H92DlfIZ|#Kl&zJTUnIeC)R-LlNOJQf^(aNlFJ^{x(f4RHzv<;T zNy~TI7ijV>v5+|MoHPwyuR&u=mX`H5izD=ApuLU5zTo}W5oG^EQ13l?7(orfH=%|a zE_M#zK|u5;@Gb+Gk?6Nu5C(OEWXIL`^}<`qShsz6gB=f5P$#1ZfintnUcrXh!q`?ToBMT zT*HXl$$)*xu28xl`owWRPv_bGW}A72ebPB;2qRp_z<%1b}aC=#8ni2d2$t!Jm7j@=82-I zVk*-$OHD+8K1*Uij`35uAeA963w1+cTBV?%da8(iDwK10Ogd%j@h=4L*C;-O;5gv6 zzN)RKslLSE6*a}wOxKZSpARv^$x{OkvS34hugbu>vd_lirr}ZMrs3A}{TlPIuBMEb zimabl=l2d=pzqqSFbU`3O^f$$IRZeV@3uSrEPS`y-X+RsSkbRa%(_{4c9!WWPit=0 z;=6~?@36y68v-6zW;}OXd30z6uON4~Q$pOzNHX7BEO@{x#Py?~nM6=DeSJWvJWknG z|6;MCvq_iMH8$xj8iVjeGT*9$?g+ZEe5u=R{<+kKE8O50`t^SuLC!w}_1=?*5zJ*b z%P@F{L-Xuz&_WRUkxVhr_IV~8ghB0nml}5D@XGjmBa-^WxetB=w3uuj0iaZX;=HQC zp6(hw01K)hS$`C{K3&H!v zv=1T3>U~aSn#1Z+uTo)9s5^JGX3;at&CV*x%rHl={IlJpEh+Z0<&dU$FE{{SBzlDU zut(Oa%1Oq2%n&~Nm4nvZa13@#_{xQ^PhoOyNt>z6kBq>*4U8_crtxWYXe>2KJ?B2P zONRpgJs*?+_Tl|~+bO3BIllq2Z3H3@Luro=bqo-AO8?z1k`hf?fOh)MM?PX*u>qex zCwBU5C_SQ+Qo2&*nXUGL@_hNgp%Q_->K-ii?C$ny9{4KJ-Va@jDXJyC|2l%)e+cTm zCl4dI;b3@b+amIf|L(2+Z1+U+N4s`zpSeMZ;F*Wvi}|^n)n{X-akuXcsI?b?#5ELV z@t?=ADH&viEb$sxhFoVbc0;kZv|TGB%9lJQgTeJrLEuDje3y&5v!tNmjUeCf7enKYzA(W~Y@6j$Nvp3F z0b!_IgJ+T#(~_hx$1i0u*3Rp6*nS3(Jb~$LI~(au;`|N*ll1@0mgumRHtDg&3Pji$ z|DK@Kfcwo+N)2{Q%~QDsi3(XjtcB1&FLLm-`?G7lCeOAGVf`=I0I(0?64 z-aiEO-jjzBWTs{C7s!x)0o4rx7DuLNxr{{9pQIF(Wh!)P8!p@h z9EXDnM(6fM>1DtxjS>zr#~?{Y{@HE{rZ>9y{*WvCjo{Ilx&XgpP@{PM z#f`3jNW$gMu|yZ-3e<)?3SBFpLpETc$2_58VMC%4N)q`Q*?A&EDCJA>VpT?^j(ig~ zzFL}J2$J1hsD}{zj#y^TFs6T+{}t+!FU;J#mMnf@K3^Fy0O`y~8Fv0xJ;xE%a@6mF+?Z+YAH^4vwG9?8yF!n6sFQ|k;UJ_8|80)XwQ%PQjpKS zD?u?(`^B>J_DJb)A!uPp1=(bvfP~-FC;E#h2Ltc!k>kG9Q2gCq3k}K8=yFS*%%qk< z8&{_sq@c@?0SVt1>6hY(Juq$=)LS|^H0Dj0@j6J_jG|Q*uB*P**cbc>u$<=>Ju6TX zEB`uz{C^1Qy(bSNxU?pg!eL_EKy){52sd1xc0qIPhtdaOP$e%$U(Ispibw2HZc`8e z5^LVLEAdu8(*?6h``uDu|g4^u|}L(cgax%(K&nv5NqCo1GY z1ql4LGSAy4lOqi~t%+F>&{EasuzwPDJkbn7Wl}%Pw>hm3MV>u1ik}2e~sFBRS;Cek0hd*X*@4 z(r$3eJKx$aJg|3=k&7&UO0Fq`^d-Js=QDrg(>MIPWYCC7G$&7lj<#r1{Zz#FkCl2F zZp9+7=g*;Oe<66kQvV?YO{2mPiE%fRI0OT8$xVwimIV8TRi{yEB&6AHUNvVlZ1-4x zG!hz8gpYhG{c}-O;VW|~*aB{JM5FfV*89VV2MC-Ba{k<(GW!(2mQOR2BUu7{oU4k- zxH6jpDNB*`Fvspp(vsRosm<)UFM^vJ&E$W>`OyV27VU3t^g%3y3r%KCNx9=WlhkP9}RTK;QyI0lkQ+jt$UvS>=# zVN!9|0#V3=3K04Og8zGEE2gTU4j-F@gYTwWPQLhoDyLt6@27!KS^sCfq6s%W;)JP< z^p2~?*3k4}&OFgB!-B}uSu4VQ3fqMNT*EX?%MPPYUv$K(czwFYU!!-iwyWmXPBA96 z3W8kOZv^RSiV7VfQ9F4DpL~322xYOv_r}ybE{&Xcem`d4lVj0X)0#V(sQ*}2%5Z)p zYGr3eipU0isG)OoMcp!Gzm=En7lQX&N*+RRP+n!kjefYic|mIprDJoWyANeSGZyX>4qx?N zT5ss72f>+Qu#m^U;8cB)W~U49QugDZ396C^+EPk2#j{~%L$du4fqy{%$jiHsUK1qYIGE;B5wNe$vUC+d_ElKY)uL=HLvEv^}2kbPh?^9@MEq! z%@abeFc;LmSLiOg`K3m3)&1)T3jZOf_nthApc~xl2vYY3>B+mc!l4_d=4Ag(g~lX= zL5*dFHR}EFwzuHsSy|mFxR@~{i|B98dmE1WNGzW<#0;%O<>%}g%j#%TqxLNvP%a|H ziZ>ku$7580axZg>G{x=nT=|NbSj0T3ycXm0Q8N|2TI3u5m{5*mAop z8QhIcV&{T%S#d?5HYZUQqGzLzM%zLE3&H!%G7llxjHe!Mh&pq8k@NlatAWYJzQL>8 zy+tXR!Rc~&FWHtOm{095Tre1HjHWa3v%NEFdS7_);$2RrBeIfOEl|_my%BE+j{>%< zVzSR<*1j;Un#3Tsz19%3$V6|99Sn)Ol2lEdH z4k)77iMP=~FLiH(V*oJt|MR=%Mg9=fdruxla4Pn@al!M>)Fw(0aC|mGr=I>h z)VLyqL1iaig)41i_4L-Sqhux=f^FT=C5c&s<7*?v5@XRcjdWB=2|uPbSas=X6jr=Q zrXBNkRY0miw(j?n=uqW~`imYDK=iMbWfnxVAyKxa^NZaLGz~573$^NPd;DL`-Q`yl zZ5RgdrDa)3>4ue-25FY=lI|7|5TqNF?htVWq)QMa1tecWy1PMIx=Y}NbM%{>vwZVU zxXyk3m}O?3dqQALwyS#xhSN^`(1pbjIJGXlSR19s#QOb8vF+r)f~?eZ;knLCgySlT za)nbiOtEf-p~r>#J{02CK4~HSiL6@=$oD5G-i8hZFydF32Sf#@&Dinl$sM!fzVuLY zeL+rDSxw;G_O3@WXwzl7L2&|^XFASl!l`g9rR7?h2CU?4gJq_}_?zJEsjj;Sa)+hw zy?@64eF}A<5J0Kv$n~qy9?$PTuO$pzIYbvi<7LX%66e5GG@!3O_`<`bgP_uT} zOeoSz_{ynukk6SmzU z%7t_+j@xZ^b6(K9M~H)JVnY!EV^ODYq@+T5;1PL3smlpaOv$$a@uE4!ylI1o4bAS0 zpms_l>dTE5ng>>-Zk&b$^~R`z3)hnRTM%pE+J}2{Lif0J4-mh1GW@D<4cio4zqYqP zK#gh^jld*(C?$7V=j8EgNOh0~5MnG+He2@0D#ykld53V$zi*<*)SPBZ zBe-!ZlBtn8)=z0M<^bMLAEANz%{Cew2-0tcU-?KRLB2bW0r8|;SHp@?U7n0mjxP$V z6Zaz7(aB4aS8ZTF+oZFhyP0HO?AWfdre|Sy+y#iAvd*($82zskl=w?gZ)b8h!Tyi_ z91g7qgl#vU_~do|C6AW5y#FH_#-iq3$Gf_+`eCkTU7$(7*rx<^E{N#ZEhwlg6Pa^Q zS0RT&!rfX3!&zR6rVi+cTcBZ)ebPmURcgFQx{B+Ke$5MeQ2~5-&Da{-JKcX}L^BBPuK8Bhxb1sqQbI(3m$`RC# zYw`>A@8ctSXG_o0alg$$#|hDsO)#xyJ$ztK_UDJ_brT(>>$J~`K6rPp7H8>Co^*bzL`EVNkAV3eB zR#;9V>a=5pR{N}|-w*`h_vtsITmUr70u+Uz>xVx-hS|OGj5V*c@<%z&DK*frtj-Y_ zt!aE(>oa1use#wdvD17&vxGU!z$y`=eCiDZK~&6LEGSbu0@c5L8UI{^v?#|v*@RVD zI`htLB5bm2E9U^cd_G_jJ)@o8L1%J&WZ1qq+Z@HqN1e-9ITG7l2jgESDD{`3-p=H1 zg8Yk>YgWrUuCeeYkJLFJehI!5fkwhaEKg?Zm`mPx z43uE=d38aAcW5}cC~iSbWkv~R`+Bas$1ZD!Rf9w$1(~I0L0|SAHW;>eNxcb~e-pet zGI|%mN6eoXWTQ2+tKT;w*l&}&^?;`QN8NOYGE6L+!O=U*lC=ryLKA`c zuJP~bvKgDdje~g~miKYU`A&lMQmd@V(=S0pCO20>9!U8wHCi_Xdql8r8+YD}OR~A3 z#R@`{c-=cSkVr!M)<_fna|`vDPvL1*Leetc*y(dy(Tn544zI+lwduU$|8;^ge<|wi zOztL_DpBiyHuqnie;Ei!{yFkfbGG{7CJ~H9wXZsBdAi$>8%wdB`hBR&f5Aty;4rmq zu1<+Y6w#9Yy+$?vXWAqrFd5!j88emjQQ_VtxogRfQsn~{x+G0MW7w}10NHydQ6P&>eG+OcI;Fq1jwUR1@DjD zk1OT!Jis!lrcc_Ew5Xx6X0wl$8YE^F2@nCa~8#=)NK4?*|!6C(K#tB>Mtil z2|=Se$(63aQMNXE+%H_A^i_V}aHz*N zb+rLFVxdkD%!}+$Us1c9zC6SYGQ{PCcv zWUTpMNJ}bgbz%(b2=F|kfr(UYU~1p6%9OZuldh)&4ErJXs$ z3;n3*-H1h<#ZO*7a7AT1+s_?v?9+0k8z@)Z+dF2gPe_d$&fwkMH5!$lg1x8!`Fkg$ zuGtMFZe8vj(E|Y^5sO7lJNzO6EifiS1)oI6^y5v=VJt(py2qvJyJ9cmy4G><+%Yqp>6{yX`*6ypFbI!j~7r3-&4QMJfX%G#&P^C;LM%!NCV^)T)+pSTUbP zTSN4d7_N2VFUhAgwM*?fGigW8kBz^)c|16O3HR){6YJ#S_}H^Oy-S z!1|lu?Wyg%2ujiNAtpAO&Jhc};vRToit{t!(@*aG1e0n^I1lS7kUg#(GuuKIs{ODg zx@oqAVa#G)qFM4>9P#GlsJ@v#(>MrnVe(d5u2t5)yTY#}9>RA-yDYauIqzYCiRykn ztzVg8!C0`3!$N7=xu+WM%50(V!~dAx;bYs1{IG%**13l#2;z#msX^hL#YvkAxQ;^K zH70q)@oIVj%9uG_Y=ds;iqeOubm#vG|^>EzU4;o!~YOzzze#}*EIh+ zL505*^>!wA6Kvdvn5eRb_vqZLeTPivm}TNO9?M|ESkxULOPIJ=7}7}5qG^&a-*n^U zCME~lp6lm&&4x$E-F3P}W`jSJk}@@cSmZNFO_UzUPfs4x>hSLWr<{m7jxhs!Q2~ng zPWG;vucor_L>7hg=831^(8ke_!E`mO3+;U~IE79ZkmF?{OvzLg@X0=X)u=KMb5y{1 zy~-U}n=uKtanK9K6bz!bns79#B`~1K(idvg2F2?pL^oR`4pG3K><>X_7v10ozO4ML zl2VN7{sTqkTGR%C>G{EWw*IUPx!`O(@*ps4u7I*eQN?i?`sSYHnN?uR!#uY3c;7(9 zhGGG>-vn>h3*1HUDr{d}h@^Jli5w9qN(&4YEneVw=mrzT&+K6kxtK~uPz`p>L8Nzdx+ zqYw#jyeFsD7i&wmh)pXG2M&WF7+9d8R8bmr8KVyHcBtk2b$PP@DyZPP$u8Hq`$!%? zUy@F(h??PyevPzbKqE=--IoA45vTaqg~RdRxD*dIXw==n$;Nd~vXJ?hN@B=vzkW-*Q!;?0uS*j97f?u({K+a@#V>02TcGw;< zN*V7G-I)6GM550pRy&=$xGP7Y{>)I(lje8J8_6Xfy79(a$x}iDS`@S;U97P-GGQ+& zK>6Ou&e7L!8D0g_+WLZkQBDK+W$tQnv-mJ3+Zi$?_kHpKrJ?z~e2ZMA3@zr%*FS2q z3^k$~i;M{^AQ%sQ5W^c6I&5O8s3OK&ddY)WW`-UzYJZ=+GVs#p5QaV3AA&KFyEe1q zrYLQ-#qa-v=ReV+pRk?fga4>+*tGrS3+bfY)sO_)&MwWUlC=*qLn0@GqHjC(mRa{k zj;Ch$zggDd#WYYhB7&shPYS#&_!M;#pBnu9Vy}7O61+Mj{nd?XKaTFn0T4n+ z4PW7+VfC*QRQXF$Z)b8h!4iUin#@=IHW}d{;NIB*I#!1~*26Uzi|SC=tB|LP1YM0? z|8hDiPi4H{Q8oU4b4VwLSRlKCU{h(E$96RpEjNePTG}v|*BA#Z8+4rs4+ViIH|?|i z?(s!-z_WWN6L}WsRu(Za6Mge>GlUSFbf7GI8!9!7$;9zq_`!c|ckfBN(4ggOF^k$q z7WYGv0ONLO$#rYU=N8lnM~uW2wX`B$KCzHcjv>swF7OP5;p0uO#(x^IM(cNZ&k^V1e6?g(qqdyOKQNp|@%cv}{O- zB)6%9(_rgnu2yCIKtlPzTQ(-Z{-GD^>LV95#dU05v+T`x-&WgK*Acz--VH2%; z)=gKU*W9Z8dUQeu5jA9`jt_|R5o`Dc*SSr z;;>Jp6n*^H39A03sJAn@n;_2odE{4;g$jn7Tlem2AVnvd6Ochc1NMGn zXmI(+XaWP(Ys8egx5IReIyw!+A$Lx*l;|>k1q$hL+$Wa?(kUs*QdoZNb@bSu^>dfC zNx9FLmDKK?jC-Fb+qg6Q>M~ zSalWXy3j7W%1wo2TpvUi%$2w0_Q*k-RG>{7#JituIy)RVU(v_=O$^xD+@D~rgzrUn za-lFooPZKOg2;)AAp=vk`&Lx$qT<6j9N^sEg9`sE7*0|rD-Y% z0XWo;vA9+_e-pgjU2+#eBg#l(m)O-fx?&xsWxTU5sM>3h#dK zU#L`Rxdfv@>yD(&<3gXyDGP2PrKROQ*m(SknBEw~CATQ0!1ki;X8K?|Y9~WIbO^kK_~Rgk#85&LRU<=KM%BGCu8t4?qBlsH;B39)vUw& zgDLsvJZ3x~C@xp*l}O#BZ<$9|wgYxdX&)?$*>7%86V(G>EETyP(QV4xM(p$Y^a~>8 zBFHCAJj(yq32OeOsJAn@o8ZNBepND6E|2&?5HNSP+1Ff1NlQK%#-i?Gm|+%~^`r!@ zScxkVO~_hN@#k0bBx~Yfa)eR_$jSx?x24y~1-u^6XmT@1IcemH2&Cxw{?fCNgIyV4 zX_W)^q5`z;oeU^B|6kshowX;;ARw7dJFmfuW3t#X7?b6RUxLRl1S#R(ew;CWzR%A~ z1PsGaV0qwq5^NWbHsSP=IFS_-y117^d)mMfE*D`(k@@5LVX9S<^Q?Yc=}Q6Fll>vc zpoXgTf;n)FYlXjxbiYDBs2sHQRp^_fH=pqbio@tGTYoTScK;hUmB5M)ga zBg6z+x;xuyQ)-&zxP(c|oiY#1Yn{*-{g_g=L(9A3V$tTO^jHN_qHk7bL{6BHlRiTq z^-gbtJ$jIP;qqT6sQs6s-p=H1f~x)fw&hI36_!gNpw`3ln$!0Zi_>GjN=%p5jkt*0PUDv88~w#Sh0>ItxUV& z@&b64z$T$AVJGb}?!r{oQ!u{{9YGX)6UtTGOL8opUORR3RBy4ORp0@k(sA^x^Y^|y zsfRvm-zPIFM6%RS*u%4fG31(~HcZ|YMs9@)Wa#aD=KS>WTv!$9t;5wRwFGZU8vW5fc!@y0n76zi*$Yw zzXa)c)&_esHDNC*K=0nk?4L$DeXTqE;z(!Py2@|;voi8P?FiFjkp$#yfwQq^?S z`+ZQ}?scLTlE{PaX@XyI(mHs46TIEvbr-=ZCsgbfkF+?Jk0ZEDXqOdczS!j`4XJOU zxE^DVq3xbmbrqcxozaOL8)!5w zci$Y@HO6@zum{zZl_eH7^vR4l(5ftwdI?vv#&YFgnCIwLHEEmuIQ=6}VgEWo{l66Tb|!Zdd_S?b=%z%IVY3MW0<^Qd9()!doA!p0 z;LLV;1+M#mZh!9ekT=F=Vg+-F{&PN?Bm?2};h*DR&^0UV&Z#%=5ei|0TWSOLg=t%_ zl9y#2`l>ho5La8&1nflx7~DHqrgO()a#)cq^ya05OtH5o)6uE(@v#0cxUC>xRr4!Z z81>7n>G9?3M)U;XbH{UskDEVOfVwpZwe_=TX{7-P1tlL;EfvHg+n-j|CJ_63)KK+A z2*#~*kHVhp4?)*=oQzMC2fr>}95XSex)HrN)z~!=20_UP#{zZuOu(-4L|7R+lwNb% zg5n_(j=qXAjdUrCS~kxE>=tcZS}b^f6TDqDcNf7paHS(hzQTs+M`dwCj8OT}R%t-2 zy6vh`Y?*+&DO>jgCCiYHE^{3(EHKC-L4RL4?`qv2>{-vn5Gr5}}7WXtC{uS%Ni)9dyILAow?To3o z6RhV63ZBRj9C?6WY08xH7ZmlQuY3^RMtLNZSRVOaMzn9;+=*{^mn4z`N&$J*`P{I< zrCXv7DkzR?$S@FVzq+ip40}-lM)yv3d`eHsXftm;d$T7zmQCSi#v~Zz{evh5k80J8Ocym*)XL0#Kx^ QBr<~ZDaZnvnqg1&KPfMHA^-pY literal 45874 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 R!x7&&payVOvwwk}?0=SKr=I`- diff --git a/pkg/core/native/compatibility_test.go b/pkg/core/native/compatibility_test.go index 398dc4111..961c7a626 100644 --- a/pkg/core/native/compatibility_test.go +++ b/pkg/core/native/compatibility_test.go @@ -2,18 +2,19 @@ package native import ( "testing" - - "github.com/stretchr/testify/require" + // "github.com/stretchr/testify/require" ) // Compatibility test. hashes are taken directly from C# node. func TestNativeHashes(t *testing.T) { - require.Equal(t, "136ec44854ad9a714901eb7d714714f1791203f2", newDesignate(false).Hash.StringLE()) - require.Equal(t, "a6a6c15dcdc9b997dac448b6926522d22efeedfb", newGAS().Hash.StringLE()) - require.Equal(t, "081514120c7894779309255b7fb18b376cec731a", newManagement().Hash.StringLE()) - require.Equal(t, "0a46e2e37c9987f570b4af253fb77e7eef0f72b6", newNEO().Hash.StringLE()) - // Not yet a part of NEO. - //require.Equal(t, "", newNotary().Hash.StringLE()()) - require.Equal(t, "b1c37d5847c2ae36bdde31d0cc833a7ad9667f8f", newOracle().Hash.StringLE()) - require.Equal(t, "dde31084c0fdbebc7f5ed5f53a38905305ccee14", newPolicy().Hash.StringLE()) + /* + require.Equal(t, "136ec44854ad9a714901eb7d714714f1791203f2", newDesignate(false).Hash.StringLE()) + require.Equal(t, "a6a6c15dcdc9b997dac448b6926522d22efeedfb", newGAS().Hash.StringLE()) + require.Equal(t, "081514120c7894779309255b7fb18b376cec731a", newManagement().Hash.StringLE()) + require.Equal(t, "0a46e2e37c9987f570b4af253fb77e7eef0f72b6", newNEO().Hash.StringLE()) + // Not yet a part of NEO. + //require.Equal(t, "", newNotary().Hash.StringLE()()) + require.Equal(t, "b1c37d5847c2ae36bdde31d0cc833a7ad9667f8f", newOracle().Hash.StringLE()) + require.Equal(t, "dde31084c0fdbebc7f5ed5f53a38905305ccee14", newPolicy().Hash.StringLE()) + */ } diff --git a/pkg/core/state/contract_test.go b/pkg/core/state/contract_test.go index fffebd670..9ea4c627a 100644 --- a/pkg/core/state/contract_test.go +++ b/pkg/core/state/contract_test.go @@ -66,10 +66,10 @@ func TestCreateContractHash(t *testing.T) { var sender util.Uint160 var err error - require.Equal(t, "b4b7417195feca1cdb5a99504ab641d8c220ae99", CreateContractHash(sender, script).StringLE()) + require.Equal(t, "b8e95ff7b11c427c29355e3398722d97bd2ca069", CreateContractHash(sender, script).StringLE()) sender, err = util.Uint160DecodeStringLE("a400ff00ff00ff00ff00ff00ff00ff00ff00ff01") require.NoError(t, err) - require.Equal(t, "e56e4ee87f89a70e9138432c387ad49f2ee5b55f", CreateContractHash(sender, script).StringLE()) + require.Equal(t, "435c467b8e15cb9b1474ad7ee817ffdcfededef9", CreateContractHash(sender, script).StringLE()) } func TestContractFromStackItem(t *testing.T) { diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 4a532f983..7f3699e61 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -56,11 +56,11 @@ type rpcTestCase struct { check func(t *testing.T, e *executor, result interface{}) } -const testContractHash = "743ed26f78e29ecd595535b74a943b1f9ccbc444" -const deploymentTxHash = "2aef5684c6cf60884cc00400b78c65c5105ed4261a4f614bce74c74927a66bf3" +const testContractHash = "0b3bc97e94ed99e32dda46c9ecd2d3626979af06" +const deploymentTxHash = "632b179910b368a34d0b71a1289b24f833186e86ce16b3f805c1ac247a721e16" const genesisBlockHash = "0542f4350c6e236d0509bcd98188b0034bfbecc1a0c7fcdb8e4295310d468b70" -const verifyContractHash = "a2eb22340979804cb10cc1add0b8822c201f4d8a" +const verifyContractHash = "d2da8ee8c0bf6c5bf3dda1ef671dbf5fef7226e9" const verifyContractAVM = "570300412d51083021700c14aa8acf859d4fe402b34e673f2156821796a488ebdb30716813cedb2869db289740" const testVerifyContractAVM = "VwcADBQBDAMOBQYMDQIODw0DDgcJAAAAANswcGgRVUH4J+yMIaonBwAAABFADBQNDwMCCQACAQMHAwQFAgEADgYMCdswcWkRVUH4J+yMIaonBwAAABJAE0A=" diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index 21aa35b50c40d5ef3d4e42450db540b2bf0e697c..f2b90bf165f3d26e5575e29cc249acadfd3322b9 100644 GIT binary patch delta 3237 zcmaKucRbbKAII%`@p0`Hb&ad8%D&dU#YOjKk86gmm5>$LrHhR0xVoZ{6+ek`HH@-H zMsY8RP!t(ATgdvA`h9=@d>@^^&mZS~p0DS5on_QA>eflAt0ZHC(>h1Q48*$LJ$%XT z&E4utTKlx7>R%?U?HC(mrl2pw6P#uSCA724B5r`C_(xtj+%#E8UM&?FHWtLx-<+07 zP?BTtXMCOvJJs+0U=AhbAR9ZW2=8OIFIJQS!m#&Pt8mS1dH`AiLcoAmhG4|-w_VZm z4=+xBf0U-P(3H~gOj*Yp8Z$0;Den_QJ&kNBPN|NFUQ*Gon6-YMU28@q$qWi(@R|_- zdUOnHF5pbF>2Ha0n)H@Lvk$1Q_4$=_2F9tR3Kq>!L)MSX_rYR?*e&U%|z&lp4y6dbD@ z3%pKKv2m?&Ig6TiB4qRZf7aw=`LvGbtvz(GH8xvj#;7otw#&JyUf1w1BN?4OmXzem zeRU^1vY06g?rcZV8dtt#*;QU8N5r4wQDh3ey)X%&FC-t|fA9I)rnc{l+kJDjxrG`w zc0jJ?{0#gIAto=v1-f;_x2HI}uGfvm`KBvmxJusK#50YsLkO8qV0oZFDG8uAbWYg2 z_>12jTFOocl8DxO-@=<> zyAH;a!(_LCU$dG;f$0ub(3tdx+}R+?R5&T!NH_A0cZ|0?d4&Pop*qnfQS$_y=LV!y6=Vvy6o-- zn4OMr+lG(zZJ~$`W)y=j2;}9&etUN@hBp>JTz1U(-Gb_?X0R0T8+;_qips>wxlS^G zuC1t0&h?|c9ptAB6b+}&u)a%)Z95XlMb5wcWQjW*rVY(m9=Ro^7XOTsqi)>8;)D>w z^IZXdleKu}jboTzrDOoje5Q|nhspDbw;-4E3;9mO)&t-ic5La6Y8jI-|A@P z*oEQm6T!B)Lk&3AW6y)$gm9x~P>ThtU z$cEU@dW(2T^e0qyI0Ih2B_}|D%b?gcP+v9wLK=5Qt9;u*TIjU_^gv{N>Dg@$Rk``5 z%`~fvax#eC3%|4*+^D};z)fm`<2pF-*pSFPE25)U5NU60vu zB-z^RhRQL6MyC+o!F<9^YK19DUQ!`zmuGPW@H6bOI-9Z+UaHuK0NN+j_&HoCt~)hx z<4JT;rmNv}k)UA535bUUNVQ0WRVo7hJTr6H4N`rc-Vi6Q&9}yauyLi;BQl zs`~DTzP?5-otIMz{{Uhq?sJ;sSt>(4oT(JrYwU>3=d5oT*I%R9|3Ls@idprJ zt0wjUz8T2dgVKpRebqcRJd%Tz>1jaR1u5C#^j^IehCvYbCb@BaI*ZdhsI2IzLkhD? znjJvXv-kr9*6doh&v1maGW<3sbvTeZIb!rRwXS}@ho3}?E;KFRRBw9ku9AJmf56nk z$xWuHz!~{Tt5SL4lsU(FHCT4 zi?8KDgLPkbJ=?u2x!as89`hbaXcr)iUZ;?R4}j$ITy^+MQ~VU-=H>_d;;9+oqM*}kgzR&rR}gumT4ss3Azizrjp z-$LBwg<$Sg7qm23BJUq*HbXZ+MGUH`)~=qPuUM5Mu6BokXWIG$bHQtc_yJ>o302hB zFL>(>5xu8LVJ)yQHS>L_ah~#l5DUCeg09ZG0{qH~h*8~!%CvJfTcM6-V?ZXK`)15* zyxJGm#@JdJxL(e_ZSxh~DlN)BTXI|0 z#wAMRpT13n_#Wr$x2e*obyNzNq4Ump|{sdslvThp~oo%PiI? zCk+v$X)9{7vjCuVT}7%ITHWs;EIk-E1SC%0A@+{Gu@piVg8M!mZTbuX8=7KB3T?Qp zC$mlV;d}fNGmG16cHv1fXehR;0e4IdcluW2?mAO93;FPE_1*Y&yi@O?0m`bh1C&?HA(3C06 zp|x{KGc&(Ad=rLXL}g})Bel!H0-ky3d$o$HqD<0Xv?WWzp~k=Z34I7ks5bE?SHtyvH4Rf&?Jqv^^Qs`z z&kRmizMxQ%hVN#CvnwvxR_w|07-|oWFeUVFOlUNXulFlh*=A-8ZZqrD0BHBnyjoH2 zn6vlz%<{y#a^P#FORv$#_mrIT0+p}AXoEJ5+C6M^DdNYqFl7Prp)dAz1#hdI#_*er zfVPD(j}r3%^l-VSN4oG~Ru^e5>pxT{&`RD6QkTr0xG0kXuAb=>PslXec{8LS7Y@O&C~8_sA^G*tss| zr+agzU0Anl{BC}8hXrSW;lQTEwy5-~sIN}%^o@I4r)GOp<6M2gT##v)@c{#t-v#ww DhDX-^ delta 3237 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 Date: Sat, 16 Jan 2021 00:17:31 +0300 Subject: [PATCH 2/2] native: call native contracts by ID instead of name Fix #1666. --- cli/testdata/chain50x2.acc | Bin 45874 -> 45874 bytes pkg/core/blockchain_test.go | 5 ++--- pkg/core/interop/context.go | 9 +++++---- pkg/core/native/compatibility_test.go | 21 ++++++++++----------- pkg/core/native/designate.go | 5 ++--- pkg/core/native/interop.go | 8 ++++---- pkg/core/native/management.go | 4 +++- pkg/core/native/native_gas.go | 5 ++--- pkg/core/native/native_neo.go | 5 ++--- pkg/core/native/native_nep17.go | 4 ++-- pkg/core/native/notary.go | 3 +-- pkg/core/native/oracle.go | 7 +++---- pkg/core/native/policy.go | 6 ++---- pkg/core/native_contract_test.go | 9 ++++----- pkg/core/state/contract.go | 4 ++-- pkg/rpc/server/server_test.go | 8 ++++---- pkg/rpc/server/testdata/testblocks.acc | Bin 7665 -> 7665 bytes 17 files changed, 48 insertions(+), 55 deletions(-) diff --git a/cli/testdata/chain50x2.acc b/cli/testdata/chain50x2.acc index 0cb4f546c0037417ab841efcbd1d2d5b9fa615cd..e78bd4eb9f2a77580ade70d3c638ea1002eb22e4 100644 GIT binary patch literal 45874 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

j)X1=6CNmV-7i4QSfx(Bqg_%ie?zflw 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 YaQYY-)`e%s=N#K(MlR$Y@b~Ng0Lzk+l>h($ literal 45874 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 QBr<~ZDaZnvnqg1&KPfMHA^-pY diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index a3a09c7a7..7325529d7 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -20,7 +20,6 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop/interopnames" "github.com/nspcc-dev/neo-go/pkg/core/mempool" "github.com/nspcc-dev/neo-go/pkg/core/native" - "github.com/nspcc-dev/neo-go/pkg/core/native/nativenames" "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/core/storage" "github.com/nspcc-dev/neo-go/pkg/core/transaction" @@ -557,7 +556,7 @@ func TestVerifyTx(t *testing.T) { }) tx.Scripts = append(tx.Scripts, transaction.Witness{}) t.Run("NonZeroVerification", func(t *testing.T) { - script, _ := state.CreateNativeContractHash(nativenames.Oracle) + script, _ := state.CreateNativeContractHash(-6) //oracleContractID w := io.NewBufBinWriter() emit.Opcodes(w.BinWriter, opcode.ABORT) emit.Bytes(w.BinWriter, util.Uint160{}.BytesBE()) @@ -975,7 +974,7 @@ func TestVerifyTx(t *testing.T) { fee.Opcode(bc.GetBaseExecFee(), // Notary verification script opcode.PUSHDATA1, opcode.RET, // invocation script opcode.PUSHDATA1, opcode.RET, // arguments for native verification call - opcode.PUSHDATA1, opcode.SYSCALL, opcode.RET) + // Neo.Native.Call + opcode.PUSHINT8, opcode.SYSCALL, opcode.RET) + // Neo.Native.Call native.NotaryVerificationPrice // Notary witness verification price tx.Scripts = []transaction.Witness{ { diff --git a/pkg/core/interop/context.go b/pkg/core/interop/context.go index a11bb32f8..d82ff2748 100644 --- a/pkg/core/interop/context.go +++ b/pkg/core/interop/context.go @@ -108,10 +108,11 @@ type ContractMD struct { } // NewContractMD returns Contract with the specified list of methods. -func NewContractMD(name string) *ContractMD { +func NewContractMD(name string, id int32) *ContractMD { c := &ContractMD{ - Name: name, - Methods: make(map[string]MethodAndPrice), + Name: name, + ContractID: id, + Methods: make(map[string]MethodAndPrice), } // NEF is now stored in contract state and affects state dump. @@ -119,7 +120,7 @@ func NewContractMD(name string) *ContractMD { c.NEF.Header.Compiler = "ScriptBuilder" c.NEF.Header.Magic = nef.Magic c.NEF.Header.Version = "3.0" - c.NEF.Script, c.Hash = state.CreateNativeContractHash(c.Name) + c.NEF.Script, c.Hash = state.CreateNativeContractHash(id) c.NEF.Checksum = c.NEF.CalculateChecksum() c.Manifest = *manifest.DefaultManifest(name) diff --git a/pkg/core/native/compatibility_test.go b/pkg/core/native/compatibility_test.go index 961c7a626..d027377f8 100644 --- a/pkg/core/native/compatibility_test.go +++ b/pkg/core/native/compatibility_test.go @@ -2,19 +2,18 @@ package native import ( "testing" - // "github.com/stretchr/testify/require" + + "github.com/stretchr/testify/require" ) // Compatibility test. hashes are taken directly from C# node. func TestNativeHashes(t *testing.T) { - /* - require.Equal(t, "136ec44854ad9a714901eb7d714714f1791203f2", newDesignate(false).Hash.StringLE()) - require.Equal(t, "a6a6c15dcdc9b997dac448b6926522d22efeedfb", newGAS().Hash.StringLE()) - require.Equal(t, "081514120c7894779309255b7fb18b376cec731a", newManagement().Hash.StringLE()) - require.Equal(t, "0a46e2e37c9987f570b4af253fb77e7eef0f72b6", newNEO().Hash.StringLE()) - // Not yet a part of NEO. - //require.Equal(t, "", newNotary().Hash.StringLE()()) - require.Equal(t, "b1c37d5847c2ae36bdde31d0cc833a7ad9667f8f", newOracle().Hash.StringLE()) - require.Equal(t, "dde31084c0fdbebc7f5ed5f53a38905305ccee14", newPolicy().Hash.StringLE()) - */ + require.Equal(t, "bee421fdbb3e791265d2104cb34934f53fcc0e45", newManagement().Hash.StringLE()) + require.Equal(t, "4961bf0ab79370b23dc45cde29f568d0e0fa6e93", newNEO().Hash.StringLE()) + require.Equal(t, "9ac04cf223f646de5f7faccafe34e30e5d4382a2", newGAS().Hash.StringLE()) + require.Equal(t, "c939a4af1c762e5edca36d4b61c06ba82c4c6ff5", newPolicy().Hash.StringLE()) + require.Equal(t, "f4bbd95569e8dda2cb84eb609a1488ddd0d9fa91", newDesignate(false).Hash.StringLE()) + require.Equal(t, "8cd3889136056b3304ec59f6d424b8767710ed79", newOracle().Hash.StringLE()) + // Not yet a part of NEO. + //require.Equal(t, "", newNotary().Hash.StringLE()()) } diff --git a/pkg/core/native/designate.go b/pkg/core/native/designate.go index 0453c7bf4..aa8b68c9a 100644 --- a/pkg/core/native/designate.go +++ b/pkg/core/native/designate.go @@ -41,7 +41,7 @@ type oraclesData struct { } const ( - designateContractID = -4 + designateContractID = -5 // maxNodeCount is the maximum number of nodes to set the role for. maxNodeCount = 32 @@ -72,8 +72,7 @@ func (s *Designate) isValidRole(r Role) bool { } func newDesignate(p2pSigExtensionsEnabled bool) *Designate { - s := &Designate{ContractMD: *interop.NewContractMD(nativenames.Designation)} - s.ContractID = designateContractID + s := &Designate{ContractMD: *interop.NewContractMD(nativenames.Designation, designateContractID)} s.p2pSigExtensionsEnabled = p2pSigExtensionsEnabled desc := newDescriptor("getDesignatedByRole", smartcontract.ArrayType, diff --git a/pkg/core/native/interop.go b/pkg/core/native/interop.go index ba4a613a1..a9af939f2 100644 --- a/pkg/core/native/interop.go +++ b/pkg/core/native/interop.go @@ -12,16 +12,16 @@ import ( // Call calls specified native contract method. func Call(ic *interop.Context) error { - name := ic.VM.Estack().Pop().String() + id := int32(ic.VM.Estack().Pop().BigInt().Int64()) var c interop.Contract for _, ctr := range ic.Natives { - if ctr.Metadata().Name == name { + if ctr.Metadata().ContractID == id { c = ctr break } } if c == nil { - return fmt.Errorf("native contract %s not found", name) + return fmt.Errorf("native contract %d not found", id) } h := ic.VM.GetCurrentScriptHash() if !h.Equals(c.Metadata().Hash) { @@ -33,7 +33,7 @@ func Call(ic *interop.Context) error { return fmt.Errorf("method %s not found", operation) } if !ic.VM.Context().GetCallFlags().Has(m.RequiredFlags) { - return fmt.Errorf("missing call flags for native %s `%s` operation call: %05b vs %05b", name, operation, ic.VM.Context().GetCallFlags(), m.RequiredFlags) + return fmt.Errorf("missing call flags for native %d `%s` operation call: %05b vs %05b", id, operation, ic.VM.Context().GetCallFlags(), m.RequiredFlags) } // Native contract prices are not multiplied by `BaseExecFee`. if !ic.VM.AddGas(m.Price) { diff --git a/pkg/core/native/management.go b/pkg/core/native/management.go index df9d7eaed..691b38029 100644 --- a/pkg/core/native/management.go +++ b/pkg/core/native/management.go @@ -36,6 +36,8 @@ type Management struct { const StoragePrice = 100000 const ( + managementContractID = -1 + prefixContract = 8 defaultMinimumDeploymentFee = 10_00000000 @@ -59,7 +61,7 @@ func makeContractKey(h util.Uint160) []byte { // newManagement creates new Management native contract. func newManagement() *Management { var m = &Management{ - ContractMD: *interop.NewContractMD(nativenames.Management), + ContractMD: *interop.NewContractMD(nativenames.Management, managementContractID), contracts: make(map[util.Uint160]*state.Contract), } diff --git a/pkg/core/native/native_gas.go b/pkg/core/native/native_gas.go index 8883f3ada..414cb3cdd 100644 --- a/pkg/core/native/native_gas.go +++ b/pkg/core/native/native_gas.go @@ -18,7 +18,7 @@ type GAS struct { NEO *NEO } -const gasContractID = -2 +const gasContractID = -3 // GASFactor is a divisor for finding GAS integral value. const GASFactor = NEOTotalSupply @@ -27,12 +27,11 @@ const initialGAS = 30000000 // newGAS returns GAS native contract. func newGAS() *GAS { g := &GAS{} - nep17 := newNEP17Native(nativenames.Gas) + nep17 := newNEP17Native(nativenames.Gas, gasContractID) nep17.symbol = "GAS" nep17.decimals = 8 nep17.factor = GASFactor nep17.incBalance = g.increaseBalance - nep17.ContractID = gasContractID g.nep17TokenNative = *nep17 diff --git a/pkg/core/native/native_neo.go b/pkg/core/native/native_neo.go index 8bfed4bbd..303be0c24 100644 --- a/pkg/core/native/native_neo.go +++ b/pkg/core/native/native_neo.go @@ -51,7 +51,7 @@ type NEO struct { } const ( - neoContractID = -1 + neoContractID = -2 // NEOTotalSupply is the total amount of NEO in the system. NEOTotalSupply = 100000000 // prefixCandidate is a prefix used to store validator's data. @@ -94,12 +94,11 @@ func makeValidatorKey(key *keys.PublicKey) []byte { // newNEO returns NEO native contract. func newNEO() *NEO { n := &NEO{} - nep17 := newNEP17Native(nativenames.Neo) + nep17 := newNEP17Native(nativenames.Neo, neoContractID) nep17.symbol = "NEO" nep17.decimals = 0 nep17.factor = 1 nep17.incBalance = n.increaseBalance - nep17.ContractID = neoContractID n.nep17TokenNative = *nep17 n.votesChanged.Store(true) diff --git a/pkg/core/native/native_nep17.go b/pkg/core/native/native_nep17.go index 81dfa6493..7ba55dd6c 100644 --- a/pkg/core/native/native_nep17.go +++ b/pkg/core/native/native_nep17.go @@ -42,8 +42,8 @@ func (c *nep17TokenNative) Metadata() *interop.ContractMD { return &c.ContractMD } -func newNEP17Native(name string) *nep17TokenNative { - n := &nep17TokenNative{ContractMD: *interop.NewContractMD(name)} +func newNEP17Native(name string, id int32) *nep17TokenNative { + n := &nep17TokenNative{ContractMD: *interop.NewContractMD(name, id)} n.Manifest.SupportedStandards = []string{manifest.NEP17StandardName} desc := newDescriptor("symbol", smartcontract.StringType) diff --git a/pkg/core/native/notary.go b/pkg/core/native/notary.go index 215169c44..7d3fa974f 100644 --- a/pkg/core/native/notary.go +++ b/pkg/core/native/notary.go @@ -52,8 +52,7 @@ var maxNotValidBeforeDeltaKey = []byte{10} // newNotary returns Notary native contract. func newNotary() *Notary { - n := &Notary{ContractMD: *interop.NewContractMD(nativenames.Notary)} - n.ContractID = notaryContractID + n := &Notary{ContractMD: *interop.NewContractMD(nativenames.Notary, notaryContractID)} desc := newDescriptor("onPayment", smartcontract.VoidType, manifest.NewParameter("from", smartcontract.Hash160Type), diff --git a/pkg/core/native/oracle.go b/pkg/core/native/oracle.go index ff6548088..88e9360cd 100644 --- a/pkg/core/native/oracle.go +++ b/pkg/core/native/oracle.go @@ -38,7 +38,7 @@ type Oracle struct { } const ( - oracleContractID = -5 + oracleContractID = -6 maxURLLength = 256 maxFilterLength = 128 maxCallbackLength = 32 @@ -52,7 +52,7 @@ const ( var oracleScript []byte func init() { - _, h := state.CreateNativeContractHash(nativenames.Oracle) + _, h := state.CreateNativeContractHash(oracleContractID) w := io.NewBufBinWriter() emit.Int(w.BinWriter, 0) emit.Opcodes(w.BinWriter, opcode.NEWARRAY) @@ -86,8 +86,7 @@ func GetOracleResponseScript() []byte { } func newOracle() *Oracle { - o := &Oracle{ContractMD: *interop.NewContractMD(nativenames.Oracle)} - o.ContractID = oracleContractID + o := &Oracle{ContractMD: *interop.NewContractMD(nativenames.Oracle, oracleContractID)} desc := newDescriptor("request", smartcontract.VoidType, manifest.NewParameter("url", smartcontract.StringType), diff --git a/pkg/core/native/policy.go b/pkg/core/native/policy.go index 6861586e8..4950ae8dc 100644 --- a/pkg/core/native/policy.go +++ b/pkg/core/native/policy.go @@ -21,7 +21,7 @@ import ( ) const ( - policyContractID = -3 + policyContractID = -4 defaultMaxBlockSize = 1024 * 256 defaultMaxTransactionsPerBlock = 512 @@ -81,9 +81,7 @@ var _ interop.Contract = (*Policy)(nil) // newPolicy returns Policy native contract. func newPolicy() *Policy { - p := &Policy{ContractMD: *interop.NewContractMD(nativenames.Policy)} - - p.ContractID = policyContractID + p := &Policy{ContractMD: *interop.NewContractMD(nativenames.Policy, policyContractID)} desc := newDescriptor("getMaxTransactionsPerBlock", smartcontract.IntegerType) md := newMethodAndPrice(p.getMaxTransactionsPerBlock, 1000000, callflag.ReadStates) diff --git a/pkg/core/native_contract_test.go b/pkg/core/native_contract_test.go index 865b48021..d5002e367 100644 --- a/pkg/core/native_contract_test.go +++ b/pkg/core/native_contract_test.go @@ -61,7 +61,7 @@ const testSumPrice = 1 << 15 * interop.DefaultBaseExecFee // same as contract.Ca func newTestNative() *testNative { tn := &testNative{ - meta: *interop.NewContractMD("Test.Native.Sum"), + meta: *interop.NewContractMD("Test.Native.Sum", 0), blocks: make(chan uint32, 1), } desc := &manifest.Method{ @@ -181,10 +181,9 @@ func TestNativeContract_Invoke(t *testing.T) { // System.Contract.Call + "sum" itself + opcodes for pushing arguments. price := int64(testSumPrice * 2) - price += 3 * fee.Opcode(chain.GetBaseExecFee(), opcode.PUSHINT8, opcode.PUSHDATA1) - price += 2 * fee.Opcode(chain.GetBaseExecFee(), opcode.SYSCALL) + price += 3 * fee.Opcode(chain.GetBaseExecFee(), opcode.PUSHINT8) + price += 2 * fee.Opcode(chain.GetBaseExecFee(), opcode.SYSCALL, opcode.PUSHDATA1, opcode.PUSHINT8) price += fee.Opcode(chain.GetBaseExecFee(), opcode.PACK) - price += fee.Opcode(chain.GetBaseExecFee(), opcode.PUSHINT8) res, err := invokeContractMethod(chain, price, tn.Metadata().Hash, "sum", int64(14), int64(28)) require.NoError(t, err) checkResult(t, res, stackitem.Make(42)) @@ -237,7 +236,7 @@ func TestNativeContract_InvokeInternal(t *testing.T) { v.Estack().PushVal(14) v.Estack().PushVal(28) v.Estack().PushVal("sum") - v.Estack().PushVal(tn.Metadata().Name) + v.Estack().PushVal(tn.Metadata().ContractID) require.NoError(t, native.Call(ic)) diff --git a/pkg/core/state/contract.go b/pkg/core/state/contract.go index 46e9ef554..ab5e028ab 100644 --- a/pkg/core/state/contract.go +++ b/pkg/core/state/contract.go @@ -124,9 +124,9 @@ func CreateContractHash(sender util.Uint160, script []byte) util.Uint160 { } // CreateNativeContractHash returns script and hash for the native contract. -func CreateNativeContractHash(name string) ([]byte, util.Uint160) { +func CreateNativeContractHash(id int32) ([]byte, util.Uint160) { w := io.NewBufBinWriter() - emit.String(w.BinWriter, name) + emit.Int(w.BinWriter, int64(id)) emit.Syscall(w.BinWriter, interopnames.SystemContractCallNative) if w.Err != nil { panic(w.Err) diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 7f3699e61..41fc7282a 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -57,7 +57,7 @@ type rpcTestCase struct { } const testContractHash = "0b3bc97e94ed99e32dda46c9ecd2d3626979af06" -const deploymentTxHash = "632b179910b368a34d0b71a1289b24f833186e86ce16b3f805c1ac247a721e16" +const deploymentTxHash = "4288bb6ad12426a9e34f6af4c050bc291798a46958443d614f457a9a12f087c2" const genesisBlockHash = "0542f4350c6e236d0509bcd98188b0034bfbecc1a0c7fcdb8e4295310d468b70" const verifyContractHash = "d2da8ee8c0bf6c5bf3dda1ef671dbf5fef7226e9" @@ -155,12 +155,12 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { name: "positive, by id", - params: `[0]`, + params: `[1]`, result: func(e *executor) interface{} { return &state.Contract{} }, check: func(t *testing.T, e *executor, cs interface{}) { res, ok := cs.(*state.Contract) require.True(t, ok) - assert.Equal(t, int32(0), res.ID) + assert.Equal(t, int32(1), res.ID) }, }, { @@ -180,7 +180,7 @@ var rpcTestCases = map[string][]rpcTestCase{ check: func(t *testing.T, e *executor, cs interface{}) { res, ok := cs.(*state.Contract) require.True(t, ok) - assert.Equal(t, int32(-3), res.ID) + assert.Equal(t, int32(-4), res.ID) }, }, { diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index f2b90bf165f3d26e5575e29cc249acadfd3322b9..f98ff66b7d996af67ccb71c84765cfe80f251b46 100644 GIT binary patch delta 2692 zcmaLY`6Cnl9|v$pIk!dT_%OHlOp`epbB>J0F!z}fp+(N*wkTKbq1;!Q+m^XB^?H3%{id1>6CWM*+H(LYrTSf6wEO`M9Nspy zT}}R>8blEgMCM4C&jtD-Q;bE!A5G$^ZJGSlz_3y|B!%ekL2RHrQN-kV5mRMw0PRJ@ zIY#yVC0`p>oxL=sBKj1n6K8r2ZJ=})pPSug(D#-BfJ$CW2=q$4{nG0XeafCh*XvH} za-pgh%Q|)Anw41?MCz}pTOZo@AC}KVF+vPvjtoUCGCf?Im{#C5Wq4_{W$gg~b$!m- ztyqDVx6Zmnj+*`~Z1b@>b>kqE!!+s>rJYak`7JlwcA18O*)pC*t^UG`*ud8Ah|#(kYG;b1?*X7VX1={d zn0+qgw*z&_azn?WywGK`OuroH^}yG>O%-Aab@!>Eg2}O+$iC9oLm2PEHZG6l^tnZ+ zA#Pj54%Y+#)#j(g3VtUuDsRHj6M$>HP@L?e_InynUd!&L@}*pMk`if^$Y6`SGpzX$8qv zmqg109Q)Z>mvT}E}qoQ8^GJ{j!NoKKn}Tll9_(KjER`Wug`E}4{#h3HqLk*Hty zRibUb%XK@|LGP#uDu3EaS#*?uI(N=M7MNk`gk0ENy2Re)vcgFz0BSu(LpNw5K4xg# zPM&l3vHFj)kAAW*vC3%o(5!D2Sou0t{x+=iQ@FS^S0MBJNB6i7Z_Gcn-?Ycc^n#=$ zYY+aN)g*$2?)2?8d-b}g!9WXJ1!Pji&(;pUE{Mj(RW&p-ymo&jav39Og0Po=*F{rU z9kVQ-WzKISf4zu3dJhwh*a+N6co^i1Jb#~_j*fvy011R^FP_oE92`%L_l0l0!w=uu zV>pCZ0F-L7 zd$E3w@&-w`T1kjco(=?aauEiKUf++FZ^h0V8I|1O>yKAg;uNg`30|ffVC^mHXT>(V zJFr3{5JKpV3&{Xf3$ibow#}^(sSwvn;NR3RJ&q}a87mj}#B47h4 zEK*HPOoQ<6@?wB9>tz4TS&?&VdqJ+J7Va|RiEmg}h*lsG#$aD0F$g3Y z&Tdt4P4UW-8IA;G^wD2yck*sv87*}ENyk1L_1$F~zA^!m;6`f3;VbstGREtf0z2{% z1j^8E1`Rr!p;8D0pad@~!7dUz+U9pTp7g=2u=ky-3JhD~R8rVm7mhbs7u;@RZOcCa zz)U&F^5*#N;8!#sRzVlVr^lfEApw)XDD-)&$g9-mvpSiA1h z(KIlzM>%TtAiRd)F!=j*^NQY8%I0G;&8%gsYm{y9hCNgNn~WNK<9z#PlrZjWqu1AL zen)+AvvN2&R-)}@e~~$-pJv?FLg&uGp$R!RaXac`Y>&jPlEk;6lT;bifqQ>XEYEzBv5Tmcm8~xX{375{T^;;P7 zQYfeO$vYo>{U6rz3Bg)hloF%8*G+#?jvh=`Nou|mrZGM3xca?Bv~c_$%kMlJz7lcg z3pg7)WW|@`)MqQ)RxGU!vmxcUjl#^?L&5(L%;o}#aE9nplD77L)MH#Z>;-*p6L#>? z`WdYIpIwofo2yoR#C|Rj#?TXj8(gB{PQPuy2{*h6Gu zRLfgOQtiaNXhkKzM-6nF%N)|lLP@E1FmDdv+cbo$AzqOHsOG59H16TS1m{|qX7Ua`TxbA~XmvGDPk18ae z4_1vd-v7XZ^jxfrBypKia>69I>l4 zSe)F*J^Dzs3~2uO{Z#mg3k`nJ@POD+o{s!renNJ2A$!-KzG2Q)?!6H;bePBSJ{KYj zp0=Pg-@z^h|A%g$(`EU;qlVH2E<%>he5an3nWJgBN5( zQ}@$7E(Jlw;=dpfak3r|BRvP>RvXM+R^`pz+%)s5Mu!VaKWPY=^!I0m&~z9G0F_km zTgS0$5wTYPnB0^ef*VzK00kq0;*Yiz9YS)nE2W}xr!*y^LsCb(S0a@)HOvD#1*6Em z7YSFQ%g@tu8UD92wOs-v`hUIv(^tdmpS|b2KWrlnUSEIS=P4UgybxoNv`O&KKp=FI u9B<3y7nPXI!p7%bH{MU|gOVSbwrUDveHo!*9*dskr{l-Ou9dC>4EPr8+5%(H(k$tUeUE|*DakD~Z!pBxdMi(J_z3VD7E50(St7O!* z35k12grYKUb|LHAx9{ii{r>hj|H12==Q(Ffb4xSlf_OB+!c^Np1ZD~weE;|rYXE0Y z5MlT8u3BiVl)hVXxV55*Y_267-^VJ4ybYG*oqp|_V!58VQzJBG!H;QAS(HsvmZuA) zZ_bp^8uNLystI$IOI}byj50b`DM>=2utm(za9u3M5VRN+j{$E_N&vC%1{2pFUt9QD zpKGw*nbrS7#UMa5X-@vH($945RH7}M+!U9%scO=&V&7cQYE2=?P6%RLbmJiCnOUrZ zZ+7a9;&i*S?|AC~3k$4RC(n)Ei5Bdq{4yHYMw+=mKXwtXJTC7pM4|&F&`M9%ow?{9 zqF>|8u&d+`jPX1K#%V+Fv#6sku7J1i2wFj+if$H_zY2w*dLFS(I1So92>P(c4^_`n zcRsnz$?x98p^l%k{jbRI%BF6d@&Y&n_I|JB_6}=LjWW4~j^Vqe%47!uVaY2%_GVqh>$UUyy!hy$7_@hvWJAXB%h3Zc$Yo zyjnajYOcBC3wZvYH8WEox4*e(m_}lk#gUOdAJs@SAAG&d za&5#wpC+|q`|AUz#%N+(>SZn^hMV`+7a-`XnbM~p{N6aUjv9JDyrjOm-onBPk#D)O zj4;F}mBx9B9*6`DR~59q^`^3q3`R~pQ@CX5my18bN3NwYJu+DkhoJWiWSl)i;rAvt z3(~^H5{*A}bElbZo4SQ+YqIHABq}(4%-IJXBp)EDe*ZF9ahG6G1y_vO5u z_VE1M=P_@UGa+b3!%^BJ2EXe8{2U%H6$X$8k06(^3+qE|GC3788k#ZR+o*Ne^{Jop z5stVsBpmbk=J1h7PR(V_jq)8Zoz>PK3xS}&0B+_;pq0fGfPqv9x|Io{^>^7kj_5GiDCZ=2#RL#^wY4Z=G$Yd%=a=|tmNnKmx21)fTT#2pw3gPIB+E! zvHY5|lRySXj6t1kQj{9#?5>1EZbBT!RwD?4_MrbEW~>!mAVyzuEW(9}e*-rak7VNI zP$gf3oG@p7uuJfEQX96)ouyZYh7ZyqAt;5^Z2lc z;`&A?MVC1u7Wp?-hCfuz)ii#@3(`j5(q&SsNwn3l=Pgmjd}WbXIr{~@_HT*)Lz)kp zzm=RjD|F_W^we1pnYvnQi*mk*;Qr`vef{Pg2)g4}{E4cyLB<*)w5!Q?KF;#NR2%0O z_R_bPPu)wAug&6vcXZ zPEwDb{k-Fk=dIj3`&~Br>ht+_QPoZGis1}{a~p3IKof0C$9{bQjhww64Ntg5()#%D zGq=bD!9V>e;fi+shZFsqV9Neg)N`_>)PdbnWo=CRle!9f2MX9vqsKhe#SgJYJx_YH zpZwVOc$mp>q991E%uXJQn-6vRE;*LtwxMao{9l5F+)!9iQ+YSZ7WGi1%Nk7*6*6t2 z*n9bXxo%g7j2?;tFZTj(xMB1vzX?*g;dmp1ABu?U+d}4Td#Z~b1uPW?x*a$2d3^Sh z-ngiLW$s9Bl|>jApE`D3H+rT=UK@6Baw#e>zp#q!3i;=TwQuH}1l(C@-xJ zsO2SGa_W91e23YV+O4(HS3f-CI6%3YW2C_GDkNQz7AX`W@ey?ZQJv?Ag>&SJnPaj} z5fJoAfwyT8;3+xtQkLdlo~%!jTuylWbuq{slmmO|p!VzV&6I|ZA`KfVW*G$}=F5Cy+&WzX!pew+m zpU!oD0fEh|Fa*V3+`-e8PUqMYUa{qk!(FG?4B6bT*;tGURpU1>zLG0$@=21L3^E(` zmbwcZ+5pRFvQ!CZT;dBht+7levvI0{07`J2zt6_+oz28)?7u_FKj*Y{qQGKZq@4J_ z1w0ZsH4v6v0j68GBKZ7D(PdCn;N%i`W$rCe@qqqUb*=SFGh*!}C7#KR$`^Nq?1Cfv zeYPj++U@Tcx(PE#ebpDQjuo|#1$559@lBQi#3qDEkgi$wj`Owp5dQ`u?efH8<4ZCH zW%hnqu%O|pW5bCYmzn;=G(+0h-n>rd+>bFuJIDOH6NiijEfBQN&C*t3&ZLV)Jl3VK z!D7U2&E^}l^og=ZX_!j11a-opLw}fsCJQdDhpD}>cJt+_5&u0^Z49sFH0V&!us*#E zf}X1L^UV`H%giL0i9Fv+UA33T!bW88^$G z@=nEDs&V@MWNyE-I55gX00Kd*#BQN#+JAlkq}sF7#2vU?+W2OkZ+^|)qg${Lqm<=7 zL8IEa!m_S@8}@Ru@qMvFVW}PAAcMDyw~G$6R)*E?cm;tupo