diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00000.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00000.png new file mode 120000 index 0000000..eaca370 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00000.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00000.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00001.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00001.png new file mode 120000 index 0000000..3f02420 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00001.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00001.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00002.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00002.png new file mode 120000 index 0000000..55b219f --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00002.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00002.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00003.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00003.png new file mode 100644 index 0000000..b34af53 Binary files /dev/null and b/tests/snapshots/nanox_erc721_transfer_wo_info/00003.png differ diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00004.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00004.png new file mode 120000 index 0000000..4e66c9a --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00004.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00004.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00005.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00005.png new file mode 120000 index 0000000..b538cb6 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00005.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00005.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00006.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00006.png new file mode 120000 index 0000000..9d4b343 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00006.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00006.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00007.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00007.png new file mode 120000 index 0000000..8851ec8 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00007.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00007.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00008.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00008.png new file mode 120000 index 0000000..7faf831 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00008.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00008.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00009.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00009.png new file mode 120000 index 0000000..d3f938b --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00009.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00009.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer_wo_info/00010.png b/tests/snapshots/nanox_erc721_transfer_wo_info/00010.png new file mode 120000 index 0000000..8e81364 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer_wo_info/00010.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00010.png \ No newline at end of file diff --git a/tests/src/erc721.test.js b/tests/src/erc721.test.js index 1b9f575..9dca820 100644 --- a/tests/src/erc721.test.js +++ b/tests/src/erc721.test.js @@ -1,25 +1,46 @@ import "core-js/stable"; import "regenerator-runtime/runtime"; import Zemu from '@zondax/zemu'; +import { TransportStatusError } from "@ledgerhq/errors"; import { waitForAppScreen, zemu, nano_models, apdu_as_string, send_apdu } from './test.fixture'; +// Only LNX const model = nano_models[1]; +const set_plugin = apdu_as_string('e01600007301010645524337323160f80121c31a0d46b5279700f9df786054aa5ee542842e0e0000000000000001000147304502202e2282d7d3ea714da283010f517af469e1d59654aaee0fc438f017aa557eaea50221008b369679381065bbe01135723a4f9adb229295017d37c4d30138b90a51cf6ab6'); +const provide_nft_info = apdu_as_string('e01400007001010752617269626c6560f80121c31a0d46b5279700f9df786054aa5ee500000000000000010001473045022025696986ef5f0ee2f72d9c6e41d7e2bf2e4f06373ab26d73ebe326c7fd4c7a6602210084f6b064d8750ae68ed5dd012296f37030390ec06ff534c5da6f0f4a4460af33'); +const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f88a0a852c3ce1ec008301f5679460f80121c31a0d46b5279700f9df786054aa5ee580b86442842e0e0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c000000000000000000000000000000000000000000000000'); +const sign_more = apdu_as_string('e00480000b0000000000112999018080'); + test('[Nano ' + model.letter + '] Transfer ERC-721', zemu(model, async (sim, eth) => { + const current_screen = sim.getMainMenuSnapshot(); + await send_apdu(eth.transport, set_plugin); + await send_apdu(eth.transport, provide_nft_info); + await send_apdu(eth.transport, sign_first); + let sign_promise = send_apdu(eth.transport, sign_more); - const set_plugin = apdu_as_string('e01600007301010645524337323160f80121c31a0d46b5279700f9df786054aa5ee542842e0e0000000000000001000147304502202e2282d7d3ea714da283010f517af469e1d59654aaee0fc438f017aa557eaea50221008b369679381065bbe01135723a4f9adb229295017d37c4d30138b90a51cf6ab6'); - const provide_nft_info = apdu_as_string('e01400007001010752617269626c6560f80121c31a0d46b5279700f9df786054aa5ee500000000000000010001473045022025696986ef5f0ee2f72d9c6e41d7e2bf2e4f06373ab26d73ebe326c7fd4c7a6602210084f6b064d8750ae68ed5dd012296f37030390ec06ff534c5da6f0f4a4460af33'); - const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f88a0a852c3ce1ec008301f5679460f80121c31a0d46b5279700f9df786054aa5ee580b86442842e0e0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c000000000000000000000000000000000000000000000000'); - const sign_more = apdu_as_string('e00480000b0000000000112999018080'); + await waitForAppScreen(sim, current_screen); + await sim.navigateAndCompareSnapshots('.', model.name + '_erc721_transfer', [8, -1, 0]); - const current_screen = sim.getMainMenuSnapshot(); - await send_apdu(eth.transport, set_plugin); - await send_apdu(eth.transport, provide_nft_info); - await send_apdu(eth.transport, sign_first); - let sign_promise = send_apdu(eth.transport, sign_more); - - await waitForAppScreen(sim, current_screen); - await sim.navigateAndCompareSnapshots('.', model.name + '_erc721_transfer', [8, -1, 0]); - - await sign_promise; + await sign_promise; +})); + +test('[Nano ' + model.letter + '] Transfer ERC-721 w/o NFT_PROVIDE_INFORMATION', zemu(model, async(sim, eth) => { + const current_screen = sim.getMainMenuSnapshot(); + await send_apdu(eth.transport, set_plugin); + await send_apdu(eth.transport, sign_first); + let sign_promise = send_apdu(eth.transport, sign_more); + + await waitForAppScreen(sim, current_screen); + await sim.navigateAndCompareSnapshots('.', model.name + '_erc721_transfer_wo_info', [8, -1, 0]); + + await sign_promise; +})); + +test('[Nano ' + model.letter + '] Transfer ERC-721 w/o SET_PLUGIN', zemu(model, async (sim, eth) => { + const current_screen = sim.getMainMenuSnapshot(); + await send_apdu(eth.transport, provide_nft_info); + let sign_tx = send_apdu(eth.transport, sign_first); + + await expect(sign_tx).rejects.toEqual(new TransportStatusError(0x6a80)); })); diff --git a/tests/src/test.fixture.js b/tests/src/test.fixture.js index beffd71..c29dbad 100644 --- a/tests/src/test.fixture.js +++ b/tests/src/test.fixture.js @@ -50,11 +50,11 @@ function apdu_as_string(str) { } async function send_apdu(ts, apdu) { - await ts.send(apdu.cla, - apdu.ins, - apdu.p1, - apdu.p2, - apdu.data); + return ts.send(apdu.cla, + apdu.ins, + apdu.p1, + apdu.p2, + apdu.data); } // Generates a serializedTransaction from a rawHexTransaction copy pasted from etherscan.