From 779fae60581dec8bc147004e637e3328353fdc6f Mon Sep 17 00:00:00 2001 From: Markus Alvila Date: Thu, 5 Aug 2021 19:27:53 +0200 Subject: [PATCH 01/33] Add support for Songbird (SGB) --- Makefile | 8 ++++++-- icons/nanos_app_songbird.gif | Bin 0 -> 73 bytes icons/nanox_app_songbird.gif | Bin 0 -> 57 bytes icons/songbird.png | Bin 0 -> 10782 bytes src/chainConfig.h | 3 ++- src/main.c | 11 +++++++++-- src/tokens.c | 2 ++ src/tokens.h | 2 ++ 8 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 icons/nanos_app_songbird.gif create mode 100644 icons/nanox_app_songbird.gif create mode 100644 icons/songbird.png diff --git a/Makefile b/Makefile index 6b88b48..612610d 100755 --- a/Makefile +++ b/Makefile @@ -211,9 +211,13 @@ else ifeq ($(CHAIN),bsc) APP_LOAD_PARAMS += --path "44'/60'" DEFINES += CHAINID_UPCASE=\"BSC\" CHAINID_COINNAME=\"BNB\" CHAIN_KIND=CHAIN_KIND_BSC CHAIN_ID=56 APPNAME = "Binance Smart Chain" +else ifeq ($(CHAIN),songbird) +APP_LOAD_PARAMS += --path "44'/554'" --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"SONGBIRD\" CHAINID_COINNAME=\"SGB\" CHAIN_KIND=CHAIN_KIND_SONGBIRD CHAIN_ID=19 +APPNAME = "Songbird" else ifeq ($(filter clean,$(MAKECMDGOALS)),) -$(error Unsupported CHAIN - use ethereum, ropsten, ethereum_classic, expanse, poa, artis_sigma1, artis_tau1, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, gochain, mix, reosc, hpb, tomochain, tobalaba, dexon, volta, ewc, webchain, thundercore, flare, flare_coston, theta) +$(error Unsupported CHAIN - use ethereum, ropsten, ethereum_classic, expanse, poa, artis_sigma1, artis_tau1, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, gochain, mix, reosc, hpb, tomochain, tobalaba, dexon, volta, ewc, webchain, thundercore, flare, flare_coston, theta, bsc, songbird) endif endif @@ -384,4 +388,4 @@ include $(BOLOS_SDK)/Makefile.rules dep/%.d: %.c Makefile listvariants: - @echo VARIANTS CHAIN ethereum ropsten ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain pirl akroma atheios callisto ethersocial ether1 gochain musicoin ethergem mix ellaism reosc hpb tomochain dexon volta ewc thundercore flare flare_coston theta bsc + @echo VARIANTS CHAIN ethereum ropsten ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain pirl akroma atheios callisto ethersocial ether1 gochain musicoin ethergem mix ellaism reosc hpb tomochain dexon volta ewc thundercore flare flare_coston theta bsc songbird diff --git a/icons/nanos_app_songbird.gif b/icons/nanos_app_songbird.gif new file mode 100644 index 0000000000000000000000000000000000000000..302030bcf9cb31a05375e23f9d3967cf2725ffa8 GIT binary patch literal 73 zcmZ?wbhEHb6krfwSjfl#1pi?`@h1x-7XuT64oDOv&%h+r)4%fc*#|-m7k#Ak%c|C& Ri@h2Wnd&g_Rg@@$H2|Es8cYBH literal 0 HcmV?d00001 diff --git a/icons/nanox_app_songbird.gif b/icons/nanox_app_songbird.gif new file mode 100644 index 0000000000000000000000000000000000000000..1361a68860057a4115fa272c716b9a817c55b73d GIT binary patch literal 57 zcmZ?wbhEHbwO zy+qKl<4&qFQmk5*VD9dEG4T7twvG;exV4zl-LAzooCB1~U+#aLJ!iNaaSeFyD%egp z*0Jc98qNE*<05%IaPRc={FmVAx$ViJ|M98T=Zap@_6zqf;THp2EBm+&JM9o%p`B!KkUxMHNuFZh%ZN5 zPda|tBz%zC$#hWQ=N{Y5`{9P8tK3!5m3j0_%8;yjU*X}|E8~w0T%bFNnU^Tjo#Wat zCDM-kwtXE@ZD!z8%GXO;W&=BdTX%~R2m+4YHF3GGASo#yi&nFAz>8k4^26!Q1HdxBF0 zh2ru)C1fM+C24Fn=eU0J;n^L8&2TMRyqUWmEee?|43dmU;ZZo=9@{o^Sqvf?y@yF6 zP@*o5IOk>mXuDyX9R_?I-k<2BDM`=+TRSLxrlb0t!{5;;QklKu(!`dQsfl+anV3S^ zE;o<4h1FY|zThWgSjDHV9fgX}uD*s{J3z22T=KQpe6`)6nGGOejzU6QEV zi}%FVvPj;bZXU0RODe2uB{k%B3DLl-$8`)Kn)UeZ(?)NTnVEBh3U4>MzHLj+&=WS( ztJYkWcCC3~32B}&3uS{eFV<$8S^3qqP9TgT9~@4)d9@#lKHpp(iZ-G&WJL7mJC#Tc z*FJlzG*BL9X4^7U^Z3QP**Tvoa>H*=w>)3&`gE6N87c(~RaX^9^jA!Kww=yHT0aE* zWV?TxbSHa8B=yey=Dqah6GuJXnX%gM6PC)t)cCxWMd^)scuWmLI0S6j;vdyUC;0t` z@^{ngpA7ODym_z6#1(xS<02ilwxhik@uqP2^fJ5kBwe;@`kYs6J*&-2>{!z4&fq-# zg3$fNOwQ)AsIRo!1H@Iyb8$M!T&%g47Uze7BK$1t2i6Q+o+ylZ72285Jn}(HKtTkn zk1prl_n_zE%_ar+;rBv4YrfQm66B9u&uy+PUd&e-`5dsrdteybtC`SiZOj2LdcE#a z>5>uz)Z9W9X9PU+22SifC{Atty4|zg^FsRl;)ltBs!5xd*2}Mt%4qZA2@=EOZ(6Z($gG1c*SC%D@&n2dt=?n?aBXnsL8XNoTVY9rH+9kjI#>2i7EE2W~k zz8>dIu7chkYx&P+LB*F~9mVv)D5jS&s*+DVe43~n1fzDBTtA5C)|tmIR}=qIsQ#8Z zZR7WVriR&l_jO8hG0A>(!0K4Vfk?_u1Mks03Z|LGeY0>aK|wrjrKS+Vx>jj^|NNtK z;O%C>j70YY#5&REq+o4hy?05cA7+`-QF2qg;DOb>KD;$(4I*k~@}TPn!2tt?8!CGw z9{5lKP;B{zC;gE$`D#{IrPJS#blEMjY`kp@Dvz5^rP2~i z20UW!Kjm|dy3wSzQ*WfEU@i^qTz@&UgDi&LRsLyhMWw*ZLxINCy{^(h`6V3vvHkm( zypYl*)rHhF^DYYW!7D{R*q{@Rp(SUVnI3vhMmEAg?ou zX)PJ=sH8>AKRz9YqP7dbRv^Lbok2O+B3IzYJFjf=Olj9-SuxHq4KJ%uMCIih^{0iL zqy8R?*#gZ$>+=&KUc?rjq~Y8v_e+Ibtcn(=JcbnWug~x*O6qz_S8jKo-y^?aH_1xf zOp)rh-V-mhL_U$Jw&rhDyw?j?VaWA%*mx8d5i=ZW!C}nX_+y}~fJSz^b=F|qCZFgV z#dj$}BY#I1ftxqO95rPJfUbH+K}{mn` zr)KW9x2G1-b5&%agpu~R|7WT(#!;>H(u7C%N{5Y37;Fexn%`~YiuDn0)V6E~I}9>^ zjV*z^YiRt1M-Hs8B7~c#F;8fBwTO{V?gg03Tm$wfha^V&oLQ4b7<7Msokln9T71v! z?f$)Fdev7n6>l~RQ-o$8L=vjRu~sXBB~^=<7HU##H`!k>r{im;=oN+V)`{g$ijGWv z&CIdk)pW&#s6RYl5$Lk1GLJ9`V4&xp=EYB*E`1f7x{x{#r+kEno2IAATc{YywXC|# zZ(LNqd3$G1;kFuar*)8OHDV(=;^P7HCSE4>JvM~FljslJyer|cM%$k|rl#rZj`@-A*4-n&90hKDFX9ygvB+F>y< zP^r5Zg6WaSFr|J1sm#`DH&(p@Cl25$3prh z&dXk)sju%gHH}KTgR*8*OltW^-1cMkS+%~Hlss+;bovda@cIN-Aw*&bpO46wN&MJP zEB&vj?Y^YoM(qk?^wd~lve=5rI`oJ?_W(B4$?qk~w8aCS4K$T1p5uiA5A{B|a|hub z;kQ-?4vV%u-H|d{b5Z|r} zti8>{5JG6jH>19owi%qrJnY#kJ)6ko_+#+JQw8)aVDE$JQypY0kxiU=3gu*d;Hjbu4gKn-FZSxBSVk~5it_r7t` z`ejl@Z~VrAKpO`Ant=oFh(K;PC%5M#yMPsW(SwHv+IXK5s?%b;Euw+vY(Hh?6fxM{{D&5x~B`jB_yF6YfY@?|ozgA0{Hr&CJKdmlGl%?c5lJfw{)BEJt_)L^PJiMqH z|8+T9k2|}NTX=6=hCMu#yUd7J zk!+>~&+GbYHa?Z9sTa#Q*NO7DFPN6%)W0{6w>%|ZXtN~e$LV+Zj=Mn16T||>-6mhg zp?ADNDk+j~L`swQs=L&`j)tbLw=aQnY`i?jJhU+{ZKkXD2}QB#%v&*M1{Vzd3kIJ~ z5S@@bXOG9;qx7mQ=h&VfGIU_$I&dZYbrVT;vQ6|a_Sgh#l}X!dHT(J6%8Luprl;M}kwBja`B zA$~$f?jFr;arK@(yyUzJ8a!Y61HoI328C8sG?AUd6aYeiabAVL6>YgjLdb)k0%@OM zo}GfGYAFCoNECG<%+RFnlX@iAa(ZHwZQ3;`Qv#8GSsnhPbe^+}>XoNJjf}u?Fo3;f zsCuo9Lc^%Hb4#u_F|T|#D6`&w{ay3tduH;KJkqaLQtRvZ2*viBWM3a0ZZ;?_gd=~Q z%_%AqUki`a9;FjU@O;u5D=jfWE<0H=Of5AA`Lr2`cF*#epV>-$@a3QN+zl*U z>zFXyJu{b!%#a(?2b!9IE^vHo1E;MDtidcVZrd_>dz{Va24G*=;NbK zV&D(U$`B_>bcV_k0t@x{$?43bCA4)A+c>YSL-2l;-LoB{|5`-)Q!T^#E%6FB^edX9 zZ3Ie^Ig?an|BFS2c%GRNkZ^c!ObO;`Lr}jpL;R@}cT-YB!hkT5J}kY6l+Uk~*VM+9 zQg}%s{jH%lyDWu@eTuMjNuaTPCscZtxsa%kuW&Ca+JBP&V(6zS8ECY4Q=XYF+-}lvUh?JL`7YS!laoq}6(m!FhB>SgV8RvC zSqi(*50x_D>8BE3!CCzVl{E6*FJ&E`A)#HocNvQ(%1EOs!>2&#dt*4x5`pJYU;%u= z4y!HvY(E0xEXNSh<~rT43XK&47UmW5i{kkF& z5#z!Y(!OM+1HN4}+^+m7x;h(2vB5a{8cEdIX3SlTap1WAY{|i9lm}sTx|eGwOHPs= zE6!f{QHoAYz^V(YDG@Vr5@_xw$W7I;5OQ}RX^)tA`&f&z$`_sCP% zI(+TN&8ltbQ|zS#j>9WLD!GNWoJ0P#J84SC@(7P>^&Ul z1)zeas#X`3&%}FnzzmTMmIRxeb9+UU6gSfkjU<)?95!jT4+ghOUHj&O^A4E|t}XEB~TQEWMAG`b9m!eoQPSmg&*0 z6;=Ft42BE`^fZqqPEo$00^!6d(>l-dDEu*fi6pEW!@|qNrW(21gUpnNoIx42fa2VG zRC+WGw`%p&pO*21nH;`0E9aIeGi0FTf>_tG452#hhMs6-4d?6?7AG z)7HdIzz5|!rGf>s-Ygs0VuOwoV1_!eC5@N*{0Pk{pMEFV*;69gZ-XN04MCNMtft;S*llmLu82Gd_khF+*I98fwY(-%t0LI;yWF^|+|=VX zOmt*D8I(tORQG+3A`~9$ zOt_fPP0!E>wQK779LLC1R%okzHW-NH&>{3%eKpP)u0i8(plu3yKfmuN`Io(otL7 zurad{e0VLeDwY;zWxr|Nyb={rRxNo`<#=*3YrbxfQAp@`4lm%9zp(6h4Z&HF%T&s~ zT;Ht;64T_%VXE5+x6|daNNCr}TxWI`KT5$Dl}pk@aFZs}gfX1KaCN(d0bAX$*^8Ap z08rbH@#d>H&z22Y03U3&w%<1~`B!oeeYb4TdIu>tkd66%V?(Y(tsRB;E zi&a78DQLY#(cB3|svl84{I{s%zWPguQ#v>bK%=!BPkLj@$MlmpIjpfC~yKiG4oZT&tj93ap%)Vg-8L_?l*8kyd8E+TCq&6V2Hd zXSZZVU{U%ttjWs!5~ZuP2Do1un}4uJQqjO3#yT9Ae1Fvc^403e>;ui!1k|?S>ss7G zm&@lf&q93n+^R831}LLbwM5HcP8SPyv~N`%->>R!+|s5D7S@wm$l6q?Q%94VIqi30 zpFv&5rhR`Og7dGT9(%NHPjO{TxVmdyTPmnYQfr*^?(W6tAa2prE>XC5&G`1#>$2Rg zqm|)SWxEB7_f>Pj7!gr0%_Hthe`)(-+~1d=-_o@LVqi{CQn~539a@9Gt~gknIQYr% zn$Jochv50gmb%Lz^e*q5H#7s-pe^0iIPFey`d)qKNtRSmwYZ1i-D_ScmIXxg0b6JF z@VlsH#q$r8$u5%PFx`nWzVeu0X&mYv#?g_<#<5lcG3B7sY(6ViPKCI)<>q`O9>CAj zCFhH~ffgOg7c90tD)8zVTFRB-$+gWH1~?<5Nk@iq%4E;ihcsO8Vr`s`ZoL%p5G%eo zv&1k=_7I+L)fCVAnnw04?c;_M+=X!*%&R<8{#jsoL>v^E6FOl#_$(c`(<9;1rPF8} za^|X{VdlvY2dmR5?%FBkXknWSF8!h43jwfFDb&yz;7T)BlXYV>9=soCAYEqHP7_SI zv7m17@p#-tZ*F4{q053omwu4z{i=5Y<*&JQFY+m|7;#SCUA*fDnH{ zCZAPy#>n;7c~vf^CjAOy3CHU{O!b3H9juOVMHWeGhG6!SJQ1ZMkMjAH^yGI`oH2v6 zPgqB7PY*!4Ymo3dqTIuCy1wKJ1C3rT~U{C z6;e1PM_bW=MAPmPBhzvHVrccnCBbZ_ZIV^Av=0srAR48v4%1av|JRN!cAvH=JY7+z zM}@V|&ZN&+fFgj(XAo8_6o1WUT7a%h?a?($f9Q(?(gF!?e&LiTx2~?#zMANyXY~~I zQJ@pR>e|}F4KUAz2!B)j_vPmtyE}?I9{_64h9n+4jMjmE32zLk^wS!|o-8vv) z@!`D8hZ11}vx>N3?MeGWmwtCrBAV?*K_Hqjv7V*`>G&#XkLZ0RpR8S)?{Hu92n^_{C70hJ4d}eC=XI}H(fj=y5 z5b`Tt0~%ZO(s0MaVA=$?=HjPnG95V8f9i5vKH170tVnx|tCd19U8)*zzIel7DrOFM}TfVa@u=dW#Y6gkXh zzwsu`;C*(KM63gKkn#hsA-w2Tm7up&t6cOTvkaYwrE0HJ!$zcgRkZ3q4$iv;! zPcBFi{F_$}dwta`0tWqtpxqR~76veox|c5!Bq1yz425V0p#sFfN+ci!Uq>f7V-2l8 zDX@2nU>7vnTTVnIFfdR!P+Zu{*I7hVR#sL7DkdT(2EigAe!-q-co4+XkL!x!4-O5a zAHo;qjYfHSg048>4qpCfMKBoK5BgVp9^M89|EBl!`%?w19wI?-ZxK;psECJ$$X_k| z(3$~Ql0O6bUoHGhvA;uz7$g0>{CyEf%>bk)n(MC=j);HTd;9yk|4zpdA%b*AdSIb` zSg)dgbE&Os0QkZ|HyJ{u_)% z85qcEcp?0+!qe4I1Yh}=bM!)>9OZsr!kuIhk`kh#5K(CJ8wl_Nq<%gfgTjvY>v2izGc;_d1DyW>i5IaQdhB3Miq`kxkV# zl1Ldb8Hf~A3<;4yV8Kmzc?ZkTHRUKZitlThLjlM|3q zU7g8j3CU@(EksldMAS^UM5I7ERsb#@EPkk6}ti! ziFJy#C1K$qX5qv7#o~!*n6Y3oMs93umzS5+)YP|b-Ewkr+S%EWmzO6dCO$bify3cH ze*8eA(F6nphlhvD%ge>Z#d&#o7!1bP*jQ9lR7gmOi;HV*ZEbdTwyCKpD=UkipPz+= zc(jWnf^KnVA_G85tfP?&|95?Ch+ns;aE4 ztf;8)@bFmmJH8SNfHpQX!BJV8!~Po!2jHNut$`Cyz@~$}A@-Ow2gBp!CTR0a(EUZg1xcnn<7bEfwcqj<}blxi))N2+X+%s4izG)I=d>4D-ExxiDSCEq%Fs<%!Hq1~Ec~L~MYF}Zh!Qt~XOCP4a zSR0Z2Jzi%1)09zs0G>~?)=wg!Ghx|cP(u{k%awdP#dEQ?glt+WG*^c~x4Z{wt{Nt2=^J{W}CJL}9yS@A2v&cIHxE6DLn=?VW09lM8! zd&#T=b_XD)0@dz%wmeQske6L(Rz=>xmf-EA8dxWM4 zFX#L72AV4SV!0{OG~`cw`~^}yZGftoF0dqQGIo&N@x23Dw+wSYB2wyaryKYEbw%VW zoOk0A#6Cg@Ew1bKX=C`G^o?nV`zK$hj9>4!*p#p0;-06R0Rx^o2i?+MMk>Ca7Gqb@jsc2ZbJINPgHFZt(sqn4tzj za6CLElsrf!e$Z<7`Wq@KzvFRoL=Ai&lZRpG|E6QDMG=-k>8Q{S%=|2)!Nh^5+d~x9 zo8YTE;jgepAA5dZOsiob8zC~Q1!PKOUM1zM7j|pebSH9YIfr^A|5D9{GEKmCj@Z4>8?IDsjqi}TsrBNhbkG0#d`dw4L0+;3ER-~p{vG3hPzDui2S)R$&Q zsr=F1GOA(9jda^GmmOe-fh zbUXqWS$K^aYzG-V(jv>ls$V!!Ot^fSPjkBS1ZFF^6u5}a?Rp=s6?x3$^ubAJ;WQbr zAFlP~nCa}}ms8x2Q@g)*GHGmI+YN=SXR=J8@N8)niC?e_DV{4EHFWEPU^Xpn4nt;3dJaP%oqo^nB#f}0G(vUMuyX{CuBM?zy_$X0{{YFlN{#>k literal 0 HcmV?d00001 diff --git a/src/chainConfig.h b/src/chainConfig.h index a845018..8be7e9e 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -55,7 +55,8 @@ typedef enum chain_kind_e { CHAIN_KIND_THUNDERCORE, CHAIN_KIND_FLARE, CHAIN_KIND_THETA, - CHAIN_KIND_BSC + CHAIN_KIND_BSC, + CHAIN_KIND_SONGBIRD } chain_kind_t; typedef struct chain_config_s { diff --git a/src/main.c b/src/main.c index ca26b41..e93aec7 100644 --- a/src/main.c +++ b/src/main.c @@ -256,6 +256,9 @@ tokenDefinition_t *getKnownToken(uint8_t *contractAddress) { case CHAIN_KIND_BSC: numTokens = NUM_TOKENS_BSC; break; + case CHAIN_KIND_SONGBIRD: + numTokens = NUM_TOKENS_SONGBIRD; + break; } for (i = 0; i < numTokens; i++) { switch (chainConfig->kind) { @@ -351,12 +354,16 @@ tokenDefinition_t *getKnownToken(uint8_t *contractAddress) { break; case CHAIN_KIND_FLARE: currentToken = (tokenDefinition_t *) PIC(&TOKENS_FLARE[i]); - break case CHAIN_KIND_THETA : currentToken = - (tokenDefinition_t *) PIC(&TOKENS_THETA[i]); + break; + case CHAIN_KIND_THETA: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_THETA[i]); break; case CHAIN_KIND_BSC: currentToken = (tokenDefinition_t *) PIC(&TOKENS_BSC[i]); break; + case CHAIN_KIND_SONGBIRD: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_SONGBIRD[i]); + break; } if (memcmp(currentToken->address, tmpContent.txContent.destination, ADDRESS_LENGTH) == 0) { return currentToken; diff --git a/src/tokens.c b/src/tokens.c index 63667e8..880d87e 100644 --- a/src/tokens.c +++ b/src/tokens.c @@ -4568,4 +4568,6 @@ const tokenDefinition_t const TOKENS_THETA[NUM_TOKENS_THETA] = {}; const tokenDefinition_t const TOKENS_BSC[NUM_TOKENS_BSC] = {}; +const tokenDefinition_t const TOKENS_SONGBIRD[NUM_TOKENS_SONGBIRD] = {}; + #endif diff --git a/src/tokens.h b/src/tokens.h index 3573cd3..e31444f 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -97,6 +97,7 @@ static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { #define NUM_TOKENS_FLARE 0 #define NUM_TOKENS_THETA 0 #define NUM_TOKENS_BSC 0 +#define NUM_TOKENS_SONGBIRD 0 extern tokenDefinition_t const TOKENS_AKROMA[NUM_TOKENS_AKROMA]; extern tokenDefinition_t const TOKENS_ELLAISM[NUM_TOKENS_ELLAISM]; @@ -131,6 +132,7 @@ extern tokenDefinition_t const TOKENS_THUNDERCORE[NUM_TOKENS_THUNDERCORE]; extern tokenDefinition_t const TOKENS_FLARE[NUM_TOKENS_FLARE]; extern tokenDefinition_t const TOKENS_THETA[NUM_TOKENS_THETA]; extern tokenDefinition_t const TOKENS_BSC[NUM_TOKENS_BSC]; +extern tokenDefinition_t const TOKENS_SONGBIRD[NUM_TOKENS_SONGBIRD]; #endif /* HAVE_TOKENS_LIST */ From bf8f5b67dc88a667e5512472717683d8e202c18d Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 6 Aug 2021 15:25:09 +0200 Subject: [PATCH 02/33] Bump version --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 612610d..3a4bee7 100755 --- a/Makefile +++ b/Makefile @@ -30,8 +30,8 @@ APP_LOAD_PARAMS += --path "1517992542'/1101353413'" APPVERSION_M=1 APPVERSION_N=9 -APPVERSION_P=0 -APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) +APPVERSION_P=2 +APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)-songbird APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) ifeq ($(CHAIN),) From d68a0180e3c7adaa5e1d44504c5e9ab5a81f8f3c Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 6 Aug 2021 16:23:48 +0200 Subject: [PATCH 03/33] update plugin sdk --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 51c4cad..0d1d42c 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 51c4cad6297a99a220eb09e6d30d229ac02d469c +Subproject commit 0d1d42cb59bc8b7c73b27c7e262ac5eee7414a19 From b2172e462764cb68f98633dc33df865952a8df0a Mon Sep 17 00:00:00 2001 From: pscott Date: Thu, 26 Aug 2021 13:02:07 +0200 Subject: [PATCH 04/33] Use uint64_t for chainID --- src/chainConfig.h | 2 +- src/utils.c | 22 ++++++-------- src/utils.h | 2 +- src_common/network.c | 13 ++++---- src_common/network.h | 4 +-- src_features/signTx/logic_signTx.c | 42 +++++++++++++++++++------- src_features/signTx/ui_common_signTx.c | 2 +- src_features/signTx/ui_flow_signTx.c | 3 +- 8 files changed, 54 insertions(+), 36 deletions(-) diff --git a/src/chainConfig.h b/src/chainConfig.h index a845018..907ba28 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -60,7 +60,7 @@ typedef enum chain_kind_e { typedef struct chain_config_s { char coinName[10]; // ticker - uint32_t chainId; + uint64_t chainId; chain_kind_t kind; } chain_config_t; diff --git a/src/utils.c b/src/utils.c index e3e04c6..5048119 100644 --- a/src/utils.c +++ b/src/utils.c @@ -54,19 +54,17 @@ int local_strchr(char *string, char ch) { return -1; } -uint32_t u32_from_BE(uint8_t *in, uint8_t size) { - switch (size) { - case 0: - return 0; - case 1: - return in[0]; - case 2: - return (in[0] << 8) | in[1]; - case 3: - return (in[0] << 16) | (in[1] << 8) | in[2]; - default: - return (in[0] << 24) | (in[1] << 16) | (in[2] << 8) | in[3]; +uint64_t u64_from_BE(uint8_t *in, uint8_t size) { + uint8_t i = 0; + uint64_t res = 0; + + while (i < size && i < sizeof(res)) { + res <<= 8; + res |= in[i]; + i++; } + + return res; } bool uint256_to_decimal(const uint8_t *value, size_t value_len, char *out, size_t out_len) { diff --git a/src/utils.h b/src/utils.h index f10ac19..6ee5d45 100644 --- a/src/utils.h +++ b/src/utils.h @@ -28,7 +28,7 @@ void convertUint256BE(uint8_t* data, uint32_t length, uint256_t* target); int local_strchr(char* string, char ch); -uint32_t u32_from_BE(uint8_t* in, uint8_t size); +uint64_t u64_from_BE(uint8_t* in, uint8_t size); bool uint256_to_decimal(const uint8_t* value, size_t value_len, char* out, size_t out_len); diff --git a/src_common/network.c b/src_common/network.c index f1181b8..e2739b5 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -19,18 +19,19 @@ const network_info_t NETWORK_MAPPING[] = { {.chain_id = 100, .name = "xDai", .ticker = "xDAI "}, {.chain_id = 137, .name = "Polygon", .ticker = "MATIC "}, {.chain_id = 250, .name = "Fantom", .ticker = "FTM "}, - {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}}; + {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}, + {.chain_id = 11297108099, .name = "Palm", .ticker = "PALM "}}; -uint32_t get_chain_id(void) { - uint32_t chain_id = 0; +uint64_t get_chain_id(void) { + uint64_t chain_id = 0; switch (txContext.txType) { case LEGACY: - chain_id = u32_from_BE(txContext.content->v, txContext.content->vLength); + chain_id = u64_from_BE(txContext.content->v, txContext.content->vLength); break; case EIP2930: case EIP1559: - chain_id = u32_from_BE(tmpContent.txContent.chainID.value, + chain_id = u64_from_BE(tmpContent.txContent.chainID.value, tmpContent.txContent.chainID.length); break; default: @@ -42,7 +43,7 @@ uint32_t get_chain_id(void) { } network_info_t *get_network(void) { - uint32_t chain_id = get_chain_id(); + uint64_t chain_id = get_chain_id(); for (uint8_t i = 0; i < sizeof(NETWORK_MAPPING) / sizeof(*NETWORK_MAPPING); i++) { if (NETWORK_MAPPING[i].chain_id == chain_id) { return (network_info_t *) PIC(&NETWORK_MAPPING[i]); diff --git a/src_common/network.h b/src_common/network.h index e8c4f7a..b19d851 100644 --- a/src_common/network.h +++ b/src_common/network.h @@ -6,11 +6,11 @@ typedef struct network_info_s { const char name[NETWORK_STRING_MAX_SIZE]; const char ticker[MAX_TICKER_LEN]; - uint32_t chain_id; + uint64_t chain_id; } network_info_t; // Returns the current chain id. Defaults to 0 if txType was not found. -uint32_t get_chain_id(void); +uint64_t get_chain_id(void); // Returns a pointer to the network struct, or NULL if there is none. network_info_t *get_network(void); // Returns a pointer to the network name, or NULL if there is none. diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 47960af..ae310c4 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -257,20 +257,40 @@ void prepareFeeDisplay() { sizeof(strings.common.maxFee)); } +static void u64_to_string(uint64_t src, char *dst, uint8_t dst_size) { + // Copy the numbers in ASCII format. + uint8_t i = 0; + do { + // Checking `i + 1` to make sure we have enough space for '\0'. + if (i + 1 >= dst_size) { + THROW(0x6502); + } + dst[i] = src % 10 + '0'; + src /= 10; + i++; + } while (src); + + // Null terminate string + dst[i] = '\0'; + + // Revert the string + i--; + uint8_t j = 0; + while (j < i) { + char tmp = dst[i]; + dst[i] = dst[j]; + dst[j] = tmp; + i--; + j++; + } +} + void prepareNetworkDisplay() { char *name = get_network_name(); if (name == NULL) { // No network name found so simply copy the chain ID as the network name. - uint32_t chain_id = get_chain_id(); - uint8_t res = snprintf(strings.common.network_name, - sizeof(strings.common.network_name), - "%d", - chain_id); - if (res >= sizeof(strings.common.network_name)) { - // If the return value is higher or equal to the size passed in as parameter, then - // the output was truncated. Return the appropriate error code. - THROW(0x6502); - } + uint64_t chain_id = get_chain_id(); + u64_to_string(chain_id, strings.common.network_name, sizeof(strings.common.network_name)); } else { // Network name found, simply copy it. strlcpy(strings.common.network_name, name, sizeof(strings.common.network_name)); @@ -308,7 +328,7 @@ void finalizeParsing(bool direct) { // Verify the chain if (chainConfig->chainId != ETHEREUM_MAINNET_CHAINID) { // TODO: Could we remove above check? - uint32_t id = get_chain_id(); + uint64_t id = get_chain_id(); if (chainConfig->chainId != id) { PRINTF("Invalid chainID %u expected %u\n", id, chainConfig->chainId); diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index 360f883..e535410 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -7,7 +7,6 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen uint8_t signature[100]; cx_ecfp_private_key_t privateKey; uint32_t tx = 0; - uint32_t v = u32_from_BE(tmpContent.txContent.v, tmpContent.txContent.vLength); io_seproxyhal_io_heartbeat(); os_perso_derive_node_bip32(CX_CURVE_256K1, tmpCtx.transactionContext.bip32Path, @@ -41,6 +40,7 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen } else { // New API // Note that this is wrong for a large v, but the client can always recover + uint64_t v = u64_from_BE(tmpContent.txContent.v, tmpContent.txContent.vLength); G_io_apdu_buffer[0] = (v * 2) + 35; } if (info & CX_ECCINFO_PARITY_ODD) { diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index aee22f5..b508ee5 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -222,9 +222,8 @@ void ux_approve_tx(bool fromPlugin) { ux_approval_tx_flow[step++] = &ux_approval_nonce_step; } - uint32_t chain_id = get_chain_id(); + uint64_t chain_id = get_chain_id(); if (chainConfig->chainId == ETHEREUM_MAINNET_CHAINID && chain_id != chainConfig->chainId) { - // TODO: do we need the `&&` above? ux_approval_tx_flow[step++] = &ux_approval_network_step; } From ef91934b234d846c5f448804a7560837e9f70cef Mon Sep 17 00:00:00 2001 From: pscott Date: Thu, 26 Aug 2021 13:21:10 +0200 Subject: [PATCH 05/33] Update NETWORK_STRING_MAX_SIZE --- src/shared_context.h | 4 ++-- src_common/network.c | 2 +- src_common/network.h | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/shared_context.h b/src/shared_context.h index e3e9c6f..8631c35 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -162,14 +162,14 @@ typedef enum { #endif } contract_call_t; -#define NETWORK_NAME_MAX_SIZE 12 +#define NETWORK_STRING_MAX_SIZE 16 typedef struct txStringProperties_t { char fullAddress[43]; char fullAmount[50]; char maxFee[50]; char nonce[8]; // 10M tx per account ought to be enough for everybody - char network_name[NETWORK_NAME_MAX_SIZE]; + char network_name[NETWORK_STRING_MAX_SIZE]; } txStringProperties_t; #define SHARED_CTX_FIELD_1_SIZE 100 diff --git a/src_common/network.c b/src_common/network.c index e2739b5..9c85618 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -20,7 +20,7 @@ const network_info_t NETWORK_MAPPING[] = { {.chain_id = 137, .name = "Polygon", .ticker = "MATIC "}, {.chain_id = 250, .name = "Fantom", .ticker = "FTM "}, {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}, - {.chain_id = 11297108099, .name = "Palm", .ticker = "PALM "}}; + {.chain_id = 11297108099, .name = "Palm Network", .ticker = "PALM "}}; uint64_t get_chain_id(void) { uint64_t chain_id = 0; diff --git a/src_common/network.h b/src_common/network.h index b19d851..529cc4f 100644 --- a/src_common/network.h +++ b/src_common/network.h @@ -1,7 +1,6 @@ #include #include "tokens.h" - -#define NETWORK_STRING_MAX_SIZE 12 +#include "shared_context.h" typedef struct network_info_s { const char name[NETWORK_STRING_MAX_SIZE]; From 1e6e2f3b15cfbaed0d777d959f8603d034684536 Mon Sep 17 00:00:00 2001 From: pscott Date: Thu, 26 Aug 2021 13:21:18 +0200 Subject: [PATCH 06/33] Update ethapp.asc --- doc/ethapp.asc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ethapp.asc b/doc/ethapp.asc index 1df3372..b3c01fc 100644 --- a/doc/ethapp.asc +++ b/doc/ethapp.asc @@ -520,7 +520,7 @@ The following standard Status Words are returned for all APDUs - some specific S |=============================================================================================== | *SW* | *Description* | 6501 | TransactionType not supported -| 6502 | Output buffer too small for snprintf input +| 6502 | Output buffer too small for chainId conversion | 6503 | Plugin error | 6504 | Failed to convert from int256 | 6700 | Incorrect length From ca67cb819ff1ae8a95c58a36885f9a968596a91d Mon Sep 17 00:00:00 2001 From: pscott Date: Thu, 26 Aug 2021 13:23:43 +0200 Subject: [PATCH 07/33] Update changelog and Makefile --- CHANGELOG.md | 6 ++++++ Makefile | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd80d27..057e371 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [1.9.3](https://github.com/ledgerhq/app-ethereum/compare/1.9.2...1.9.3) - 2021-8-26 + +### Added + +- Added better display for bigger chainIDs. + ## [1.9.2](https://github.com/ledgerhq/app-ethereum/compare/1.9.0...1.9.2) - 2021-8-11 ### Added diff --git a/Makefile b/Makefile index 0180681..386848b 100755 --- a/Makefile +++ b/Makefile @@ -30,9 +30,9 @@ APP_LOAD_PARAMS += --path "1517992542'/1101353413'" APPVERSION_M=1 APPVERSION_N=9 -APPVERSION_P=2 +APPVERSION_P=3 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) -APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) +APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION)-rc1 ifeq ($(CHAIN),) CHAIN=ethereum From 94363738feac27981534aed1523c86aab0879ecc Mon Sep 17 00:00:00 2001 From: pscott Date: Thu, 26 Aug 2021 13:59:42 +0200 Subject: [PATCH 08/33] Move u64_to_string --- src_common/ethUtils.c | 36 +++++++++++++++++++++++++----- src_common/ethUtils.h | 2 ++ src_features/signTx/logic_signTx.c | 29 +----------------------- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index 3ad545e..4a5c98b 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -133,6 +133,34 @@ void getEthAddressStringFromKey(cx_ecfp_public_key_t *publicKey, getEthAddressStringFromBinary(hashAddress + 12, out, sha3Context, chain_config); } +void u64_to_string(uint64_t src, char *dst, uint8_t dst_size) { + // Copy the numbers in ASCII format. + uint8_t i = 0; + do { + // Checking `i + 1` to make sure we have enough space for '\0'. + if (i + 1 >= dst_size) { + THROW(0x6502); + } + dst[i] = src % 10 + '0'; + src /= 10; + i++; + } while (src); + + // Null terminate string + dst[i] = '\0'; + + // Revert the string + i--; + uint8_t j = 0; + while (j < i) { + char tmp = dst[i]; + dst[i] = dst[j]; + dst[j] = tmp; + i--; + j++; + } +} + void getEthAddressStringFromBinary(uint8_t *address, char *out, cx_sha3_t *sha3Context, @@ -153,11 +181,9 @@ void getEthAddressStringFromBinary(uint8_t *address, break; } if (eip1191) { - snprintf((char *) locals_union.tmp, - sizeof(locals_union.tmp), - "%d0x", - chain_config->chainId); - offset = strlen((char *) locals_union.tmp); + u64_to_string(chain_config->chainId, (char *) locals_union.tmp, sizeof(locals_union.tmp)); + offset = strnlen((char *) locals_union.tmp, sizeof(locals_union.tmp)); + strlcat((char *) locals_union.tmp + offset, "0x", sizeof(locals_union.tmp) - offset); } for (i = 0; i < 20; i++) { uint8_t digit = address[i]; diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index 67712a7..501a2b7 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -44,6 +44,8 @@ void getEthAddressStringFromKey(cx_ecfp_public_key_t *publicKey, cx_sha3_t *sha3Context, chain_config_t *chain_config); +void u64_to_string(uint64_t src, char *dst, uint8_t dst_size); + void getEthAddressStringFromBinary(uint8_t *address, char *out, cx_sha3_t *sha3Context, diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index ae310c4..82f640a 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -8,6 +8,7 @@ #endif #include "eth_plugin_handler.h" #include "network.h" +#include "ethUtils.h" #define ERR_SILENT_MODE_CHECK_FAILED 0x6001 @@ -257,34 +258,6 @@ void prepareFeeDisplay() { sizeof(strings.common.maxFee)); } -static void u64_to_string(uint64_t src, char *dst, uint8_t dst_size) { - // Copy the numbers in ASCII format. - uint8_t i = 0; - do { - // Checking `i + 1` to make sure we have enough space for '\0'. - if (i + 1 >= dst_size) { - THROW(0x6502); - } - dst[i] = src % 10 + '0'; - src /= 10; - i++; - } while (src); - - // Null terminate string - dst[i] = '\0'; - - // Revert the string - i--; - uint8_t j = 0; - while (j < i) { - char tmp = dst[i]; - dst[i] = dst[j]; - dst[j] = tmp; - i--; - j++; - } -} - void prepareNetworkDisplay() { char *name = get_network_name(); if (name == NULL) { From e1fc3036264cb800cc93e1d7814f51a1c4600e33 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Wed, 25 Aug 2021 17:47:39 +0200 Subject: [PATCH 09/33] Update Zemu to 0.16.5 and fix screenshots for Nano X --- tests/package.json | 2 +- tests/snapshots/approve/nanox/accept.png | Bin 667 -> 674 bytes tests/snapshots/approve/nanox/address.png | Bin 1285 -> 1292 bytes tests/snapshots/approve/nanox/amount.png | Bin 612 -> 619 bytes tests/snapshots/approve/nanox/fees.png | Bin 730 -> 737 bytes tests/snapshots/approve/nanox/review.png | Bin 633 -> 636 bytes tests/snapshots/approve/nanox/type.png | Bin 559 -> 566 bytes tests/snapshots/deposit/nanox/accept.png | Bin 667 -> 674 bytes tests/snapshots/deposit/nanox/address.png | Bin 1256 -> 1262 bytes tests/snapshots/deposit/nanox/amount.png | Bin 530 -> 537 bytes .../snapshots/deposit/nanox/data_present.png | Bin 593 -> 600 bytes tests/snapshots/deposit/nanox/fees.png | Bin 745 -> 752 bytes tests/snapshots/deposit/nanox/review.png | Bin 633 -> 636 bytes tests/snapshots/eip1559/nanox/accept.png | Bin 667 -> 674 bytes tests/snapshots/eip1559/nanox/address.png | Bin 1102 -> 1108 bytes tests/snapshots/eip1559/nanox/amount.png | Bin 514 -> 521 bytes tests/snapshots/eip1559/nanox/fees.png | Bin 659 -> 666 bytes tests/snapshots/eip1559/nanox/review.png | Bin 633 -> 636 bytes tests/snapshots/send/nanox/accept.png | Bin 667 -> 674 bytes tests/snapshots/send/nanox/address.png | Bin 1292 -> 1298 bytes tests/snapshots/send/nanox/amount.png | Bin 860 -> 866 bytes tests/snapshots/send/nanox/fees.png | Bin 685 -> 692 bytes tests/snapshots/send/nanox/network.png | Bin 585 -> 592 bytes tests/snapshots/send/nanox/review.png | Bin 633 -> 636 bytes tests/snapshots/send_bsc/nanox/accept.png | Bin 667 -> 674 bytes tests/snapshots/send_bsc/nanox/address.png | Bin 1292 -> 1298 bytes tests/snapshots/send_bsc/nanox/amount.png | Bin 884 -> 891 bytes tests/snapshots/send_bsc/nanox/fees.png | Bin 692 -> 699 bytes tests/snapshots/send_bsc/nanox/network.png | Bin 555 -> 561 bytes tests/snapshots/send_bsc/nanox/review.png | Bin 633 -> 636 bytes tests/snapshots/send_etc/nanox/accept.png | Bin 667 -> 674 bytes tests/snapshots/send_etc/nanox/address.png | Bin 1292 -> 1298 bytes tests/snapshots/send_etc/nanox/amount.png | Bin 869 -> 875 bytes tests/snapshots/send_etc/nanox/fees.png | Bin 688 -> 695 bytes tests/snapshots/send_etc/nanox/review.png | Bin 633 -> 636 bytes 35 files changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/package.json b/tests/package.json index d600722..2e335a6 100644 --- a/tests/package.json +++ b/tests/package.json @@ -15,7 +15,7 @@ "@ledgerhq/hw-app-eth": "^5.52.1", "@ledgerhq/hw-transport-http": "^4.74.2", "@ledgerhq/logs": "^5.50.0", - "@zondax/zemu": "0.13.0", + "@zondax/zemu": "0.16.5", "bignumber.js": "^9.0.0", "bip32-path": "^0.4.2", "core-js": "^3.7.0", diff --git a/tests/snapshots/approve/nanox/accept.png b/tests/snapshots/approve/nanox/accept.png index 7f2b8c89bd1a94620c388b2ac5599a5860918179..a2cb8f9dc97401fd76908866c585e2855970e054 100644 GIT binary patch delta 323 zcmbQux`=gx3S;I*RZqtHrA|*}L;lPT*|(T$YI?JH$i7Wo-Cd`EqM}p7L+ret&Rwym zh(SGnSyIr>)iXktby-hc`N%JI)sEnqTJu)MXz6Laf5PCmZT_kmA^T<@+_nXXm@RHj zGrcj*42U8eT#weTUGzv>I>-C>gYMNkf_H|j2#E>N6RltV$nR-T;qrQ;P>8_$qz^|| zu2|tCS}v+}UQ2Ci{K7>=D`$iNZS-zEwYkglscg-MqoFlnN7F-nv_z+O#fN^(v-@!f zsB-0_`^$m~SMCV@d5-P=gj4A&R>Xw-L`(KqQFfB(q!O(i=RfWXt$&t;ucLK6V38lEx$ delta 316 zcmZ3)I-7NZ3S-hnRZqtHr*lL8%nsS7JvF`AJftu%aA(MhJ&Qhdol0L>!_HptDNRdl z>h3Pj)KxozXKK9*S=MDeb>*X(r=XhH;OwNsL&dmfN z){u}t*R{0vZ92GZ3;(_yKwaLgUPoP@27N3CnxZFKt`!X7*MHPwi=WfgbtQrfp=w1Th}Sqr}G0U&71XoQdh0`!2@(@x|SBu13>4mSn)$tEBL6j1(G8{PSpoH e7vgACazEqBaE}kN+|_&xK;Y@>=d#Wzp$P!i36iz| diff --git a/tests/snapshots/approve/nanox/address.png b/tests/snapshots/approve/nanox/address.png index d8d9e03f34cf64917d7f9e4a4caf13ce6a69f079..4f601ca7d323c25b6f71c120cb23e4f60d581f64 100644 GIT binary patch delta 592 zcmYL`U1-x#6vy3s5MuEyh{*ObKj039OmIV|V%DK6ai;B!We?q?7^=e54U3iv5la+< zT4BUmKVXrzyUApwMWl1n7m30JQ7FimGGQYRgSfFiI0gkh*^Bq>Ud}z|_x~N0dB8m0 z(^M<(CC$p^rAGmKIc|#6H=3@vVmY)S*!jAkQd|xt^Sq;LCuNBHzY-sdQbb@CjY5tb!h@!`3nm^9uSqOQ2UMExz;43Xj_?WuDq$ZR zR#X~CcQuoDu8QR>#he6>5Pt1wbR%oNh8{rxXdHlyLq^3C2VnfKgwsi?5zh2z+(L*m z3HG6}fIVKZZu%jON&^MHw-5`NfJWdCCSFAIBhE?FN>y_LknN@PVm&Y#G-Z78iWU1uVq2d>I!`h*3Q8WdL%m_dz{{KffEa8 rb+P$pSIhVRjDR@&V#n~(^^1SEK2wJhKeo+1*#f7px8Fa-pTF}D6TBF0 delta 585 zcmY+BL1+^}6o$1z4{NNbEVP6O(wf8MAn8Gi7^T~ari8lLyloONDuE>@u?C@tr4eN- zER`r>AOUSzsmbg{Q&L1*+SG$=4~w86c&O1sBnPDyl0#~xpfkBSr^n;H|9$^IGn~pj z>f8Iie4KQoes)v`T%Yk%G=}DkEX*2Wj+SX4tCE+zKyIwpX6;@c6*=rfoj8GDOD5G~ z7FtV-85S9fFaZ$bGX8)xRgVX*L(>vMrE8;8+eHn0VtpE6Ua`eILo2OrSZp^3RH191Vz;DCZP+5wy zY`fu`g-^A^3@`@2BJ0f=8_Fhgf?%4%6XW$^Yd+Z*?kcs@ncK9T#_tm{aUdRrtd-@a zo91-xrBJ_O^|HoN^3P#v;A`ym5sGHgKQJQ(#XOT?pG!Hh=C8*t-*pz=ZT!dh@RNT1 aN!PE`kSjVN?mGs1=<}Z+9WDvi?)?MNW(>ao diff --git a/tests/snapshots/approve/nanox/amount.png b/tests/snapshots/approve/nanox/amount.png index 9d200d00c15c7cbc5df58768c185277d041d198f..6207f9e2009fa3dc41daa8c6edd7ee6b2a04ee50 100644 GIT binary patch delta 133 zcmaFD@|tCW3Zv0R)pLv$4;sCWeu~oyk;^@B&S>pHqpeg&{~0WGbyI_cXD~AWfv2mV J%Q~loCIFNoKwAI+ delta 126 zcmaFO@`PoA3ZwQ$)pLx6Y;SZfOX&nl(*XVE&#h5UReIvozyJiEu6{1-oD!M<>wF(+ diff --git a/tests/snapshots/approve/nanox/fees.png b/tests/snapshots/approve/nanox/fees.png index 19c6d6ca7b3de3aceb61445b4958db7c76fb5a40..a15d8224bd8858926df8b898d8aeabd15ad5bc30 100644 GIT binary patch delta 134 zcmcb``jB;k3ge26s?JQ6yz^Fs$lUjCJ+)c-!-E^w9^AM^byUyrHL#SYXdy!t0}yz+ L`njxgN@xNAl`UKR delta 127 zcmaFJdW&^}3gg0!s?JPBcN^G`Z(}=tjTY!1v*!AIp7rH&1q?vo>FVdQ&MBb@0Q7M^ A`v3p{ diff --git a/tests/snapshots/approve/nanox/review.png b/tests/snapshots/approve/nanox/review.png index 8794afe436a71131138e8f80fe7d0d4eca0eb076..4a982c5f30db04ecad96fda38069dd2fd8f96992 100644 GIT binary patch delta 291 zcmey#@`q)D3ZwHzRcFR}Ppy!BQZ*b?yZ$c@3S9WfJVYx*PfJv5z28%7e!D4NN0)qB z9-^f-)xVTM{q`od+m}#L{OTVf&Emlyv$WoY*d1k@v!|oWdTN*F(no$zg9?`$h5Bes z2MVlw6b>|YS(j((svW_Vru=aoUahC*o?2oQdZ&J+kEqsUASc8ybj6*}6*bG9Qdb4c z3|YoCHT=_qvmt+6T2F;+Jotcj<%&O=qEox9MW;^X6a6L@Pv3OH}LqtAp)9D`$lKo8onJ z$)}Zk4^pD9B}CssLBF#_=O=wg(u(svI``Cai-yVKfrZP13|EHSSsA1CE@WAk=hL9V zBtH1*Zl9IaFx4NUG>9j wX;RS6keHBnAzErv%O@5}sj}U^gpB?%Ze673=w$LekO2rhUHx3vIVCg!05l4FjsO4v diff --git a/tests/snapshots/approve/nanox/type.png b/tests/snapshots/approve/nanox/type.png index bec2de76f6bc6995be137c9711ad589b92b3e6c3..c9f6ee048700d91605fb7e7786e6175838b79457 100644 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|{^~>Eakt!T9zdW7lIh28M&z z9?bvpfBu#Hi;)|=S_;hy#1BOohf2qPTb_G6;@PIR{x-S(zb|jg)%kp*VeazU`#0x7 zWDIuPm>;oh6QlL%Eo`T+0Fm4skE7OFr>mtm6dQ}OPkma=uNF`kU>PbCq7}Dtj@G)6 zcS#0}Q=N}4e6*lw>8DkX7Az`Sv7?*)bhK!=X!(}}AuZAU-cS43Ca<(uQRD9V^c~yj zc%ViZEiJ8gPY&{~tZ{!TJGDIIUDgJlT!YT8=2M@x^WKPDW*V`~42XU>h@P%b{*b5@ zqBYI_`vWzgb$+7ZTFbj8pIZ26NzsacovQ*YL*|6o9c`8lvQn0%2LYLxS|M?{2hO>+o?5;#pmMoWYMH23cyl+`)Ti@8 zwAQi3YlTd!4qj;iR5BeXwofa>ubF#l*VB1gA?w)mfv&Fx>e`A3RY=%Ui>zaGH+%N= U_{nq2fa!t3)78&qol`;+0A#uc&;S4c literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|{^_>Eakt!T9!IW9Jh$28M&z z7Wi2GpI{~Smn&|Y#kKSey*sb^Ts@Y5{Peb5o#LB);&I!iKTf@EHmx$}z`@gnGCBGX z8HqbG`Z~ck8=6z2np3lY$eKUsW8bMy_t<1?e2#ji{=9dNMaxfXde>yHqv1fxdg^is zABU$Qg{v%9-dR}_S{M{)8ESL%+^4Xku}6j9`Zz6pG(V_v(ZLj;ru%_`mAejpYVTSf z;wLI9>c8o;15m8e{i*EKPC^wWKbni*VEyPn>^ zUD*M&&im-xQ%fH$Dq6K;#T>1WcUnNB#Hadi{H&lgooj0MsijU&7Zt4x*cq~7MF>cN zpQzUIE`OsR3Zh!-Q@iFbTJ-4ho0=J2^F5vlzpaq~n)csw>7yl|Sgi9yR{T*B)hgEl zY3M!`d(`#m`V}EDA^-ZkfXwA91Ab;P^W|xU*!i}evKH0aygFc~^qr6uI_H-J6`KE8 z>y%n)Hnra)iXktby-hc`N%JI)sEnqTJu)MXz6Laf5PCmZT_kmA^T<@+_nXXm@RHj zGrcj*42U8eT#weTUGzv>I>-C>gYMNkf_H|j2#E>N6RltV$nR-T;qrQ;P>8_$qz^|| zu2|tCS}v+}UQ2Ci{K7>=D`$iNZS-zEwYkglscg-MqoFlnN7F-nv_z+O#fN^(v-@!f zsB-0_`^$m~SMCV@d5-P=gj4A&R>Xw-L`(KqQFfB(q!O(i=RfWXt$&t;ucLK6V38lEx$ delta 316 zcmZ3)I-7NZ3S-hnRZqtHr*lL8%nsS7JvF`AJftu%aA(MhJ&Qhdol0L>!_HptDNRdl z>h3Pj)KxozXKK9*S=MDeb>*X(r=XhH;OwNsL&dmfN z){u}t*R{0vZ92GZ3;(_yKwaLgUPoP@27N3CnxZFKt`!X7*MHPwi=WfgbtQrfp=w1Th}Sqr}G0U&71XoQdh0`!2@(@x|SBu13>4mSn)$tEBL6j1(G8{PSpoH e7vgACazEqBaE}kN+|_&xK;Y@>=d#Wzp$P!i36iz| diff --git a/tests/snapshots/deposit/nanox/address.png b/tests/snapshots/deposit/nanox/address.png index 0c893f3d8b4709b91f5c112e9240476bf34e99ab..91fef4dcc2cbf0c03d6e41b96e672aceec025995 100644 GIT binary patch delta 574 zcmaFC`Hpjf3ggy|s&km?3*47J`jWmfU}rgFp3Q=!KuJ;O)DWJjfrb95D+7Ld99?9j z6>=|lV{oKa+o^RRY3r%qLss;3%{>(aR1%`2wK!?Hk(SuhK*Nx_r>B^;LZ)#|bxjRf z0hDk`1*&rgGDWrKL(By+y<1NO{G8hLeZ?O4)R3NfuBl6b>h7!#xEZ>_=GCcskD~#V zE=L1?E)QK1@@KNvv@X}D?{|E12HFsNG~njS9Dfx=E*2RD`si@?R05<<@%2c;_c+t&q5hr`9<=y%|&4;B|D-rqvQ!-awax)+_d?m&0M9<2_6IQVA=P|K&8+y#%nY~u6NfBWFeB_!(9|lSJPKu8at2 qgZiQy#3lHn^yF2O$AD<;F%iu zv4d;sQm3cJU~@st)Rh5}TKj`O%1!+av?y@lCXllFYEiA-TvOd+fAX)C(CS|yq4j?Y z*VL~1prb(>SNxF;uk$#%Xwzy5E$gX)3qMH$iA}4)u5n(P6nHZfXwAY;6G4t{JEg4E z*5%cDYH!!VPuk)899vKMfh}C@^i)vvzAKO&sTDGfYwE&Jp+FZcH_{5RTl`65YW>nj z#^H6rt*88hBt`pI1^na`^**{Hpi(Wo&bjrJcF@hx6*jZA`2&E#Q6}n~3UuS{uKp09 zy@nwEQ)8gmiVz*3;KENGT|mcG^m{=ZEFTEeVpj|f-h(ff%FcncG@1O4QB*Rl=h{Dp%6B)7%lCgQWB>wBS3j3^ HP6ba4!+V0?S<;@aD8A`BNF zI?eU@uj;GY#W90H(dMw8OBc{pzGH_U2HZat8lx8xf{S=YDMN zdb>O1&l84ucS2Uwtm-P)k`7sMM>kI^WM5;~sg;lNLqck_r*`dT-w%}D-DN#B_~_C{ zOM(iQe>xeW72?PK;mLHass3SwL6)I&Lhb>vpQ!rO`5|*c>_S^lJw4d#)p~0CsvqWB z`&?U3-F?*Sb<}*7#mW_bJdb+1KAjx8Vo&rRht%JCTK1L=>hVh+%{{dgj28uc^m`f& z442$BAWuu@ZtUF#4h!2K3Zm~rw*Alh*ckFJUrWpGY_opg!XS|KcUI2PdKaQ6TCTO6 zYid`w7s#ETIK_abu6wj(QPHX$!GSx0?gBax=wj=s-Cd`aSA1yHs&juDQn>QR+^)$$ z9Z5~>@*Yp`2UIQ(DqOiEcxJ-Kr6K=ZT%Rs70@|}ID6lXPY)^=mmY!DqA|OBLCky+B m6zOc3`%vNv;cTGrKgPsu{N8I1NdEz*7zR&QKbLh*2~7ZG796Dj delta 548 zcmcb?a*<_%O1*@qi(^OytNi=;}cQ=I3)4y&2_KmVX}XU z_Q@PSXm+}A--n_-bM%iFZa7=WpsxSC62{w5VG)1B&9Y%~?wX@!x00lDH}-D3;TD~< zSa;h+vF6Ya9}tfxv~cx|EW;UHr&78bweE%bY`IYn6b=4pEqYmJ+eN+yDIHz=7aAQ+ zG7z15Qp`Ez&)P1{I*Bz&yO=F*9*csQbvvUwcgxZJD{k!bKDr-hUpv=S|Im+qsm)wd zmmhU*J!KvcxHIHWZ&z3T(x8uD4(p3*-Cy^}^J!4w>K!XWY*yA7P34+;nsLsbpoO1K zYUyd!Pw(nJwHt_+K3eoCA1E+?mDAI2hnu}xPi+DGL;$BJ(6;;aLi+zmvv4FO#pa649)-m diff --git a/tests/snapshots/deposit/nanox/fees.png b/tests/snapshots/deposit/nanox/fees.png index 559c1559df2bf4932a40c49802e4ef2f3a8dbc15..294140a07e301551aea906960b23aa3972fa1455 100644 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|`zr>Eakt!T9zdV_vj56T?Np zg|pB6?KepeJgdY~$6Ec`_ff3-lWOz2iak5;=E+p=w7vJ?*|%pOpOx({eDj#irs8vj z&5pg55J`y`n|lR0PuXlNwwYRNGqc!M_I&oLh>&Sru20KXRxJDU>YdF01)C;Y*EeuY z?fM=Pv(iVj+w16}Pm!YGTHZ&eo(d^k`bm~IuA!^zREXiqJ?>AHMMb@jE?Hz0>LWTC zC|0<1(WltEm5ieDfh$+c2>B;Gb!pPd9jhX=?1Bte*0`7Nvz*%H3KW_VvaD9eJ6$Lrj1v$A$=pjpOki{{fK3eiC10uE70j<@Z zy7G}%>dFWp)Ai}9q@bU7-_;0CP1g!;J#~Inz)Y=>d7(fXK-`dppVmCG)jAIf9-s!G z%t{@Ygf(wp{fdB_N9XDXZCp{~cJx0`y}Op!)YV*5(?NE3p90$ZXZ@X@N?QMQr>^dL z@07ao2T(I83>R(+shMhh{Jz$*uBA>-?}x0gSsn0G6d1nm%bx$3eJZr|)au=z`?#jY z1O58PPfK+2si1{MD}iAHjEW_|sOUa*J_zVDh^s>C!dg#lmj3Wyk<-%(TcFj=-CR>2 zo30Fr;jLQ{U>P^t>!{HW$EA-daz(XHKX3vvd_juTwM36+uMDUxW0sS-EhQ5zO>Oj> Z`;?l&MCzDRBj|;h0+Z&?G|Q zj`@(|PB(V1wcISzT#G%7!F@;!G6~di>n4E>UC)a^l9|*p`&iQ=L=bZETe(#$* z+Z6H(a)KZfrmF@D_A!`OPRL+=w=p_O5XTlwhF0vU`Ia5O_fU5~;}4 zkR;8zDDMN_flx4DGWK&JR1ZF(-6+n#`mVrfV>IHTDq4u5+_of6N5KjdeQqQXQjI_y zZWTF~#T%oNIPO#3+cD(U;vpOhlqv5d-(s;;_~PLgjL?iN9n*`=aH^$Ez-pOB37m;s z+%Ify6gEHpJ05qL-O(nS&N_{70%51Mk(Cm!a3Q=+F{$7E*pU?)p^|ZEjko3IO6x`6 z8F~O&C-^na41qH?fFu($r6+<4tx59qv)zEO%D=#rEZ>LYd&1iWwi|EH3RSo)smSTY zo(Z6hq;LnS(%P^=+=2W*5s>sTO*TnU&}3lc&LQjKfb+;S!7s|`KB&(3T$>L|b!S$! z&*J6^2?e%MYzPPC(7220!Kj`t!*ltA?YX%WRsvC^vNw`jvjhW?S9Sb;R_QcW2YgZ Hzj5~$7$SK( diff --git a/tests/snapshots/deposit/nanox/review.png b/tests/snapshots/deposit/nanox/review.png index 8794afe436a71131138e8f80fe7d0d4eca0eb076..4a982c5f30db04ecad96fda38069dd2fd8f96992 100644 GIT binary patch delta 291 zcmey#@`q)D3ZwHzRcFR}Ppy!BQZ*b?yZ$c@3S9WfJVYx*PfJv5z28%7e!D4NN0)qB z9-^f-)xVTM{q`od+m}#L{OTVf&Emlyv$WoY*d1k@v!|oWdTN*F(no$zg9?`$h5Bes z2MVlw6b>|YS(j((svW_Vru=aoUahC*o?2oQdZ&J+kEqsUASc8ybj6*}6*bG9Qdb4c z3|YoCHT=_qvmt+6T2F;+Jotcj<%&O=qEox9MW;^X6a6L@Pv3OH}LqtAp)9D`$lKo8onJ z$)}Zk4^pD9B}CssLBF#_=O=wg(u(svI``Cai-yVKfrZP13|EHSSsA1CE@WAk=hL9V zBtH1*Zl9IaFx4NUG>9j wX;RS6keHBnAzErv%O@5}sj}U^gpB?%Ze673=w$LekO2rhUHx3vIVCg!05l4FjsO4v diff --git a/tests/snapshots/eip1559/nanox/accept.png b/tests/snapshots/eip1559/nanox/accept.png index 7f2b8c89bd1a94620c388b2ac5599a5860918179..a2cb8f9dc97401fd76908866c585e2855970e054 100644 GIT binary patch delta 323 zcmbQux`=gx3S;I*RZqtHrA|*}L;lPT*|(T$YI?JH$i7Wo-Cd`EqM}p7L+ret&Rwym zh(SGnSyIr>)iXktby-hc`N%JI)sEnqTJu)MXz6Laf5PCmZT_kmA^T<@+_nXXm@RHj zGrcj*42U8eT#weTUGzv>I>-C>gYMNkf_H|j2#E>N6RltV$nR-T;qrQ;P>8_$qz^|| zu2|tCS}v+}UQ2Ci{K7>=D`$iNZS-zEwYkglscg-MqoFlnN7F-nv_z+O#fN^(v-@!f zsB-0_`^$m~SMCV@d5-P=gj4A&R>Xw-L`(KqQFfB(q!O(i=RfWXt$&t;ucLK6V38lEx$ delta 316 zcmZ3)I-7NZ3S-hnRZqtHr*lL8%nsS7JvF`AJftu%aA(MhJ&Qhdol0L>!_HptDNRdl z>h3Pj)KxozXKK9*S=MDeb>*X(r=XhH;OwNsL&dmfN z){u}t*R{0vZ92GZ3;(_yKwaLgUPoP@27N3CnxZFKt`!X7*MHPwi=WfgbtQrfp=w1Th}Sqr}G0U&71XoQdh0`!2@(@x|SBu13>4mSn)$tEBL6j1(G8{PSpoH e7vgACazEqBaE}kN+|_&xK;Y@>=d#Wzp$P!i36iz| diff --git a/tests/snapshots/eip1559/nanox/address.png b/tests/snapshots/eip1559/nanox/address.png index fe5d6099d342a0eccb4450df7fedf49ab86fdeef..db02d0d16b1b986227a0d183144ef7450075ba4c 100644 GIT binary patch delta 443 zcmX@dafM@o3ZwK!)gq?)bIen_PN%O7sNBL>J}+cr&`hl`t>B|xPpw6@r@jwa6A~A? zG3ck?QLofh5i5P5V*fnN=Y<%quvsM$A{WY|b$*3J$h<(q6@S)iu}w`6;nC^`((a0qE|{EHqt1KkZ&4{|<~ zYCg4m=SN1ZkT6lL)nLc2a(c=G(H;PF=4CCrvut;MGKfw-6#xtYBx++&WjS_Rfu8%z YzWnr*(}fQ`)-V8pr>mdKI;Vst03>P3Pyhe` delta 442 zcmcb@agJkx3Zv*o)gq>PwmUoLTGTjDt^cdL9G^-81r`J8z@rO3^#E!AogbN| zDr>oi^o96nHJ_T;<(V2_8DzMUM|AS31w~7ef+R!wR@BP`g2lAlwbZ6AObYrrRr>!T zuBqvvD{NLfrG_s2w1#V{{aUA|k)m3wxu%A{iSf&QUX*36zrrG@aLFT4(e*2S!~zK@ zul^F-oywr2Ua6}hR{8+Fuo7qq*!4?{z#jBWT`?o14dhRdGeGi_OPB@g4Ojj-1rCRE zPp_2eE#FpbxpnU8m2YGG-X43J2~<{I{`k`rppPcs`5^#wd;r7`P-?-a%)FWguBoA| zr&fVnylGW{Wiv#3?(13Ip!gyh$Y8fMc=tnh9t;dlelRo4zN-thJc`u{>|YS(j((svW_Vru=aoUahC*o?2oQdZ&J+kEqsUASc8ybj6*}6*bG9Qdb4c z3|YoCHT=_qvmt+6T2F;+Jotcj<%&O=qEox9MW;^X6a6L@Pv3OH}LqtAp)9D`$lKo8onJ z$)}Zk4^pD9B}CssLBF#_=O=wg(u(svI``Cai-yVKfrZP13|EHSSsA1CE@WAk=hL9V zBtH1*Zl9IaFx4NUG>9j wX;RS6keHBnAzErv%O@5}sj}U^gpB?%Ze673=w$LekO2rhUHx3vIVCg!05l4FjsO4v diff --git a/tests/snapshots/send/nanox/accept.png b/tests/snapshots/send/nanox/accept.png index 7f2b8c89bd1a94620c388b2ac5599a5860918179..a2cb8f9dc97401fd76908866c585e2855970e054 100644 GIT binary patch delta 323 zcmbQux`=gx3S;I*RZqtHrA|*}L;lPT*|(T$YI?JH$i7Wo-Cd`EqM}p7L+ret&Rwym zh(SGnSyIr>)iXktby-hc`N%JI)sEnqTJu)MXz6Laf5PCmZT_kmA^T<@+_nXXm@RHj zGrcj*42U8eT#weTUGzv>I>-C>gYMNkf_H|j2#E>N6RltV$nR-T;qrQ;P>8_$qz^|| zu2|tCS}v+}UQ2Ci{K7>=D`$iNZS-zEwYkglscg-MqoFlnN7F-nv_z+O#fN^(v-@!f zsB-0_`^$m~SMCV@d5-P=gj4A&R>Xw-L`(KqQFfB(q!O(i=RfWXt$&t;ucLK6V38lEx$ delta 316 zcmZ3)I-7NZ3S-hnRZqtHr*lL8%nsS7JvF`AJftu%aA(MhJ&Qhdol0L>!_HptDNRdl z>h3Pj)KxozXKK9*S=MDeb>*X(r=XhH;OwNsL&dmfN z){u}t*R{0vZ92GZ3;(_yKwaLgUPoP@27N3CnxZFKt`!X7*MHPwi=WfgbtQrfp=w1Th}Sqr}G0U&71XoQdh0`!2@(@x|SBu13>4mSn)$tEBL6j1(G8{PSpoH e7vgACazEqBaE}kN+|_&xK;Y@>=d#Wzp$P!i36iz| diff --git a/tests/snapshots/send/nanox/address.png b/tests/snapshots/send/nanox/address.png index ce3e586e46f32702a08e9a622297cc24b4a21782..4228ae193adbfaa0a04cbc0fd31351cfaa89582b 100644 GIT binary patch literal 1298 zcmY*Ze@t6d6s}XiJYkra=ZX#6AI>egH6v}4i8`XREKsc7YkObI5>`!<2LGv0vMF8X z0B2cjMWgj*U>4wES>G#73C)I(u`RefOy2&$NMd9VaV#})nIkl2quMdgZBb+M+TLI1 zp6`6$cizXGwXuSEj!~&p73QV}JN);+_w^@B;rE9hySr7YCzi|&^|<4>J@2q{=p8P3b-rM=>x0T;ip1ToRoNRq}&t^xiGB zVo12&E4E1Gtd&!UqEeP_jHctGS(KVp!z2NLRmddcjV5^{ zols-<+?+aJjCky}L4Ule@jclvH0e@7EHUCw?KuFn_%B_D$0_Cd6d zCergsd{5#6F{78)NftJ$aFeiCN+f!t1qE3&9$1?Ib@m+!^i~SjhS|P6>>uTEK&z;MQ57jk?bHK61k%i7J-cMusPGtNou?gM9&xy5RY|I63So*X$~pRvnUAqj2bh4 zoJQEGi7;d_XqQ@ic~0m&*^b!7`AWpbA2%h~c$*=AHlQqT2C=d@=+*B8u zuAYjL4>KeP*FiP|-7kvP2dWg=x&WxETtiq$y9CODSPs~!KA4VxuyyC8i_Y?vkiu;* zN0mAhED%Qn=%6iiNbrbiyj21wz#9gTc>%QeStk2|`9p7v6-^ffR?@Hz{DG0VK?Gu5 zqu$v36mYyhuEs%4YxE7BsQv!e=hm}R#kM&XFtHGRSAu87p_69Q+Ok;ZXNrLu+I1pR0cJ4C zv1~P5|LRP3t>AhvnFwg1o0rJrg}&61M#>We^nkBk{t6oMSip~Hlj)>Wq*(@c!`)AH m+&AN~#eOH!)< literal 1292 zcmZuxe@q)y9PdQOJiD3waYH1Ve@tESFd?l576K7k8fb0cdVL4OG-$e9&}29P6&lD` z&@w$zk>Ev02=qn^cWuW6bfX(Mx8*RNi5Q7S*c4N9CR-H3X_(?fzps@T6PxSxy?d|U z_xbg`x0ve6z0|{$$z`>vm__J(e_?lE0G zAi0bGdZ+lnxBEWNGVl2`{%6UJXQyvpE4Wzn-e|aC?{wb8^_8OsR~Bx4QP|*isOuQt^m>}Nu7q+}3pf1Hn)V>OQKgpB zh<;sTrr2Cmi|ndPr%%kiDa;FspIMGSgx8c~oEeb?2VdjRIbXm66AXWR688v7s$VGQ zIg32k9m?@~Hjc>fF{3znxIq;*l&O)kR!%NCYwSns9?!DZ6L>7=`-P_`{Y*WSg{pk) zm|_M1F@MyG6Hrpr@@Gv&)n`6zF8(02BsC51Yx?1p7xE_TmyI`sa=nz!7r7v8XNS<^ zBBzF}TmnEcfrt%oC~kUya2Z0oMTJy!qYfJ2l!}#;b7MAMW&(X0VT=YeELmkYjqE`e zK`}d#YD1d{lM9av3fVhEhLot-qBcHiBtkW@LA3p-xCm7uHoa={ZZ<$@#AfsyCr!uF z5Bmit9~;EAG+LAg@%Fp63yOCEV$6*-R0lZB=`H$R6;N8TVlxfvjhx&G#2eJZXz`NaB*3)}Kzawuog$Rv*?LaC+eD)~z-shW{cTDt zkNTNFjT*6HIe`&Q>lHDIWI#ONQp3g}5qwIc9dHFTSJbBWQ{wysFCX_vEn5LNKd+Y( zmlh-J)XHzL`0I><-Fa7JJbdZ`CBArEVw<;yU>6vA>;1{jGBpe$kj#vO2#|>c9M~r_ z$qC|&Tr!sN+zV>U-*}b5^fowsq*(_xAVOLOX2%r`MnLVNFi(k+O>aZEhYZrTtU;3C zWboL=GcfqBRlgs!3L6C=`na&FFiLx^8Zo@SKsPX(!4L-$6$O~b0i4X_B4VtclZ^eK zq*@0-Sv?18Er6E%tVM^>kn;5P&P`P1Q%wm(3dM*iB{F0FcRPCS*4V_Zc zqN@M`GKfY!(sUj4@pOJR&b$ly02(@fTid1F9BX+h-GC{QA<57F{)8wvqkcBP|33!U b{Kq5wVK(&fFDI_STh8QkR98&ep6~t}&8I>PSH^_$XzdSPSQKiw z!bdb*EBNRFqfj5MaM8&?$rT{U;G;`GBEd(eo~qUgS=QzGR5`CEsP$C9!cQxlQda~> zhAiWny3lFqqjD{|&=nyzL6sp3jY3ucH6p3est?gx2U6&mx(cMD>pM{4Os$ZAPoA&` z{EXKMkz4skMeDy)>#6b`ANzr}$_Fm|6bW=hIMC{NpxZz$>DLNbrxmjAbZ@;6(B7ZY zKx0;S-Cr57Ge}ZvotB+5P;h2Q8`sqLK&J_s*KO!pn6xV3C)d=Kk5)O=KUD@Q-@nl5 z>8hj^Gl2f!n%ckXV>8hED{8iLO`Y%ebd?j(X+L|U=PwBY1%+0#7bGa^y&(Yr3X%n2 zsmZ72hkycP$tPJYwW;=&4c50e`E6S|H^=QAwbYf7!Rc Wc&Dx9@TQgl2s~Z=T-G@yGywo!BhFR; delta 483 zcmaFFc86_(3ZwEy)fC2h_JZ{2YrXm_Btq(zCk4#ZQk%NE%kgQsR>(Rnwy7&0d8MwB z2wB$U`E*rM&`h8RP%?GZ43J3bsvSX<{;j7%3|H11>GfX~AgL817rKH+RIB+^$U>u# z6(N88jxOe!+U2g*uNBh9H5I54p~kt@>*!RVx_YA(K42Xm=K&Q4x1O3m=MRI{fA7{) z%2VgNJdIxw@RQH{-$tO5l(j=3%;Zx63qQ#M^*%brA7&T=v@Cw1QD{u)ikg;FAs@}_LsrCu@`wU0 z4q5mq(7euI>T0g3@52^;y1Wvo2B>;|;p536prCL{4Oj^Yiu{$}000GvBv=aQs>z@L znGv$j`RI~Q>fkUvxoykj+)VY`m;AOZotxvmd*cL%lCUC%axtJ~E1XhA)o+Jg%F|hv z6mata!#kZ7PES`krK+mmt`A+Y=2^;Or&L#Su^>aBLwvMWTQpeT-UKnq`sTE65M^77>0!c(W-`N60a zqGcCUxYQ_gP6$vkKD2OY(W)ImGqu)*#9e&AyJE!(AJNID+(Ybw0}EHp2nku%wK6Fv z5F{NEceU3%;G^W!t}f4~>sJ7c77Z6&-gQ32M{E6yW8J|kEmnri(Ndeb^3nbUMWKa3 zmCJ$(R|Qm>Hp?%1bbrMRph@e4e)gQY9~fAfYF=jnG$vhCer3Q9!1jY5I`(h3GMfuRzjHZ}MtP}{;!vTV06<<)Ekx*$B{ zkBO*OIMDayJ3pQc`KJjqIXrOTC$P41iJbkut*16~O$|4>QP<5ib^fzs>_98{Mb)R? z_gtC;w0?z;7Emvky%OlWaG=copu(V^>qA%AST|UUi)!8ey)s~@R7}W; zZawww9xxV~<3qHzeGgk$Bo(tFBB@mL^r}i)x+cdvI>snuFW6P#xJb{8jUD Vl`wj@6POwqJYD@<);T3K0RX#&PzV43 literal 685 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|=foba4!+V0?S9F<04~f#IO7 z)7+f@s=2yd9Df+a5C5~^SD)m2PUcThy+vPhuI}-_jqQ&g{wt7Sziq|$;N0QAbD0bHFedDkb8?iP3-ClKDuO)QK*mT?84|K5^y56PspkV$uCQ3?qa`Y; zJ{9Par=qe4=H^B==Vl@!^LZ;kj;!!bT@|o%RY0Zx(Ir3^dOls16tolQUO%ATV2GzG zr%C%S`!wxT$ih#{wL+G0P2CPAS2_W8&IB_(pN1?nS~*9{PYdY0bcr1A-5*nc`p>WU zk*5{1PD^cS`p%CjTK}h=3O%}dMZiyi@z=OFm5v0qO~EJ+&mraOE5jd$QNjB}Kr{|2Y>J3iWH9o~~uyQ5?8%(_b4=t?=e< zuBmU+gI4a4`V#~c$^iz_L47UJ+vmd;7D>gd2+6Sr8g-TN&dq72H>R1<0DTiTY;kjq U6a97!m<$;_UHx3vIVCg!0AW%^y8r+H diff --git a/tests/snapshots/send/nanox/network.png b/tests/snapshots/send/nanox/network.png index eb4b7b8ce403bd5379db4c96f3ad2a45675a1462..e3682dea0d1431057f34ba69636647e08efa8a98 100644 GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|T%v9*D0D z__^ef*V0EJg-eY>eYAp)E-?z76XGYTB|7<3=+PygCiCVkND2y^sTJa-@X|X02dX*P}qAR{Y?bx)SK3bzSq{FwDz2EtTUfjfAQTj77tN z)_Oh-DGd5Kn``Rs$^vJt_aFyOKDE;6Y3$Kh-fjOw7Z!!{=dF0O7&Gz`6Sw%HZPnF>;N*XG9pr>EwtELH-&0Cd>oQ?a2d z_EYL-9H33r!gQu&X%Q~loCIGAE7l;4= literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|Qy)6x?atzZ2ps4)Da=h3-cr_{CV?{>2X-rSe|p?gKm(oeBk;-XW# zPc8Y>dFp@QOs%?I2bov+h>8L&TDj?rffnx#c617?QkiE71%+FVWe?Juh3|MgL$mY&xCB0Ys{$fVCMb$()h|w3wPJ=A&;%u|kbl!o#kQWhyywRPr>EwtcC5Gq4xa8) z!J#W^N*UD6MYV2!4q0)BH%}{MTYAvS9nyaS7jCkh?R7NuL%Y|}Z#kk`(+~Cn89t&~ m|YS(j((svW_Vru=aoUahC*o?2oQdZ&J+kEqsUASc8ybj6*}6*bG9Qdb4c z3|YoCHT=_qvmt+6T2F;+Jotcj<%&O=qEox9MW;^X6a6L@Pv3OH}LqtAp)9D`$lKo8onJ z$)}Zk4^pD9B}CssLBF#_=O=wg(u(svI``Cai-yVKfrZP13|EHSSsA1CE@WAk=hL9V zBtH1*Zl9IaFx4NUG>9j wX;RS6keHBnAzErv%O@5}sj}U^gpB?%Ze673=w$LekO2rhUHx3vIVCg!05l4FjsO4v diff --git a/tests/snapshots/send_bsc/nanox/accept.png b/tests/snapshots/send_bsc/nanox/accept.png index 7f2b8c89bd1a94620c388b2ac5599a5860918179..a2cb8f9dc97401fd76908866c585e2855970e054 100644 GIT binary patch delta 323 zcmbQux`=gx3S;I*RZqtHrA|*}L;lPT*|(T$YI?JH$i7Wo-Cd`EqM}p7L+ret&Rwym zh(SGnSyIr>)iXktby-hc`N%JI)sEnqTJu)MXz6Laf5PCmZT_kmA^T<@+_nXXm@RHj zGrcj*42U8eT#weTUGzv>I>-C>gYMNkf_H|j2#E>N6RltV$nR-T;qrQ;P>8_$qz^|| zu2|tCS}v+}UQ2Ci{K7>=D`$iNZS-zEwYkglscg-MqoFlnN7F-nv_z+O#fN^(v-@!f zsB-0_`^$m~SMCV@d5-P=gj4A&R>Xw-L`(KqQFfB(q!O(i=RfWXt$&t;ucLK6V38lEx$ delta 316 zcmZ3)I-7NZ3S-hnRZqtHr*lL8%nsS7JvF`AJftu%aA(MhJ&Qhdol0L>!_HptDNRdl z>h3Pj)KxozXKK9*S=MDeb>*X(r=XhH;OwNsL&dmfN z){u}t*R{0vZ92GZ3;(_yKwaLgUPoP@27N3CnxZFKt`!X7*MHPwi=WfgbtQrfp=w1Th}Sqr}G0U&71XoQdh0`!2@(@x|SBu13>4mSn)$tEBL6j1(G8{PSpoH e7vgACazEqBaE}kN+|_&xK;Y@>=d#Wzp$P!i36iz| diff --git a/tests/snapshots/send_bsc/nanox/address.png b/tests/snapshots/send_bsc/nanox/address.png index ce3e586e46f32702a08e9a622297cc24b4a21782..4228ae193adbfaa0a04cbc0fd31351cfaa89582b 100644 GIT binary patch literal 1298 zcmY*Ze@t6d6s}XiJYkra=ZX#6AI>egH6v}4i8`XREKsc7YkObI5>`!<2LGv0vMF8X z0B2cjMWgj*U>4wES>G#73C)I(u`RefOy2&$NMd9VaV#})nIkl2quMdgZBb+M+TLI1 zp6`6$cizXGwXuSEj!~&p73QV}JN);+_w^@B;rE9hySr7YCzi|&^|<4>J@2q{=p8P3b-rM=>x0T;ip1ToRoNRq}&t^xiGB zVo12&E4E1Gtd&!UqEeP_jHctGS(KVp!z2NLRmddcjV5^{ zols-<+?+aJjCky}L4Ule@jclvH0e@7EHUCw?KuFn_%B_D$0_Cd6d zCergsd{5#6F{78)NftJ$aFeiCN+f!t1qE3&9$1?Ib@m+!^i~SjhS|P6>>uTEK&z;MQ57jk?bHK61k%i7J-cMusPGtNou?gM9&xy5RY|I63So*X$~pRvnUAqj2bh4 zoJQEGi7;d_XqQ@ic~0m&*^b!7`AWpbA2%h~c$*=AHlQqT2C=d@=+*B8u zuAYjL4>KeP*FiP|-7kvP2dWg=x&WxETtiq$y9CODSPs~!KA4VxuyyC8i_Y?vkiu;* zN0mAhED%Qn=%6iiNbrbiyj21wz#9gTc>%QeStk2|`9p7v6-^ffR?@Hz{DG0VK?Gu5 zqu$v36mYyhuEs%4YxE7BsQv!e=hm}R#kM&XFtHGRSAu87p_69Q+Ok;ZXNrLu+I1pR0cJ4C zv1~P5|LRP3t>AhvnFwg1o0rJrg}&61M#>We^nkBk{t6oMSip~Hlj)>Wq*(@c!`)AH m+&AN~#eOH!)< literal 1292 zcmZuxe@q)y9PdQOJiD3waYH1Ve@tESFd?l576K7k8fb0cdVL4OG-$e9&}29P6&lD` z&@w$zk>Ev02=qn^cWuW6bfX(Mx8*RNi5Q7S*c4N9CR-H3X_(?fzps@T6PxSxy?d|U z_xbg`x0ve6z0|{$$z`>vm__J(e_?lE0G zAi0bGdZ+lnxBEWNGVl2`{%6UJXQyvpE4Wzn-e|aC?{wb8^_8OsR~Bx4QP|*isOuQt^m>}Nu7q+}3pf1Hn)V>OQKgpB zh<;sTrr2Cmi|ndPr%%kiDa;FspIMGSgx8c~oEeb?2VdjRIbXm66AXWR688v7s$VGQ zIg32k9m?@~Hjc>fF{3znxIq;*l&O)kR!%NCYwSns9?!DZ6L>7=`-P_`{Y*WSg{pk) zm|_M1F@MyG6Hrpr@@Gv&)n`6zF8(02BsC51Yx?1p7xE_TmyI`sa=nz!7r7v8XNS<^ zBBzF}TmnEcfrt%oC~kUya2Z0oMTJy!qYfJ2l!}#;b7MAMW&(X0VT=YeELmkYjqE`e zK`}d#YD1d{lM9av3fVhEhLot-qBcHiBtkW@LA3p-xCm7uHoa={ZZ<$@#AfsyCr!uF z5Bmit9~;EAG+LAg@%Fp63yOCEV$6*-R0lZB=`H$R6;N8TVlxfvjhx&G#2eJZXz`NaB*3)}Kzawuog$Rv*?LaC+eD)~z-shW{cTDt zkNTNFjT*6HIe`&Q>lHDIWI#ONQp3g}5qwIc9dHFTSJbBWQ{wysFCX_vEn5LNKd+Y( zmlh-J)XHzL`0I><-Fa7JJbdZ`CBArEVw<;yU>6vA>;1{jGBpe$kj#vO2#|>c9M~r_ z$qC|&Tr!sN+zV>U-*}b5^fowsq*(_xAVOLOX2%r`MnLVNFi(k+O>aZEhYZrTtU;3C zWboL=GcfqBRlgs!3L6C=`na&FFiLx^8Zo@SKsPX(!4L-$6$O~b0i4X_B4VtclZ^eK zq*@0-Sv?18Er6E%tVM^>kn;5P&P`P1Q%wm(3dM*iB{F0FcRPCS*4V_Zc zqN@M`GKfY!(sUj4@pOJR&b$ly02(@fTid1F9BX+h-GC{QA<57F{)8wvqkcBP|33!U b{Kq5wVK(&fFDI_STh8QkR98&ep6~t}p74yxrcLrjaom5h$oxn4 zkKyHICD4_$Ior{w(H>CDzUn%=^xL>xv-LIeP-^F|XFvM%cj-}Fu5gf+Hg$HTK`&Rr zsi$^*{vZ+EE;J98MFV~v)!r}NfwtCoJw(_eLoj|;c2{{ z{o$QC{KVH_oQ(NFx}d^96$VP9nQT?-IwP1c^p;`qf-4Jieh6&Nb%rv5It#58rbJDi z$srOGq(HOuH2|g`o$=*~X|RaY@+Qn9QPJUepOU3V z-6ak&LV7_mE7-{iaR83EOJvbbctKWT;srstV&!y*cBpy12f%J6dl3a=q+x`LQeqi` z3vy)4AX^xT;B-hmv3;y$Io!b`a3ledIPO4_E7q6+McwszGS161%1a009)2$c1FN53 z7u&Ra`vpd-LSD3JCwHw_*FGnY%OWmMe%yJJaGy>9i#rBJVkM%PitXD4bdYbquVm*V zu`Wu5Ss7^v*#%Kir4DgNgMJt2b|VJlJ*FuhkSIoSjuN{YG+MwBB|9F8=>f8XC;)2M z8V$r>LQ~?|LTLrn{z@zCnWLy66IkUCo$p}edCvFx+U5WI|5R=G`^l*@_X<)(q78B( zH>xvVZPoG(O$w(PaxD}WdgR%h2GDk+Fl6CEeocxnfIzZX>d1_*@zTGmRIt>4E0nW| ZJZQy6ZqnMxw9_#KI^}wESrEV4`3K!VS&0Au delta 738 zcmYk4ZAep57{|3@!ZQ7IQW+>>IXGtFJ}5X}*j1TRnRnZngEFz@h%|?dOeOKsWI=;4 zlWXpS(w1BIPEphtN|qU1VfRB(65(3~atjO@E+NO%I@dvXKArPC|8t)I^LtKIvMYIf zE>o!~SE0`M?Zx}8vb+;fiIi3+wEgrDmV3njn&c?}uC?gd z*}{kyhgu<64qk#_t!0dKX)hue_=4QF_PCCKWn<6oR0$nWLbGQ5oIe%yydVU>nRLMk z3i+HWi+>1BU^}dt6th03MvVBJIrJZdEf4VO^}SIk?Ir{rZpp2{G2CAj7eYmTlI|hT>wY6Be5+cyGI;m@@MWiC63h97wi_w{`yi^jjk8N;%>7K#_xE;)A)`9m^nuC2 zH*53p{?7IMOpMpajZQmH&d%iiI{uHe0WYo*P3~WcE;qlu@GuT9O@+36f@rk=1DGpR A;{X5v diff --git a/tests/snapshots/send_bsc/nanox/fees.png b/tests/snapshots/send_bsc/nanox/fees.png index ac5d9dba1699161270cdac51110d1b0f425ccd9b..a4514d7bb667fbde80bcb910cecd75bfe7c5171e 100644 GIT binary patch delta 567 zcmdnOx|?-^igJ^ui(^Oy+DJXEJ*0L^7SCDjIWvKZ*hok8sT3TvT>lYQRvIva{oug$JY`AjIB58fUrH_^b z6|R~QvaHMA@#(5ZOFsE5eH60rQx=VNlv{V7+9HVUS~12t1Dep zer3Q)@$3+r;F($>>$HFtq-)8qoDl-D zIR@z1aM8)9LXR#f3N>6g2dIDF;okfuMXPqK3i#Or^qR7$R(){msm)wdS30Gx3IH0h z49Z*yR08DsY2DBLuqZ^Uj%(`t7st$3S*-jcEvi0s{tBQMWbs)(J(ng0S*`@K)u(oOJ}nR7 z0R~v`QO~FTs{<;_CJQqeR6OYPI{Gb6D`cMRfw{SnAmgZw>KRSU!i!sWMMN@) delta 560 zcmdnZx`lOuigLB5i(^Oy7btE#JY_HFedD5WB^n zrgn7&A6>G@DAY%Eau-N?(Wg~;dm6jeuLue8(faT5G^B9Vj#U<+HA|C%DqYRv=6D_T zT>2=)aHWrEebcGXqn=Ndr*;Lmo?0#Wr(Qtxzw6N@Mxiy+Plbonxw}4{diTe}5G^gc zRX==MPn82roD-r3v~V)S8GH}UZCi72+ZJRb?H}}U;;E2@MWG9U<}CR%v&-|Tw&-M_ zMN5i84Ohm5`e=m%xho%eJ(bL}nFwU8a(b$*wY=+m$clO&Q7!q<6+jZ`o)DmZ2-E9m zD2Q7WRJrY7chJfonjv+Ir2RvHfnu)Zr)3`q^a8{vr>9;^oq*l}>h@n$w5nnn$YI^V zD{uVkk)FRI;OAwnea=fCt$I`*qNN5>v?R!IbP0l+XkKlE4*( diff --git a/tests/snapshots/send_bsc/nanox/network.png b/tests/snapshots/send_bsc/nanox/network.png index b021901e732d6ea8a8122f78e5fce2e4df0a2b13..d354b8c0fbee0bbe61296943b95f046891d077ab 100644 GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|{^=>Eakt!T9#z#g)pI3=9Y5 z9{O1QpI{|6pViu+g17qp`TQlTn(gQ5A1~an_G!hw4@G-y;`<&aL?36gsjRe{FQb2c z`eTb5*9>-4?AxIGlwn@ZX{j7<=^XFs4^OrHw1ST=`Q)pmHuZi|L9wXl?R5USiCk0t zwbq4b`H6;uWQ{_7fRyLckcB~pD`SA1`#A;7qLaH$g)A%z3Jjd7bq}lns4gb7Cg@`{ zPaWsfm5)|E3JLsJA38^CotE9o9YKLVU7p^y-61&jZ93cjj#JiC=LcD?Trnp^ZK{9B zKiAY%Kgyb=17>PzfgI#|)PIGK=;TxWp*5SCD>mt7Z_v#}LT?ZDhVBWT33MUIf#qKx zJOeY{1N|V%vu*#1HIELS4V@FRPAeqr8(2ucKEV^m9#pdk+{A&GsQ$+p1Rw zSn}$D7^?zyO6>_;dE?zuu*RFyOm9pxqc-{`uRZbUi>uquWdV}{gQu&X%Q~loCIE|5 B0N4Nk literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|{^@>Eakt!T9#z#m*-d3=9`H zz3|ccKS4_@p8Hxtn)J74`Nu9*v)9kbKVGPlS6#8_8)!lP)lpu`M5tyqFVDq?yL-n z(RvrMtjjZX)eIojeQK%G(xjlBt7nANZ92#d)SwmIddk(+HFedGRY^fJwbZ7re6;S- zE3~F}Sx;SF z^|1iVSPyi9D9^V2E7m+ZdN?#DUTyxaDN02Q!{ zYWW8M9j2}&Dk?tp{yL|ptC=l!t_-+2Z@JUcyn^6`n`|e09liUYpKI#dn;}|y&GsQ$ x+tODD?BvM|YS(j((svW_Vru=aoUahC*o?2oQdZ&J+kEqsUASc8ybj6*}6*bG9Qdb4c z3|YoCHT=_qvmt+6T2F;+Jotcj<%&O=qEox9MW;^X6a6L@Pv3OH}LqtAp)9D`$lKo8onJ z$)}Zk4^pD9B}CssLBF#_=O=wg(u(svI``Cai-yVKfrZP13|EHSSsA1CE@WAk=hL9V zBtH1*Zl9IaFx4NUG>9j wX;RS6keHBnAzErv%O@5}sj}U^gpB?%Ze673=w$LekO2rhUHx3vIVCg!05l4FjsO4v diff --git a/tests/snapshots/send_etc/nanox/accept.png b/tests/snapshots/send_etc/nanox/accept.png index 7f2b8c89bd1a94620c388b2ac5599a5860918179..a2cb8f9dc97401fd76908866c585e2855970e054 100644 GIT binary patch delta 323 zcmbQux`=gx3S;I*RZqtHrA|*}L;lPT*|(T$YI?JH$i7Wo-Cd`EqM}p7L+ret&Rwym zh(SGnSyIr>)iXktby-hc`N%JI)sEnqTJu)MXz6Laf5PCmZT_kmA^T<@+_nXXm@RHj zGrcj*42U8eT#weTUGzv>I>-C>gYMNkf_H|j2#E>N6RltV$nR-T;qrQ;P>8_$qz^|| zu2|tCS}v+}UQ2Ci{K7>=D`$iNZS-zEwYkglscg-MqoFlnN7F-nv_z+O#fN^(v-@!f zsB-0_`^$m~SMCV@d5-P=gj4A&R>Xw-L`(KqQFfB(q!O(i=RfWXt$&t;ucLK6V38lEx$ delta 316 zcmZ3)I-7NZ3S-hnRZqtHr*lL8%nsS7JvF`AJftu%aA(MhJ&Qhdol0L>!_HptDNRdl z>h3Pj)KxozXKK9*S=MDeb>*X(r=XhH;OwNsL&dmfN z){u}t*R{0vZ92GZ3;(_yKwaLgUPoP@27N3CnxZFKt`!X7*MHPwi=WfgbtQrfp=w1Th}Sqr}G0U&71XoQdh0`!2@(@x|SBu13>4mSn)$tEBL6j1(G8{PSpoH e7vgACazEqBaE}kN+|_&xK;Y@>=d#Wzp$P!i36iz| diff --git a/tests/snapshots/send_etc/nanox/address.png b/tests/snapshots/send_etc/nanox/address.png index ce3e586e46f32702a08e9a622297cc24b4a21782..4228ae193adbfaa0a04cbc0fd31351cfaa89582b 100644 GIT binary patch literal 1298 zcmY*Ze@t6d6s}XiJYkra=ZX#6AI>egH6v}4i8`XREKsc7YkObI5>`!<2LGv0vMF8X z0B2cjMWgj*U>4wES>G#73C)I(u`RefOy2&$NMd9VaV#})nIkl2quMdgZBb+M+TLI1 zp6`6$cizXGwXuSEj!~&p73QV}JN);+_w^@B;rE9hySr7YCzi|&^|<4>J@2q{=p8P3b-rM=>x0T;ip1ToRoNRq}&t^xiGB zVo12&E4E1Gtd&!UqEeP_jHctGS(KVp!z2NLRmddcjV5^{ zols-<+?+aJjCky}L4Ule@jclvH0e@7EHUCw?KuFn_%B_D$0_Cd6d zCergsd{5#6F{78)NftJ$aFeiCN+f!t1qE3&9$1?Ib@m+!^i~SjhS|P6>>uTEK&z;MQ57jk?bHK61k%i7J-cMusPGtNou?gM9&xy5RY|I63So*X$~pRvnUAqj2bh4 zoJQEGi7;d_XqQ@ic~0m&*^b!7`AWpbA2%h~c$*=AHlQqT2C=d@=+*B8u zuAYjL4>KeP*FiP|-7kvP2dWg=x&WxETtiq$y9CODSPs~!KA4VxuyyC8i_Y?vkiu;* zN0mAhED%Qn=%6iiNbrbiyj21wz#9gTc>%QeStk2|`9p7v6-^ffR?@Hz{DG0VK?Gu5 zqu$v36mYyhuEs%4YxE7BsQv!e=hm}R#kM&XFtHGRSAu87p_69Q+Ok;ZXNrLu+I1pR0cJ4C zv1~P5|LRP3t>AhvnFwg1o0rJrg}&61M#>We^nkBk{t6oMSip~Hlj)>Wq*(@c!`)AH m+&AN~#eOH!)< literal 1292 zcmZuxe@q)y9PdQOJiD3waYH1Ve@tESFd?l576K7k8fb0cdVL4OG-$e9&}29P6&lD` z&@w$zk>Ev02=qn^cWuW6bfX(Mx8*RNi5Q7S*c4N9CR-H3X_(?fzps@T6PxSxy?d|U z_xbg`x0ve6z0|{$$z`>vm__J(e_?lE0G zAi0bGdZ+lnxBEWNGVl2`{%6UJXQyvpE4Wzn-e|aC?{wb8^_8OsR~Bx4QP|*isOuQt^m>}Nu7q+}3pf1Hn)V>OQKgpB zh<;sTrr2Cmi|ndPr%%kiDa;FspIMGSgx8c~oEeb?2VdjRIbXm66AXWR688v7s$VGQ zIg32k9m?@~Hjc>fF{3znxIq;*l&O)kR!%NCYwSns9?!DZ6L>7=`-P_`{Y*WSg{pk) zm|_M1F@MyG6Hrpr@@Gv&)n`6zF8(02BsC51Yx?1p7xE_TmyI`sa=nz!7r7v8XNS<^ zBBzF}TmnEcfrt%oC~kUya2Z0oMTJy!qYfJ2l!}#;b7MAMW&(X0VT=YeELmkYjqE`e zK`}d#YD1d{lM9av3fVhEhLot-qBcHiBtkW@LA3p-xCm7uHoa={ZZ<$@#AfsyCr!uF z5Bmit9~;EAG+LAg@%Fp63yOCEV$6*-R0lZB=`H$R6;N8TVlxfvjhx&G#2eJZXz`NaB*3)}Kzawuog$Rv*?LaC+eD)~z-shW{cTDt zkNTNFjT*6HIe`&Q>lHDIWI#ONQp3g}5qwIc9dHFTSJbBWQ{wysFCX_vEn5LNKd+Y( zmlh-J)XHzL`0I><-Fa7JJbdZ`CBArEVw<;yU>6vA>;1{jGBpe$kj#vO2#|>c9M~r_ z$qC|&Tr!sN+zV>U-*}b5^fowsq*(_xAVOLOX2%r`MnLVNFi(k+O>aZEhYZrTtU;3C zWboL=GcfqBRlgs!3L6C=`na&FFiLx^8Zo@SKsPX(!4L-$6$O~b0i4X_B4VtclZ^eK zq*@0-Sv?18Er6E%tVM^>kn;5P&P`P1Q%wm(3dM*iB{F0FcRPCS*4V_Zc zqN@M`GKfY!(sUj4@pOJR&b$ly02(@fTid1F9BX+h-GC{QA<57F{)8wvqkcBP|33!U b{Kq5wVK(&fFDI_STh8QkR98&ep6~t}5LK`_Ola?blpWOc66!6=luF{wREOHt2kDZ}o{8~& zC3$|X>&nQ%#oEd@)1!~XOBW5%m#*<4Z>}WA{3>Y-Y9ZJ7Vd*q3?ofH9f22)ZtRZI_ zKPY?|jtY;LV`Q|?G}m=?QdmsGC|b|BmZqd;Gjnn)0q^m;P&XOGsZt+w z3GE^Szz#A2oFj$3C3O%DIQ;)k6sT$i#MOQnti%=YP(?R3GJ5 zB3`&F++#BA6xImpd0NF&kCY_@V4!9I4JyzvhwKg-Nfqz84M8K*AzTA}_PRXhQL#c~ z%>;{uK^R!<&n>uwS9XTLC+5#n1p{tg)@Cu8Fi8MmmUzC)bI+>$V+n$iJhplOiK+lj z6;Nqk%K;^O9?%!n3ffIt<4Io|W(pHxZP2@5$2!Ei_1*I}On`eN2H()B5FO6i{j@h_ zZJEf&+F!nOX||_<(8#AL%lhq6+T{zCul|3IO+Om!Z779@_@3e4{OwsJ`u;}}SjkD- Ji9yS`w!bmlJeU9g delta 682 zcmYjPZ%7ki9M%G%L;4a&ih^IN!D}Y-iIrjfmk9!7LWktb|3T#i6Wm zyrJcChnwBa;m~4;jTzAfo>1Ty%RfveM^RYpKA2Lp-djZdKK`EP_x_&e_q<<9)RKpX zijVpaSM8}B^EVHA2l?+X`YC-N@;;ef5Ts!UCwL!o)2Hy(r-MpJD+i6Kpe9l3I2_>l zOYS01oC~ubL#f~jkitx%JwY)r>w^Sj4y{6 z_jRoiw^ksS5UL=EFWbbrfJ1_=m`tgki@v%R=W_eVKII)O1s$o7zV@f3Utv>0U5^DL z&?q}t3kHKaXu(o&$3k|3Z(f-m0Y{K;HunU;0Ro*N0p5iNrBV`*rjDFMg|mKToIoPQ zVd_5)Ei&$~&I28Vfy6V+gQ8Y#$lOu#jHtD!4eh%X0484#%}1T|?gIj4Sfku)ONBH$ z7KQa`l9y5=lsdV#v#7spGINpH$j%6Xs*#wDWIehH0iRMM0X&sW*V~NHLV__78)K#3 zdkV}MpyXgnNvr|yZm&-o(IkOlHc?y0ma$bZznQ+u$YpSXK<2Qs;MNp&GP>(YzSYao zI>xuEowy-8nOy>3Csz3?&}}!YE)|mc8+MxdL$NOuui5E-{V43HtL^3VFmLAi_Rc;J z68ds9>dLo^GmnKK0+H+IS_+BC(X1ZS$^XBN(0$oZwz~AI_{8Yeo96qQHAT2uo2;j& IsEc=h10!Ecg8%>k diff --git a/tests/snapshots/send_etc/nanox/fees.png b/tests/snapshots/send_etc/nanox/fees.png index 2a101cac282c517fb351101ed602b99cb4df331b..4a61a9d6364a79f37ebebfd6808e6ee8092b0a95 100644 GIT binary patch delta 133 zcmdnMx}9}`3S-?yRVk*5W_2ym+tn)rD$5wkx25uKTS|5Gm(`~?ByL$*dNTtMc)I$z JtaD0e0szI^IIREx delta 126 ycmdnax`B0q3S;?3RVk)I_JZ{2YYEY}Xo2Dz?)b&cF+N+t00f?{elF{r5}E+Fq&r>! diff --git a/tests/snapshots/send_etc/nanox/review.png b/tests/snapshots/send_etc/nanox/review.png index 8794afe436a71131138e8f80fe7d0d4eca0eb076..4a982c5f30db04ecad96fda38069dd2fd8f96992 100644 GIT binary patch delta 291 zcmey#@`q)D3ZwHzRcFR}Ppy!BQZ*b?yZ$c@3S9WfJVYx*PfJv5z28%7e!D4NN0)qB z9-^f-)xVTM{q`od+m}#L{OTVf&Emlyv$WoY*d1k@v!|oWdTN*F(no$zg9?`$h5Bes z2MVlw6b>|YS(j((svW_Vru=aoUahC*o?2oQdZ&J+kEqsUASc8ybj6*}6*bG9Qdb4c z3|YoCHT=_qvmt+6T2F;+Jotcj<%&O=qEox9MW;^X6a6L@Pv3OH}LqtAp)9D`$lKo8onJ z$)}Zk4^pD9B}CssLBF#_=O=wg(u(svI``Cai-yVKfrZP13|EHSSsA1CE@WAk=hL9V zBtH1*Zl9IaFx4NUG>9j wX;RS6keHBnAzErv%O@5}sj}U^gpB?%Ze673=w$LekO2rhUHx3vIVCg!05l4FjsO4v From a26f1dec33b2c76f6995a5b69b66ae142888748c Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Thu, 26 Aug 2021 14:27:49 +0200 Subject: [PATCH 10/33] Update tests for parallelism --- .gitignore | 3 +- tests/build_local_test_elfs.sh | 34 +++++ tests/globalsetup.js | 2 + tests/jest.config.js | 2 + tests/package.json | 1 + tests/setupTests.js | 21 +++ tests/snapshots/tmp/nanos/.gitignore | 1 - tests/snapshots/tmp/nanox/.gitignore | 1 - tests/src/approve.test.js | 95 +++++++------- tests/src/deposit.test.js | 93 +++++++------ tests/src/eip1559.test.js | 80 ++++++----- tests/src/generic.js | 14 ++ tests/src/send.test.js | 190 +++++++++++++-------------- tests/src/send_bsc.test.js | 104 +++++++-------- tests/src/send_etc.test.js | 91 +++++++------ 15 files changed, 398 insertions(+), 334 deletions(-) create mode 100755 tests/build_local_test_elfs.sh create mode 100644 tests/setupTests.js delete mode 100644 tests/snapshots/tmp/nanos/.gitignore delete mode 100644 tests/snapshots/tmp/nanox/.gitignore diff --git a/.gitignore b/.gitignore index 1138673..4dbca94 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ obj/ tests/node_modules tests/lib tests/yarn-error.log - +tests/elfs/* +tests/snapshots/tmp/* .vscode diff --git a/tests/build_local_test_elfs.sh b/tests/build_local_test_elfs.sh new file mode 100755 index 0000000..c7b4ca8 --- /dev/null +++ b/tests/build_local_test_elfs.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# FILL THESE WITH YOUR OWN SDKs PATHS +NANOS_SDK="" +NANOX_SDK="" + +# list of apps required by tests that we want to build here +appnames=("ethereum" "ethereum_classic") + +# create elfs folder if it doesn't exist +mkdir -p elfs + +# move to repo's root to build apps +cd .. + +echo "*Building elfs for Nano S..." +for app in "${appnames[@]}" +do + echo "**Building $app for Nano S..." + make clean BOLOS_SDK=$NANOS_SDK + make -j DEBUG=1 ALLOW_DATA=1 BOLOS_SDK=$NANOS_SDK CHAIN=$app + cp bin/app.elf "tests/elfs/${app}_nanos.elf" +done + +echo "*Building elfs for Nano X..." +for app in "${appnames[@]}" +do + echo "**Building $app for Nano X..." + make clean BOLOS_SDK=$NANOX_SDK + make -j DEBUG=1 ALLOW_DATA=1 BOLOS_SDK=$NANOX_SDK CHAIN=$app + cp bin/app.elf "tests/elfs/${app}_nanox.elf" +done + +echo "done" diff --git a/tests/globalsetup.js b/tests/globalsetup.js index 8ec2b86..e835233 100644 --- a/tests/globalsetup.js +++ b/tests/globalsetup.js @@ -1,4 +1,5 @@ import Zemu from "@zondax/zemu"; +import fsExtra from "fs-extra"; const catchExit = async () => { process.on("SIGINT", () => { @@ -12,4 +13,5 @@ module.exports = async () => { await catchExit(); await Zemu.checkAndPullImage(); await Zemu.stopAllEmuContainers(); + fsExtra.emptyDirSync("snapshots/tmp") }; \ No newline at end of file diff --git a/tests/jest.config.js b/tests/jest.config.js index fbceb38..c1ba411 100644 --- a/tests/jest.config.js +++ b/tests/jest.config.js @@ -30,4 +30,6 @@ module.exports = { "**/?(*.)+(spec|test).[tj]s?(x)", "**/?(*.)+(ispec|test).[tj]s?(x)", ], + + setupFilesAfterEnv: ['/setupTests.js'] }; diff --git a/tests/package.json b/tests/package.json index 2e335a6..618e570 100644 --- a/tests/package.json +++ b/tests/package.json @@ -20,6 +20,7 @@ "bip32-path": "^0.4.2", "core-js": "^3.7.0", "ethereum-tx-decoder": "^3.0.0", + "fs-extra": "^10.0.0", "google-protobuf": "^3.11.0", "jest-serial-runner": "^1.1.0", "js-sha256": "^0.9.0", diff --git a/tests/setupTests.js b/tests/setupTests.js new file mode 100644 index 0000000..a97166b --- /dev/null +++ b/tests/setupTests.js @@ -0,0 +1,21 @@ +import expect from 'expect' + +expect.extend({ + toMatchSnapshot(received, original) { + + if(received.data.equals(original.data)){ + return { + message: () => `snapshots are equal`, + pass: true + } + } + + // console.log(received.data.toString('hex')) + // console.log(original.data.toString('hex')) + + return { + message: () => `snapshots are not equal`, + pass: false + } + }, + }); \ No newline at end of file diff --git a/tests/snapshots/tmp/nanos/.gitignore b/tests/snapshots/tmp/nanos/.gitignore deleted file mode 100644 index aab52d9..0000000 --- a/tests/snapshots/tmp/nanos/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.png \ No newline at end of file diff --git a/tests/snapshots/tmp/nanox/.gitignore b/tests/snapshots/tmp/nanox/.gitignore deleted file mode 100644 index aab52d9..0000000 --- a/tests/snapshots/tmp/nanox/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.png \ No newline at end of file diff --git a/tests/src/approve.test.js b/tests/src/approve.test.js index 579d252..ec5e01e 100644 --- a/tests/src/approve.test.js +++ b/tests/src/approve.test.js @@ -6,22 +6,19 @@ import Zemu from "@zondax/zemu"; import { TransportStatusError } from "@ledgerhq/errors"; import { expect } from "../jest"; -const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT} = require("generic.js"); +const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/approve/"; -const SNAPSHOT_PATH_PREFIX = "snapshots/tmp/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -const SNAPSHOT_PATH_NANOS = SNAPSHOT_PATH_PREFIX + "nanos/"; -const SNAPSHOT_PATH_NANOX = SNAPSHOT_PATH_PREFIX + "nanox/"; - - test("Approve DAI tokens nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); + try { await sim.start(sim_options_nanos); @@ -40,59 +37,59 @@ test("Approve DAI tokens nanos", async () => { // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Type filename = "type.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const type = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const type = Zemu.LoadPng2RGB(tmpPath + filename); const expected_type = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(type).toEqual(expected_type); + expect(type).toMatchSnapshot(expected_type); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -108,6 +105,8 @@ test("Approve DAI token nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); + try { await sim.start(sim_options_nanox); @@ -125,45 +124,45 @@ test("Approve DAI token nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Type filename = "type.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const type = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const type = Zemu.LoadPng2RGB(tmpPath + filename); const expected_type = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(type).toEqual(expected_type); + expect(type).toMatchSnapshot(expected_type); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); diff --git a/tests/src/deposit.test.js b/tests/src/deposit.test.js index b024692..2aa054d 100644 --- a/tests/src/deposit.test.js +++ b/tests/src/deposit.test.js @@ -6,22 +6,18 @@ import Zemu from "@zondax/zemu"; import { TransportStatusError } from "@ledgerhq/errors"; import { expect } from "../jest"; -const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT} = require("generic.js"); +const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); // Adapt this prefix. const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/deposit/"; -const SNAPSHOT_PATH_PREFIX = "snapshots/tmp/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -const SNAPSHOT_PATH_NANOS = SNAPSHOT_PATH_PREFIX + "nanos/"; -const SNAPSHOT_PATH_NANOX = SNAPSHOT_PATH_PREFIX + "nanox/"; - - test("Deposit ETH nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanos); @@ -39,59 +35,59 @@ test("Deposit ETH nanos", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Data present filename = "data_present.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const data_present = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const data_present = Zemu.LoadPng2RGB(tmpPath + filename); const expected_data_present = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(data_present).toEqual(expected_data_present); + expect(data_present).toMatchSnapshot(expected_data_present); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -106,6 +102,7 @@ test("Deposit ETH nanos", async () => { test("Deposit ETH nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanox); @@ -123,45 +120,45 @@ test("Deposit ETH nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Data present filename = "data_present.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const data_present = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const data_present = Zemu.LoadPng2RGB(tmpPath + filename); const expected_data_present = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(data_present).toEqual(expected_data_present); + expect(data_present).toMatchSnapshot(expected_data_present); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); diff --git a/tests/src/eip1559.test.js b/tests/src/eip1559.test.js index d102d3c..4ad9427 100644 --- a/tests/src/eip1559.test.js +++ b/tests/src/eip1559.test.js @@ -6,20 +6,17 @@ import Zemu from "@zondax/zemu"; import { TransportStatusError } from "@ledgerhq/errors"; import { expect } from "../jest"; -const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT} = require("generic.js"); +const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/eip1559/"; -const SNAPSHOT_PATH_PREFIX = "snapshots/eip1559/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -const SNAPSHOT_PATH_NANOS = SNAPSHOT_PATH_PREFIX + "nanos/"; -const SNAPSHOT_PATH_NANOX = SNAPSHOT_PATH_PREFIX + "nanox/"; - test("Transfer nanos eip1559", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanos); @@ -36,52 +33,52 @@ test("Transfer nanos eip1559", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -95,6 +92,7 @@ test("Transfer nanos eip1559", async () => { test("Transfer nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanox); @@ -111,38 +109,38 @@ test("Transfer nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); diff --git a/tests/src/generic.js b/tests/src/generic.js index 2fdcd2b..dff7566 100644 --- a/tests/src/generic.js +++ b/tests/src/generic.js @@ -1,3 +1,5 @@ +import fs from "fs"; + const sim_options_nanos = { model: "nanos", logging: true, @@ -26,6 +28,17 @@ const NANOX_CLONE_ELF_PATH = Resolve("elfs/ethereum_classic_nanox.elf"); const TIMEOUT = 1000000; +const getTmpPath = (testName) => { + let date = new Date(); + let tmpPath = `snapshots/tmp/${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}@${testName}/`; + fs.mkdir(tmpPath, { recursive:true }, (err) => { + if(err) { + console.log("couldn't create tmp folder at path: " + tmpPath) + } + }); + return tmpPath; +} + module.exports = { NANOS_ELF_PATH, NANOX_ELF_PATH, @@ -36,4 +49,5 @@ module.exports = { sim_options_nanos, sim_options_nanox, TIMEOUT, + getTmpPath, } \ No newline at end of file diff --git a/tests/src/send.test.js b/tests/src/send.test.js index 7deb7c7..1ba03de 100644 --- a/tests/src/send.test.js +++ b/tests/src/send.test.js @@ -6,20 +6,17 @@ import Zemu from "@zondax/zemu"; import { TransportStatusError } from "@ledgerhq/errors"; import { expect } from "../jest"; -const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT} = require("generic.js"); +const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/send/"; -const SNAPSHOT_PATH_PREFIX = "snapshots/tmp/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -const SNAPSHOT_PATH_NANOS = SNAPSHOT_PATH_PREFIX + "nanos/"; -const SNAPSHOT_PATH_NANOX = SNAPSHOT_PATH_PREFIX + "nanox/"; - test("Transfer Ether on Ethereum app nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanos); @@ -35,66 +32,66 @@ test("Transfer Ether on Ethereum app nanos", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount 1/3 filename = "amount_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_1).toEqual(expected_amount_1); + expect(amount_1).toMatchSnapshot(expected_amount_1); // Amount 2/3 filename = "amount_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_2).toEqual(expected_amount_2); + expect(amount_2).toMatchSnapshot(expected_amount_2); // Amount 3/3 filename = "amount_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_3).toEqual(expected_amount_3); + expect(amount_3).toMatchSnapshot(expected_amount_3); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -109,6 +106,7 @@ test("Transfer Ether on Ethereum app nanos", async () => { test("Transfer on network 5234 on Ethereum nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanos); @@ -124,73 +122,73 @@ test("Transfer on network 5234 on Ethereum nanos", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount 1/3 filename = "amount_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_1).toEqual(expected_amount_1); + expect(amount_1).toMatchSnapshot(expected_amount_1); // Amount 2/3 filename = "amount_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_2).toEqual(expected_amount_2); + expect(amount_2).toMatchSnapshot(expected_amount_2); // Amount 3/3 filename = "amount_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_3).toEqual(expected_amount_3); + expect(amount_3).toMatchSnapshot(expected_amount_3); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Network filename = "network.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const network = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const network = Zemu.LoadPng2RGB(tmpPath + filename); const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(network).toEqual(expected_network); + expect(network).toMatchSnapshot(expected_network); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -205,6 +203,7 @@ test("Transfer on network 5234 on Ethereum nanos", async () => { test("Transfer Ether on Ethereum nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanox); @@ -219,38 +218,38 @@ test("Transfer Ether on Ethereum nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -266,6 +265,7 @@ test("Transfer Ether on Ethereum nanox", async () => { test("Transfer on network 5234 on Ethereum nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanox); @@ -281,45 +281,45 @@ test("Transfer on network 5234 on Ethereum nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Network filename = "network.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const network = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const network = Zemu.LoadPng2RGB(tmpPath + filename); const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(network).toEqual(expected_network); + expect(network).toMatchSnapshot(expected_network); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); diff --git a/tests/src/send_bsc.test.js b/tests/src/send_bsc.test.js index 028f6cb..8339b69 100644 --- a/tests/src/send_bsc.test.js +++ b/tests/src/send_bsc.test.js @@ -6,21 +6,18 @@ import Zemu from "@zondax/zemu"; import { TransportStatusError } from "@ledgerhq/errors"; import { expect } from "../jest"; -const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT} = require("generic.js"); +const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/send_bsc/"; -const SNAPSHOT_PATH_PREFIX = "snapshots/tmp/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -const SNAPSHOT_PATH_NANOS = SNAPSHOT_PATH_PREFIX + "nanos/"; -const SNAPSHOT_PATH_NANOX = SNAPSHOT_PATH_PREFIX + "nanox/"; - test("Transfer bsc nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanos); @@ -36,73 +33,73 @@ test("Transfer bsc nanos", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount 1/3 filename = "amount_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_1).toEqual(expected_amount_1); + expect(amount_1).toMatchSnapshot(expected_amount_1); // Amount 2/3 filename = "amount_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_2).toEqual(expected_amount_2); + expect(amount_2).toMatchSnapshot(expected_amount_2); // Amount 3/3 filename = "amount_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_3).toEqual(expected_amount_3); + expect(amount_3).toMatchSnapshot(expected_amount_3); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Network name filename = "network.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const chainid = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const chainid = Zemu.LoadPng2RGB(tmpPath + filename); const expected_chainid = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(chainid).toEqual(expected_chainid); + expect(chainid).toMatchSnapshot(expected_chainid); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); @@ -118,6 +115,7 @@ test("Transfer bsc nanos", async () => { test("Transfer bsc nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanox); @@ -132,45 +130,45 @@ test("Transfer bsc nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Network name filename = "network.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const chainid = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const chainid = Zemu.LoadPng2RGB(tmpPath + filename); const expected_chainid = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(chainid).toEqual(expected_chainid); + expect(chainid).toMatchSnapshot(expected_chainid); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); diff --git a/tests/src/send_etc.test.js b/tests/src/send_etc.test.js index 39da31c..0407144 100644 --- a/tests/src/send_etc.test.js +++ b/tests/src/send_etc.test.js @@ -6,20 +6,18 @@ import Zemu from "@zondax/zemu"; import { TransportStatusError } from "@ledgerhq/errors"; import { expect } from "../jest"; -const {NANOS_ETH_LIB, NANOX_ETH_LIB, NANOS_CLONE_ELF_PATH, NANOX_CLONE_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT} = require("generic.js"); +const {NANOS_ETH_LIB, NANOX_ETH_LIB, NANOS_CLONE_ELF_PATH, NANOX_CLONE_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/send_etc/"; -const SNAPSHOT_PATH_PREFIX = "snapshots/tmp/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -const SNAPSHOT_PATH_NANOS = SNAPSHOT_PATH_PREFIX + "nanos/"; -const SNAPSHOT_PATH_NANOX = SNAPSHOT_PATH_PREFIX + "nanox/"; test("Transfer on Ethereum clone app nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_CLONE_ELF_PATH, NANOS_ETH_LIB); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanos); @@ -35,66 +33,66 @@ test("Transfer on Ethereum clone app nanos", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOS + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount 1/3 filename = "amount_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_1).toEqual(expected_amount_1); + expect(amount_1).toMatchSnapshot(expected_amount_1); // Amount 2/3 filename = "amount_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_2).toEqual(expected_amount_2); + expect(amount_2).toMatchSnapshot(expected_amount_2); // Amount 3/3 filename = "amount_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const amount_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const amount_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(amount_3).toEqual(expected_amount_3); + expect(amount_3).toMatchSnapshot(expected_amount_3); // Address 1/3 filename = "address_1.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_1 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_1).toEqual(expected_address_1); + expect(address_1).toMatchSnapshot(expected_address_1); // Address 2/3 filename = "address_2.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_2 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_2).toEqual(expected_address_2); + expect(address_2).toMatchSnapshot(expected_address_2); // Address 3/3 filename = "address_3.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const address_3 = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(address_3).toEqual(expected_address_3); + expect(address_3).toMatchSnapshot(expected_address_3); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOS + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOS + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); await expect(tx).resolves.toEqual( @@ -129,6 +127,7 @@ test("Transfer on network 5234 on Ethereum clone nanos", async () => { test("Transfer on Ethereum clone nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB); + let tmpPath = getTmpPath(expect.getState().currentTestName); try { await sim.start(sim_options_nanox); @@ -143,38 +142,38 @@ test("Transfer on Ethereum clone nanox", async () => { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); // Review tx filename = "review.png"; - await sim.snapshot(SNAPSHOT_PATH_NANOX + filename); - const review = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(review).toEqual(expected_review); + expect(review).toMatchSnapshot(expected_review); // Amount filename = "amount.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const amount = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(amount).toEqual(expected_amount); + expect(amount).toMatchSnapshot(expected_amount); // Address filename = "address.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const address = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(address).toEqual(expected_address); + expect(address).toMatchSnapshot(expected_address); // Max Fees filename = "fees.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const fees = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(fees).toEqual(expected_fees); + expect(fees).toMatchSnapshot(expected_fees); // Accept filename = "accept.png"; - await sim.clickRight(SNAPSHOT_PATH_NANOX + filename); - const accept = Zemu.LoadPng2RGB(SNAPSHOT_PATH_NANOX + filename); + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); - expect(accept).toEqual(expected_accept); + expect(accept).toMatchSnapshot(expected_accept); await sim.clickBoth(); From 45108ba9d807c162be0cf9754df9f7d5ec34208f Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Thu, 26 Aug 2021 15:37:43 +0200 Subject: [PATCH 11/33] Fail early when a test doesn't succeed --- tests/jest.config.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/jest.config.js b/tests/jest.config.js index c1ba411..af09403 100644 --- a/tests/jest.config.js +++ b/tests/jest.config.js @@ -31,5 +31,9 @@ module.exports = { "**/?(*.)+(ispec|test).[tj]s?(x)", ], - setupFilesAfterEnv: ['/setupTests.js'] + // Path of the file where tests can be """decorated""" + setupFilesAfterEnv: ['/setupTests.js'], + + // Stop immediatly when a test fail + bail: true, }; From 6e9e83b9818b35384f65edefdc8ae871c618714f Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Thu, 26 Aug 2021 15:49:41 +0200 Subject: [PATCH 12/33] Add instructions for tests --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index be33471..89033b4 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,15 @@ Testing is done via the open-source framework [zemu](https://github.com/Zondax/z ## Running tests First [install yarn](https://classic.yarnpkg.com/en/docs/install/#debian-stable). +Open `tests/build_local_test_elfs.sh` and add your BOLOS SDKs path to `NANOS_SDK` and `NANOX_SDK`. +This helper script will build the applications required by the test suite and move them at the right place. +``` +cd test +./build_local_test_elfs.sh +``` Then you can install the project by simply running: ``` +cd .. make test ``` This will run `make install_tests` and `make run_tests` From 1fbbc33cc0daa4821591eae7758aaaf493ddbe3a Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 11:51:27 +0200 Subject: [PATCH 13/33] Fix offest calc in 1191 --- src_common/ethUtils.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index 4a5c98b..aedcff1 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -184,6 +184,7 @@ void getEthAddressStringFromBinary(uint8_t *address, u64_to_string(chain_config->chainId, (char *) locals_union.tmp, sizeof(locals_union.tmp)); offset = strnlen((char *) locals_union.tmp, sizeof(locals_union.tmp)); strlcat((char *) locals_union.tmp + offset, "0x", sizeof(locals_union.tmp) - offset); + offset = strnlen((char *) locals_union.tmp, sizeof(locals_union.tmp)); } for (i = 0; i < 20; i++) { uint8_t digit = address[i]; From 89eba39c637ea7fb78059fcd86dc62f388889b7a Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 12:13:47 +0200 Subject: [PATCH 14/33] Remove some warnings when using Eth app as lib --- src/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index 48a91d7..e9203f2 100644 --- a/src/main.c +++ b/src/main.c @@ -876,22 +876,22 @@ __attribute__((section(".boot"))) int main(int arg0) { PRINTF("Hello from Eth-clone\n"); check_api_level(CX_COMPAT_APILEVEL); // delegate to Ethereum app/lib - libcall_params[0] = "Ethereum"; + libcall_params[0] = (unsigned int) "Ethereum"; libcall_params[1] = 0x100; libcall_params[2] = RUN_APPLICATION; - libcall_params[3] = &local_chainConfig; + libcall_params[3] = (unsigned int) &local_chainConfig; libcall_params[4] = 0; if (arg0) { // call as a library libcall_params[2] = ((unsigned int *) arg0)[1]; libcall_params[4] = ((unsigned int *) arg0)[3]; // library arguments - os_lib_call(&libcall_params); + os_lib_call((unsigned int *) &libcall_params); ((unsigned int *) arg0)[0] = libcall_params[1]; os_lib_end(); } else { // launch coin application libcall_params[1] = 0x100; // use the Init call, as we won't exit - os_lib_call(&libcall_params); + os_lib_call((unsigned int *) &libcall_params); } } FINALLY { From f2ff74176715a87c7d3c2d829da018c2f6b5465a Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 14:47:59 +0200 Subject: [PATCH 15/33] Increase size of V --- src_common/ethUstream.h | 2 +- src_common/network.c | 12 +- src_features/signTx/cmd_signTx.c | 2 +- src_features/signTx/logic_signTx.c | 6 + src_features/signTx/ui_flow_signTx.c | 1 + tests/snapshots/chainid/nanos/accept.png | Bin 0 -> 582 bytes tests/snapshots/chainid/nanos/address_1.png | Bin 0 -> 809 bytes tests/snapshots/chainid/nanos/address_2.png | Bin 0 -> 837 bytes tests/snapshots/chainid/nanos/address_3.png | Bin 0 -> 567 bytes tests/snapshots/chainid/nanos/amount_1.png | Bin 0 -> 474 bytes tests/snapshots/chainid/nanos/amount_2.png | Bin 0 -> 759 bytes tests/snapshots/chainid/nanos/amount_3.png | Bin 0 -> 479 bytes tests/snapshots/chainid/nanos/fees.png | Bin 0 -> 561 bytes tests/snapshots/chainid/nanos/network.png | Bin 0 -> 628 bytes tests/snapshots/chainid/nanos/palm.png | Bin 0 -> 572 bytes tests/snapshots/chainid/nanos/review.png | Bin 0 -> 541 bytes tests/snapshots/chainid/nanox/accept.png | Bin 0 -> 674 bytes tests/snapshots/chainid/nanox/address.png | Bin 0 -> 1298 bytes tests/snapshots/chainid/nanox/amount.png | Bin 0 -> 866 bytes tests/snapshots/chainid/nanox/fees.png | Bin 0 -> 692 bytes tests/snapshots/chainid/nanox/network.png | Bin 0 -> 739 bytes tests/snapshots/chainid/nanox/review.png | Bin 0 -> 636 bytes tests/src/chainid.test.js | 298 ++++++++++++++++++++ 23 files changed, 317 insertions(+), 4 deletions(-) create mode 100644 tests/snapshots/chainid/nanos/accept.png create mode 100644 tests/snapshots/chainid/nanos/address_1.png create mode 100644 tests/snapshots/chainid/nanos/address_2.png create mode 100644 tests/snapshots/chainid/nanos/address_3.png create mode 100644 tests/snapshots/chainid/nanos/amount_1.png create mode 100644 tests/snapshots/chainid/nanos/amount_2.png create mode 100644 tests/snapshots/chainid/nanos/amount_3.png create mode 100644 tests/snapshots/chainid/nanos/fees.png create mode 100644 tests/snapshots/chainid/nanos/network.png create mode 100644 tests/snapshots/chainid/nanos/palm.png create mode 100644 tests/snapshots/chainid/nanos/review.png create mode 100644 tests/snapshots/chainid/nanox/accept.png create mode 100644 tests/snapshots/chainid/nanox/address.png create mode 100644 tests/snapshots/chainid/nanox/amount.png create mode 100644 tests/snapshots/chainid/nanox/fees.png create mode 100644 tests/snapshots/chainid/nanox/network.png create mode 100644 tests/snapshots/chainid/nanox/review.png create mode 100644 tests/src/chainid.test.js diff --git a/src_common/ethUstream.h b/src_common/ethUstream.h index 01b9f37..e73cc95 100644 --- a/src_common/ethUstream.h +++ b/src_common/ethUstream.h @@ -126,7 +126,7 @@ typedef struct txContent_t { txInt256_t chainID; uint8_t destination[ADDRESS_LENGTH]; uint8_t destinationLength; - uint8_t v[4]; + uint8_t v[8]; uint8_t vLength; bool dataPresent; } txContent_t; diff --git a/src_common/network.c b/src_common/network.c index 9c85618..23872ea 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -20,10 +20,11 @@ const network_info_t NETWORK_MAPPING[] = { {.chain_id = 137, .name = "Polygon", .ticker = "MATIC "}, {.chain_id = 250, .name = "Fantom", .ticker = "FTM "}, {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}, - {.chain_id = 11297108099, .name = "Palm Network", .ticker = "PALM "}}; + {.chain_id = 11297108109, .name = "Palm Network", .ticker = "PALM "}}; uint64_t get_chain_id(void) { uint64_t chain_id = 0; + char tmp[16] = {0}; switch (txContext.txType) { case LEGACY: @@ -38,17 +39,24 @@ uint64_t get_chain_id(void) { PRINTF("Txtype `%d` not supported while generating chainID\n", txContext.txType); break; } - PRINTF("ChainID: %d\n", chain_id); + u64_to_string(chain_id, tmp, sizeof(tmp)); + PRINTF("\n\nTMP: %s\n", tmp); return chain_id; } network_info_t *get_network(void) { uint64_t chain_id = get_chain_id(); + char tmp1[16]; + char tmp2[16]; for (uint8_t i = 0; i < sizeof(NETWORK_MAPPING) / sizeof(*NETWORK_MAPPING); i++) { + u64_to_string(NETWORK_MAPPING[i].chain_id, tmp1, sizeof(tmp1)); + u64_to_string(chain_id, tmp2, sizeof(tmp2)); + PRINTF("Comparing %s but wanted %s\n", tmp1, tmp2); if (NETWORK_MAPPING[i].chain_id == chain_id) { return (network_info_t *) PIC(&NETWORK_MAPPING[i]); } } + PRINTF("RETURNING NULL\n"); return NULL; } diff --git a/src_features/signTx/cmd_signTx.c b/src_features/signTx/cmd_signTx.c index 4e4fdbe..09c0f8c 100644 --- a/src_features/signTx/cmd_signTx.c +++ b/src_features/signTx/cmd_signTx.c @@ -59,7 +59,7 @@ void handleSign(uint8_t p1, } else { txContext.txType = LEGACY; } - PRINTF("TxType: %d\n", txContext.txType); + PRINTF("TxType: %x\n", txContext.txType); } else if (p1 != P1_MORE) { THROW(0x6B00); } diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 82f640a..8e291cc 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -267,6 +267,7 @@ void prepareNetworkDisplay() { } else { // Network name found, simply copy it. strlcpy(strings.common.network_name, name, sizeof(strings.common.network_name)); + PRINTF("COPIED\n"); } } @@ -452,9 +453,14 @@ void finalizeParsing(bool direct) { // Compute maximum fee prepareFeeDisplay(); + PRINTF("Fees displayed: %s\n", strings.common.maxFee); // Prepare chainID field prepareNetworkDisplay(); + PRINTF("Network bytes: %.*H\n", + sizeof(strings.common.network_name), + strings.common.network_name); + PRINTF("Network: %s\n", strings.common.network_name); bool no_consent; diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index b508ee5..7b47212 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -224,6 +224,7 @@ void ux_approve_tx(bool fromPlugin) { uint64_t chain_id = get_chain_id(); if (chainConfig->chainId == ETHEREUM_MAINNET_CHAINID && chain_id != chainConfig->chainId) { + PRINTF("ADDED GET CHAIN ID\n"); ux_approval_tx_flow[step++] = &ux_approval_network_step; } diff --git a/tests/snapshots/chainid/nanos/accept.png b/tests/snapshots/chainid/nanos/accept.png new file mode 100644 index 0000000000000000000000000000000000000000..3158ea690450f2b8c85c12004b002b02e7b02539 GIT binary patch literal 582 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfj3Yx;TbZFupw)IO&lagUi8i zu2=uq*Yz9Se)!g*VK4JBV-C&WKWoz`S-k14IyUoMm0IWFIu4EW+>4RtRSIvkw{qJ) z-k{BNYMKd;QTzYAL~p5OZSof#4llR(=qVMJ($*$Ab77)uTE-4V=fhVFPUOsN*u=_P zev*f``Ha_Lh0T`?P5_w@bmoG=iJGR?wG$oFmOfn9wp(f$o7BG*4~6I6nAJ9Y(#_4S zx*0Q4Cd`zYu+#gQ-puxsHA;+6txb81;;$K;SOc`)`Eb{n3mcS-P1XR-G*4O9=9zYy zWlA>hi9IogRX%T%Vw>52vEj_tR;Wnvk2E8bnCKl>8qOS+%J|{VJNeAR_7fKhJRN>6 zWt_R(#K%Y*B*bf?@cHzid?OPZ*R-q|Qfe~~OJ_JdGiQ7n#BAiBxx@R}2R5LKwiNib zwJkq!XF{bkuSv~rHmSN0W~1w3?WueMPz z$jMOtJF#s}Y?8nbo644w2lP(7Qu7&Lh$$GG`0$>%lOd6E?`G%PjEacEho#sgfuXFQ zeWOb_8W?6gy!z_Ez}=wqxl_z;<{4*T7^Tcp+APW)4b*$#gTTy%593WQI2=|m1}X&# zr~*UES~!4j_tt_NTU!sW)0HX9eYhc;yFK9u$bQ|Tj}*;XgammwB9|D81-LZ`XFR^n$fF;SI`v$~Bw#9iRXBdhZ99sk z8`td4mwb9bhHPRif?hDQUYA`V<=)BC+XvR2WdHhQH%(=F&8$W! zMzihGN~OCp&ZyB>K|(3A9qk4;oWdE&K?p9d1`WGy=_LX@LX2!min2l=M2slbD{MUb5t%PAS0uT7^VLjsV|_GCBElca4UkexH1riZL?{w_s8D zhPh}VMWu?qg17w-P`Ca1BSD&uhCu^u-mehg4xN2^R41JPWs5RGq$;lUv|0~4VA#RtV2sDi0w4xX;L}5VF-pN5>w{FKA#Ksj z(n4Y$PT<%Aoev$v98_+>(id8Y3Br!Sz#gK4J6t=cyPQhMiQAOXUrtXmk-?m1hO!Wp) dMc)c+e?_|s$wq~xc@nMwFF&VHJ)V8j@(=l|VF&;K literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/address_2.png b/tests/snapshots/chainid/nanos/address_2.png new file mode 100644 index 0000000000000000000000000000000000000000..93c90c542343a4423166f143ee5f43f335c73b96 GIT binary patch literal 837 zcmXAo4M-DV7{_;A%@R)~MB5oQ6F(yHVLVt$ZA=)^QU zBa$mqOLSqW0}B(ikSSa-LTA~M^?~9*LQSM{U?0zWaUbu!FYohz{?G4uuQ5L_n+PNW zB@zjt%~2P?XoE+-Qws0-{S~ni2_B?XXBJwqm5I{@W!f;+L`=i;zdOFE7GI3q(@a%%ggCfQn@u^+iip^<%vKAXE_sg2^OTwK8cYgpA)QlwvHdYYcoX z2bgK!RAU5Mt$@`d>q?fj?;F7Qi1_QVD(7qn&>7r*=L5+dHSVGAOCb#lr3w}pAa_-p zlo_~48)j3Oa(4=Ih)@|!9sq;O08x*=RR=>ZP7Ur#7=~;jQXTRs>{ZCq#E)j6REz_9 zh=eA{H+q2|PIY6bIx&VnoGuofiBqpCec?p6Uhv)k^ddd4^G&t%9 zY-k2o(470o9Kb|1c*OH30!6??u5JhP6bM<+K|&{NI5fW_YOc}VaBX4v;R9>6F}@>e b9;QD-q}la_C0C<6;P;SdHF@d*Woi9CJYZeG literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/address_3.png b/tests/snapshots/chainid/nanos/address_3.png new file mode 100644 index 0000000000000000000000000000000000000000..402c20d84b73864383ebc9f5a2cc87b175f5db3a GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfjh}ba4!+V0?Qpu$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGRf=9re@@GMm9+yX{PDZj-Jy`?7n3}800mQ0zj@S#rFxit?V zY9vzH*g&X^m)&T0TkK)KXTe7HH&5L>$-{f%jTA&~p9|0|Hc6=omCG4t=4akG$zuex zjEj5ywT3f(ZEfB_i$K!nlAiKNExR6J$vksm;;;I!xRs1EnSr`~8c9mA&1`Oi>s-l} z!Uq&t$T%}xFkqgkf^qF4#+mzpxPBeu%yjPaQWIwCxwW;WGo5l~HoDwus_=QkhYJm7 zN(zlkY;E4uAX2Cbdh_u!?T;G+*9 literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/amount_2.png b/tests/snapshots/chainid/nanos/amount_2.png new file mode 100644 index 0000000000000000000000000000000000000000..11ae75e8391d69f363be24e20c136f0ee32b13d0 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfi@&ba4!+V0?Qp&`&v1#O2^* z)#v}j=g8l@cDdkcYoY6pnS>%$F{b` zI|@>Gt&L20W?nQ%abpIlU7F~gmKh->HuL_gLl;l>u%%3EyV!6h!{M18P*ySp$N;L7 zzqH{5k0j70KI!{w8E3k-waKq!oC#Fd$75t7bF@`C)bY?cP=5SXJ5Ka6+Wjt_GC6%9`D!IrY`NDl40?;i1&oe%^$OQc$deoVw}03 zQ{y~P)v7kvXQ8~^XMn+A4Ww2}O}GiP)$MTKnG6sG-b{T(V_>|+T?K~mnM)fkf6z1XW;Sw81BOR1&|&@D?$YFcvsLlQ$7&?QRF zAYZnfnGM9i5S+g#@x&fi2TR*Ey_cPDTi9+vP`{bucKb|_So<*tn4lRvUHx3vIVCg! E0D4U}bN~PV literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/amount_3.png b/tests/snapshots/chainid/nanos/amount_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e0420108494b969f9c050ba46e44f5c255fa1f1b GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcCjba4!+V0?Qpu2D;LWW?VAh6@j^#SRf&uFm zFwXq%#B9{w=J;$fTS|sRN*i0sz0}8CQWF+FG?Loq!X}xLVUg+ZOre>_$Ry@yvv#({ z#D$3yB&FD9E@T8D=fj<67CyXCFk$Cv_HcD$6NTao2`Qlbgr7n{X`pTgkimXZd`A1P z6ifi~WzFubWt`c}!~0(r$Oo#noaorrwz{H#mG^YD%?_rS3lo2q%k2qfHc~e-QTUu{ zWWr;l&bxo2L{A6 zpc$$Q&a7aZ=`S^5=FwwDTiG{fTAa{P0E+>AleTGN&Gm*eIc8!R4ry-uX+WpU0lIOs tK)|%jT%F+C5zDr1^vO-0c?+mDU$Ss>;+dSqdccTd@O1TaS?83{1OS_=#2f$s literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/fees.png b/tests/snapshots/chainid/nanos/fees.png new file mode 100644 index 0000000000000000000000000000000000000000..8b996b58a1ec0043e05a39e52d99ce49521f5116 GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfjh`ba4!+V0?S<_9P{D2Iqr| z`M&&@U&B6g#fK@G39{B^n`3qv9lc+r*7-Ezit)LUYsQ{B#}yaM+3K2ZJNZZvkF(KjQp%**X8vFMuy3Y$pJn*fOlp&zxsVZr@-t_oENk;j%b1Z8clX%t z2@4am9Mas`Bva&;F-ih;PH=qI#$)vU!4dV$9o}tij?bn`m8G<`?Us6%P@Cp96s={P z`Lx+Yp*Z((6tmIk_K6E0-a59FEoBPfj{eKPE=hD0RpVDNPHb6Mw<&;$TB@9Js* literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/network.png b/tests/snapshots/chainid/nanos/network.png new file mode 100644 index 0000000000000000000000000000000000000000..3242d61090a1ac9a33010ab74a3f5d7a8a151067 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfdtrx;TbZFupw)nD;nL#O2`S zma6~U@A~^b2*l5rCZjTQqwSIi)qmHlJ!9g!tB%ioSEb&0`n5p7yIYHP-}8L*Ny_Zr zOWEnul@`djG8Sdf?*0V0!slcduxHJrJ$;lzc8GZ_wTY$;%38e57Rvyt;NM`k1UO@%H-CN@_c4sXwPc$Sej zr}s?%goTVVm2X;TNlN__mz0_i3Dop#`iTn#D&~DYZEcFqhbKt#cAwd=1Y}q$Gd^9+ zmZGN)w8dRo-c+I3Qc_aN?pDQm#+j!*PhR+N@7QdRw7T=**}djQCNX~N7-yPGzdw1Q zz;Y#9%01x#yDW!i-X=OgpLL(fkT6=Dc%r9G(O9bO%yOv-KSP*-0`6&wnx$k=m_VwHrHp?oEp=oZ!N6Ml%76) d8-l85EV2@kIJCgK1elr_JYD@<);T3K0RUBB1SbFh literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanos/palm.png b/tests/snapshots/chainid/nanos/palm.png new file mode 100644 index 0000000000000000000000000000000000000000..297527f5e3668ea0dfd55c0cb0a77c151ce46060 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcKDx;TbZFupw)nWyZ@;C%3S zOT~ZY&&|OaJ;JwmcH~AB=?XrokM(#|qVuY$RSd+CVLG))H>yOj^Rgk&x{`x016Zc4 z&2V_;#%z>-wc(5y@3v(R=bO%%C!N#F!#h7~L1SC!;Z==nQh6qKGG<6+EO_X~%xhwk zabps9^`(Y0s}fb6nT>*(jZ74Pw28vzEQd58npAnA;mkCiZ60lH%cU|ZcCw{xdv@sF zi9M}6yeD!_Cag}$_#q}KH6ijOP+9+p3ma6$xB0ZSc>+;dR>aAgP9EOLXXH3FzDrH8 zeCxq%^qmdN>fz!2&UPInHid`xI-5L*HHU{+o=rX_!{TiWvynX8br36r+2}gkcc2}i zye1bM4o^4v<8ipTZF_b_CtJ!p-gy&$mKvQfW}LV) zm52AlpJ_b2>@)W(0ade0N=>L#7k{_%p*K+Izf)VA1-(C=WRZ-BymEd z+ycg#=gr>vKI=O3DZ$93W?LaYQ1QY>pxO%?Y&v*&<#TnOD>)zbXF6qTB9pT3N&!&M z3dWi9&EBnj=ymuLi`0al9u7OFx80vqnaz8`W+_{Wop8XrwTVif&jYR3;ytm)i1F!7 zQ=gO!i4>qCfqpe|KCDm-Wb*LtR{=T`$TJ28kKEHk+7p0Y?mPqLwy~wK0ofM}OcabW z9iDmf0+pZOF#@XZFL)Sha%TzS%!Lnq%!RyR`IX+l PXlL+r^>bP0l+XkKp5EPW literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/accept.png b/tests/snapshots/chainid/nanox/accept.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cb8f9dc97401fd76908866c585e2855970e054 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|`Dhba4!+V0?R!F;Cf*f#Kl2 zz`9HS>x1^Ee)QO$Vfbu^0!v}qD!w`k`M$>q(WeXTJ`~u@;XhuuVeMlEKe= zblsz=UEx}KqN4T7AKeXEai{i!%Tgzxia)bM_ATa`n%*oPvTsvYch@PPsOZ%25IgUu zb64ysVo=Xt1~b`u>dHrcsjGGb&(xZ?G6v}P_fHu7w#{EPBV^y~gWI+M5wpe3X{I-( znE_FRgX_`ywTm8U1B3SWgYMNkf_H|j2#E>N13ADC7-B&0K=|*IJ{(=SVug=rxv188 zEw!of3l|juJplBIck8LmK(EQxd^j3f6LvH`)JIEndRKht$2_|qhkz$*-qD4tTGeO+0_=QHHdzz8l2yrP6@|$#y XzklTVrji}Nw8!A->gTe~DWM4f-qkj) literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/address.png b/tests/snapshots/chainid/nanox/address.png new file mode 100644 index 0000000000000000000000000000000000000000..4228ae193adbfaa0a04cbc0fd31351cfaa89582b GIT binary patch literal 1298 zcmY*Ze@t6d6s}XiJYkra=ZX#6AI>egH6v}4i8`XREKsc7YkObI5>`!<2LGv0vMF8X z0B2cjMWgj*U>4wES>G#73C)I(u`RefOy2&$NMd9VaV#})nIkl2quMdgZBb+M+TLI1 zp6`6$cizXGwXuSEj!~&p73QV}JN);+_w^@B;rE9hySr7YCzi|&^|<4>J@2q{=p8P3b-rM=>x0T;ip1ToRoNRq}&t^xiGB zVo12&E4E1Gtd&!UqEeP_jHctGS(KVp!z2NLRmddcjV5^{ zols-<+?+aJjCky}L4Ule@jclvH0e@7EHUCw?KuFn_%B_D$0_Cd6d zCergsd{5#6F{78)NftJ$aFeiCN+f!t1qE3&9$1?Ib@m+!^i~SjhS|P6>>uTEK&z;MQ57jk?bHK61k%i7J-cMusPGtNou?gM9&xy5RY|I63So*X$~pRvnUAqj2bh4 zoJQEGi7;d_XqQ@ic~0m&*^b!7`AWpbA2%h~c$*=AHlQqT2C=d@=+*B8u zuAYjL4>KeP*FiP|-7kvP2dWg=x&WxETtiq$y9CODSPs~!KA4VxuyyC8i_Y?vkiu;* zN0mAhED%Qn=%6iiNbrbiyj21wz#9gTc>%QeStk2|`9p7v6-^ffR?@Hz{DG0VK?Gu5 zqu$v36mYyhuEs%4YxE7BsQv!e=hm}R#kM&XFtHGRSAu87p_69Q+Ok;ZXNrLu+I1pR0cJ4C zv1~P5|LRP3t>AhvnFwg1o0rJrg}&61M#>We^nkBk{t6oMSip~Hlj)>Wq*(@c!`)AH m+&AN~#eOH!)< literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/amount.png b/tests/snapshots/chainid/nanox/amount.png new file mode 100644 index 0000000000000000000000000000000000000000..a5592a6c410c0198aaf506d1610c176183154cd3 GIT binary patch literal 866 zcmZuwT}V@57(Qlb9Mb6G6t=PpqtUktCWNk)wxeTC*M82vG5VomH6lFywCG~?PjAc zhulIE1d*e!C}-e%6`n)uvf%ytO-l)(=(qWT zwYjZdL%)ot+V85qCsyW*bHh)zE*DLxW@kQZeK8g8%pChVez8fqT_eY8OpW)4vzzUSb1Ps?|mxjW5v%qb!cqI|Ds+0() z{KzEm4|+~Yp+QD@?`J;~nhcZNr#X7S(R7$XcKHU3!fzQq`H@&?W}@Dt8fapr|F~^E zia-^cQZP_Xf7#HRXu>c2GVL;#^38!%eqyy|S;Cc~WnVZWtr+{_7|K|?$n{E>u#+JIE>2?dB zJOUi-(D@`#lZbR7JcRJGR~;<|Xq%EjnIQYYZypDshfqlw1bgvyl3N7lHWpnOW_d@z zoFX}Y92_hFbcCl90f*27Q-D2Bm)tPC&^$_Vea1w924<<7vOXUp34z>|X(3vw(&I~l zc>kt6Vjq^|@Flmw(v+@VwpjP2w9_4JX~@W(%&|valG9NrSPa?IN)SCO`}|oAI6@(X wDz*}&o%`f6_65M^77>0!c(W-`N60a zqGcCUxYQ_gP6$vkKD2OY(W)ImGqu)*#9e&AyJE!(AJNID+(Ybw0}EHp2nku%wK6Fv z5F{NEceU3%;G^W!t}f4~>sJ7c77Z6&-gQ32M{E6yW8J|kEmnri(Ndeb^3nbUMWKa3 zmCJ$(R|Qm>Hp?%1bbrMRph@e4e)gQY9~fAfYF=jnG$vhCer3Q9!1jY5I`(h3GMfuRzjHZ}MtP}{;!vTV06<<)Ekx*$B{ zkBO*OIMDayJ3pQc`KJjqIXrOTC$P41iJbkut*16~O$|4>QP<5ib^fzs>_98{Mb)R? z_gtC;w0?z;7Emvky%OlWaG=copu(V^>qA%AST|UUi)!8ey)s~@R7}W; zZawww9xxV~<3qHzeGgk$Bo(tFBB@mL^r}i)x+cdvI>snuFW6P#xJb{8jUD Vl`wj@6POwqJYD@<);T3K0RX#&PzV43 literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/network.png b/tests/snapshots/chainid/nanox/network.png new file mode 100644 index 0000000000000000000000000000000000000000..04c32e9264ac6e02c00afd8d14d0f69b70061242 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|?G1>Eakt!T9!IV{WoJ6T?Np zg?`KaPg*86ms6*a|KPdQiAS`%Yu+Ez@8{osyEj>X`*C)=J9aj9ck;~pYVS0#%ggn% zZ|8?d@;7%MXYX4J6g|F;?f5kydbejsmuu>(86k0=N0)pG=D8Q+di3K?YkQB@Q|Vgk zLbRrJX-{356f{#y4M+t>YJ~t9tGhg(PUXGlaCFHcqtF#PT3TAcM>ltQf=pS~wYuwk z$RCkrd8gD>J61(#Y5iN*we-=dN5-PzT3Yi1D@)7ob)5QG&1TdHq~dG9rx3JDC{xWY$NbiXsmz`F3G+PfL~`*L~v)*_?3Khs1fp9(#?WK)Qa zmiN&`Q0miEuBq!oR_Fk23qHE2DAaIeOsJ36{g>y=R|Txx0m4B*Kd4Pz>XZs&JdHdW zzw$>9&^bWCRRJ@#LY8q&?Rsza!wu-(pOdvh_605c6d(9A_}!kFK##9V3fj3U;HOvX zscm{BO$f1mPKMubcQMpfX- z86o?C#&4GX@BpZ)!d_G>yt$ie>SNoLAu+slD+4U=&GtHK^uu-Oql$b{tbP0l+XkKx=1&c literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/review.png b/tests/snapshots/chainid/nanox/review.png new file mode 100644 index 0000000000000000000000000000000000000000..4a982c5f30db04ecad96fda38069dd2fd8f96992 GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|@3gba4!+V0?S7Zd@yx<8LGD|NL^HOwMbIhRMr6+gQ$n z$QbOfoPT3l5rg{eO>DO>VIn!5Rge5qUD*pZP3XEG70O~b+m^~6IH{zir*(hjjumT?HZ15`uN79ppw7MWhwRj;G6zmJ zX}t>p31G2LNNZm)gL*#D!l%o%LhK@2Pu*plvu7pO)Rj)DzqfKt&HQjsOG`^nG(I#& z>m8U?E?O@7-eGByRLu%5(W#zGlU4=%T;=4N8nkjp$cm5{t&n?;t*5>`I2-DtRW52D z`Y}^06p>c3F!~oyse=C}`u~=Lfl0?EtEOln)H`V4z<_C!bpSXi?Gf qAj6e=CNo>yoMw7sni(PVjlVP7(D7f?IZe literal 0 HcmV?d00001 diff --git a/tests/src/chainid.test.js b/tests/src/chainid.test.js new file mode 100644 index 0000000..ab7c972 --- /dev/null +++ b/tests/src/chainid.test.js @@ -0,0 +1,298 @@ +import "core-js/stable"; +import "regenerator-runtime/runtime"; +import Eth from "@ledgerhq/hw-app-eth"; +import { byContractAddress } from "@ledgerhq/hw-app-eth/erc20"; +import Zemu from "@zondax/zemu"; +import { TransportStatusError } from "@ledgerhq/errors"; +import { expect } from "../jest"; + +const {NANOS_ELF_PATH, NANOX_ELF_PATH, sim_options_nanos, sim_options_nanox, TIMEOUT, getTmpPath} = require("generic.js"); + +const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/chainid/"; + +const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; +const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; + +test.skip("Transfer on network 112233445566 on Ethereum nanos", async () => { + jest.setTimeout(TIMEOUT); + const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); + + try { + await sim.start(sim_options_nanos); + + let transport = await sim.getTransport(); + let eth = new Eth(transport); + + // Send transaction + let tx = eth.signTransaction( + "44'/60'/0'/0/0", + "f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf6181880851a21a278be8080" + ) + let filename; + + await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); + // Review tx + filename = "review.png"; + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(review).toMatchSnapshot(expected_review); + + // Amount 1/3 + filename = "amount_1.png"; + await sim.clickRight(tmpPath + filename); + const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(amount_1).toMatchSnapshot(expected_amount_1); + + // Amount 2/3 + filename = "amount_2.png"; + await sim.clickRight(tmpPath + filename); + const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(amount_2).toMatchSnapshot(expected_amount_2); + + // Amount 3/3 + filename = "amount_3.png"; + await sim.clickRight(tmpPath + filename); + const amount_3 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(amount_3).toMatchSnapshot(expected_amount_3); + + // Address 1/3 + filename = "address_1.png"; + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(address_1).toMatchSnapshot(expected_address_1); + + // Address 2/3 + filename = "address_2.png"; + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(address_2).toMatchSnapshot(expected_address_2); + + // Address 3/3 + filename = "address_3.png"; + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(address_3).toMatchSnapshot(expected_address_3); + + // Network + filename = "network.png"; + await sim.clickRight(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott + const network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott + const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(network).toMatchSnapshot(expected_network); + + // Max Fees + filename = "fees.png"; + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(fees).toMatchSnapshot(expected_fees); + + // Accept + filename = "accept.png"; + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(accept).toMatchSnapshot(expected_accept); + + await sim.clickBoth(); + + await expect(tx).resolves.toEqual( + { + "r": "31fca443b3cad62f3ce18e287f3cf4892ac2669379cc21b5cf198561f0511d1e", + "s": "3cf21485cd8b86e1acddbcc641e16a3efad18aaeb5ae96a650f1a8b291078494", + "v": "344344f1a0", + } + ); + } finally { + await sim.close(); + } +}); + +test("Transfer on palm network on Ethereum nanos", async () => { + jest.setTimeout(TIMEOUT); + const sim = new Zemu(NANOS_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); + + try { + await sim.start(sim_options_nanos); + + let transport = await sim.getTransport(); + let eth = new Eth(transport); + + // Send transaction + let tx = eth.signTransaction( + "44'/60'/0'/0/0", + "f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf61818808502a15c308d8080" + ) + let filename; + + await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); + // Review tx + filename = "review.png"; + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(review).toMatchSnapshot(expected_review); + + // Amount 1/3 + filename = "amount_1.png"; + console.log("after5"); + await sim.clickRight(tmpPath + filename); + console.log("after6"); + const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); + console.log("after7"); + const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + console.log("after8"); + // expect(amount_1).toMatchSnapshot(expected_amount_1); + console.log("after9"); + + // Amount 2/3 + filename = "amount_2.png"; + console.log("after10"); + await sim.clickRight(tmpPath + filename); + console.log("after11"); + const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(amount_2).toMatchSnapshot(expected_amount_2); + + // Amount 3/3 + filename = "amount_3.png"; + await sim.clickRight(tmpPath + filename); + const amount_3 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(amount_3).toMatchSnapshot(expected_amount_3); + + // Address 1/3 + filename = "address_1.png"; + await sim.clickRight(tmpPath + filename); + const address_1 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(address_1).toMatchSnapshot(expected_address_1); + + // Address 2/3 + filename = "address_2.png"; + await sim.clickRight(tmpPath + filename); + const address_2 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(address_2).toMatchSnapshot(expected_address_2); + + // Address 3/3 + filename = "address_3.png"; + await sim.clickRight(tmpPath + filename); + const address_3 = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address_3 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(address_3).toMatchSnapshot(expected_address_3); + + // Network + filename = "palm.png"; + await sim.clickRight(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott + const network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott + const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(network).toMatchSnapshot(expected_network); + + // Max Fees + filename = "fees.png"; + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(fees).toMatchSnapshot(expected_fees); + + // Accept + filename = "accept.png"; + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); + expect(accept).toMatchSnapshot(expected_accept); + + await sim.clickBoth(); + + await expect(tx).resolves.toEqual( + { + "r": "f9b5d903c47c34027156e869bda5aa002233d6cca583ad53d125612fc0795f3b", + "s": "00da038129414e5ae6f7c1529c6067e82484e3694c84c16d575e77162f631c27", + "v": "0542b8613d", + } + ); + } finally { + await sim.close(); + } +}); + +test.skip("Transfer on network 112233445566 on Ethereum nanox", async () => { + jest.setTimeout(TIMEOUT); + const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); + + try { + await sim.start(sim_options_nanox); + + let transport = await sim.getTransport(); + let eth = new Eth(transport); + + // Send transaction + let tx = eth.signTransaction( + "44'/60'/0'/0/0", + "f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf6181880851a21a278be8080" + ) + let filename; + + await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); + // Review tx + filename = "review.png"; + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(review).toMatchSnapshot(expected_review); + + // Amount + filename = "amount.png"; + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(amount).toMatchSnapshot(expected_amount); + + // Address + filename = "address.png"; + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(address).toMatchSnapshot(expected_address); + + // Network + filename = "network.png"; + await sim.clickRight(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); // scott + const network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); // scott + const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(network).toMatchSnapshot(expected_network); + + // Max Fees + filename = "fees.png"; + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(fees).toMatchSnapshot(expected_fees); + + // Accept + filename = "accept.png"; + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(accept).toMatchSnapshot(expected_accept); + + await sim.clickBoth(); + + await expect(tx).resolves.toEqual( + Buffer.from([]) + ); + } finally { + await sim.close(); + } +}); \ No newline at end of file From c035023f8f8adc880a47b1da2c7424c2876b3825 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 16:38:28 +0200 Subject: [PATCH 16/33] Add console log when snapshots are not equal --- tests/setupTests.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/setupTests.js b/tests/setupTests.js index a97166b..cbd0230 100644 --- a/tests/setupTests.js +++ b/tests/setupTests.js @@ -8,14 +8,12 @@ expect.extend({ message: () => `snapshots are equal`, pass: true } - } - - // console.log(received.data.toString('hex')) - // console.log(original.data.toString('hex')) - - return { - message: () => `snapshots are not equal`, - pass: false + } else { + console.log("snapshots are not equal") + return { + message: () => `snapshots are not equal`, + pass: false + } } }, }); \ No newline at end of file From 6d3f6c325ed4d8f2e3e0e453a9fe0b2bedc71542 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 17:28:04 +0200 Subject: [PATCH 17/33] Update tests --- tests/build_local_test_elfs.sh | 4 +- tests/package.json | 2 +- .../snapshots/chainid/nanos/amount_1_palm.png | Bin 0 -> 507 bytes tests/snapshots/chainid/nanos/fees_palm.png | Bin 0 -> 594 bytes tests/snapshots/chainid/nanox/amount_palm.png | Bin 0 -> 897 bytes tests/snapshots/chainid/nanox/fees_palm.png | Bin 0 -> 721 bytes tests/snapshots/chainid/nanox/network.png | Bin 739 -> 737 bytes tests/snapshots/chainid/nanox/palm.png | Bin 0 -> 680 bytes tests/src/chainid.test.js | 112 ++- tests/yarn.lock | 731 +++++++++--------- 10 files changed, 469 insertions(+), 380 deletions(-) create mode 100644 tests/snapshots/chainid/nanos/amount_1_palm.png create mode 100644 tests/snapshots/chainid/nanos/fees_palm.png create mode 100644 tests/snapshots/chainid/nanox/amount_palm.png create mode 100644 tests/snapshots/chainid/nanox/fees_palm.png create mode 100644 tests/snapshots/chainid/nanox/palm.png diff --git a/tests/build_local_test_elfs.sh b/tests/build_local_test_elfs.sh index c7b4ca8..38777eb 100755 --- a/tests/build_local_test_elfs.sh +++ b/tests/build_local_test_elfs.sh @@ -1,8 +1,8 @@ #!/bin/bash # FILL THESE WITH YOUR OWN SDKs PATHS -NANOS_SDK="" -NANOX_SDK="" +NANOS_SDK=$TWO +NANOX_SDK=$X # list of apps required by tests that we want to build here appnames=("ethereum" "ethereum_classic") diff --git a/tests/package.json b/tests/package.json index 618e570..ffc9815 100644 --- a/tests/package.json +++ b/tests/package.json @@ -12,7 +12,7 @@ "license": "ISC", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.12.1", - "@ledgerhq/hw-app-eth": "^5.52.1", + "@ledgerhq/hw-app-eth": "^6.5.0", "@ledgerhq/hw-transport-http": "^4.74.2", "@ledgerhq/logs": "^5.50.0", "@zondax/zemu": "0.16.5", diff --git a/tests/snapshots/chainid/nanos/amount_1_palm.png b/tests/snapshots/chainid/nanos/amount_1_palm.png new file mode 100644 index 0000000000000000000000000000000000000000..d5afc7ad662f551293ff24593e53e3a2fdda44de GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfbnSba4!+V0?QpFz>MkgY!Xm z$36cWe;yPydF}S(hJ(PHHMuKSAKAZa;*k>FS8cs!cRiAJ@iC@e7Rv<*@p8wP94^sh zI%S>V@J!i6!Pw+Y%Dzm8wl>E!pg^eDJx69ElRdp{@|h0L7P6(38J$pYKD;}kGM$&* z$b`qp`7lri2yM=`m~hkdjZ~SD|H+z7Q_I!CViHmlB&8<&6r8z`Q8EQ+-fXs%x}}Ng z#wRW`oYB_V6UA&~Eh*)y&t7)fSGB^Qr(i@=f(we3k zPpn+^FgzvW#>qKnPlW;{F3W4DUvD_m2vQ=&m$J^uVWwVo;;t>NFE5EL^NyaOmkZ?7 aGi*J5#9i(GS`%QTGI+ZBxvXhBKg$UFwj|LxEyDqbo=rFLF$zAcVhp6-=RFKQ zalyb;VY6a0kCFf71|B16-V+MN?rbytH*8Yp?Lma>jhW4qLZ%2jQ=Gp%_~WdMocJRqDaAH(B_k+c9MdKNLvkiapBXTy>aQA{ w+|$)iWVNRC@mdKI;Vst0NQEvy8r+H literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/amount_palm.png b/tests/snapshots/chainid/nanox/amount_palm.png new file mode 100644 index 0000000000000000000000000000000000000000..14404aefaf0540b95d7cd99e2aa4af6d11b7b49c GIT binary patch literal 897 zcmZvbeMl2=7{|{njiH5qoRUiKH2i_!j5Jg-PffREZMWYg;d;RwQOr`QG?FxJQfFo{ zRu;aUZgQJiVJQkLGdRTy5)9XySxtwKt#E&o;?SOxpnp2J`@wV1eV_01d7itWQD=q9 zB4q?YgetQ$XgDk3-oHKwp5v~H3W5mCR%WE(vHah8X(p^6y+(v6jDz?wuX) zJx~-Bo)^c21rJUhj~*H7yF0yH6){q~R6D)*ovWBAJvRBX^j5_0h>_yQ-Ct+i%T4N6T?>rY8F)+zPzqNcr(LyxnVcz1RR2*V07ykUJtREf~72zct)Lo@Zs|(w}B=j qSbNyO{wJ|>|5oYa`0BPCT-xY88o7C9t4j^P7NN{kXFQ}%RQ&Eakt!T9zdV^*>`1H;9Q zAAFzvbDy<&hv1qA*Hzwb+H!E?mwUbOa`JiGrH{wu_4C*4sI92kaW_xq_YOvWI~zIv zJb8$u9GiGQzfAN_M*hBB-oCX!bhk24wEI-h#ub0UwdSqdv)lUk{S|MXoZ}Bz81!*w zm-f_^Nr5XPLh8bgPCXS=xYQ^#X62qm2c-i717~WfO+CM&X6d4&l`}#@mUXR63Id9) z3kiw4I@dhlqv+JGF3+d)SLld(9}PVk^l>VXCwjNCP)oGi>u8YSN*~ex>{C~Fxjvl< zQ@BJ)C!pwy23|PE4cMk$U-A9b23oYXr&G)h!%d5WjlV2&3*>h z!NMUcVnRb!)J(U&zXD`rh}u-HspSD6hc4rq`o7?~G|<{d{wqR!wAL?idK%e!N_)p= zrI2Y|^Vc~&y?XbjOY5of6#+YgRsyYE7xJ&g>*$hAAuD{eL?@qG1PmS>5F_;HqEG%n zU;mG4J+)c-!-GXmPb=(2wZfabxu!n0T^SO?TemX6^4@H(qeeemmp-b<7u7obzzN9k w2Psn55FVdQ&MBb@0MrgKEdT%j literal 0 HcmV?d00001 diff --git a/tests/snapshots/chainid/nanox/network.png b/tests/snapshots/chainid/nanox/network.png index 04c32e9264ac6e02c00afd8d14d0f69b70061242..f91355bb26c34e08aed93baf51cdb875bcd3a2f2 100644 GIT binary patch literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|?F|>Eakt!T9zdV^*>`1H;9Q zAAFzvbDy<&hv1qA$#b@O-!|F!RoP6GP>Em&E{rojMYAb4X+|85uy@Qe8&PI+u zPaYyE$0pv-FB83!k-smOw{I;F-TnDYOKj@Oq@bUET5410Cw+LPrPX)+-5&)}t@R-> zD?@Zd!?l8sE-?!A0aA-Lg{%ni(Fzxxe5%~6f?0HO*Qt<&n^vq?;Ujt;s2ga?Os#cV zaVvjlve~zs3MmZT7!vX)R@D1w=uvH;Ia=#i)RdRs>p1nXn$5oBl=0O2OM#kov?ia@ z)~a_+UG?J~TfRf;sue3DLY8%P-Cqc@bpPr{*1HkTg*Y1Q?j)cqLXR%l6r!W$4RRTn z`ZSYk>iLir5LZt<6|@n^>^>E~^K+|K2+(Oj95Rh-s%PrTfSE8xW!T4bt+>ES*Qb%K zr#5p<{eSoY_sTtsKGm-Z`03Mn%6ix5G@##BcX>Wt<@D58RBQgqh>&SruBi~}>FPT_ z8MQ*@g|3KM=_9Ju4GfS^`2mr@FkSk{D|OWlV2JFy^kDYtfXc9ipZr67L`8#-1{sC| z8SkH*GY5*Tae6vGXy>Yc$Pl3O?wy<~t`)Mc8Dji02=z}F=mn5Zw17Td6lA#a4^Yj# zyAAB(qFTp)uMF5J6%(>T=Dp|AM_C`dTTgww7os)opuU#q@#@t9k!<21#wws9o4}P8 p_ki-7r9V8laqYp4TU1B#{7b8U?!5c^88GQGc)I$ztaD0e0svLOZMgsd literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|?G1>Eakt!T9!IV{WoJ6T?Np zg?`KaPg*86ms6*a|KPdQiAS`%Yu+Ez@8{osyEj>X`*C)=J9aj9ck;~pYVS0#%ggn% zZ|8?d@;7%MXYX4J6g|F;?f5kydbejsmuu>(86k0=N0)pG=D8Q+di3K?YkQB@Q|Vgk zLbRrJX-{356f{#y4M+t>YJ~t9tGhg(PUXGlaCFHcqtF#PT3TAcM>ltQf=pS~wYuwk z$RCkrd8gD>J61(#Y5iN*we-=dN5-PzT3Yi1D@)7ob)5QG&1TdHq~dG9rx3JDC{xWY$NbiXsmz`F3G+PfL~`*L~v)*_?3Khs1fp9(#?WK)Qa zmiN&`Q0miEuBq!oR_Fk23qHE2DAaIeOsJ36{g>y=R|Txx0m4B*Kd4Pz>XZs&JdHdW zzw$>9&^bWCRRJ@#LY8q&?Rsza!wu-(pOdvh_605c6d(9A_}!kFK##9V3fj3U;HOvX zscm{BO$f1mPKMubcQMpfX- z86o?C#&4GX@BpZ)!d_G>yt$ie>SNoLAu+slD+4U=&GtHK^uu-Oql$b{tbP0l+XkKx=1&c diff --git a/tests/snapshots/chainid/nanox/palm.png b/tests/snapshots/chainid/nanox/palm.png new file mode 100644 index 0000000000000000000000000000000000000000..14a7b7b70dea60246eec79bafc370f71cde1ab59 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|`Dkba4!+V0?R!F-zK$f#Kl2 zgZ3}~+poO8=(2;D*uuw;xHsmU4Uzp*wA;F`Ial}i+rHh8-<6fiu-~@gdvNUT+p@OubaR% zHC=06h?bvdxK{AdB}Sn>K+5xJ$ig7Ql`%lh{hJSXLwvNff?H2{y1J&Wst7S$=_5M% zR7hdyN1vnqhCdWTmUXS}3U)pEew9UNOsGw8;nGE)dQO#pKPVk|(=Po(^9q}wpE^?~ zcb)P~4XSi|x_^a_=>5A7c!89tsQT2Eiyj#RP4IlWS!>^B<{cY#vp4AGBBKvXKy{+~ z7eDe3u~}8IwJTg|Pe)gm*U|75Kh|`We>-RnwD8l4M_x-GE&0^r)q2VpXlU2UM@x!U z1z3gxEm5Be^3N)#r`ok2&aRlF^{@BTN~hFSKkT(Y)-H7dc@+$eLV>a&ep>xnA^UEz z>jxDES%&`c)e;2?#4U7sDr#3DIJJJUQD}|o)bN0n0Y9^vSyzVqkq0W6477HBz{($4 z@-~4BKWT~9&-Oa%33N{pFu3d5f$XPOwL;`%5A=3(O?~?}WJL_Go>s`V?@NLTO@AzP zO0CY<5?y{!UrY3M_38jiUcC^lZQnx{7MWHo2->)JI@eTpq-cahCbdZWkB(u%yrP?B QfGLo{)78&qol`;+0JXq6DgXcg literal 0 HcmV?d00001 diff --git a/tests/src/chainid.test.js b/tests/src/chainid.test.js index ab7c972..e62da55 100644 --- a/tests/src/chainid.test.js +++ b/tests/src/chainid.test.js @@ -13,7 +13,7 @@ const ORIGINAL_SNAPSHOT_PATH_PREFIX = "snapshots/chainid/"; const ORIGINAL_SNAPSHOT_PATH_NANOS = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanos/"; const ORIGINAL_SNAPSHOT_PATH_NANOX = ORIGINAL_SNAPSHOT_PATH_PREFIX + "nanox/"; -test.skip("Transfer on network 112233445566 on Ethereum nanos", async () => { +test("Transfer on network 112233445566 on Ethereum nanos", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOS_ELF_PATH); let tmpPath = getTmpPath(expect.getState().currentTestName); @@ -83,8 +83,8 @@ test.skip("Transfer on network 112233445566 on Ethereum nanos", async () => { // Network filename = "network.png"; - await sim.clickRight(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott - const network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott + await sim.clickRight(tmpPath + filename); + const network = Zemu.LoadPng2RGB(tmpPath + filename); const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); expect(network).toMatchSnapshot(expected_network); @@ -131,7 +131,7 @@ test("Transfer on palm network on Ethereum nanos", async () => { let tx = eth.signTransaction( "44'/60'/0'/0/0", "f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf61818808502a15c308d8080" - ) + ); let filename; await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); @@ -143,22 +143,15 @@ test("Transfer on palm network on Ethereum nanos", async () => { expect(review).toMatchSnapshot(expected_review); // Amount 1/3 - filename = "amount_1.png"; - console.log("after5"); + filename = "amount_1_palm.png"; await sim.clickRight(tmpPath + filename); - console.log("after6"); const amount_1 = Zemu.LoadPng2RGB(tmpPath + filename); - console.log("after7"); const expected_amount_1 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); - console.log("after8"); - // expect(amount_1).toMatchSnapshot(expected_amount_1); - console.log("after9"); + expect(amount_1).toMatchSnapshot(expected_amount_1); // Amount 2/3 filename = "amount_2.png"; - console.log("after10"); await sim.clickRight(tmpPath + filename); - console.log("after11"); const amount_2 = Zemu.LoadPng2RGB(tmpPath + filename); const expected_amount_2 = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); expect(amount_2).toMatchSnapshot(expected_amount_2); @@ -193,13 +186,13 @@ test("Transfer on palm network on Ethereum nanos", async () => { // Network filename = "palm.png"; - await sim.clickRight(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott - const network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); // scott + await sim.clickRight(tmpPath + filename); + const network = Zemu.LoadPng2RGB(tmpPath + filename); const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); expect(network).toMatchSnapshot(expected_network); // Max Fees - filename = "fees.png"; + filename = "fees_palm.png"; await sim.clickRight(tmpPath + filename); const fees = Zemu.LoadPng2RGB(tmpPath + filename); const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOS + filename); @@ -226,7 +219,7 @@ test("Transfer on palm network on Ethereum nanos", async () => { } }); -test.skip("Transfer on network 112233445566 on Ethereum nanox", async () => { +test("Transfer on network 112233445566 on Ethereum nanox", async () => { jest.setTimeout(TIMEOUT); const sim = new Zemu(NANOX_ELF_PATH); let tmpPath = getTmpPath(expect.getState().currentTestName); @@ -268,8 +261,8 @@ test.skip("Transfer on network 112233445566 on Ethereum nanox", async () => { // Network filename = "network.png"; - await sim.clickRight(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); // scott - const network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); // scott + await sim.clickRight(tmpPath + filename); + const network = Zemu.LoadPng2RGB(tmpPath + filename); const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); expect(network).toMatchSnapshot(expected_network); @@ -290,7 +283,86 @@ test.skip("Transfer on network 112233445566 on Ethereum nanox", async () => { await sim.clickBoth(); await expect(tx).resolves.toEqual( - Buffer.from([]) + { + "r": "31fca443b3cad62f3ce18e287f3cf4892ac2669379cc21b5cf198561f0511d1e", + "s": "3cf21485cd8b86e1acddbcc641e16a3efad18aaeb5ae96a650f1a8b291078494", + "v": "344344f1a0", + } + ); + } finally { + await sim.close(); + } +}); + +test("Transfer on palm network on Ethereum nanox", async () => { + jest.setTimeout(TIMEOUT); + const sim = new Zemu(NANOX_ELF_PATH); + let tmpPath = getTmpPath(expect.getState().currentTestName); + + try { + await sim.start(sim_options_nanox); + + let transport = await sim.getTransport(); + let eth = new Eth(transport); + + // Send transaction + let tx = eth.signTransaction( + "44'/60'/0'/0/0", + "f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf61818808502a15c308d8080" + ); + let filename; + + await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()); + // Review tx + filename = "review.png"; + await sim.snapshot(tmpPath + filename); + const review = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_review = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(review).toMatchSnapshot(expected_review); + + // Amount + filename = "amount_palm.png"; + await sim.clickRight(tmpPath + filename); + const amount = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_amount = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(amount).toMatchSnapshot(expected_amount); + + // Address + filename = "address.png"; + await sim.clickRight(tmpPath + filename); + const address = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_address = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(address).toMatchSnapshot(expected_address); + + // Network + filename = "palm.png"; + await sim.clickRight(tmpPath + filename); + const network = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_network = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(network).toMatchSnapshot(expected_network); + + // Max Fees + filename = "fees_palm.png"; + await sim.clickRight(tmpPath + filename); + const fees = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_fees = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(fees).toMatchSnapshot(expected_fees); + + // Accept + filename = "accept.png"; + await sim.clickRight(tmpPath + filename); + const accept = Zemu.LoadPng2RGB(tmpPath + filename); + const expected_accept = Zemu.LoadPng2RGB(ORIGINAL_SNAPSHOT_PATH_NANOX + filename); + expect(accept).toMatchSnapshot(expected_accept); + + await sim.clickBoth(); + + await expect(tx).resolves.toEqual( + { + "r": "f9b5d903c47c34027156e869bda5aa002233d6cca583ad53d125612fc0795f3b", + "s": "00da038129414e5ae6f7c1529c6067e82484e3694c84c16d575e77162f631c27", + "v": "0542b8613d", + } ); } finally { await sim.close(); diff --git a/tests/yarn.lock b/tests/yarn.lock index 12a8900..f40fad1 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -951,356 +951,356 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@ethersproject/abi@5.3.1", "@ethersproject/abi@^5.3.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.1.tgz#69a1a496729d3a83521675a57cbe21f3cc27241c" - integrity sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw== +"@ethersproject/abi@5.4.0", "@ethersproject/abi@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" + integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== dependencies: - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" - integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== +"@ethersproject/abstract-provider@5.4.1", "@ethersproject/abstract-provider@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" + integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/networks" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/web" "^5.3.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" - integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== +"@ethersproject/abstract-signer@5.4.1", "@ethersproject/abstract-signer@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" + integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" -"@ethersproject/address@5.3.0", "@ethersproject/address@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" - integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== +"@ethersproject/address@5.4.0", "@ethersproject/address@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" + integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" -"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" - integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== +"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" + integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== dependencies: - "@ethersproject/bytes" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" -"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" - integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== +"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" + integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/properties" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/properties" "^5.4.0" -"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" - integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== +"@ethersproject/bignumber@5.4.1", "@ethersproject/bignumber@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.1.tgz#64399d3b9ae80aa83d483e550ba57ea062c1042d" + integrity sha512-fJhdxqoQNuDOk6epfM7yD6J8Pol4NUCy1vkaGAkuujZm0+lNow//MKu1hLhRiYV4BsOHyBv5/lsTjF+7hWwhJg== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" - integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== +"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" + integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== dependencies: - "@ethersproject/logger" "^5.3.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/constants@5.3.0", "@ethersproject/constants@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" - integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== +"@ethersproject/constants@5.4.0", "@ethersproject/constants@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" + integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== dependencies: - "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bignumber" "^5.4.0" -"@ethersproject/contracts@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" - integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== +"@ethersproject/contracts@5.4.1": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470" + integrity sha512-m+z2ZgPy4pyR15Je//dUaymRUZq5MtDajF6GwFbGAVmKz/RF+DNIPwF0k5qEcL3wPGVqUjFg2/krlCRVTU4T5w== dependencies: - "@ethersproject/abi" "^5.3.0" - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" -"@ethersproject/hash@5.3.0", "@ethersproject/hash@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" - integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== +"@ethersproject/hash@5.4.0", "@ethersproject/hash@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" + integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" - integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== +"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" + integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/basex" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wordlists" "^5.3.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" - integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== +"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" + integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hdnode" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" - integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== +"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" + integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== dependencies: - "@ethersproject/bytes" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" js-sha3 "0.5.7" -"@ethersproject/logger@5.3.0", "@ethersproject/logger@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" - integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== +"@ethersproject/logger@5.4.0", "@ethersproject/logger@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" + integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== -"@ethersproject/networks@5.3.1", "@ethersproject/networks@^5.3.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.1.tgz#78fe08324cee289ce239acf8c746121934b2ef61" - integrity sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw== +"@ethersproject/networks@5.4.2", "@ethersproject/networks@^5.4.0": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35" + integrity sha512-eekOhvJyBnuibfJnhtK46b8HimBc5+4gqpvd1/H9LEl7Q7/qhsIhM81dI9Fcnjpk3jB1aTy6bj0hz3cifhNeYw== dependencies: - "@ethersproject/logger" "^5.3.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" - integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== +"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" + integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" -"@ethersproject/properties@5.3.0", "@ethersproject/properties@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" - integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== +"@ethersproject/properties@5.4.0", "@ethersproject/properties@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" + integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== dependencies: - "@ethersproject/logger" "^5.3.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/providers@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.1.tgz#a12c6370e8cbc0968c9744641b8ef90b0dd5ec2b" - integrity sha512-HC63vENTrur6/JKEhcQbA8PRDj1FAesdpX98IW+xAAo3EAkf70ou5fMIA3KCGzJDLNTeYA4C2Bonz849tVLekg== +"@ethersproject/providers@5.4.4": + version "5.4.4" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.4.tgz#6729120317942fc0ab0ecdb35e944ec6bbedb795" + integrity sha512-mQevyXj2X2D3l8p/JGDYFZbODhZjW6On15DnCK4Xc9y6b+P0vqorQC/j46omWSm4cyo7BQ/rgfhXNYmvAfyZoQ== dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/basex" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/networks" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/web" "^5.3.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" - integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== +"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" + integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" - integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== +"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" + integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" - integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== +"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" + integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" - integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== +"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" + integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" bn.js "^4.11.9" elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" - integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== +"@ethersproject/solidity@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" + integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/strings" "^5.3.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@ethersproject/strings@5.3.0", "@ethersproject/strings@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" - integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== +"@ethersproject/strings@5.4.0", "@ethersproject/strings@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" + integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" - integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== +"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" + integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== dependencies: - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" -"@ethersproject/units@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" - integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== +"@ethersproject/units@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" + integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/wallet@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" - integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== +"@ethersproject/wallet@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" + integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/hdnode" "^5.3.0" - "@ethersproject/json-wallets" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wordlists" "^5.3.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/json-wallets" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" - integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== +"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" + integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== dependencies: - "@ethersproject/base64" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" + "@ethersproject/base64" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" - integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== +"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" + integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@grpc/grpc-js@^1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.2.tgz#eae97e6daf5abd49a7818aadeca0744dfb1ebca1" - integrity sha512-UXepkOKCATJrhHGsxt+CGfpZy9zUn1q9mop5kfcXq1fBkTePxVNPOdnISlCbJFlCtld+pSLGyZCzr9/zVprFKA== +"@grpc/grpc-js@^1.3.4": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8" + integrity sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA== dependencies: "@types/node" ">=12.12.47" -"@grpc/proto-loader@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.2.tgz#412575f3ff5ef0a9b79d4ea12c08cba5601041cb" - integrity sha512-q2Qle60Ht2OQBCp9S5hv1JbI4uBBq6/mqSevFNK3ZEgRDBCAkWqZPUhD/K9gXOHrHKluliHiVq2L9sw1mVyAIg== +"@grpc/proto-loader@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.4.tgz#5438c0d771e92274e77e631babdc14456441cbdc" + integrity sha512-7xvDvW/vJEcmLUltCUGOgWRPM8Oofv0eCFSVMuKqaqWJaXSzmB+m9hiyqe34QofAl4WAzIKUZZlinIF9FOHyTQ== dependencies: "@types/long" "^4.0.1" lodash.camelcase "^4.3.0" @@ -1582,10 +1582,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@ledgerhq/cryptoassets@^5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz#11dcc93211960c6fd6620392e4dd91896aaabe58" - integrity sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw== +"@ledgerhq/cryptoassets@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-6.5.0.tgz#17250c928baa86603739ffcea19fc8de9f7fb860" + integrity sha512-HBmcfb9WTlcsqlzlHfd7nZr49on7ftpWmKXvxZu9DinLS7EZ5ZjgSvmxrx39YCS5yONILBJoA/BSpg1RcCbSjQ== dependencies: invariant "2" @@ -1598,13 +1598,13 @@ "@ledgerhq/logs" "^4.72.0" rxjs "^6.5.3" -"@ledgerhq/devices@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" - integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== +"@ledgerhq/devices@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-6.3.0.tgz#7ee59614198882311d1805912e368451527d05b2" + integrity sha512-DmVxqMAf3FhkpKjkbBCFVJ5DmesfplujeCLzFwO/zF5VGuwY7xxPqeSxlpusXJkqhEq+DbFzIDRWJYDf7rtXqg== dependencies: - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/logs" "^5.50.0" + "@ledgerhq/errors" "^6.2.0" + "@ledgerhq/logs" "^6.2.0" rxjs "6" semver "^7.3.5" @@ -1613,22 +1613,23 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.78.0.tgz#23daf3af54d03b1bda3e616002b555da1bdb705a" integrity sha512-FX6zHZeiNtegBvXabK6M5dJ+8OV8kQGGaGtuXDeK/Ss5EmG4Ltxc6Lnhe8hiHpm9pCHtktOsnUVL7IFBdHhYUg== -"@ledgerhq/errors@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" - integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== +"@ledgerhq/errors@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.2.0.tgz#7dc2b3bf6bdedccdaa1b97dccacfa912c4fc22f8" + integrity sha512-eO03x8HJmG60WtlrMuahigW/rwywFdcGzCnihta/MjkM8BD9A660cKVkyIuheCcpaB7UV/r+QsRl9abHbjjaag== -"@ledgerhq/hw-app-eth@^5.52.1": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-5.53.0.tgz#5df2d7427db9f387099d0cc437e9730101d7c404" - integrity sha512-LKi/lDA9tW0GdoYP1ng0VY/PXNYjSrwZ1cj0R0MQ9z+knmFlPcVkGK2MEqE8W8cXrC0tjsUXITMcngvpk5yfKA== +"@ledgerhq/hw-app-eth@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-6.5.0.tgz#7541d2455660532272d9c61b2e4e33add06255d9" + integrity sha512-2M43aXxVX3xPwmluG/7zXRljSWSMdifi19V2JR5ezjBhpNg+fgrg6cYOkl7nhyrelsCCaRhWmn3+KCNrkFYLOQ== dependencies: - "@ledgerhq/cryptoassets" "^5.53.0" - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/hw-transport" "^5.51.1" - "@ledgerhq/logs" "^5.50.0" + "@ledgerhq/cryptoassets" "^6.5.0" + "@ledgerhq/errors" "^6.2.0" + "@ledgerhq/hw-transport" "^6.3.0" + "@ledgerhq/logs" "^6.2.0" + axios "^0.21.1" bignumber.js "^9.0.1" - ethers "^5.2.0" + ethers "^5.4.4" "@ledgerhq/hw-transport-http@^4.74.2": version "4.78.0" @@ -1641,16 +1642,16 @@ axios "^0.19.0" ws "6" -"@ledgerhq/hw-transport-http@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-http/-/hw-transport-http-5.51.1.tgz#720b4a054401c82884f9d64bcb093988fd397498" - integrity sha512-hsWxRX+dICyCHUxdUWqKnFwSPL0G9v/R6TVEJpnQ07IiBfIajbF59IRPCn9/Fw4XHII6IO+xtPT+jFkwwSdHLQ== +"@ledgerhq/hw-transport-http@^6.1.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-http/-/hw-transport-http-6.3.0.tgz#e409ba846b3fda9366f1ad68f545b799336ab08b" + integrity sha512-KIYRlobKsjxBa7wNIDB+8Vo+OcKRmUy/nImyFZLTnKE0nLNgwRaK+P7D/Qw3VXBMpwHkdCtsTeBho+0fapkHxA== dependencies: - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/hw-transport" "^5.51.1" - "@ledgerhq/logs" "^5.50.0" + "@ledgerhq/errors" "^6.2.0" + "@ledgerhq/hw-transport" "^6.3.0" + "@ledgerhq/logs" "^6.2.0" axios "^0.21.1" - ws "6" + ws "7" "@ledgerhq/hw-transport@^4.78.0": version "4.78.0" @@ -1661,13 +1662,13 @@ "@ledgerhq/errors" "^4.78.0" events "^3.0.0" -"@ledgerhq/hw-transport@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" - integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== +"@ledgerhq/hw-transport@^6.1.0", "@ledgerhq/hw-transport@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.3.0.tgz#4fc966b1a68c991c0a6b5384841f99c4f8304ce9" + integrity sha512-kdnVrgmxrFtKaRdkoaQBEa02RXgLzEBiooYbxA65BGSJig3PGWDS9LrqNpzLTZM1RQlivd9NLBmfwU2ze4chWA== dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" + "@ledgerhq/devices" "^6.3.0" + "@ledgerhq/errors" "^6.2.0" events "^3.3.0" "@ledgerhq/logs@^4.72.0": @@ -1680,6 +1681,11 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== +"@ledgerhq/logs@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.2.0.tgz#9fb2d6f1811316697f7b3cc14607f6c608912419" + integrity sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A== + "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": version "2.1.8-no-fsevents" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz#da7c3996b8e6e19ebd14d82eaced2313e7769f9b" @@ -1885,18 +1891,19 @@ dependencies: "@types/yargs-parser" "*" -"@zondax/zemu@0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@zondax/zemu/-/zemu-0.13.0.tgz#e58b255a5c09adb23316ec97f97204b4a9e21ab9" - integrity sha512-TsJOdtzngyIX3NAIkozJlHyfPN81dMDg1XjFrUAjO7ABoY/RC4kfY5d2NbaFQ8TbTBqd2eFrY/iwwJ6qdhqFng== +"@zondax/zemu@0.16.5": + version "0.16.5" + resolved "https://registry.yarnpkg.com/@zondax/zemu/-/zemu-0.16.5.tgz#45acddf593de4a9d70861c8671441d6f54c5a461" + integrity sha512-y5hMSE9DVVVsJuTbK8EjMxbZ49eItezSksb+JmbW9mkEwj5tIpT/50kF/2Lcu969yLbxBpwVyBUcT9gp0UoLuw== dependencies: - "@grpc/grpc-js" "^1.3.1" - "@grpc/proto-loader" "^0.6.2" - "@ledgerhq/hw-transport" "^5.51.1" - "@ledgerhq/hw-transport-http" "^5.51.1" + "@grpc/grpc-js" "^1.3.4" + "@grpc/proto-loader" "^0.6.4" + "@ledgerhq/hw-transport" "^6.1.0" + "@ledgerhq/hw-transport-http" "^6.1.0" dockerode "^3.3.0" elfy "^1.0.0" fs-extra "^10.0.0" + get-port "^5.1.1" json-rpc2 "^2.0.0" path "^0.12.7" pngjs "^6.0.0" @@ -3133,41 +3140,41 @@ ethers@^4.0.37: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.1.tgz#1f018f0aeb651576cd84fd987a45f0b99646d761" - integrity sha512-xCKmC0gsZ9gks89ZfK3B1y6LlPdvX5fxDtu9SytnpdDJR1M7pmJI+4H0AxQPMgUYr7GtQdmECLR0gWdJQ+lZYw== +ethers@^5.4.4: + version "5.4.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.5.tgz#cec133b9f5b514dc55e2561ee7aa7218c33affd7" + integrity sha512-PPZ6flOAj230sXEWf/r/It6ZZ5c7EOVWx+PU87Glkbg79OtT7pLE1WgL4MRdwx6iF7HzSOvUUI+8cAmcdzo12w== dependencies: - "@ethersproject/abi" "5.3.1" - "@ethersproject/abstract-provider" "5.3.0" - "@ethersproject/abstract-signer" "5.3.0" - "@ethersproject/address" "5.3.0" - "@ethersproject/base64" "5.3.0" - "@ethersproject/basex" "5.3.0" - "@ethersproject/bignumber" "5.3.0" - "@ethersproject/bytes" "5.3.0" - "@ethersproject/constants" "5.3.0" - "@ethersproject/contracts" "5.3.0" - "@ethersproject/hash" "5.3.0" - "@ethersproject/hdnode" "5.3.0" - "@ethersproject/json-wallets" "5.3.0" - "@ethersproject/keccak256" "5.3.0" - "@ethersproject/logger" "5.3.0" - "@ethersproject/networks" "5.3.1" - "@ethersproject/pbkdf2" "5.3.0" - "@ethersproject/properties" "5.3.0" - "@ethersproject/providers" "5.3.1" - "@ethersproject/random" "5.3.0" - "@ethersproject/rlp" "5.3.0" - "@ethersproject/sha2" "5.3.0" - "@ethersproject/signing-key" "5.3.0" - "@ethersproject/solidity" "5.3.0" - "@ethersproject/strings" "5.3.0" - "@ethersproject/transactions" "5.3.0" - "@ethersproject/units" "5.3.0" - "@ethersproject/wallet" "5.3.0" - "@ethersproject/web" "5.3.0" - "@ethersproject/wordlists" "5.3.0" + "@ethersproject/abi" "5.4.0" + "@ethersproject/abstract-provider" "5.4.1" + "@ethersproject/abstract-signer" "5.4.1" + "@ethersproject/address" "5.4.0" + "@ethersproject/base64" "5.4.0" + "@ethersproject/basex" "5.4.0" + "@ethersproject/bignumber" "5.4.1" + "@ethersproject/bytes" "5.4.0" + "@ethersproject/constants" "5.4.0" + "@ethersproject/contracts" "5.4.1" + "@ethersproject/hash" "5.4.0" + "@ethersproject/hdnode" "5.4.0" + "@ethersproject/json-wallets" "5.4.0" + "@ethersproject/keccak256" "5.4.0" + "@ethersproject/logger" "5.4.0" + "@ethersproject/networks" "5.4.2" + "@ethersproject/pbkdf2" "5.4.0" + "@ethersproject/properties" "5.4.0" + "@ethersproject/providers" "5.4.4" + "@ethersproject/random" "5.4.0" + "@ethersproject/rlp" "5.4.0" + "@ethersproject/sha2" "5.4.0" + "@ethersproject/signing-key" "5.4.0" + "@ethersproject/solidity" "5.4.0" + "@ethersproject/strings" "5.4.0" + "@ethersproject/transactions" "5.4.0" + "@ethersproject/units" "5.4.0" + "@ethersproject/wallet" "5.4.0" + "@ethersproject/web" "5.4.0" + "@ethersproject/wordlists" "5.4.0" events@^3.0.0, events@^3.3.0: version "3.3.0" @@ -3501,6 +3508,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -6953,6 +6965,11 @@ ws@6: dependencies: async-limiter "~1.0.0" +ws@7: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + ws@7.4.6, ws@^7.4.5: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" From 847db91cfb03b59c6888463bad45ee1f2dbb32ba Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 17:28:24 +0200 Subject: [PATCH 18/33] Remove debugging statements --- src_common/network.c | 9 --------- src_features/signTx/logic_signTx.c | 4 ---- src_features/signTx/ui_common_signTx.c | 7 +++++-- src_features/signTx/ui_flow_signTx.c | 1 - 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src_common/network.c b/src_common/network.c index 23872ea..4ebdb74 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -24,7 +24,6 @@ const network_info_t NETWORK_MAPPING[] = { uint64_t get_chain_id(void) { uint64_t chain_id = 0; - char tmp[16] = {0}; switch (txContext.txType) { case LEGACY: @@ -39,24 +38,16 @@ uint64_t get_chain_id(void) { PRINTF("Txtype `%d` not supported while generating chainID\n", txContext.txType); break; } - u64_to_string(chain_id, tmp, sizeof(tmp)); - PRINTF("\n\nTMP: %s\n", tmp); return chain_id; } network_info_t *get_network(void) { uint64_t chain_id = get_chain_id(); - char tmp1[16]; - char tmp2[16]; for (uint8_t i = 0; i < sizeof(NETWORK_MAPPING) / sizeof(*NETWORK_MAPPING); i++) { - u64_to_string(NETWORK_MAPPING[i].chain_id, tmp1, sizeof(tmp1)); - u64_to_string(chain_id, tmp2, sizeof(tmp2)); - PRINTF("Comparing %s but wanted %s\n", tmp1, tmp2); if (NETWORK_MAPPING[i].chain_id == chain_id) { return (network_info_t *) PIC(&NETWORK_MAPPING[i]); } } - PRINTF("RETURNING NULL\n"); return NULL; } diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 8e291cc..ece60ed 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -267,7 +267,6 @@ void prepareNetworkDisplay() { } else { // Network name found, simply copy it. strlcpy(strings.common.network_name, name, sizeof(strings.common.network_name)); - PRINTF("COPIED\n"); } } @@ -457,9 +456,6 @@ void finalizeParsing(bool direct) { // Prepare chainID field prepareNetworkDisplay(); - PRINTF("Network bytes: %.*H\n", - sizeof(strings.common.network_name), - strings.common.network_name); PRINTF("Network: %s\n", strings.common.network_name); bool no_consent; diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index e535410..dc7e3d8 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -39,8 +39,11 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen G_io_apdu_buffer[0] = 27; } else { // New API - // Note that this is wrong for a large v, but the client can always recover - uint64_t v = u64_from_BE(tmpContent.txContent.v, tmpContent.txContent.vLength); + // Note that this is wrong for a large v, but ledgerjs will recover. + + // Casting to u32 not to introduce breaking changes. In the future, this should be + // updated. + uint32_t v = U4BE(tmpContent.txContent.v, 0); G_io_apdu_buffer[0] = (v * 2) + 35; } if (info & CX_ECCINFO_PARITY_ODD) { diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index 7b47212..b508ee5 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -224,7 +224,6 @@ void ux_approve_tx(bool fromPlugin) { uint64_t chain_id = get_chain_id(); if (chainConfig->chainId == ETHEREUM_MAINNET_CHAINID && chain_id != chainConfig->chainId) { - PRINTF("ADDED GET CHAIN ID\n"); ux_approval_tx_flow[step++] = &ux_approval_network_step; } From 1b07cf2861d992b44a51820b389dc31d90b3b7d7 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 17:31:10 +0200 Subject: [PATCH 19/33] Update sdk --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index ea366c1..1abd84e 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit ea366c1302f5e6947eeb7e7f30147ea431fa5e72 +Subproject commit 1abd84e5dd57b611ae4e2468c0d341e469a95937 From dda1e20fb38c3663a5be5216911dca49dce61401 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 27 Aug 2021 18:35:53 +0200 Subject: [PATCH 20/33] Fix V computing when using < 4 bytes chain IDs --- src_features/signTx/ui_common_signTx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index dc7e3d8..36a0bd9 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -41,9 +41,10 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen // New API // Note that this is wrong for a large v, but ledgerjs will recover. - // Casting to u32 not to introduce breaking changes. In the future, this should be - // updated. - uint32_t v = U4BE(tmpContent.txContent.v, 0); + // Taking only the 4 highest bytes to not introduce breaking changes. In the future, + // this should be updated. + uint32_t v = (uint32_t) u64_from_BE(tmpContent.txContent.v, + MIN(4, tmpContent.txContent.vLength)); G_io_apdu_buffer[0] = (v * 2) + 35; } if (info & CX_ECCINFO_PARITY_ODD) { From 913346b9a889d8be9a80037a37b1f505977ec556 Mon Sep 17 00:00:00 2001 From: kobigurk-clabs <80916913+kobigurk-clabs@users.noreply.github.com> Date: Sat, 28 Aug 2021 21:49:32 +0300 Subject: [PATCH 21/33] Add Celo mainnet and long-running testnets --- src_common/network.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src_common/network.c b/src_common/network.c index f1181b8..110909c 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -19,7 +19,10 @@ const network_info_t NETWORK_MAPPING[] = { {.chain_id = 100, .name = "xDai", .ticker = "xDAI "}, {.chain_id = 137, .name = "Polygon", .ticker = "MATIC "}, {.chain_id = 250, .name = "Fantom", .ticker = "FTM "}, - {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}}; + {.chain_id = 42220, .name = "Celo", .ticker = "CELO "}, + {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}}, + {.chain_id = 44787, .name = "Celo Alfajores", .ticker = "aCELO "}, + {.chain_id = 62320, .name = "Celo Baklava", .ticker = "bCELO "}; uint32_t get_chain_id(void) { uint32_t chain_id = 0; From 3e25f04d0523d006c0fcbb707b34acbc30aa1a37 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Wed, 25 Aug 2021 13:43:27 +0200 Subject: [PATCH 22/33] Refactoring helper to get printable eth address from hex --- src_common/ethUtils.c | 18 ++++++++++ src_common/ethUtils.h | 6 ++++ src_features/signTx/logic_signTx.c | 11 +++--- src_features/stark_sign/ui_flow_stark_sign.c | 16 +++------ src_plugins/erc20/erc20_plugin.c | 11 +++--- src_plugins/erc721/erc721_plugin.c | 21 ++++++++--- src_plugins/eth2/eth2_plugin.c | 21 +++-------- src_plugins/starkware/starkware_plugin.c | 38 ++++++++++---------- 8 files changed, 80 insertions(+), 62 deletions(-) diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index aedcff1..e5596c0 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -219,6 +219,24 @@ void getEthAddressStringFromBinary(uint8_t *address, out[40] = '\0'; } +// Fills the `out` buffer with the lowercase string representation of the pubkey passed in as binary +// format by `in`. (eg: uint8_t*:0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB -> +// char*:"0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB\0" ) `sha3` context doesn't have have to be +// initialized prior to call. `chain_config` must be initialized. +void getEthDisplayableAddress(uint8_t *in, + char *out, + size_t out_len, + cx_sha3_t *sha3, + chain_config_t *chain_config) { + if (out_len < 43) { + strlcpy(out, "ERROR", out_len); + return; + } + out[0] = '0'; + out[1] = 'x'; + getEthAddressStringFromBinary(in, out + 2, sha3, chain_config); +} + bool adjustDecimals(char *src, uint32_t srcLength, char *target, diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index 501a2b7..386c8fd 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -51,6 +51,12 @@ void getEthAddressStringFromBinary(uint8_t *address, cx_sha3_t *sha3Context, chain_config_t *chain_config); +void getEthDisplayableAddress(uint8_t *in, + char *out, + size_t out_len, + cx_sha3_t *sha3, + chain_config_t *chain_config); + bool adjustDecimals(char *src, uint32_t srcLength, char *target, diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index ece60ed..0b7377a 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -415,12 +415,11 @@ void finalizeParsing(bool direct) { // Prepare destination address to display if (genericUI) { if (tmpContent.txContent.destinationLength != 0) { - displayBuffer[0] = '0'; - displayBuffer[1] = 'x'; - getEthAddressStringFromBinary(tmpContent.txContent.destination, - displayBuffer + 2, - &global_sha3, - chainConfig); + getEthDisplayableAddress(tmpContent.txContent.destination, + displayBuffer, + sizeof(displayBuffer), + &global_sha3, + chainConfig); compareOrCopy(strings.common.fullAddress, sizeof(strings.common.fullAddress), displayBuffer, diff --git a/src_features/stark_sign/ui_flow_stark_sign.c b/src_features/stark_sign/ui_flow_stark_sign.c index 6f1b247..854b334 100644 --- a/src_features/stark_sign/ui_flow_stark_sign.c +++ b/src_features/stark_sign/ui_flow_stark_sign.c @@ -13,16 +13,6 @@ void stark_sign_display_master_account() { dataContext.starkContext.transferDestination); } -void stark_sign_display_condition_address() { - strings.tmp.tmp[0] = '0'; - strings.tmp.tmp[1] = 'x'; - getEthAddressStringFromBinary(dataContext.starkContext.conditionAddress, - strings.tmp.tmp + 2, - &global_sha3, - chainConfig); - strings.tmp.tmp[42] = '\0'; -} - void stark_sign_display_condition_fact() { snprintf(strings.tmp.tmp, sizeof(strings.tmp.tmp), "0x%.*H", 32, dataContext.starkContext.fact); } @@ -189,7 +179,11 @@ UX_STEP_NOCB_INIT( UX_STEP_NOCB_INIT( ux_stark_conditional_transfer_8_step, bnnn_paging, - stark_sign_display_condition_address(), + getEthDisplayableAddress(dataContext.starkContext.conditionAddress, + strings.tmp.tmp, + sizeof(strings.tmp.tmp), + &global_sha3, + chainConfig), { .title = "Cond. Address", .text = strings.tmp.tmp diff --git a/src_plugins/erc20/erc20_plugin.c b/src_plugins/erc20/erc20_plugin.c index 156ca07..b17a741 100644 --- a/src_plugins/erc20/erc20_plugin.c +++ b/src_plugins/erc20/erc20_plugin.c @@ -212,12 +212,11 @@ void erc20_plugin_call(int message, void *parameters) { strlcpy(msg->msg, context->contract_name, msg->msgLength); } else { strlcpy(msg->title, "Address", msg->titleLength); - msg->msg[0] = '0'; - msg->msg[1] = 'x'; - getEthAddressStringFromBinary(context->destinationAddress, - msg->msg + 2, - msg->pluginSharedRW->sha3, - chainConfig); + getEthDisplayableAddress(context->destinationAddress, + msg->msg, + msg->msgLength, + msg->pluginSharedRW->sha3, + chainConfig); } msg->result = ETH_PLUGIN_RESULT_OK; diff --git a/src_plugins/erc721/erc721_plugin.c b/src_plugins/erc721/erc721_plugin.c index 584ac5c..a7dddb4 100644 --- a/src_plugins/erc721/erc721_plugin.c +++ b/src_plugins/erc721/erc721_plugin.c @@ -5,8 +5,11 @@ #include "ethUtils.h" #include "utils.h" -void starkware_print_stark_key(uint8_t *starkKey, char *destination); -void starkware_print_eth_address(uint8_t *address, char *destination); +void getEthDisplayableAddress(uint8_t *in, + char *out, + size_t out_len, + cx_sha3_t *sha3, + chain_config_t *chain_config); typedef struct erc721_parameters_t { uint8_t selectorIndex; @@ -119,19 +122,27 @@ void erc721_plugin_call(int message, void *parameters) { switch (msg->screenIndex) { case 0: strlcpy(msg->title, "Contract Name", msg->titleLength); - starkware_print_eth_address(tmpContent.txContent.destination, msg->msg); + getEthDisplayableAddress(tmpContent.txContent.destination, + msg->msg, + msg->msgLength, + &global_sha3, + chainConfig); msg->result = ETH_PLUGIN_RESULT_OK; break; case 1: strlcpy(msg->title, "NFT Contract", msg->titleLength); - starkware_print_eth_address(context->address, msg->msg); + getEthDisplayableAddress(context->address, + msg->msg, + msg->msgLength, + &global_sha3, + chainConfig); msg->result = ETH_PLUGIN_RESULT_OK; break; case 2: strlcpy(msg->title, "TokenID", msg->titleLength); - starkware_print_stark_key(context->tokenId, msg->msg); + snprintf(msg->msg, 70, "0x%.*H", 32, context->tokenId); msg->result = ETH_PLUGIN_RESULT_OK; break; diff --git a/src_plugins/eth2/eth2_plugin.c b/src_plugins/eth2/eth2_plugin.c index 7a43eaf..4b4dd3a 100644 --- a/src_plugins/eth2/eth2_plugin.c +++ b/src_plugins/eth2/eth2_plugin.c @@ -32,19 +32,6 @@ typedef struct eth2_deposit_parameters_t { char deposit_address[ETH2_DEPOSIT_PUBKEY_LENGTH]; } eth2_deposit_parameters_t; -// Fills the `out` buffer with the lowercase string representation of the pubkey passed in as binary -// format by `in`. Does not check the size, so expects `out` to be big enough to hold the string -// representation. Returns the length of string (counting the null terminating character). -static int getEthDisplayableAddress(char *out, uint8_t *in, cx_sha3_t *sha3) { - out[0] = '0'; - out[1] = 'x'; - getEthAddressStringFromBinary(in, out + 2, sha3, chainConfig); - - uint8_t destinationLen = strlen(out) + 1; // Adding one to account for \0. - - return destinationLen; -} - void eth2_plugin_call(int message, void *parameters) { switch (message) { case ETH_PLUGIN_INIT_CONTRACT: { @@ -130,9 +117,11 @@ void eth2_plugin_call(int message, void *parameters) { // Use a temporary buffer to store the string representation. char tmp[ETH2_DEPOSIT_PUBKEY_LENGTH]; - getEthDisplayableAddress(tmp, - (uint8_t *) context->deposit_address, - msg->pluginSharedRW->sha3); + getEthDisplayableAddress((uint8_t *) context->deposit_address, + tmp, + sizeof(tmp), + msg->pluginSharedRW->sha3, + chainConfig); // Copy back the string to the global variable. strlcpy(context->deposit_address, tmp, ETH2_DEPOSIT_PUBKEY_LENGTH); diff --git a/src_plugins/starkware/starkware_plugin.c b/src_plugins/starkware/starkware_plugin.c index c2ae91e..0b2e980 100644 --- a/src_plugins/starkware/starkware_plugin.c +++ b/src_plugins/starkware/starkware_plugin.c @@ -279,18 +279,6 @@ void starkware_print_stark_key(uint8_t *starkKey, char *destination) { snprintf(destination, 70, "0x%.*H", 32, starkKey); } -// TODO : rewrite as independant code -void starkware_print_eth_address(uint8_t *address, char *destination, size_t destinationLength) { - if (destinationLength < 43) { - strlcpy(destination, "ERROR", destinationLength); - return; - } - destination[0] = '0'; - destination[1] = 'x'; - getEthAddressStringFromBinary(address, destination + 2, &global_sha3, chainConfig); - destination[42] = '\0'; -} - // TODO : rewrite as independant code void starkware_print_amount(uint8_t *amountData, char *destination, @@ -348,7 +336,11 @@ void starkware_print_asset_contract(char *destination, size_t destinationLength) if (dataContext.tokenContext.quantumIndex != MAX_TOKEN) { tokenDefinition_t *token = &tmpCtx.transactionContext.tokens[dataContext.tokenContext.quantumIndex]; - starkware_print_eth_address(token->address, destination, destinationLength); + getEthDisplayableAddress(token->address, + destination, + destinationLength, + &global_sha3, + chainConfig); } else { strlcpy(destination, "UNKNOWN", destinationLength); } @@ -708,9 +700,11 @@ void starkware_plugin_call(int message, void *parameters) { if (is_deversify_contract(tmpContent.txContent.destination)) { strlcpy(msg->msg, "DeversiFi", msg->msgLength); } else { - starkware_print_eth_address(tmpContent.txContent.destination, - msg->msg, - msg->msgLength); + getEthDisplayableAddress(tmpContent.txContent.destination, + msg->msg, + msg->msgLength, + &global_sha3, + chainConfig); } msg->result = ETH_PLUGIN_RESULT_OK; break; @@ -720,7 +714,11 @@ void starkware_plugin_call(int message, void *parameters) { case STARKWARE_REGISTER_AND_DEPOSIT_TOKEN: case STARKWARE_REGISTER_AND_DEPOSIT_ETH: strlcpy(msg->title, "From ETH Address", msg->titleLength); - starkware_print_eth_address(context->amount, msg->msg, msg->msgLength); + getEthDisplayableAddress(context->amount, + msg->msg, + msg->msgLength, + &global_sha3, + chainConfig); break; case STARKWARE_ESCAPE: strlcpy(msg->title, "Amount", msg->titleLength); @@ -784,7 +782,11 @@ void starkware_plugin_call(int message, void *parameters) { case STARKWARE_WITHDRAW_TO: case STARKWARE_WITHDRAW_NFT_TO: strlcpy(msg->title, "To ETH Address", msg->titleLength); - starkware_print_eth_address(context->amount, msg->msg, msg->msgLength); + getEthDisplayableAddress(context->amount, + msg->msg, + msg->msgLength, + &global_sha3, + chainConfig); break; case STARKWARE_WITHDRAW_AND_MINT: strlcpy(msg->title, "Asset Contract", msg->titleLength); From 0d45d2e2d058fc711e10089d08d99d0554f7eb44 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Mon, 30 Aug 2021 11:02:55 +0200 Subject: [PATCH 23/33] Update some prototypes to use chainId value instead of chainConfig structure --- src/handle_check_address.c | 2 +- src_common/ethUtils.c | 22 ++++++++++---------- src_common/ethUtils.h | 6 +++--- src_features/getPublicKey/cmd_getPublicKey.c | 2 +- src_features/signTx/logic_signTx.c | 2 +- src_features/stark_sign/ui_flow_stark_sign.c | 2 +- src_plugins/erc20/erc20_plugin.c | 2 +- src_plugins/erc721/erc721_plugin.c | 10 ++------- src_plugins/eth2/eth2_plugin.c | 2 +- src_plugins/starkware/starkware_plugin.c | 10 ++++----- 10 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/handle_check_address.c b/src/handle_check_address.c index 7686205..48b6b94 100644 --- a/src/handle_check_address.c +++ b/src/handle_check_address.c @@ -61,7 +61,7 @@ int handle_check_address(check_address_parameters_t* params, chain_config_t* cha getEthAddressStringFromKey(&locals_union2.publicKey, locals_union1.address, &local_sha3, - chain_config); + chain_config->chainId); ZERO(locals_union2); uint8_t offset_0x = 0; diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index e5596c0..eb9ddf6 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -126,11 +126,11 @@ void getEthAddressFromKey(cx_ecfp_public_key_t *publicKey, uint8_t *out, cx_sha3 void getEthAddressStringFromKey(cx_ecfp_public_key_t *publicKey, char *out, cx_sha3_t *sha3Context, - chain_config_t *chain_config) { + uint64_t chainId) { uint8_t hashAddress[INT256_LENGTH]; cx_keccak_init(sha3Context, 256); cx_hash((cx_hash_t *) sha3Context, CX_LAST, publicKey->W + 1, 64, hashAddress, 32); - getEthAddressStringFromBinary(hashAddress + 12, out, sha3Context, chain_config); + getEthAddressStringFromBinary(hashAddress + 12, out, sha3Context, chainId); } void u64_to_string(uint64_t src, char *dst, uint8_t dst_size) { @@ -164,7 +164,7 @@ void u64_to_string(uint64_t src, char *dst, uint8_t dst_size) { void getEthAddressStringFromBinary(uint8_t *address, char *out, cx_sha3_t *sha3Context, - chain_config_t *chain_config) { + uint64_t chainId) { // save some precious stack space union locals_union { uint8_t hashChecksum[INT256_LENGTH]; @@ -174,14 +174,14 @@ void getEthAddressStringFromBinary(uint8_t *address, uint8_t i; bool eip1191 = false; uint32_t offset = 0; - switch (chain_config->chainId) { + switch (chainId) { case 30: case 31: eip1191 = true; break; } if (eip1191) { - u64_to_string(chain_config->chainId, (char *) locals_union.tmp, sizeof(locals_union.tmp)); + u64_to_string(chainId, (char *) locals_union.tmp, sizeof(locals_union.tmp)); offset = strnlen((char *) locals_union.tmp, sizeof(locals_union.tmp)); strlcat((char *) locals_union.tmp + offset, "0x", sizeof(locals_union.tmp) - offset); offset = strnlen((char *) locals_union.tmp, sizeof(locals_union.tmp)); @@ -219,22 +219,22 @@ void getEthAddressStringFromBinary(uint8_t *address, out[40] = '\0'; } -// Fills the `out` buffer with the lowercase string representation of the pubkey passed in as binary -// format by `in`. (eg: uint8_t*:0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB -> -// char*:"0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB\0" ) `sha3` context doesn't have have to be -// initialized prior to call. `chain_config` must be initialized. +/* Fills the `out` buffer with the lowercase string representation of the pubkey passed in as binary +format by `in`. (eg: uint8_t*:0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB -> +char*:"0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB\0" ) +`sha3` context doesn't have have to be initialized prior to call.*/ void getEthDisplayableAddress(uint8_t *in, char *out, size_t out_len, cx_sha3_t *sha3, - chain_config_t *chain_config) { + uint64_t chainId) { if (out_len < 43) { strlcpy(out, "ERROR", out_len); return; } out[0] = '0'; out[1] = 'x'; - getEthAddressStringFromBinary(in, out + 2, sha3, chain_config); + getEthAddressStringFromBinary(in, out + 2, sha3, chainId); } bool adjustDecimals(char *src, diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index 386c8fd..de51b1c 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -42,20 +42,20 @@ void getEthAddressFromKey(cx_ecfp_public_key_t *publicKey, uint8_t *out, cx_sha3 void getEthAddressStringFromKey(cx_ecfp_public_key_t *publicKey, char *out, cx_sha3_t *sha3Context, - chain_config_t *chain_config); + uint64_t chainId); void u64_to_string(uint64_t src, char *dst, uint8_t dst_size); void getEthAddressStringFromBinary(uint8_t *address, char *out, cx_sha3_t *sha3Context, - chain_config_t *chain_config); + uint64_t chainId); void getEthDisplayableAddress(uint8_t *in, char *out, size_t out_len, cx_sha3_t *sha3, - chain_config_t *chain_config); + uint64_t chainId); bool adjustDecimals(char *src, uint32_t srcLength, diff --git a/src_features/getPublicKey/cmd_getPublicKey.c b/src_features/getPublicKey/cmd_getPublicKey.c index 3d9118b..ef521c4 100644 --- a/src_features/getPublicKey/cmd_getPublicKey.c +++ b/src_features/getPublicKey/cmd_getPublicKey.c @@ -50,7 +50,7 @@ void handleGetPublicKey(uint8_t p1, getEthAddressStringFromKey(&tmpCtx.publicKeyContext.publicKey, tmpCtx.publicKeyContext.address, &global_sha3, - chainConfig); + chainConfig->chainId); #ifndef NO_CONSENT if (p1 == P1_NON_CONFIRM) #endif // NO_CONSENT diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 0b7377a..cec6536 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -419,7 +419,7 @@ void finalizeParsing(bool direct) { displayBuffer, sizeof(displayBuffer), &global_sha3, - chainConfig); + chainConfig->chainId); compareOrCopy(strings.common.fullAddress, sizeof(strings.common.fullAddress), displayBuffer, diff --git a/src_features/stark_sign/ui_flow_stark_sign.c b/src_features/stark_sign/ui_flow_stark_sign.c index 854b334..4ef5ddc 100644 --- a/src_features/stark_sign/ui_flow_stark_sign.c +++ b/src_features/stark_sign/ui_flow_stark_sign.c @@ -183,7 +183,7 @@ UX_STEP_NOCB_INIT( strings.tmp.tmp, sizeof(strings.tmp.tmp), &global_sha3, - chainConfig), + chainConfig->chainId), { .title = "Cond. Address", .text = strings.tmp.tmp diff --git a/src_plugins/erc20/erc20_plugin.c b/src_plugins/erc20/erc20_plugin.c index b17a741..7903402 100644 --- a/src_plugins/erc20/erc20_plugin.c +++ b/src_plugins/erc20/erc20_plugin.c @@ -216,7 +216,7 @@ void erc20_plugin_call(int message, void *parameters) { msg->msg, msg->msgLength, msg->pluginSharedRW->sha3, - chainConfig); + chainConfig->chainId); } msg->result = ETH_PLUGIN_RESULT_OK; diff --git a/src_plugins/erc721/erc721_plugin.c b/src_plugins/erc721/erc721_plugin.c index a7dddb4..9d04d74 100644 --- a/src_plugins/erc721/erc721_plugin.c +++ b/src_plugins/erc721/erc721_plugin.c @@ -5,12 +5,6 @@ #include "ethUtils.h" #include "utils.h" -void getEthDisplayableAddress(uint8_t *in, - char *out, - size_t out_len, - cx_sha3_t *sha3, - chain_config_t *chain_config); - typedef struct erc721_parameters_t { uint8_t selectorIndex; uint8_t address[ADDRESS_LENGTH]; @@ -126,7 +120,7 @@ void erc721_plugin_call(int message, void *parameters) { msg->msg, msg->msgLength, &global_sha3, - chainConfig); + chainConfig->chainId); msg->result = ETH_PLUGIN_RESULT_OK; break; @@ -136,7 +130,7 @@ void erc721_plugin_call(int message, void *parameters) { msg->msg, msg->msgLength, &global_sha3, - chainConfig); + chainConfig->chainId); msg->result = ETH_PLUGIN_RESULT_OK; break; diff --git a/src_plugins/eth2/eth2_plugin.c b/src_plugins/eth2/eth2_plugin.c index 4b4dd3a..29ea299 100644 --- a/src_plugins/eth2/eth2_plugin.c +++ b/src_plugins/eth2/eth2_plugin.c @@ -121,7 +121,7 @@ void eth2_plugin_call(int message, void *parameters) { tmp, sizeof(tmp), msg->pluginSharedRW->sha3, - chainConfig); + chainConfig->chainId); // Copy back the string to the global variable. strlcpy(context->deposit_address, tmp, ETH2_DEPOSIT_PUBKEY_LENGTH); diff --git a/src_plugins/starkware/starkware_plugin.c b/src_plugins/starkware/starkware_plugin.c index 0b2e980..872ea0d 100644 --- a/src_plugins/starkware/starkware_plugin.c +++ b/src_plugins/starkware/starkware_plugin.c @@ -340,7 +340,7 @@ void starkware_print_asset_contract(char *destination, size_t destinationLength) destination, destinationLength, &global_sha3, - chainConfig); + chainConfig->chainId); } else { strlcpy(destination, "UNKNOWN", destinationLength); } @@ -364,7 +364,7 @@ void starkware_get_source_address(char *destination) { io_seproxyhal_io_heartbeat(); destination[0] = '0'; destination[1] = 'x'; - getEthAddressStringFromKey(&publicKey, destination + 2, &global_sha3, chainConfig); + getEthAddressStringFromKey(&publicKey, destination + 2, &global_sha3, chainConfig->chainId); destination[42] = '\0'; } @@ -704,7 +704,7 @@ void starkware_plugin_call(int message, void *parameters) { msg->msg, msg->msgLength, &global_sha3, - chainConfig); + chainConfig->chainId); } msg->result = ETH_PLUGIN_RESULT_OK; break; @@ -718,7 +718,7 @@ void starkware_plugin_call(int message, void *parameters) { msg->msg, msg->msgLength, &global_sha3, - chainConfig); + chainConfig->chainId); break; case STARKWARE_ESCAPE: strlcpy(msg->title, "Amount", msg->titleLength); @@ -786,7 +786,7 @@ void starkware_plugin_call(int message, void *parameters) { msg->msg, msg->msgLength, &global_sha3, - chainConfig); + chainConfig->chainId); break; case STARKWARE_WITHDRAW_AND_MINT: strlcpy(msg->title, "Asset Contract", msg->titleLength); From 15d729532e80704444e0db0eff3d5654a6510c46 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Tue, 31 Aug 2021 10:33:46 +0200 Subject: [PATCH 24/33] Fix broken array --- src_common/network.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src_common/network.c b/src_common/network.c index 110909c..e226db4 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -20,9 +20,9 @@ const network_info_t NETWORK_MAPPING[] = { {.chain_id = 137, .name = "Polygon", .ticker = "MATIC "}, {.chain_id = 250, .name = "Fantom", .ticker = "FTM "}, {.chain_id = 42220, .name = "Celo", .ticker = "CELO "}, - {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}}, + {.chain_id = 43114, .name = "Avalanche", .ticker = "AVAX "}, {.chain_id = 44787, .name = "Celo Alfajores", .ticker = "aCELO "}, - {.chain_id = 62320, .name = "Celo Baklava", .ticker = "bCELO "}; + {.chain_id = 62320, .name = "Celo Baklava", .ticker = "bCELO "}}; uint32_t get_chain_id(void) { uint32_t chain_id = 0; From 7ddd32f83d8f2ad2356ac91a46796cbe63feb4e0 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Tue, 31 Aug 2021 19:31:56 +0200 Subject: [PATCH 25/33] Improve plugin SDK version management --- src/eth_plugin_handler.c | 2 +- src/eth_plugin_interface.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index 725469c..d20e927 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -153,7 +153,7 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter) { case ETH_PLUGIN_INIT_CONTRACT: PRINTF("-- PLUGIN INIT CONTRACT --\n"); ((ethPluginInitContract_t *) parameter)->interfaceVersion = - ETH_PLUGIN_INTERFACE_VERSION_1; + ETH_PLUGIN_INTERFACE_VERSION_LATEST; ((ethPluginInitContract_t *) parameter)->result = ETH_PLUGIN_RESULT_UNAVAILABLE; ((ethPluginInitContract_t *) parameter)->pluginSharedRW = &pluginRW; ((ethPluginInitContract_t *) parameter)->pluginSharedRO = &pluginRO; diff --git a/src/eth_plugin_interface.h b/src/eth_plugin_interface.h index 2698e21..94d7b7e 100644 --- a/src/eth_plugin_interface.h +++ b/src/eth_plugin_interface.h @@ -12,6 +12,7 @@ // Interface version. To be updated everytime we introduce breaking changes to the plugin interface. typedef enum { ETH_PLUGIN_INTERFACE_VERSION_1 = 1, // Version 1 + ETH_PLUGIN_INTERFACE_VERSION_LATEST = 2, } eth_plugin_interface_version_t; typedef enum { From bcd2ada59c15bea272e95dba4d3c0c1d888100df Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Tue, 31 Aug 2021 19:36:01 +0200 Subject: [PATCH 26/33] Update plugin SDK submodule --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 1abd84e..0bbba66 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 1abd84e5dd57b611ae4e2468c0d341e469a95937 +Subproject commit 0bbba66f756b56500a17b3b6d2267ed5c4d95940 From 248877f2e3bc89089ed86174eabfb8d3d0b64d46 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Tue, 31 Aug 2021 19:37:51 +0200 Subject: [PATCH 27/33] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 057e371..5ff75b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Added better display for bigger chainIDs. +### Changed + +- Small refactor of `getEthDisplayableAddress` helper +- Improve Zemu tests to get parallelization +- Increased plugin interface to version 2 + ## [1.9.2](https://github.com/ledgerhq/app-ethereum/compare/1.9.0...1.9.2) - 2021-8-11 ### Added From 1588e4f35850adc1917fd699ddab1f58724cb51e Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Wed, 1 Sep 2021 20:03:37 +0200 Subject: [PATCH 28/33] Fix elfs gathering for CI tests --- .github/workflows/ci-workflow.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 5c2c5b3..9c19c99 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -124,13 +124,17 @@ jobs: - name: Build/Install build js deps run: | cd tests && yarn install + - name: Create tmp folder for artifacts + run: | + mkdir tests/elfs - name: Download app binaries uses: actions/download-artifact@v2 with: path: tests/elfs - name: Gather elfs run: | - cp `find . -name "*.elf"` ./tests/elfs + cd tests/elfs + cp `find . -name "*.elf"` . - name: Run zemu tests run: | cd tests && yarn test From 52ba459f1ab1b790acb2809c0950415dae7c9ece Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 3 Sep 2021 14:48:32 +0200 Subject: [PATCH 29/33] Update version and Changelog --- CHANGELOG.md | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff75b9..d88c654 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [1.9.3](https://github.com/ledgerhq/app-ethereum/compare/1.9.2...1.9.3) - 2021-8-26 +## [1.9.3](https://github.com/ledgerhq/app-ethereum/compare/1.9.2...1.9.3) - 2021-9-03 ### Added diff --git a/Makefile b/Makefile index 386848b..e1a4de2 100755 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ APPVERSION_M=1 APPVERSION_N=9 APPVERSION_P=3 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) -APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION)-rc1 +APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) ifeq ($(CHAIN),) CHAIN=ethereum From fb06484305f90a608cefde00558892a9e0dca6d5 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 3 Sep 2021 14:53:16 +0200 Subject: [PATCH 30/33] Remove Flare and Flare Coston --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e1a4de2..bb6b9f0 100755 --- a/Makefile +++ b/Makefile @@ -384,4 +384,4 @@ include $(BOLOS_SDK)/Makefile.rules dep/%.d: %.c Makefile listvariants: - @echo VARIANTS CHAIN ethereum ropsten ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain pirl akroma atheios callisto ethersocial ether1 gochain musicoin ethergem mix ellaism reosc hpb tomochain dexon volta ewc thundercore flare flare_coston theta bsc + @echo VARIANTS CHAIN ethereum ropsten ethereum_classic expanse poa rsk rsk_testnet ubiq wanchain pirl akroma atheios callisto ethersocial ether1 gochain musicoin ethergem mix ellaism reosc hpb tomochain dexon volta ewc thundercore bsc From fd48a2c1a2c8ddb19061737dc528745504b95df4 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 3 Sep 2021 14:55:28 +0200 Subject: [PATCH 31/33] Remove theta, flare and flare_coston --- CHANGELOG.md | 2 ++ Makefile | 6 +----- src/chainConfig.h | 1 - src/main.c | 6 ------ src/tokens.c | 6 ------ src/tokens.h | 2 -- 6 files changed, 3 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d88c654..f919c0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Small refactor of `getEthDisplayableAddress` helper - Improve Zemu tests to get parallelization - Increased plugin interface to version 2 +- Remove support for Theta and Flare +- Add support for Songbird ## [1.9.2](https://github.com/ledgerhq/app-ethereum/compare/1.9.0...1.9.2) - 2021-8-11 diff --git a/Makefile b/Makefile index bb6b9f0..06ed804 100755 --- a/Makefile +++ b/Makefile @@ -203,17 +203,13 @@ else ifeq ($(CHAIN),flare_coston) APP_LOAD_PARAMS += --path "44'/554'" --path "44'/60'" DEFINES += CHAINID_UPCASE=\"FLARE\" CHAINID_COINNAME=\"FLR\" CHAIN_KIND=CHAIN_KIND_FLARE CHAIN_ID=16 APPNAME = "Flare Coston" -else ifeq ($(CHAIN),theta) -APP_LOAD_PARAMS += --path "44'/500'" -DEFINES += CHAINID_UPCASE=\"THETA\" CHAINID_COINNAME=\"THETA\" CHAIN_KIND=CHAIN_KIND_THETA CHAIN_ID=500 -APPNAME = "Theta" else ifeq ($(CHAIN),bsc) APP_LOAD_PARAMS += --path "44'/60'" DEFINES += CHAINID_UPCASE=\"BSC\" CHAINID_COINNAME=\"BNB\" CHAIN_KIND=CHAIN_KIND_BSC CHAIN_ID=56 APPNAME = "Binance Smart Chain" else ifeq ($(filter clean,$(MAKECMDGOALS)),) -$(error Unsupported CHAIN - use ethereum, ropsten, ethereum_classic, expanse, poa, artis_sigma1, artis_tau1, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, gochain, mix, reosc, hpb, tomochain, tobalaba, dexon, volta, ewc, webchain, thundercore, flare, flare_coston, theta) +$(error Unsupported CHAIN - use ethereum, ropsten, ethereum_classic, expanse, poa, artis_sigma1, artis_tau1, rsk, rsk_testnet, ubiq, wanchain, kusd, musicoin, pirl, akroma, atheios, callisto, ethersocial, ellaism, ether1, ethergem, gochain, mix, reosc, hpb, tomochain, tobalaba, dexon, volta, ewc, webchain, thundercore) endif endif diff --git a/src/chainConfig.h b/src/chainConfig.h index 907ba28..b99b365 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -54,7 +54,6 @@ typedef enum chain_kind_e { CHAIN_KIND_WEBCHAIN, CHAIN_KIND_THUNDERCORE, CHAIN_KIND_FLARE, - CHAIN_KIND_THETA, CHAIN_KIND_BSC } chain_kind_t; diff --git a/src/main.c b/src/main.c index e9203f2..41237d7 100644 --- a/src/main.c +++ b/src/main.c @@ -250,9 +250,6 @@ tokenDefinition_t *getKnownToken(uint8_t *contractAddress) { case CHAIN_KIND_FLARE: numTokens = NUM_TOKENS_FLARE; break; - case CHAIN_KIND_THETA: - numTokens = NUM_TOKENS_THETA; - break; case CHAIN_KIND_BSC: numTokens = NUM_TOKENS_BSC; break; @@ -352,9 +349,6 @@ tokenDefinition_t *getKnownToken(uint8_t *contractAddress) { case CHAIN_KIND_FLARE: currentToken = (tokenDefinition_t *) PIC(&TOKENS_FLARE[i]); break; - case CHAIN_KIND_THETA: - currentToken = (tokenDefinition_t *) PIC(&TOKENS_THETA[i]); - break; case CHAIN_KIND_BSC: currentToken = (tokenDefinition_t *) PIC(&TOKENS_BSC[i]); break; diff --git a/src/tokens.c b/src/tokens.c index 63667e8..3142bed 100644 --- a/src/tokens.c +++ b/src/tokens.c @@ -3853,10 +3853,6 @@ const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = { 0x91, 0x9a, 0xbc, 0x23, 0x5c, 0xa4, 0xfd, 0x7f, 0x72, 0xc1}, "TGT ", 1}, - {{0x38, 0x83, 0xf5, 0xe1, 0x81, 0xfc, 0xca, 0xf8, 0x41, 0x0f, - 0xa6, 0x1e, 0x12, 0xb5, 0x9b, 0xad, 0x96, 0x3f, 0xb6, 0x45}, - "THETA ", - 18}, {{0x1c, 0xb3, 0x20, 0x9d, 0x45, 0xb2, 0xa6, 0x0b, 0x7f, 0xbc, 0xa1, 0xcc, 0xdb, 0xf8, 0x7f, 0x67, 0x42, 0x37, 0xa4, 0xaa}, "THR ", @@ -4564,8 +4560,6 @@ const tokenDefinition_t const TOKENS_THUNDERCORE[NUM_TOKENS_THUNDERCORE] = {}; const tokenDefinition_t const TOKENS_FLARE[NUM_TOKENS_FLARE] = {}; -const tokenDefinition_t const TOKENS_THETA[NUM_TOKENS_THETA] = {}; - const tokenDefinition_t const TOKENS_BSC[NUM_TOKENS_BSC] = {}; #endif diff --git a/src/tokens.h b/src/tokens.h index 3573cd3..7b34b20 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -95,7 +95,6 @@ static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { #define NUM_TOKENS_WEBCHAIN 0 #define NUM_TOKENS_THUNDERCORE 0 #define NUM_TOKENS_FLARE 0 -#define NUM_TOKENS_THETA 0 #define NUM_TOKENS_BSC 0 extern tokenDefinition_t const TOKENS_AKROMA[NUM_TOKENS_AKROMA]; @@ -129,7 +128,6 @@ extern tokenDefinition_t const TOKENS_ARTIS_TAU1[NUM_TOKENS_ARTIS_TAU1]; extern tokenDefinition_t const TOKENS_WEBCHAIN[NUM_TOKENS_WEBCHAIN]; extern tokenDefinition_t const TOKENS_THUNDERCORE[NUM_TOKENS_THUNDERCORE]; extern tokenDefinition_t const TOKENS_FLARE[NUM_TOKENS_FLARE]; -extern tokenDefinition_t const TOKENS_THETA[NUM_TOKENS_THETA]; extern tokenDefinition_t const TOKENS_BSC[NUM_TOKENS_BSC]; #endif /* HAVE_TOKENS_LIST */ From 61bd1b2b88e01dafe939b80e5d59e27d87b7e459 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 3 Sep 2021 15:06:49 +0200 Subject: [PATCH 32/33] Update plugin sdk --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 0bbba66..3d9433e 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 0bbba66f756b56500a17b3b6d2267ed5c4d95940 +Subproject commit 3d9433e3a0e4c034938f767fe8be928d554536de From 957ce4936a2507ef57e56b951d48669daf78e5cd Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 3 Sep 2021 15:16:42 +0200 Subject: [PATCH 33/33] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f919c0a..89e3920 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added - Added better display for bigger chainIDs. +- Added support for Songbird. +- Added support for Celo. ### Changed @@ -17,7 +19,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Improve Zemu tests to get parallelization - Increased plugin interface to version 2 - Remove support for Theta and Flare -- Add support for Songbird ## [1.9.2](https://github.com/ledgerhq/app-ethereum/compare/1.9.0...1.9.2) - 2021-8-11