From 52769eb522c1f2d26657255d65660e674b200d66 Mon Sep 17 00:00:00 2001 From: Coline Date: Tue, 28 Jun 2022 10:37:07 +0200 Subject: [PATCH] feat: erc721 test with screen and path argument for binary --- tests/speculos/conftest.py | 7 +- .../speculos/ethereum_client/ethereum_cmd.py | 15 +- .../erc721/nanox/transfer_erc721/00000.png | Bin 0 -> 414 bytes .../erc721/nanox/transfer_erc721/00001.png | Bin 0 -> 328 bytes .../erc721/nanox/transfer_erc721/00002.png | Bin 0 -> 710 bytes .../erc721/nanox/transfer_erc721/00003.png | Bin 0 -> 442 bytes .../erc721/nanox/transfer_erc721/00004.png | Bin 0 -> 770 bytes .../erc721/nanox/transfer_erc721/00005.png | Bin 0 -> 352 bytes .../erc721/nanox/transfer_erc721/00006.png | Bin 0 -> 463 bytes .../erc721/nanox/transfer_erc721/00007.png | Bin 0 -> 472 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 328 bytes .../00002.png | Bin 0 -> 710 bytes .../00003.png | Bin 0 -> 457 bytes .../00004.png | Bin 0 -> 770 bytes .../00005.png | Bin 0 -> 352 bytes .../00006.png | Bin 0 -> 463 bytes .../00007.png | Bin 0 -> 472 bytes tests/speculos/test_erc721.py | 174 ++++++++++++++++++ 19 files changed, 188 insertions(+), 8 deletions(-) create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00000.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00001.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00002.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00003.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00004.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00005.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00006.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721/00007.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00000.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00001.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00002.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00003.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00004.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00005.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00006.png create mode 100644 tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00007.png create mode 100644 tests/speculos/test_erc721.py diff --git a/tests/speculos/conftest.py b/tests/speculos/conftest.py index dbf815f..e5b5a3b 100644 --- a/tests/speculos/conftest.py +++ b/tests/speculos/conftest.py @@ -14,15 +14,18 @@ VERSION = {"nanos": "2.1", "nanox": "2.0.2", "nanosp": "1.0"} def pytest_addoption(parser): - # nanos or nanox + # nanos, nanox, nanosp parser.addoption("--model", action="store", default="nanos") # qt: default, requires a X server # headless: nothing is displayed parser.addoption("--display", action="store", default="qt") + path: str = SCRIPT_DIR.parent.parent / "bin" / "app.elf" + parser.addoption("--path", action="store", default=path) + @pytest.fixture() def client(pytestconfig): - file_path = SCRIPT_DIR.parent.parent / "bin" / "app.elf" + file_path = pytestconfig.getoption("path") model = pytestconfig.getoption("model") args = ['--log-level', 'speculos:DEBUG','--model', model, '--display', pytestconfig.getoption("display"), '--sdk', VERSION[model]] diff --git a/tests/speculos/ethereum_client/ethereum_cmd.py b/tests/speculos/ethereum_client/ethereum_cmd.py index c2d81ec..2bbb133 100644 --- a/tests/speculos/ethereum_client/ethereum_cmd.py +++ b/tests/speculos/ethereum_client/ethereum_cmd.py @@ -101,18 +101,21 @@ class EthereumCommand: def send_apdu(self, apdu: bytes) -> bytes: try: - response = self.client._apdu_exchange( - apdu - ) + self.client.apdu_exchange(cla=apdu[0], ins=apdu[1], + p1=apdu[2], p2=apdu[3], + data=apdu[5:]) except ApduException as error: raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) @contextmanager - def send_apdu_context(self, apdu: bytes) -> bytes: + def send_apdu_context(self, apdu: bytes, result: List = list()) -> bytes: try: - with self.client._apdu_exchange(apdu) as exchange: - yield exchange + with self.client.apdu_exchange_nowait(cla=apdu[0], ins=apdu[1], + p1=apdu[2], p2=apdu[3], + data=apdu[5:]) as exchange: + yield exchange + result.append(exchange.receive()) #response: bytes = exchange.receive() diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00000.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*?Yj*NZe%~CWfG*OPo;i-j_O-xVE4x(*ytjw|n)zfm3qM^Fc~!IW3PH z=3&G7^uB>>R8cN7G`M%~8~Dv(y@wMl0ef=JL30x+0gXjJr4(YpS&Ni_M+%mJpk>|= zECB!jJVXC(X!Xzb!Z-auExGj4Gr3kE;j(mP_ElSOM$PyQq6$PO@+x6nNKV|U z#l4(~Y5SpCCZ^*LJP2>B+6ihm$fAFnjZlmJ&E%jbt58n|L6(ER5?%lR0000000000 a_?s`=hm}oltDK<#0000u3sS>)oAq|}pu!|U%Xyl{BVJnpv4cf)=CuT#aiY%s4dJa&LtOh0Mi z?5(?URdco49q=@vRsTj`elO8#QWO6XEUo-URwWFLa3>XkyHq`)3`f>nTI+0hKA)Bg zQf)2M741cLtBgGH%3&4E9!j;#X!Q63C%C*esOnnRR$(VC)b{mic&n&Zen%GL88AIi zfP(_;?w(e2gPs-rQ@)V7z~d59ZAz;rq>Za(pSTZt2u*E|NT$nX3E{z(gaMS9mn{7iIlPSdK?$XqOpdcB@gp z-T~mr(>m66cO?@&_XO)5;6xH1)lagmoK;(~-T?*v90Qbdqv1mS!iU;XwsOzzzcgb+dqA>>*913aAu#YLiblK=n!07*qoM6N<$f)1EUTL1t6 literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00003.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8c446ebafe3ddbebf6ef6a978ee29a2ba4b852 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|?+Yba4!+nDh2#blwpK9*2vW zrq+r7y_59+cC_exmPnqL`~GK_P;;l^%xQb#fVvKp#lM?oc&tRmDWlz%@l%D$%H8cI z&mtd7e*b2A+pJ{ji=2&N1%3{_QAx)VB=!AQoe*f6)o&BqW7uli_OT_BO?k4|<)>?R z)mY!U@+4o{dqdB3^~o^Ot6>Ur-~{J5f}>^sZ<4u7fe%RTUQM3c6xHb;|$d zUVo=JcS?GeZN#OU?2ofcKYU~bx_*VmjoB-jABE1?QLdKt@w@+lhif^yYmNv0d#tv- z;nwU0vDRB}|7qgf@c!?r+>}bsysULnD^8aRU$|F1|I+8sb+a2DSmdKI;Vst0BAPE6#xJL literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00004.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..23f2a45049fefdbf9ab903d8934d9b600a527185 GIT binary patch literal 770 zcmV+d1O5DoP)kx>KP=*pJ4EMEcV)Kdf9^}NbUh?D$=mK0WI7dZ_ zfro)lHfVTa**|J?bcUPt4pT&;FlbvjDHF6 zjjPtIN3fntRd?vS2_r)?i{WeS#rtqb{z0}6n4NGF9#~~farg#ibyr8Zne6_X46EzD z0Z;>nyyR-~a&dQH){ITGu)FeA?cR05;M`OTn)N&rL!%nMqFCo=+{wNHxH5CE19m#> zn{{l%6|eOEtKa+?o(klSgd7G!Evq9{QQE1+oNd$cu+jDHht62v2FhdwW{?^E+fYKy z=-&*-;7OQ;o`n1GlgRLT)zC&de0i;&qmdG+C4;m$X8raq2YMf*Rv*6>gf{?3-qPxl z3DpM#9Jeoet6B~-%4_~HD^)lCSL8`>?gym^xd5%kF%P;{=-e`ybU-aNA`h#kDbUYg z0Hj4LtA<@Jnzp!EKUpWE(iN67hbu@YbE=^-`b|q$4IQWJ;V18qHYHUez07$b!~fi? z=_-z*dw^`|N|Z<@l_@xUappVYcQ@vMYyo#fLI@#*5K^=7m-351PMJ>0*3lvm$fei0 zzU;02*lPe1_N!e>>y5nW zjo3fQb}JyvLNb*fe}6u&itV`p5JCtcgb?x!-+H-TqnD2<+W-In07*qoM6N<$f}Dba4!+nDh2#AYZcrPebDN zH)?zTPpq15J3%r`;9~BU9sjF~wA!}FGU;&xH5uGFyPG*b#8kH9#4ls}Jdf>9&#yE) zli&T|;oZh$pC6wbzMF)EhVo8r-d)cAs_gY&qb9WkZ>_}laW%n5SWMVz1vyO{YV?wr z{&`(siCJ?-T5UG#+%&ZvK$Aa+CYf)!6KtG*Yx0Sjdfj+?^I6~DKZ=d-a+TZhsb^=( zxh?P4nBA=USMg8#;U=En+@J5>+e+mwW!2Y>MUf7tE6mszvVm-dw{vtIDK p@!1%1RX(zP)A<1uKFGlSGfU0fO;0SQbZr0$d%F6$taD0e0sz#{l0^Uj literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00006.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce12bac14e5a62c5d71f7041d7b801af0da1c6f GIT binary patch literal 463 zcmV;=0WkiFP)PX1-8c9O-ZL%1+$9Q)!E`<W;YVljjSKI*t! zAGaCTrOeLdE7oBA>GA;>>2myk>rN`f@hgcnx_9E~odc%)s5F`uXZ7?5rzDx|ZzH6d z>~F>xSfUD9x=1o(uoUS90000000000000000001%`3J~Te_WG%`!N6j002ovPDHLk FV1o5N)s+AM literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00007.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*?Yj*NZe%~CWfG*OPo;i-j_O-xVE4x(*ytjw|n)zfm3qM^Fc~!IW3PH z=3&G7^uB>>R8cN7G`M%~8~Dv(y@wMl0ef=JL30x+0gXjJr4(YpS&Ni_M+%mJpk>|= zECB!jJVXC(X!Xzb!Z-auExGj4Gr3kE;j(mP_ElSOM$PyQq6$PO@+x6nNKV|U z#l4(~Y5SpCCZ^*LJP2>B+6ihm$fAFnjZlmJ&E%jbt58n|L6(ER5?%lR0000000000 a_?s`=hm}oltDK<#0000u3sS>)oAq|}pu!|U%Xyl{BVJnpv4cf)=CuT#aiY%s4dJa&LtOh0Mi z?5(?URdco49q=@vRsTj`elO8#QWO6XEUo-URwWFLa3>XkyHq`)3`f>nTI+0hKA)Bg zQf)2M741cLtBgGH%3&4E9!j;#X!Q63C%C*esOnnRR$(VC)b{mic&n&Zen%GL88AIi zfP(_;?w(e2gPs-rQ@)V7z~d59ZAz;rq>Za(pSTZt2u*E|NT$nX3E{z(gaMS9mn{7iIlPSdK?$XqOpdcB@gp z-T~mr(>m66cO?@&_XO)5;6xH1)lagmoK;(~-T?*v90Qbdqv1mS!iU;XwsOzzzcgb+dqA>>*913aAu#YLiblK=n!07*qoM6N<$f)1EUTL1t6 literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00003.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b34af53fcd4c2abde410f077c7f6ee0d6d53ff3a GIT binary patch literal 457 zcmV;)0XF`LP)aH1MOvfRFde|Kx zk4HM~ZXu0%)_BH!_f^|Abk)(>WUbIS0Ty+MIfG@qEL4#p1T`OdcQM8kRvE?}<{6Ca zwAfu^t+i>+C6R;=YWZ3X1rR}zte)u}G(PPwmT z)k16fil@+F@-3*9OxfU>jA&ZB%HZG9v|CU^c2KQ*06Q+I=XEo$M`IRWWnk!!i> z*{Z z*OM;I{2kx>KP=*pJ4EMEcV)Kdf9^}NbUh?D$=mK0WI7dZ_ zfro)lHfVTa**|J?bcUPt4pT&;FlbvjDHF6 zjjPtIN3fntRd?vS2_r)?i{WeS#rtqb{z0}6n4NGF9#~~farg#ibyr8Zne6_X46EzD z0Z;>nyyR-~a&dQH){ITGu)FeA?cR05;M`OTn)N&rL!%nMqFCo=+{wNHxH5CE19m#> zn{{l%6|eOEtKa+?o(klSgd7G!Evq9{QQE1+oNd$cu+jDHht62v2FhdwW{?^E+fYKy z=-&*-;7OQ;o`n1GlgRLT)zC&de0i;&qmdG+C4;m$X8raq2YMf*Rv*6>gf{?3-qPxl z3DpM#9Jeoet6B~-%4_~HD^)lCSL8`>?gym^xd5%kF%P;{=-e`ybU-aNA`h#kDbUYg z0Hj4LtA<@Jnzp!EKUpWE(iN67hbu@YbE=^-`b|q$4IQWJ;V18qHYHUez07$b!~fi? z=_-z*dw^`|N|Z<@l_@xUappVYcQ@vMYyo#fLI@#*5K^=7m-351PMJ>0*3lvm$fei0 zzU;02*lPe1_N!e>>y5nW zjo3fQb}JyvLNb*fe}6u&itV`p5JCtcgb?x!-+H-TqnD2<+W-In07*qoM6N<$f}Dba4!+nDh2#AYZcrPebDN zH)?zTPpq15J3%r`;9~BU9sjF~wA!}FGU;&xH5uGFyPG*b#8kH9#4ls}Jdf>9&#yE) zli&T|;oZh$pC6wbzMF)EhVo8r-d)cAs_gY&qb9WkZ>_}laW%n5SWMVz1vyO{YV?wr z{&`(siCJ?-T5UG#+%&ZvK$Aa+CYf)!6KtG*Yx0Sjdfj+?^I6~DKZ=d-a+TZhsb^=( zxh?P4nBA=USMg8#;U=En+@J5>+e+mwW!2Y>MUf7tE6mszvVm-dw{vtIDK p@!1%1RX(zP)A<1uKFGlSGfU0fO;0SQbZr0$d%F6$taD0e0sz#{l0^Uj literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00006.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce12bac14e5a62c5d71f7041d7b801af0da1c6f GIT binary patch literal 463 zcmV;=0WkiFP)PX1-8c9O-ZL%1+$9Q)!E`<W;YVljjSKI*t! zAGaCTrOeLdE7oBA>GA;>>2myk>rN`f@hgcnx_9E~odc%)s5F`uXZ7?5rzDx|ZzH6d z>~F>xSfUD9x=1o(uoUS90000000000000000001%`3J~Te_WG%`!N6j002ovPDHLk FV1o5N)s+AM literal 0 HcmV?d00001 diff --git a/tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00007.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721_without_nft_provide_info/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000 Tuple[bytes, bytes, bytes]: + assert len(response) == 65 + + offset: int = 0 + + v: bytes = response[offset] + offset += 1 + + r: bytes = response[offset:offset + 32] + offset += 32 + + s: bytes = response[offset:] + + return (v, r, s) + + +def test_transfer_erc721(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + try: + cmd.set_plugin(plugin=PLUGIN) + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + sleep(0.5) + # Review transaction + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00000.png") + cmd.client.press_and_release('right') + + # NFT Transfer + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00001.png") + cmd.client.press_and_release('right') + + # To + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00002.png") + cmd.client.press_and_release('right') + + # Collection Name + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00003.png") + cmd.client.press_and_release('right') + + # NFT Address + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00004.png") + cmd.client.press_and_release('right') + + # NFT ID + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00005.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00006.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00007.png") + cmd.client.press_and_release('both') + pass + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x25 # 37 + assert r.hex() == "68ba082523584adbfc31d36d68b51d6f209ce0838215026bf1802a8f17dcdff4" + assert s.hex() == "7c92908fa05c8bc86507a3d6a1c8b3c2722ee01c836d89a61df60c1ab0b43fff" + + except ethereum_client.exception.errors.DenyError as error: + assert error.args[0] == '0x6a80' + + +def test_transfer_erc721_without_nft_provide_info(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + try: + cmd.set_plugin(plugin=PLUGIN) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + sleep(0.5) + + # Review transaction + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00000.png") + cmd.client.press_and_release('right') + + # NFT Transfer + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00001.png") + cmd.client.press_and_release('right') + + # To + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00002.png") + cmd.client.press_and_release('right') + + # Collection Name + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00003.png") + cmd.client.press_and_release('right') + + # NFT Address + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00004.png") + cmd.client.press_and_release('right') + + # NFT ID + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00005.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00006.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721_without_nft_provide_info/00007.png") + cmd.client.press_and_release('both') + pass + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x25 # 37 + assert r.hex() == "68ba082523584adbfc31d36d68b51d6f209ce0838215026bf1802a8f17dcdff4" + assert s.hex() == "7c92908fa05c8bc86507a3d6a1c8b3c2722ee01c836d89a61df60c1ab0b43fff" + + except ethereum_client.exception.errors.DenyError as error: + assert error.args[0] == '0x6a80' + + +def test_transfer_erc721_without_set_plugin(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + try: + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + pass + + except ethereum_client.exception.errors.UnknownDeviceError as error: + assert error.args[0] == '0x6a80' \ No newline at end of file