From cdaf089924a08eab848303ec2ac5f8d97c5da851 Mon Sep 17 00:00:00 2001 From: Aten Date: Mon, 29 Jul 2019 15:14:27 +0800 Subject: [PATCH] Add LastRenominationOf (#794) * Add LastRenominationOf Close #692 * Fix renominate tests * Build wasm --- .../release/chainx_runtime.compact.wasm | Bin 2150266 -> 2151466 bytes xrml/xmining/staking/src/lib.rs | 12 +++- xrml/xmining/staking/src/tests.rs | 55 ++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/runtime/wasm/target/wasm32-unknown-unknown/release/chainx_runtime.compact.wasm b/runtime/wasm/target/wasm32-unknown-unknown/release/chainx_runtime.compact.wasm index ccce8457be206d53d892c0dd309577dce82a19a8..6010d8695331acc7be4041f38b27c2e1e7b185f3 100644 GIT binary patch delta 50681 zcmc${31AdO_CG#dJ!jAK^n@fN+>>yH`@R)u6a@vm@mNGb@Q4Zsc&?bBC@6|3N1-bS ziU=8*Q@F}-u(XU$q{+@YltY6ck92#AZ1$!}KX$!CCbcL1-Mka_w&QUTU?e zs(enoSN`NK1A+k2i^wkK?U?_6v@U_-_^ zkmb%r*>C)&-pUnh{{g)zB^di#8}B% z{`9R%Gt{w4Z&kh&z0sZ4lG~LR1*$QeX4b=ZDo=?r(;)<&EZO>RXSYR9m4o65dBgynBPY!{YCr# zE>>FeCyJFDs1szKqLkR57mZb_Tk}RMs|BeY&|U8GYCJwp83~9rb)52;XiwDp=qW`M z1^5-?6%tBo(s*T&m|e2`uBVjlPGc7CIOer;&G_pt>OTJ0vmmz|Ofx=uk}`razfV%$ zvVr$Gh1PXbloy=FoALTw8SY=c^*xVSgO`p~YV&Bys^Nn2jTlXVn=XC=0RMS)7 zIaqdHTXF3-Be5F!YIog_f?%QPY2rCnCa8>h%{)ix9zW~Kx}rFQrmQ=sDKCpIG4Uo= zm*Y4p~UGnBqT8rPmVVw~2CuPSe5Q_0ouD5XLjWqhG#^2X~G8oo7Wy<&=HS`?_6 z*0Bvrok-616H*A`42&BrY>Q5rNh12W(lMb&1lRXM!4cFZJ;F>M=@G&5S;&FoU-(>U zs}>ip<)3}7tf4_Yw_VvxsTjhje=35OPNtew^9!X=VRN@xPwY@$p;1{azEnQTVdi|Dk6lK0Rr9ky za;ewKwb+eFt@~;*Ri}$ljafA%QhLOZ%F-izb`$nc>@x{5J$YmzK09KyY|5q!8QIdD zT_pNw!Gv}}zA1mT1K5$1bQSY#OD0r|#=iLb(O7KXU*=){;n_#C9fNsB#;z&*gMe5J)hO1oYl2EyQMzOY2F>| zA3`_cqQTUE>t4R8vKr!F-oXY~Uyfp{e3iw7P2d3vGWYpS={u{ zOtzY;o3q$@svdcXy^W@=^)ImwG&RdRhxv$4t?)dSA#NFvuQ%nrUSstMdiQJW5^sRa zRUAt3^)B8VzVMJ*&HC$gwl6?q|Jh>SQ~LRGHlErW^cD+IGuF_zS*fp0$(v)8{L1Z^ zC*CODxG>(b0h>#ZTnT9{ATtSavxK0+v^T9mtJ$a!HS+BSHo?&_)vO60v-2a=8O@Pn zj#2B-c6ON{Q4)09P6qov?HOy=H|zq1?Rds2_?9&avjuNhSM6g;AayoJUS~QVeTa=h zyHkH>W2x82e`iB{9mLQ((6B;gtT4YLL|+cRlY|8e^Uooe82-5uhAf8P{204XjUL%8 zRB#hg!N2de9zDT2(BQ4ouzI6V5&62>SXd1~vYRs02UNE51MBN7wX(vNtl@{V)&9oE z9{}}Hvtuj|mT~0=d{AYz3!&hZ%Ib{B@4HEC$sC}AOLEk)tcnx&Q7>Z$cJmQk)YjUGzXSr!6Myl=UDSMsW?q|S-*i!573?Rp z)pS#xLL+Y7O|7mrE_J3QC;gU_m6KlVWYPJ&_xXd}RdOmNU6R+QVPx5Acqe4KwYH4fKTLfmp7Y3PP4& z+h6TTx6JOZb{B|%P0i%TZ%|v2vTt>xDlC8ltj6EDQ6)2AeSV`_+&;V?)*a@9?7ube zIkkf(Az=xb^D5V|6u|DPq4uJ8fva`h~huD6hd^ zsV#)`3%|@57Wtm9tnM?cmv*a%1uOmIJN5T8jj`;2I=Bio1=U!Mw~csbP)FM$-fF^# z{HA+b31_n)$NQ~Dv()pw-Jn9P%ksUoy;S#}dftv2+p)@8(%gGJ6wE3sqowzjAYDAr z(K|puzU<_EShP3bT<;QrIm8zYd6zEUTL_Sx;Q;oh^{n{BPbmp$x)xTS&bp&SD=ZRAKNSZ<+8w5FOn@ z6PbCdw+)T|^IN@-h_Ur6^bQnFl-}vRUR14hm-id0!iIYsceFdA9|s?;%5&PooJ^U?NnRuy`A9quJ?{$M<(!})_b2o`s#ff zD)N}4JsrS72_Q8pYfMvweqBxgm6YyG2`Ehf<`STQtpk7vq;~VP zQzt5@DfBP3a|bdDsFu0b6Pxely*GImvT=*}u}$85Hf@m=-|W>J6H7Gv(h7z8wB;CEtZKieRR1Ez95dG(68tvszvylP>k%k&6%uOJD~8 zzkizV%l3_?8_+5|JY4)E$M>~2d+u>!)%~hmPB`Yp>`RXGr>px8h8<;RKKZOQp@#2h zAUt=49To1}#3$ADZD4bkTQ}769aq?_iPjATJ~-JWZ}OSVec1)Vv#_T+F;r-7P0}jA zkqZOX(8j)I-m|~$%jUijDqHX~zr3|?DJ%Pl2io{PWUv0j%i8!#&%U|MZGCq$cHk%L zf)2jT|MC|@C^Z;$fD+3`vI%Tc~N&c3;E5BYi$TUwt!>U-W9YIEzw zu|6#O0K99Q?;F9t?~V7}daB{>dc$YCKBL@xQ23N@fbB6=ILnjVrcLx+!>UgMV?q;q zg{n)-@Q0rD-JN}KElK>ukX#-Ue0~HT(KCi&W{kBnYx-80FzFDo#2x!`l& ztgi1Wt8}g}S2zd65tg>d_n2ak4=z-zVisMXE4*yHuZi{X>%NBn!3^3g@ja`af*vQC zxc^PxLX}Nh!QXhxm!}=v^d5{2A%JgDf|>l|>b{tzuJDC}jvK{nH>&y?-$KE1AAR84 zsl?zI=U1jRsBF93TIZ{*NOrDH^a;D!xrT%Yw@R{eO$m|iE8E~ZptEWFID*2;JhI(a zExdi7y$*M9j@5FzZw-vp9P9TTzH1fs-ahNHFMTCZ*;x)X)Y9GAof6{eY^a3D&f5Ou zyCcB9f5n>pn{P-Z_GF2b<@dK`Y{@>WSI}RgKvMbfkpB%f?ic=s=0Bh9-)H@)`NylI zwZ=vLofyTr@5lT@{0-MF1OIqUWq3SGu#lZ+c0P`k=OXsQp+3n_Y>kWFyBAO>$Y;zWRd=)*6f2hKC&f#+#`LSp@hySyYe=l1;(OTWuZw9LUwq}e{*u>*8l?$;V z88MZ@yhvP)`^|%Ec#YQn$#s50g|^HaM-Aay(U<~s70{JPI1KntYpl;&`!yv~3i~-y z)@dmmqJE%_zd?B7`?Syv3e0@ps@K;4L1ofh`+E6r^*Ii@hr|F5`k>4G3q$Pd_pHo* z{#TWFC~&OR0=84p{gFV}tefXEH@(AG-|5df ze}TKy8}WtBIw<|k4OJuFuxSALv>VE>j%3CGUB1eyGQ@wQFiLQ<>T!5?=UQLg>wjYf z84R(~HMeD;8VR*4rhy+;n><1*+%eELS%yGew{GejFrri)DlL;2+z_Z?&F&Q#TFC)f z0JRZ|HnS$`c~MMr^w4fc(h&U|BmAWkCUJM{`f$9)y9y5_#D^^JspS$tB^A> zFhX2B`Ai^RsGX82fnMTvTvWAkdEhuBT;@I>SgW#!*YdBX2kQ3_I1LcC>gEN3OJF!a zSjtCEU^GD3se_!rWFW!_gF%TwbWNBG66Si(2>cLVieD%t}g>2Q^miA8I0Wl3hk_D>*wA5#P zxhgPOdu>#?)U$xE!#<<%v!fb;kY5e|bMp z+uFV+@TzilZNIiQQ2#V-TWGtpFF`%xZ>z&cf%+*Cec|T7bf;&3>a6_si0xVVp$sr9 zKI&5tw|7|}km%m2XirU49QUhr*OtJp#H`M!Z3}I;I!&`2&DOOJYz-Vy8zh%1U?Kyi z8e8b?u6x6AKl%QixR;W3iiuc1^PhnxBm&+38Cc0CZ<+cqk@jIyWz*P{!@p5@i%WWC0N(G_SxX_Q`fUlFDpAbW%Bv7M-_lU z_B=b;x@3Ov3TYUyj$~Pjf{zM@?7SqnfQ>oMe_9fp%zk{_dU$E@u&;|)$`p<{GiQ2T zku5^lZ1M>t*d6AHm1byMu?)NXt>6Q}PM@9-yJSH#ms}XnM<;~V3)(8>Jtr#_<=ajc zHJ6^S?pzbRM$k*F|9$aZ@M1Rm39J6vU`M6#Yfe?U{`ZQLl?_dIvS?_^3G1o%gFg0O z4Q1np!Iyl|M~;h?)*zwt#9!8^jln%koBYIDPuw35!V&LNHB{XiTNd1u;V1@F70b^z z?GEntIY6-_h{fG2z7Ot^VSsRj)6mQ>{UK`4M-9X%Y}VML~3Q;U|hvDP`>`X&%Mrb>Uk5)s{|oLq{pB_RUmGB}7!h#2Xs zl_DXZLnx0;ahp&c+lbhNf)7T7;+-=>$7mquR0^$B9fEmMdBSVq%=>;rQ{Hw!5ej@XygLsyXp@oMXOA%l(i%WB&uRH);E z69wpw|Ygf{!wy7#RESB55p)iI0T znZ1xS*YVg|zhk6kH zmJSZxA{K6|j|g3FSIM%T9ubp?TO6p{VMgj2!_pd+KDZfKT2PDqyc3uvYB~eZ<(>clr2lLl3bTzw+>& z&`)-c4GipN>aZvKjY2a<8+|Rl3*8I7W6l3A)XeYys|?NMpt-s_>*}tCHJ8uWqX(?- ze+prz5%?1?!7p)pZBnV(2Hu!6&DL-6E z%R5#37i6BYeRb`xryV2PQ^t2?YPC+)O_QuscEgq*KW!81va~krr}5T_EbVa2mWaw$ zw4OG{5wXe~xw_V`4YVCTTFxwMrP+(BK~k!!Sr$lLRJ~AwrBw(w*CsRe{a@CsmKu%> zo%Q{CYwbRK5y&VJCRs zW?|Qb`0d?nE$XJ#R>UzYxn`CZz`jVX8H-iQXWbF(J5rl=n{qyGBMGn9U8}|Blvx*c z*Gg1JFl@cVeLb}c=_pj6o|@2N5BJp8GxpuhzqRe!Rk(LS`*>IH2| zG&KEfxZh!O`rFo)`Pyh7#lcsWXa$U~v>qza8Y-bxvcjsj`QpV|W43E0|9Y|3oQ+w@ zGnRlXJ67@TOOSt4z^hr$F42Yw%6gY+Z#amsHZ9Z2m@RlS?T}-P9dazSw9Sn6V;_GT zgj={mlN*s(f9IQ5Xv^&q;gr*&JOS%lC*IcDC@8YpzN7UK{R!-&pSpb2DlN+iY3(IW zCr}TkhP1T4MS=S9RoWjo3b331QL5FaDdn%$`qG)02Ucr;;Q-SS>;AP`^$^8Hd?Tdh zIuXE$Xlj9?SBhj(BovVmoCD2>RH9HQB10hu8jEC5EEJJ3oC7r?F$#tvh}Zb6GA)Ze z{f=doX}^ly!}*_R<5|wcwMu{$DG&MZ=PmN%ueQgW=;KY#4_wP9P6;;SyZ-6b_*b84 zVk2rdTjIXen$J0qE2APnH z$?E(0JKJDycJW=?wCe45K~~T*EsdGQY9ZRp4?$q6h-MIYOK7YRunaeh5B=7gTU4x? zN}fh*vKQ)=QMU|3!*JCmo`+RASlaBvU{!OHn!KHW7;PvqRJEB>taeh$Fp9X^z%yQL zr%qGgdT5ApJ!928OrXH?h??g`s42#)M=_xw-}$*_bO-9qQh}3vCRYo@hGD7KTvr13 zBwrTCh(~FL7!7NnO1z;nwba{AEmnE+?OHq(Zs!S#YW&*mTAd=hRk8R0R8Zq+bz&)6 zty#WRZ~0a+9fqUBw2Vt#lc}b;dt)qeTNpDaD8#x!9=1EoUD$a`Cv*`}Kb_J9J1M1a zbQ2n6S4=PQO*Kb`X1fua=3 z!@EhNeAK2q;VoEH2xMb96#S*P4@=qLa?pd)#F=02M0E(gfwrP26mxq6|O{>=K z#&V4CA8G*X1e_%wl+ys^_@KN7&~2g+PkZ^(JGIbB)XNbim?oV`;S7^B*}A&CUOs!O1WzlSC#Q;^=5jjee33+@ zT6xM;pqEb}odZc!wtEt?awMTbi;~8YD3>lP1Usn;z0WNwH=+lrK|?ezp#q3nl15}I z=(vl}+l`Wa7H2tn`y3Z%@P1!wHCjF>nr|)PLPHk_4XvZq#-e?~U~^kTLnSHvHQd)8 zBAjlgqbFsEQ}RO;qb3*P%(Zniogem}-cB1t966y#{OY8oQ_MPIZjjz49wpDfV3sT7 zxa24CM{WN~}x86#(7rVSnBEkVL z@SSuqPfCGudd$tY6;psO`c})is$#!y?iugM`DePx!OVl=u?AJ1M1hPsNO!bF5&WQ0}52 zgIrChhqz|??})EKalK1(yRA;^(x zE`;J^6g$~*k~voZG81|w9_Xa3r2bh0Pq>{rlYz%YPcJCl^}dm-!ZzKAghacEw(DCF z?cgV(1}U^NCmx-2q`<@`o~B=lCcY(}Pp94Y31BJ$Cps*^u59c1oTdWeeQKkWh_^#r z+anhg`UDU+@ucIKO1u=>`8C`CI=;SFtI`>xwJGIyC`E1uQ7TX&r2;mk=-7v#RAW%; zOlYH>f;PP)z0&3CRJ2JYP0<+%Ryo@A#i)NHQ<_ejBMD%6+Ux>5K|y%_MJY)0Ez%1_ zEDGBEn}7~i2?Fc}#7&!u1S^F${UmKpFINGFTExdhtw@E`irCc3L@g;-{G;!*=>LFZ z7e+2PsW?fUm|(&3s_^tABPCXjWF}_uZ_KqE$@V9JAk82hs$|z7-Pd z7N;)&ag&Uc97}pQLKjMs?e_{*cs-Gfyo=PXi&;_^?iULc@q~oY9l()W!pgi-7jE|g zDs^Ec)cT)D*jD%go#}*wv|5h#OIR)%ylaZv9lt1{{A_Yj!AVTlevr#v0}|Q~NZ0iC zn1GZp*<`|UNeLrhD$a=LCzY`6NEr&qXc-&1AX$M#z_Ogkwj@Xx^8k z){Vk&g&YB+H6CEXO)Qt;a)_1jzakcysy30<>FRJYkR|j|8nF_xl|XU2Y*9g~pFzZ$ zEEvCm3ar8@0I`~40+U1!>zMFLgpV;zKsEy6tW5$}lVPNaN!LND#!?EYdPL|xtjV#W zcAoJfV@?$Z4m)}tM%Dx+=wDVCn}V(jSg}f*6B_GEnK5{t7e^dox#2iG;|wUX2Mf)t z-g?ZOQ;MZ=uh|H8+^;u_G_M#h@Jt;Kze$m^+FBkpX@=qqG1Cxjza|un8#5&WQUPX) z5Y-6Oyhtff^A8)!4uI=M}KjLxrZ+TlbsO-WAhq4A&BFIo$I=Jk(vkB+`id zbK!uTV##dN3b?nq7$v;lm|BDj$@UekmZJNUt(o;AQ?gRVm*n=#W#E~@>5M0050e0h z!Bc{yQgD=Tyx>k?X_;KFNYArsPIEJuyE(fx^Nd?7qS2kMxpU6Axie|4wY#;V)1vNl zgKJF9VR^(n2Pa(uv02RAK}X2E=DE_Fy~b27&}*Yk8R~Sl>yQ{-N(Dt!BBc##D@EEu z>C$G7ewTt(v#p!&^g59qVPeC`g<-R7m8j4{$X}gEUF_C4F16kz($$@%vu!Bt2x%{1 zFDQD;NUKEgRoP5&W1%h4}#;2fGnF zd&~n;Mp}!Z)Qr>$V>W&iAknef(i>IQ$|_Aom0FQFA#$CKNWDBFdl0^ApiZfcNU8(* zDPUbiNjPqh6%bJgFd8F?CS{cemz%Cghfz9CHGL!T`2UlDQusKIQoPuLcGoChjFe&w z{7cQO7dPz^v59asQkJCqK_Pq1?_P&YpXpYGkas%dk@D08dZR~=FjiTPbU)8HsAU!H zx1Eihur*oOI0KW3tzxWU2yS}KOEiw-^!F~(S4ekKikXlzMXljq%qKRObT%9 zQJ%-NBuC|?a8$KO7s1oG1vu;nlwtNXFgspnsk=WX+o!2um614#1|X+M=UnK_bu?|( zd57ez8SxByr-^&$V!J{%#~Wvt==RKL{Yu7t2sE9b9W$=T^AVk<1|!16I58k_k}WZd zD35|4tLwo81H zXM~Nwpp8!v08YfrVgV`s8!K@r$MaFz<*1 zpb3}3$=&ZY<8s1SyCWd9w};LyqPbp@MiQ$6D11qYT53qZ1U3mKqi(?Dc;aXzE{_K= z(iF#k*QyrT&tfwSj?ia6i|t_6eioZi(M0)(GFA`G4p<$7=V8bJB2@QOLE9}-sV>IS zz=28kNx&`NsgLTbK1t8s_3W0%iW`dIGNKe{X8|j*ZV?h?6CqWi0 z2{~9tI}mkJJ2*#7%Px{zfJezKQe}x2;>0yjT!MSXsWFls#0Q?ZMv@@K8LkHoSyKLF z61wo=Qjgh=)^vo=fmG70BA25Zw)@bDOGN3IK#`+L#NI0S+JxH^Q=s|HU~e6xBi}U7 zM?=8UV>bvyaZLJebHN?h8z;_~i4wW4M)RIX>K5LOP`^lvRkN1l#u$*DBY4DqlAW2g zCC}K8vO7FuKg!OCXYeTd=s&a^_;c+%wa`F2hx9HMZsx#TEK=WrxmfrNIV9lB#^I1I zakc2|StQ`_Oj0g^thlYlg+P^4RX-F_gg5v*o1P7gy1Rs|qD>?@| z3$hY#*b>Ysy!L@MPeZe`@C_ z0bcc())6c&WGe3Mt>cjy^iPHo$0J}U?OV~nG;q8!JfFp;0!DVUyD&v05zyqMm!EST zz#uRbI$AQHNdtpu5F7LH1h@zdHt>vwJD!j==;4GB6+?#(PO2PRh7&4B(nL~#YNK@o zaL~i_hzB!wz9W3YPQu#?M1orromA_STq z1e!&?@VdFK&`%MOhrWQbSt+i?gK<3A>>?>wYTj zT1l-5l@*WB!*h7ljuOcy7_Ek!&`KTbqj_m+=}ffJm&c)%uxgvsO2q<2gaHp(TcMQ* zmadfuR$ePPTF0?lm2E8~^5CkRGto*3og=IaW?DHx5VB+-NR9&_N=R=3csUcTInRtP3Ivf8AvAJuz;2f&PZ6V2`1rXReC&nC>CFgaK6Sf|gTv!a^mb zCs*(joj}6Fdc+GtFvNxo zQB4#li%YMx{s4`1P`ywwJ< zyv+tMX|a37b_3O*eEr2^WjzJ22ODsyeX$!E{|Hvr2^tANh%GqQhGi)`U`3Mxr-3OweS6wbT#*00_bWk&=D~ly55CC+wkwi zWmJX%+i{7vsL-&t;?fQd%5WKy(2sE$Yzz04MvwKIx)cWS`Qh+*Md!!E;hdWj@oRUz z4j!|QJJikCF!?7H&jzBi3<(aDvbVMacmyn$z(wtn*-{mUa~AU8o46vvINs zx65EuZ27I^6ILV2n3=$Wu#H3=?5@aAEOqa8CANSlUM9lK6lZ@#z>AfAYFD1-5b^0W zSV-4yv&1tVU2tfhpIl}vjBMShEV`dCAcmqv-TH4>Un1r9!so zsOHH|NYN=9^3Z7m^Dw1>3QkCAVjl-bqiV_+L7+t*8nt(L=sc!<9_m)%6#!YONO>^1 zs|>lvN(T9v&VO({?XyutYoG-O1S&ck<+slRkVcbdIIe}y=QZ_8OlvNXZ+Y&-FVCHjaFCu6$4@M&h%&mua)|0xq#;6$;~~e z3q2AIn^UoGo*-@{0*@|zOlLN#?a*j)O$=*ApNRcYiUZ=l*w<>lSI4`P5~~bF%;jZa zRW)_%UiMGSkXWP>93zhpiNT3yxzo1!s7X@2g2|mHmE5c8f?znb5{ne!MLvflHX0{z zq~Y~W-M$ax#llz;aSb+YtmT$Oq)b&bR>GScP1>d;?|q#wAWle}bg;rp!eGN;vzlDJ zhn^PxSAplR72^FC&W6wLE9{jI`zcW;i^coB&UH1jlUx+>O8*OdTjZ&R7F!Xkl6)j= zH!~YKu!NCkW^D)N^4D$u>vS7Fjz2~O5*t39&}EtT3c1Zj=tI`U&17hb{+DN(e@E3}XviipKfU=Hm=An{rlPiz-S|E?kd6RdA4fH?$o7CQbr0>bFo zisxkXEBgP4fG4BhKv47y2^d%7IH8=7+PFh2`w3|1C0hwPJJrRsmkRZz}Va(?p} z|0+8i#5$MV8ogsmDig^Nrg*KKSRy0Yr}Z#uMMiworb{Wyh>w5??d?Q-1Wc%T)ud2T z=t0@q;+w_Pr=>RcRs!g1Zgm3aYR-xHD2l_jGYt@Z z1H%Z86Wg~H#0EHl1*M|f(Id|IE@CEh;+4D?$72`Ag9socLd^A~ z&VCo^N+<5cqkQ1q6sPl){yl%UO1SFv@a`RN-4x!vaPEm=FgD;B{{juMSvbL(2UjSM zT+=h$ZNp>zTQ-KWs>w(E!GBol$`gmTB-vaZ4;mGeL@FfMwbAByJHi967>y1a;O-P` zf<6Lp8f+GsC8;`W1XF`bA#7tF9tkL5%alBDb^~=Td}M4i zVY!9;Iib&hVwNX1-7#A^f)o?v2aNCliNFg4>Fok&4~K*Bu12vJO7vKSRw^CoB;$5Q zfk-_Zc&5{9j^jXRkUT>eJR4pCYJ_KuO679 z2I@MNmxWhdic^yT1QU=uPZQ6nZ8>Ol5@U`pQ^4`|#WP05Garg)J(!}mY=TH#vso~0*ih3i*MEZ*AA`!rz%QSX1Vczd=+)*;53F0Q$p_d$;D zo@zwp`fUaFQx_UazN+02y#7cO#;1bf(Qb|jAIdOv{Np_L$Il0J@RM`?I zb}^~;|5V(_9i@<;L?XpSBbN#WN4RKs$46eU2%(S&o&XQyX_VN52;775km((nA1Tbk zdu*{bg9T%`fS}@emU!THvkQ)k3ZF`Y6$C=^WAX6i^gs;K%jkW6L`=d|MFnwpK^Ny1 zjUI7<+lU=Mr0`g9)!bc^DqgO8AQLn|jp{^j6yfjn!gY&ccoHW@5LpM)z&PljwsKdT z-A)^P^kN9_NV4JZ#NY}%*iH@NJZL-`4_$~4bs~7AvS?4;OV=Z@S0iT8vsyk|*v7irs3+NTQnZbCCDB8xhWes|3hC*jb>7^Gz-H!{rNi4QWsmF(1 zp=xW@^ECRf4mhnaP!*t5KVm>5zIX=W~ zLW)VL65l!s9@$dibh&ttT$*(WpiAACC4foiMCbz2_hNO**7wV4nA=5d^lERd>=(fo zmB_e7R&kpXf(t3Zt*#N0cw-#}8#wkYf@99jiwT8Fb*no^D{U{F1PDh<>>X^%353Xg zg}~C@QoIFxyqGwsKkSisXyF*)OH?kUyVh60!!Rotg|wfv(k`x?^_3fA9mM(y9bgyB zw35FQTlDr4t@i)(7HUAy%gsh-=;b-nLYg?EFSb=R7+^?n;%ERglCwl4IGQ2=*BL@$ zHXZ9YxS>>By0@k$7r9Odlp+ogy!|e?3`;8{e{bVbydFo&t*|#FqAq&_o|J4&aF>)4 zTu2eYU2?txO(vd_Ei&IDmUd2qspdz>ij5u7JxRLjd0FYjNeOR;lMS5|A>j}#3>E!B z!lgk-{!2VFEx9>LM@eC95|MJFlld(b?AeKhm6N(Er+zF)5bRZq)5hz|xFo!qxe3R% zBHSiaMhb4dm~9$TUsA=&+_UzB<3zgG2rEg%%F{VgwUO!(_?62ol0}kyA<kl77q4}R$0(@9&MMpPLN{} zMX0=!yJmuuQiE1|HxHc(B$>|JT2D;}h=KF83>GV{!-qnb$!9SNK!+e!kFlm)CIfmr z3+u=rL61u)=#_xtxeW=$og|ayRJ0Yv;h>t-7>+69Xw9S+2Qv{$5xK~0Q0j@toK<{$ zUkHzW!pzcZCGpIzU!cm_*raExNEm`L>fKI~VzW6RJ!#0wgye~X9H`_LLMjRVjn)k0 z4nk56B_hNslq?d~%zogES~-a^gIOZ(vN_Ys|M9L?ggLiU7*} zj-Qk7e=t)lEwKk)If*}fQZ;E*2Z{X+n-5(^6+Rn1CFC-yL2wto=;Si0HV?XtY7mAO zUn+7L)gTP7mn+A#+#>pvt7AE(+u&r8CM*tp+sLj(7vOR1V9-C&JrLqqe6Pmt9a`jU242et8i__&wI2AS2ysmHNM3~PmvR!PP9g}3U6m@ z=99d4+i)&Y>z20R{2i_4maO%Nu9&IaLv_9MDad#ayg}D4@FfZm1obc%l<<`qkt*zk z68?Ecqy}4A!hg?*)Mv9xc&$p2d^WR$pI0f;iA^iv#gw01!f(z-IMPVhzlROwT=M7rqu3?+H4a#Y}vPZYBYG;Kg`(*hw#ynPP07Q?|ri zR<_vc)I5T-z<98i=$gn^^r__^u8FkQDe08@U;;ZRL}$ zjqH`*-BL(U5>la%L?rm1!W%Oo9|~#X1m7zp1yU}o)z{(sU-Vk`wf!P3=tbg(`$YyS zMPg?W+p7i4o3@2$15eVbz8pvb7i*Jc|cIwUzWc6t;XTUy-fX<3DHOjXEe7Ur~-^>9?e}JUUCS zTBD+t6K%hWwy8l24gRd8-~UFAzPWqqXvK-FP+T)3h|qE3ID|nGrJ8t7*$-czt6vpE zQ~CZ*9{TLOoO;tLdi7II9k(^)Pgl{$wXJ9vrr#L`RC0yGuzFY3zah4y&uq8mgR1LS z*qMg>+v@sc`V`6iHT1oL&;#=It4O$)=j%m@Z@4k~M&Wt2^_$Z^m4GkC>rV-Wzo4#O zD7siuPajHDu3cYmm-qxC_G$z>-r87J=ZBl<^{Lx`Yg_66O4RYC*1<6@(ayRyu67)uv)d6u zhrWv1>D5@uXShG1&v5hCI_Pld#Mig0@%#`aXqioy|)->kZhR+5F#~_4{iiUxZRMu1K#OPkYh}0!#?( z=q~ytMDnM*>20h)SDREb`sg|Q2~%H1GL0%7>5G?m;geW4wNUqo=(Eo5g(Z zg*e=gRxatMH{-o~=xZHru(b`Z)l^y@Ab(7B`qm|S75|aNSeUNNb?t{Zsa4f-wqoz!s-jp$Oo>Qdd{4f^T1yw8m~eIi5>YW$7BnR|f8Z_uk) z-`uEI_J$AQ_E~k&{PHC{G^_@ESU38pVUi_ypL@V*80?LAc+;`aElaoYtH@1us$TB4mAUu|ELcI$o zehz=icRjA3N4KvYr#H`XK3GmqQjfq3pgkr^e2?ox*r9FIa1;L0<9c?3L)%=f=c4r- zv@U_})+cS3txw!>veqZ=ux@)oZ!126g%72^tk8!-FL)Nxiw~smXTfs#Q0Sg#^=rkK zOS(+a#rJ5)_F3bm=+o)bBplFe>m05(5Yl_gG`+g`_Ph9)*t8e*#ll8k{F45z!p3ak zk=eSblZQjn%47k^v4y44Q9-N;PjcRi|_OFovW8Met5AwuV*_dM@t0t=`=s- zwF6ET*FTn6m(SB{ia`vYuixx-WXg~-#rH1K?-w6T&7k1WhFU{khjk*>Si4yNh0+I? zfulDr(MM3G+fw}j;p!2u7T?&S(;oU%9chE)I98~Rvxe({_7 z`_AN6FV$;mKJ$CL2#a1MWzDwq9*VMz|GXT23iLqrxAb$f@ET?qK4i#}R!IP(K~kB29m z=>Y>Ht|wRYvkfkojJ(X98?1w0>DQm;Ba(OS)_?Jl&F=rbUR7Z`Kd~P8LI2LzuMO@0uocOJ)NqaKOzjMKSvg^|CtO>vB4ORB!D}2R4GA48Q?+5i3WI7uh5~kC- z@{qnvhtA=DSEF&>P>o(c?Y7?lFfIqP!Td;G*(z-^p7{|45Yj@4>@Q!%=)f zy%_sLidptkqQ$lsi+~&rmhBe}Lib_eqML&Iy4qgB~+ zllkJRNMEz_Z`tXGcKVr}eru<{+UW_I@>*F@A3vB8&0+tT!nagHOY`mYttt2#W3-xL zXFs>oy>@zN3SUjdQ{`Qg?DQo&T|AYy$VnD|WrKg7%4fO2*yPvhwS=0EhRBUJ8wbM;@`sFk}ph~j%PaFKibF!7^>~yZ3T6X$@ zoqlGgd+hYL=lEqc(A@L#_Gj#Lrk%cSr>pFAqn+-w(|_CPQ9FJ7AF`ckcKWKFzG|%VzMreB|GessDo+n4`{TWkf5pPiII>?zZdxXy5y*ogT5_#V^V>$G#~0 zdfHC8oxW(7&v{Xfc7dHPvEgsoX{nulXqRua^IPq7hlDHN@OXZ-8vD@(|7v&hhn+8; zDW~-KOxfMjGbM5-+xh2b%3;2QJZX-SnUc&a?R4EtIi1aRy3J0%w9`Fy`#;<5{br|s z*!Mp=OZGe7PM@(;Zl}}j^yOJ{oC{>?e`A(luZ$|u9K|kLH%m~>|0xw^NUH3??KJEI zvW)#D^ZxNKp-v@H$3LB}vt|7yFUjF7x6@TG$!Q6wJDTI8OIhq+O4pTT)%7on=KW<7wgv1is@lcJWHEbWwj9M1 zv-#*+P$qVEnw`FAr*mdY+AW$bSkwQ`Z1j}PFUtYWrt*w>(LKtCd{IHPJ}aBcYt@g| zV>{>a7aJhmJC_ed-oI}y?g;RUn?!3X^Z2_|W#K$Nvp_|NOXW!atQXB!4#`O!pX(aQD;OpXf4M!(9b%Xb z*|YQcYmK6vSlJ=|eWPd%|IGOUN1~lK_`U|w`u>eB&~DxbAokmQSJR_klcRrG&PFNa zof}5$E89fEetJ#fYup0+mL}1FvOwU{|MWt1R+Up{?A?XjXd128aWlcP;5CTtBRqtg zfulWiItB+3wj9Fqm)IBt2-}7VmiBRi0B_4E%=eiu9O6TpMjx)VOxD3dtViBVrvT`? ze*l=D9Ez6Ps2$;fCW&qjTRJqvY#Ju>0%ZQ3;mc zBkeXKTBz##v0QCt#%dyjoxOy=bx*V#8?%J}bx*Wzc=8h48=1YtYI1M%t=^gB)wE@J zaRx2N;`OBFf->umwZKY^BW2jWp<_uwli~5P5|*cl;4m+YgxB~W+N#D0(GHBf&v!qHQW#8WZR^sHqyJRcvNGOiQ*;NV!OhX1jI|gpd}Hae!P!#Fq5~8* z?T~fzmguD_TYkt|zBPIumNXApEw@E4_32+9I$!aa#l@wb@YX}t(>tQyDQteGbI|b9Wgke*eub>hza{30^1pUR8&QpJ-$YwRkNg$$ zs2=%y@Hnse4Y&$rbH0fVq*U9TxNX2OdE1cPvgi{#ZTqdvKX0eU?R4OtXiL_7FQ2+c zjL-UD51Q^cvTmN}tY#$UxfoZsA#I4%flosIO632A^fILF^_ZuFD7W(e75&jigNpu) z7BTbAKS%R@*Rx&lc?bCK`=Wh;_};%j(R|DA`X$;-^w>4aJrZll zFVRoD)a7FbqYWutVy9mnj8@f#9glfJ=%&SwoE?fz0D<|lhoXHc{qazAPEGd^X*kV) zj(IB41%BuM%oqJ0ZHOWK^Y>^g=HJ4jhof(bG2B|iJqEt*Fc2o0Ac3&7DjknN7fLP? zEj*dhf;Hnv)UVL!=lp@ujjU@O{{viC^+60jAV=fDsacQTzP|rBzv$0sNA}=x>#;v^ zr)Y9ne#)R`9E)B~Egm=~`Ka$-V7Ylfu_mZWMJvjIteVH8UofEOjiW|ooPe;o_#jd* z`cBWM!<}*`J;*Qf8aW}S+ChF7vQ-_ToV!HQ-r)fd>7iCeWz34N@EY|_Rqv?R$k&`+ zP`{qfXv&5i=Y8$;F`v;;bFfG4`HXrYr~VP^2cK~-!xzRfJPyj5D||@M=tx+ZA2b9b zZL?DrlKG}~dL7d1(iul<9`j_|)Oiv}R_tp^((BejT`8>|Px-q1E4v>}ll`{UjCzEV z{+e+?L#(%ZnBBHBzY(|HGUNtFz-}0M9~D<)e3NF}%pgZ?!^Vo}dNsonweNd$k99n3 ze4+RRT@u`&MGaDP=SHQX8$#KGe3qU4L}q=4ENyETEi)XtQoGIf#ypJYeG{!kID9_6 zSoEJLK2F8%Ar0;j^S~Rk?;aR4gqHlkP8(*({DcfKLPr%JNX_=Glv26^S?~Q2AigCS z&*RO%!6rXORx`6g@WTMx@`+m3-b`bLpUlByRgJ1by}VRYQe#t1;{oEdi)tAp(0A4{ zYE^O=dgl3<1#q!mlvNpXlqkb{p*XtKT}`QW(~5W$A7O6p+IrH z0-3+AK<1yIJjS@n&hJA$L+E>(LH@WT=E)M&5QB(anlgxi4GgLKTc^OS4;mN;gdJJY zOwMetomOft^PQ2V2+mc*1`QZF_>$p+1`qc*IJ}@QG!(|s0)~N9-_~zpo-oqu0jJb~ z-->)?a`#Z6lnl{Kdr8njOfw@%=rS{SvIBi8g5 zMk}S#&L5KI8=VmDcej+Yh_;ex$5uvuzN1o{(O0a}>Va0Tv@#wcv(vD(F^7oqNo(26 zaXW3;M&|prF`g%>J?M&8TC?OFw!(W{8Fu|)v}!dKL#DW)Ikc5 zzoSeG?Q~PeG^z{CCuFc?Cs}=}ogTH*{^z6!%9?YG4Jvgrp{pGK3On6vr7pnCE(oX(>|d03}S$Zsczgd27vJW0An#@LMGIw%KXN zTSeZQajP+(r7NI16Wz119=hF_!ASkp90EfPMcHs`T2uKj2t@r{woHLEMEt0=h(icWZugM-*VfC zk%Naf{*iAQX;iN4G}>qIz2;3f4ZV8^8o^ADjx?|#1kF(O9%DGA6Yhb5K)UxHV+~~deJ&;Adl zDTkWh#UM3~fnGz!0z{a`Peuy~85jf4&iSFWwxb{eN&lGm=7~{8U!ga47fbp^N6WP1 zXfObDUH{PrK4q}SnmXEOs@T&{IM?T=w(oyL-qY|Aqp1+EwEhe2@(E6P+Wngzu`OEK zeJ#frP16OU@%)sjO&w$8>u%dAeEiyC6xElyt6E3L7}y1?et;i+%y^cNJYlS@GVOHl zSYv`us7k(NoRJw#)#&{BamGdUQejDrnHD=uc)_U23m!M(>5cS#+_*d)_U7Y8+o~sR zSh4(17>_A31QYJYlJW2#z}0)lOMjyBlQMtNlQRDR<$Gb_$IgF+yiagHU;LyYW8|mY zoM_E?%6L;HRo(v?Llf>+;S`CRsdl=?PWRbq)v2=l0y`Z()##is?$F>XrW%i3?)VOU zhTeJG5O^An*gL5s*5}yyrwIYLFKi#_jQ(k#C*J@Y`pV3#U1C! zJI==)Pb zU3PxS+Xco)e#)PJ)yT&u4~=sKPCj;xcc&b|9)O%R4{9dagt+5M*O-rR^HpHc^GVE; z>GW9s4mXEn@hx)+@3_OwQ!-j4ecqjB~syefC`e+RpIsb}X;8wVjJ<0T(M@_jq zuLxmX&=es|vDgwc7&+W00jlQA6zM63yIkB+qx2NRl_pj6Ld;WeY7@-~0#HG~Vdf6jk=4Q49$b6#@+BKcpqxxlEetmd~Z zKp6Nae;f(BWgDNr0F^G?#=lws?U}QUYYUC4!QVcMdFo(Ve84gzlX>3e=0byZzHVD+ zT&>*4S1&Xsv09(;zKe{S4Sv`f^Wf1aPp<(ZMqWO6h_pm77MI-YNrZ01)tUVMMMiC9 zJ)gb^0q7Ha%Oay1J8vuBw+I~vw^~(SHy-w8%+Jig0a=gdh3zp7xO#`w^!xb<9A zeT6^s24+%b&3nVRn$^C4=-tEPcVOW0;jWR#ZyOOGGIV5o@O{H>8_pM5M()(*M(tMD zTrqOM?TA+5-G+*&<@~#c4;YDwCg9~Uz-uozW?Nt5Zl=6o`Q8QrYEDDEPvS+t1-Nz= ziYX7D>7tcJ&3wnMJE>!@9eWJ>|HMk;Xvo3VF8)_#c4j9sJk5%biLsRnV zAfgDOf}GEYJR{RNits~+FlNTgV%M*LQ%FWE&o08#FzBjpH>#!mpb4W@{U<7 zNGt0q^0en=|9SvGP6Yj~OsjlHT7D$*4kn7z%BJn(+dee%E8o07xk%+K#rNLNqw9>y zMIl#N4A-Pw-+(_(!+}H&7=AmA!sA&4n6ts-v@r=VGM*y_kG$d5!2^cfFl@jrgGY$! zo(U*(G@`>pmjKqqu7A_eL4$Fb<8eFoPQx94;Vae|`PubwgQEwXm72r+*L6ltldq#cND}LToaLI?z1jhZ|qjGcVd!mEBp)cm6F?s-d~d%1X}!| zkBkqBvJNEss*Y}*I6K1gHX60k!?Hdbje0ef9hCS>C|H+5kuHsJ6xX7f^K(zdLC02pt)4^Dj#M;)$|x%k3p%2yF~~Z^q(`j=pBNV_Y}k+do==U3ixNr`WrWx|$E4Ff?5LETp@0bs26!D@J8;^s zCiucXW1jXd_#3!xg}+AuFL1%%#5IoJd#+D~7kQQg*am;CQP2RX)4^K=!(R~a#xA&p z>#Oj$4FhcHf*->*4e0g%SGU#0Mo~rK+1a(BD>Ch_{o6w4ZfgrEFWdc{t=bfnrXr9= zk(i3unb}=!Ek725l9&(@B9`#ri(Esn)`k#COl_d;@I;6)wfdk^YAsl6t&xx>n1WCZ zrLEtY-GO1Fo1C2a&N*}c=A3iyojVKpYMb1JUeTa7LT+!68}eMim>ZRjiU*rA$GET) zw&L1~bi(ffTP{cVFtC;1kJ;`c-RD`h{lL~k`wG|g=p21uyF=KtTYuA<60P)Q9U@wp z$jVjUCQ)?8!x5cSSnk=~&7WDo}hQ zcr`fWGgqXp>djbv(t3S2JfRu;V6M9zO`3>%@dk7*OI zHLGmT(%FL!#S8nOw*u_g|J(BKf0hbr|LatE7&pC$f;y7zNp)}Xwe%<=(?M=^=)8lM zO-SV{PT6E<9DK`!blkrkC&u33?b2Mx({@x@=HX7^FZXnOp{#kEPi zQ+~t6PfX%)w%BESIVp(_vFQ;$^s6-HcID)o^KN$)KRt!d2NYlmrIsAy>XfuX6q}au znQ3Xn9mvf$zn$5WYYhD^)#cuQo!99}_kEv-7v4Y>-5z{PBQ=ZI+?}`~b=>#C5wB7B zr_|&094<;b#0TIMY-@`6w>PC}vAgIZ^=EI>x=#7x^NrHrtEFum$UGmEZmWW7lHFXtYL)}!sQab>6h2RX*KXZ`19b? zctn(#>Pz_8U-FPB_;}ZCxmj%S@w>NWO}yyiJMPF`VoNFUHgUL=x6R4B-1S)SSK+?Y zNj=c$%OEa@#(yL#1T39gdhK5h5LY0>{hH!S20)a7aD*m zIa9y;GMJLG%n$jcwfwsUxs0D)kQ+QL6@GJTeh51}+T`_>^Th@EZtg|MX^TF^9ZPbk zAiJ&~QK!>9s^mMCZcHbZ10Q^Q&)9*M^kEt!l4Mx1+(53nkJ;T(I~8`VRhs2)ru6io~0 zih9|3z*L6&*)!f)N{y*CfmARU*OReGax`;iUq7pp;^A;Sq@e8H0E>Ci)MzlS)r5k9Xfha6esaETRtSrAc}XR#>LE2) jqlOb&L<#XdgY2!mcp#)GN=(!Bq^{}VfN^t>br$~%K%RaT delta 49654 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 v#5bBYp|U$+Xolx$rj6&-G^b!Px>::block_number(); + if let Some(last_renomination) = Self::last_renomination_of(&who) { + ensure!(current_block > last_renomination + bonding_duration, "Cannot renominate if your last renomination is not expired."); + } + + Self::apply_renominate(&who, &from, &to, value, current_block)?; } fn unnominate( @@ -377,6 +383,8 @@ decl_storage! { /// Reported validators that did evil, reset per session. pub EvilValidatorsPerSession get(evil_validators): Vec; + pub LastRenominationOf get(last_renomination_of): map T::AccountId => Option; + /// Minimum penalty for each slash. pub MinimumPenalty get(minimum_penalty) config(): T::Balance; /// The active validators that have ever been offline per session. @@ -519,9 +527,11 @@ impl Module { from: &T::AccountId, to: &T::AccountId, value: T::Balance, + current_block: T::BlockNumber, ) -> Result { Self::apply_update_vote_weight(who, from, value, false); Self::apply_update_vote_weight(who, to, value, true); + >::insert(who, current_block); Ok(()) } diff --git a/xrml/xmining/staking/src/tests.rs b/xrml/xmining/staking/src/tests.rs index 7d6f92d671184..819866e08f185 100644 --- a/xrml/xmining/staking/src/tests.rs +++ b/xrml/xmining/staking/src/tests.rs @@ -123,9 +123,14 @@ fn renominate_should_work() { System::set_block_number(1); XSession::check_rotate_session(System::block_number()); + assert_ok!(XStaking::set_bonding_duration(0)); + assert_ok!(XStaking::register(Origin::signed(1), b"name".to_vec(),)); assert_ok!(XStaking::register(Origin::signed(3), b"name3".to_vec(),)); + assert_ok!(XStaking::nominate(Origin::signed(1), 1.into(), 5, vec![])); + assert_ok!(XStaking::nominate(Origin::signed(3), 3.into(), 5, vec![])); + System::set_block_number(2); XSession::check_rotate_session(System::block_number()); assert_ok!(XStaking::nominate(Origin::signed(2), 1.into(), 15, vec![])); @@ -497,6 +502,56 @@ fn minimum_candidate_threshold_should_work() { }); } +#[test] +fn renominate_limitation_should_work() { + with_externalities(&mut new_test_ext(), || { + assert_ok!(XStaking::set_bonding_duration(2)); + + assert_ok!(XStaking::register(Origin::signed(1), b"name1".to_vec(),)); + assert_ok!(XStaking::register(Origin::signed(2), b"name2".to_vec(),)); + assert_ok!(XStaking::register(Origin::signed(3), b"name3".to_vec(),)); + + assert_ok!(XStaking::nominate(Origin::signed(1), 1.into(), 5, vec![])); + assert_ok!(XStaking::nominate(Origin::signed(2), 2.into(), 5, vec![])); + assert_ok!(XStaking::nominate(Origin::signed(3), 3.into(), 5, vec![])); + + assert_ok!(XStaking::nominate(Origin::signed(4), 1.into(), 10, vec![])); + + System::set_block_number(1); + XSession::check_rotate_session(System::block_number()); + assert_ok!(XStaking::renominate( + Origin::signed(4), + 1.into(), + 2.into(), + 3, + b"memo".to_vec() + )); + + System::set_block_number(2); + XSession::check_rotate_session(System::block_number()); + assert_noop!( + XStaking::renominate(Origin::signed(4), 1.into(), 3.into(), 3, b"memo".to_vec()), + "Cannot renominate if your last renomination is not expired." + ); + + System::set_block_number(3); + XSession::check_rotate_session(System::block_number()); + assert_noop!( + XStaking::renominate(Origin::signed(4), 1.into(), 3.into(), 3, b"memo".to_vec()), + "Cannot renominate if your last renomination is not expired." + ); + + System::set_block_number(4); + XSession::check_rotate_session(System::block_number()); + assert_ok!(XStaking::renominate( + Origin::signed(4), + 1.into(), + 3.into(), + 3, + b"memo".to_vec() + )); + }); +} #[test] fn upper_bound_of_total_nomination_should_work() { with_externalities(&mut new_test_ext(), || {