From 3c36c41d3ec341cd73c4fcc05729702fc8fc7523 Mon Sep 17 00:00:00 2001 From: greenknot Date: Thu, 20 Jan 2022 09:16:59 +0100 Subject: [PATCH 01/87] enclose COLLECTION_NAME_MAX_LEN and HEADER_SIZE in parentheses to prevent future potential issues. --- src/nft.h | 2 +- src_features/provideNFTInformation/cmd_provideNFTInfo.c | 2 +- src_features/setPlugin/cmd_setPlugin.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nft.h b/src/nft.h index f6b2d67..419f2c1 100644 --- a/src/nft.h +++ b/src/nft.h @@ -6,7 +6,7 @@ // We defined the collection name max length to be the size of a `tokenDefinition_t` and remove the // `ADDRESS_LENGTH` which corresponds to `sizeof(contractAddress`). -#define COLLECTION_NAME_MAX_LEN sizeof(tokenDefinition_t) - ADDRESS_LENGTH +#define COLLECTION_NAME_MAX_LEN (sizeof(tokenDefinition_t) - ADDRESS_LENGTH) typedef struct nftInfo_t { char collectionName[COLLECTION_NAME_MAX_LEN]; diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index a4256a3..55f26cf 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -9,7 +9,7 @@ #define TYPE_SIZE 1 #define VERSION_SIZE 1 #define NAME_LENGTH_SIZE 1 -#define HEADER_SIZE TYPE_SIZE + VERSION_SIZE + NAME_LENGTH_SIZE +#define HEADER_SIZE (TYPE_SIZE + VERSION_SIZE + NAME_LENGTH_SIZE) #define CHAIN_ID_SIZE 8 #define KEY_ID_SIZE 1 diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index d2969f7..7f4f042 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -18,7 +18,7 @@ #define ALGORITHM_ID_SIZE 1 #define SIGNATURE_LENGTH_SIZE 1 -#define HEADER_SIZE TYPE_SIZE + VERSION_SIZE + PLUGIN_NAME_LENGTH_SIZE +#define HEADER_SIZE (TYPE_SIZE + VERSION_SIZE + PLUGIN_NAME_LENGTH_SIZE) #define MIN_DER_SIG_SIZE 67 #define MAX_DER_SIG_SIZE 72 From 6c03be385cc0434e81dfad4089bc83d8a61a90a4 Mon Sep 17 00:00:00 2001 From: greenknot Date: Thu, 20 Jan 2022 09:35:02 +0100 Subject: [PATCH 02/87] use size_t instead of uint8_t to prevent potential integer overflows --- src_features/provideNFTInformation/cmd_provideNFTInfo.c | 6 +++--- src_features/setPlugin/cmd_setPlugin.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index 55f26cf..fefdd88 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -73,7 +73,7 @@ void handleProvideNFTInformation(uint8_t p1, PRINTF("Provisioning currentItemIndex %d\n", tmpCtx.transactionContext.currentItemIndex); - uint8_t offset = 0; + size_t offset = 0; if (dataLength <= HEADER_SIZE) { PRINTF("Data too small for headers: expected at least %d, got %d\n", @@ -108,8 +108,8 @@ void handleProvideNFTInformation(uint8_t p1, offset += NAME_LENGTH_SIZE; // Size of the payload (everything except the signature) - uint8_t payloadSize = HEADER_SIZE + collectionNameLength + ADDRESS_LENGTH + CHAIN_ID_SIZE + - KEY_ID_SIZE + ALGORITHM_ID_SIZE; + size_t payloadSize = HEADER_SIZE + collectionNameLength + ADDRESS_LENGTH + CHAIN_ID_SIZE + + KEY_ID_SIZE + ALGORITHM_ID_SIZE; if (dataLength < payloadSize) { PRINTF("Data too small for payload: expected at least %d, got %d\n", payloadSize, diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index 7f4f042..7615812 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -98,7 +98,7 @@ void handleSetPlugin(uint8_t p1, cx_ecfp_public_key_t pluginKey = {0}; tokenContext_t *tokenContext = &dataContext.tokenContext; - uint8_t offset = 0; + size_t offset = 0; if (dataLength <= HEADER_SIZE) { PRINTF("Data too small for headers: expected at least %d, got %d\n", @@ -135,8 +135,8 @@ void handleSetPlugin(uint8_t p1, offset += PLUGIN_NAME_LENGTH_SIZE; // Size of the payload (everything except the signature) - uint8_t payloadSize = HEADER_SIZE + pluginNameLength + ADDRESS_LENGTH + SELECTOR_SIZE + - CHAIN_ID_SIZE + KEY_ID_SIZE + ALGORITHM_ID_SIZE; + size_t payloadSize = HEADER_SIZE + pluginNameLength + ADDRESS_LENGTH + SELECTOR_SIZE + + CHAIN_ID_SIZE + KEY_ID_SIZE + ALGORITHM_ID_SIZE; if (dataLength < payloadSize) { PRINTF("Data too small for payload: expected at least %d, got %d\n", payloadSize, From ccb316c5f3ef28acf39e53699040443d447c954c Mon Sep 17 00:00:00 2001 From: greenknot Date: Thu, 20 Jan 2022 10:34:52 +0100 Subject: [PATCH 03/87] doc: fix description of PROVIDE NFT INFORMATION --- doc/ethapp.asc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ethapp.asc b/doc/ethapp.asc index 53007b4..5b21fa8 100644 --- a/doc/ethapp.asc +++ b/doc/ethapp.asc @@ -251,9 +251,9 @@ This commands provides a trusted description of an NFT to associate a contract a It shall be run immediately before performing a transaction involving a contract calling this contract address to display the proper nft information to the user if necessary, as marked in GET APP CONFIGURATION flags. -The signature is computed on +The signature is computed on: -type || version || len(collectionName) || collectionName || address || chainId || keyId || algorithmId || len(signature) || signature +type || version || len(collectionName) || collectionName || address || chainId || keyId || algorithmId #### Coding From 74a1e9423016e317b4fdc2f63e6cf6d54d66657a Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 11:54:28 +0100 Subject: [PATCH 04/87] Updated Zemu framework to its latest version --- tests/package.json | 2 +- tests/yarn.lock | 42 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/tests/package.json b/tests/package.json index 98b51ae..1dcfff4 100644 --- a/tests/package.json +++ b/tests/package.json @@ -15,7 +15,7 @@ "@ledgerhq/hw-app-eth": "^6.5.0", "@ledgerhq/hw-transport-http": "^4.74.2", "@ledgerhq/logs": "^5.50.0", - "@zondax/zemu": "0.16.5", + "@zondax/zemu": "^0.21.1", "bignumber.js": "^9.0.0", "bip32-path": "^0.4.2", "core-js": "^3.7.0", diff --git a/tests/yarn.lock b/tests/yarn.lock index 95fdaaf..dd8530e 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -900,6 +900,13 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/runtime@^7.15.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.8.4": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" @@ -2231,15 +2238,17 @@ dependencies: "@types/yargs-parser" "*" -"@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== +"@zondax/zemu@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@zondax/zemu/-/zemu-0.21.1.tgz#528861c8c0908f88d9104406519b5468dd440d91" + integrity sha512-lWsh4ih/BMaEQYbsjXfia1sw2ouXu2nCSNV5QfeCVdvMfmFC9s95imA16P5QwKR1ISAZ55IndwPtmuxTT+xIcA== dependencies: "@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" + axios "^0.22.0" + axios-retry "^3.2.0" dockerode "^3.3.0" elfy "^1.0.0" fs-extra "^10.0.0" @@ -2455,6 +2464,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios-retry@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.2.4.tgz#f447a53c3456f5bfeca18f20c3a3272207d082ae" + integrity sha512-Co3UXiv4npi6lM963mfnuH90/YFLKWWDmoBYfxkHT5xtkSSWNqK9zdG3fw5/CP/dsoKB5aMMJCsgab+tp1OxLQ== + dependencies: + "@babel/runtime" "^7.15.4" + is-retry-allowed "^2.2.0" + axios@^0.19.0: version "0.19.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" @@ -2469,6 +2486,13 @@ axios@^0.21.1: dependencies: follow-redirects "^1.10.0" +axios@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.22.0.tgz#bf702c41fb50fbca4539589d839a077117b79b25" + integrity sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w== + dependencies: + follow-redirects "^1.14.4" + babel-jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" @@ -3776,6 +3800,11 @@ follow-redirects@^1.10.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.14.4: + version "1.14.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" + integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -4376,6 +4405,11 @@ is-regex@^1.1.3: call-bind "^1.0.2" has-symbols "^1.0.2" +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" From 55d26f32f987b981eb32939a6eeb38bbc016442f Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 11:59:51 +0100 Subject: [PATCH 05/87] Updated the test fixture code --- tests/src/test.fixture.js | 56 +++++++++++++++------------------------ 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/tests/src/test.fixture.js b/tests/src/test.fixture.js index 70b8313..2251bdc 100644 --- a/tests/src/test.fixture.js +++ b/tests/src/test.fixture.js @@ -1,4 +1,4 @@ -import Zemu from '@zondax/zemu'; +import Zemu, { DEFAULT_START_OPTIONS, DeviceModel } from '@zondax/zemu'; import Eth from '@ledgerhq/hw-app-eth'; import {RLP} from "ethers/lib/utils"; @@ -8,20 +8,11 @@ async function waitForAppScreen(sim) { await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot(), transactionUploadDelay); } -const sim_options_nanos = { - model: 'nanos', +const sim_options_nano = { + ...DEFAULT_START_OPTIONS, logging: true, X11: true, - startDelay: 5000, - custom: '', -}; - -const sim_options_nanox = { - model: 'nanox', - logging: true, - X11: true, - startDelay: 5000, - custom: '', + startText: 'is ready' }; const Resolve = require('path').resolve; @@ -29,12 +20,14 @@ const Resolve = require('path').resolve; const NANOS_ELF_PATH = Resolve('elfs/ethereum_nanos.elf'); const NANOX_ELF_PATH = Resolve('elfs/ethereum_nanox.elf'); -const NANOS_ETH_LIB = { "Ethereum": NANOS_ELF_PATH }; -const NANOX_ETH_LIB = { "Ethereum": NANOX_ELF_PATH }; - const NANOS_CLONE_ELF_PATH = Resolve("elfs/ethereum_classic_nanos.elf"); const NANOX_CLONE_ELF_PATH = Resolve("elfs/ethereum_classic_nanox.elf"); +const nano_models: DeviceModel[] = [ + { name: 'nanos', letter: 'S', path: NANOS_ELF_PATH, clone_path: NANOS_CLONE_ELF_PATH }, + { name: 'nanox', letter: 'X', path: NANOX_ELF_PATH, clone_path: NANOX_CLONE_ELF_PATH } +]; + const TIMEOUT = 1000000; // Generates a serializedTransaction from a rawHexTransaction copy pasted from etherscan. @@ -66,22 +59,21 @@ function txFromEtherscan(rawTx) { return txType + encoded; } -function zemu(device, func) { +function zemu(device, func, start_clone = false) { return async () => { jest.setTimeout(TIMEOUT); - let zemu_args; - let sim_options; - if(device === "nanos") { - zemu_args = [NANOS_ELF_PATH]; - sim_options = sim_options_nanos; + let elf_path; + let lib_elf; + if (start_clone) { + elf_path = device.clone_path; + lib_elf = { 'Ethereum': device.path }; } else { - zemu_args = [NANOX_ELF_PATH]; - sim_options = sim_options_nanox; + elf_path = device.path; } - const sim = new Zemu(...zemu_args); + const sim = new Zemu(elf_path, lib_elf); try { - await sim.start(sim_options); + await sim.start({...sim_options_nano, model: device.name}); const transport = await sim.getTransport(); await func(sim, new Eth(transport)); } finally { @@ -93,14 +85,8 @@ function zemu(device, func) { module.exports = { zemu, waitForAppScreen, - NANOS_ELF_PATH, - NANOX_ELF_PATH, - NANOS_ETH_LIB, - NANOX_ETH_LIB, - NANOS_CLONE_ELF_PATH, - NANOX_CLONE_ELF_PATH, - sim_options_nanos, - sim_options_nanox, + sim_options_nano, + nano_models, TIMEOUT, txFromEtherscan, -} \ No newline at end of file +} From 15d768c2cb15417abde3064512608f14966d723e Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Fri, 14 Jan 2022 13:55:53 +0100 Subject: [PATCH 06/87] [CI] PR on develop triggers CI --- .github/workflows/ci-workflow.yml | 1 + .github/workflows/lint-workflow.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 9c19c99..ffec8db 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -7,6 +7,7 @@ on: pull_request: branches: - master + - develop jobs: job_build_debug_nano_s: diff --git a/.github/workflows/lint-workflow.yml b/.github/workflows/lint-workflow.yml index ab0e08e..8a349d1 100644 --- a/.github/workflows/lint-workflow.yml +++ b/.github/workflows/lint-workflow.yml @@ -7,6 +7,7 @@ on: pull_request: branches: - master + - develop jobs: job_lint: From 71f124b2ce8b53bc874fa8787ca9073096ac3e71 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Fri, 14 Jan 2022 16:57:46 +0100 Subject: [PATCH 07/87] [CI] Compiling binaries with specific flags --- .github/workflows/ci-workflow.yml | 48 ++++++++++++++++++++++--------- tests/build_local_test_elfs.sh | 2 ++ 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index ffec8db..c3f4562 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -1,6 +1,7 @@ name: Compilation & tests on: + workflow_dispatch: push: branches: - master @@ -103,8 +104,27 @@ jobs: name: scan-build path: scan-build + building_for_e2e_tests: + name: Building binaries for E2E tests + runs-on: ubuntu-latest + container: + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + + steps: + - uses: actions/checkout@v2 + + - name: Build testing binaries + run: cd tests && ./build_local_test_elfs.sh + + - name: Upload app binaries + uses: actions/upload-artifact@v2 + with: + name: e2e_elfs + path: ./tests/elfs/ + jobs-e2e-tests: - needs: [job_build_debug_nano_s, job_build_debug_nano_x] + name: E2E tests + needs: [building_for_e2e_tests] runs-on: ubuntu-latest steps: - name: Test @@ -114,28 +134,30 @@ jobs: echo $DISPLAY - name: Checkout uses: actions/checkout@v2 + - run: sudo apt-get update -y && sudo apt-get install -y libusb-1.0.0 libudev-dev + - name: Install node uses: actions/setup-node@v2 with: node-version: "14.4.0" + - name: Install yarn - run: | - npm install -g yarn + run: npm install -g yarn + - name: Build/Install build js deps - run: | - cd tests && yarn install + run: cd tests && yarn install + - name: Create tmp folder for artifacts - run: | - mkdir tests/elfs + run: mkdir tests/elfs + - name: Download app binaries uses: actions/download-artifact@v2 with: - path: tests/elfs + path: tmp/ + - name: Gather elfs - run: | - cd tests/elfs - cp `find . -name "*.elf"` . + run: cp `find tmp/e2e_elfs/ -name "*.elf"` tests/elfs/ + - name: Run zemu tests - run: | - cd tests && yarn test + run: cd tests && yarn test diff --git a/tests/build_local_test_elfs.sh b/tests/build_local_test_elfs.sh index ab9a264..b040891 100755 --- a/tests/build_local_test_elfs.sh +++ b/tests/build_local_test_elfs.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -e + TESTS_FULL_PATH=$(dirname "$(realpath "$0")") # FILL THESE WITH YOUR OWN SDKs PATHS From f70cb5307403c3d62ab16d810dc2a1fc8925a620 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 12:01:03 +0100 Subject: [PATCH 08/87] Updated approve test --- .../nanos_approve_dai_tokens/00000.png | Bin 541 -> 374 bytes .../nanos_approve_dai_tokens/00001.png | Bin 455 -> 321 bytes .../nanos_approve_dai_tokens/00002.png | Bin 510 -> 346 bytes .../nanos_approve_dai_tokens/00003.png | Bin 790 -> 469 bytes .../nanos_approve_dai_tokens/00004.png | Bin 824 -> 511 bytes .../nanos_approve_dai_tokens/00005.png | Bin 602 -> 391 bytes .../nanos_approve_dai_tokens/00006.png | Bin 606 -> 385 bytes .../nanos_approve_dai_tokens/00007.png | Bin 582 -> 414 bytes .../nanos_approve_dai_tokens/00008.png | Bin 531 -> 340 bytes .../nanox_approve_dai_tokens/00000.png | Bin 636 -> 414 bytes .../nanox_approve_dai_tokens/00001.png | Bin 566 -> 350 bytes .../nanox_approve_dai_tokens/00002.png | Bin 619 -> 377 bytes .../nanox_approve_dai_tokens/00003.png | Bin 1292 -> 759 bytes .../nanox_approve_dai_tokens/00004.png | Bin 737 -> 415 bytes .../nanox_approve_dai_tokens/00005.png | Bin 674 -> 472 bytes .../nanox_approve_dai_tokens/00006.png | Bin 628 -> 365 bytes tests/src/approve.test.js | 55 ++++++++---------- 17 files changed, 24 insertions(+), 31 deletions(-) diff --git a/tests/snapshots/nanos_approve_dai_tokens/00000.png b/tests/snapshots/nanos_approve_dai_tokens/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr6Gw3yxT9y=*pz}G2!d7Fyakw)d{}NDCmoB^+3+mh-U22m`H%;7**er+m7Bpd zT?Xt+`D1t$54H@L0z34TM;pLUc?b>Ii#|hqhY%W|BKvLIoPU|DVyK%x+cG`_sVpbq zH6R&kDUMOHqLV^-iz1lr4D5slo^V$oc0l{^BHn`@v&sS$cP*$NV(Ng?-mE)vDW|9M zw$+gtU=KKlo9YdagVL9`fab02Ci_?aDM0iSN(s6@7BH0u!vM9)pZIX#>8ZB?U6ZWA zGWw+5JpY`4vMLTr??g=njH-Pu08Myp!hj$Mf_3=<8uphehk=wt00000NkvXXu0mjf D`p1b* delta 440 zcmV;p0Z0D90>=Z88Gi-<007z|a3uf$0gg#TK~#7F?ZHuQ)Ib14!Pl1i{s-=l#xXG3 z-6TW^3B}{762J5yiRE6@0|y;?ki>Ey0?MH+I`klkrM^MZF00009 zS}TzCp7_uyRst=gcSHaH0DwR1;_bo6?9n&NL6~H}y&bqFjnOoJe@-(uNbkron}^QH zKI}(F?f`Wx2lsEf^73|oh?3QsuJkboQ-TJI`$3ol$jUwj0e=#Zc24?Kp<-`T+cMSU zFK81UYynzR2rr^}<-U(8rE*@0P_v8Pdq zp@w!rt>z7r*hA{F0koiA^ip+fx62zM?w{rjBacr;Y%7n(-#|W^0000007*qoM6N<$g4-gR(EtDd delta 495 zcmcb`^pAOhWIY=L1H&z)0#ybE#-pAtjv*C{Zx06M-F9GbKIrba=YQkRgHleLx5_a4 zURK+>WUiq7S2v-{TUVIhd9loV(u{S^4m&fu^Qx3PUrLF+`_lF@h-Hd$mP6VvYi{=| z4LrR1iywA`om-OV-qz-rmLZYS#s)%Wyw*mu+k6kZJ<|xQKj)T~;gELOz(m2=MB%fd zku$T=i3<&9F6zkmG8;)tN-aAdZMmrJ<^2dtrI`y8f9;v7oavC}4m8Ei2W05-hrv>2 zM(&CWY=G8UO=L@v(*?66C8gwa?_>kTG$p0p>Fxn)va*zvx~H>e;=)9$oop%hbnZ+B zvg%i|rM%O%nY8fXX_GydKPd7#AC}Mlkne7u2C%i!ti=d#Wzp$P!*#?w0h diff --git a/tests/snapshots/nanos_approve_dai_tokens/00003.png b/tests/snapshots/nanos_approve_dai_tokens/00003.png index 7148c9267e652ed0d06d2dab20f6a153943ab4aa..95968f9f5e037d36d57a0e781990ffcc5c2e0f25 100644 GIT binary patch delta 454 zcmV;%0XhDb2Gs+Q8Gix*0031$=W+l50h~!hK~#90?U>7UgdhxtV^4km2X^5sY&n*M zO44V39APm#fk0kk4%tw(qm z65pd8Gy(HoMwZq6m(v=5Ieg!VzdHuay(|tYTD(9FJ_KJwt$z~{?c2}3Th@TdmV^xY*5|mPd9;oeQ9}(mxQziA)cmfm(w43QlWz%r_Eu wr;O;vMPJC>RGcy*1}Y{=k|arzBt%5?0eW6y!G_G2N&o-=07*qoM6N<$g5fvT2><{9 literal 790 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfiTqba4!+V0?Qput+LW#N}Wx z%hvy_*WGzP9@_PAnuEc#RDqIZKbERby0KU6Ym4yQFD^p6uPZK?v&B{2cH)tDrZPW# z{cr4@!o1(ZNodlJ?zYuZdRafzrOc!$zt(U@$@%d1j0F#y+xVsSEn%F=E18l}q2ey*czFBdpAKo6 z4rvo3r6yFCvCB2`7@fG&%EK#dWMZ>h`TLcIGi^M)Cls6yM;e*jacP6wo^#?t!x>lJ z6FES~Tx>XF%c=3+RAI9<&?Wm9G0v<9;_rNWt~Z={ck;xA5Azy6En}Q{S2)|@+1W;O z-V<-;&EetA=i4)JVdD2EKzoZHlpC46nHR!rv|l*jUbaKp;>3wNS0y@wLICJtW1z3x z4g>w!4YE-O=r(T<&pFLRp*Zlc642i}S0qlnnGuoV#%z>ss_^;V#Nre)P-sl}Ips{o zj?Oa~Ko5e0i61Pwv-1qQ5zwiwAQM8Fjl7wS!hxU36Az!p#f`qi!Cc!++g@7wWl2iV@eX52=a9_VEnFB*_*0lnh` z@HbjP7SivjWm&6#1_yQrxZfKZRlxYo1dL&1_Tx2Fx`@cW9e?X_SvyRo=paT#GD&?G zk!9^;C(Tb%P{;YG+>$a+im@1LD(=W$rAV@?*rX0gYNt%$$5i=i>WIojZwb)Z&4aa mQ;X6jt9}PT5ClOGOu`%8)P`L2V93M(0000Es>pe`gVudz~*({tp{Jp8X&Jyc4b;O|d7Gh%QoYncH zO0734$TUoJB``S%neo*Lr!30+!AYB(cUzsRM1pgKonI~!T8P0)1(_>wB?Rl7O<=A* zOI#ZOp9F%#v2e+~m!|X@?<15s`haf7$t2}!fo}aV%7o&?Xf}eS!Lu@JbsE%q3dM=# zN&bqEq`juYI1K_OMq9epqTjn(P7i87;E2zf0VA!oWQgK}PokD`Qnzo`zC2^u?t zkSBEMMzz=XV$$XNI1z#qL1U$oab3%@LOhVuz2)|2De64eP$+N>rx4OcQxd%Quk2zq zWbUOm(H;VZw1R5&KFXNEANUN%#PmyEg5SftefuO9bwVLIR5_wW$lT4hc(Rr4Ojc3| zSU~}`zRv@3ff(RS#aF#-ED~5}9>Mi^%3z}VXtB}321Df9N;S)_n7z+|bSTG0w=aO2 z*%$>k>kAPwr3yHp#a5Kb5#YX~1R*0ps~VGcm?)11;_5@7rVIa=v^qNpt_0FTJFL70 zt)U)DZycH9*Ps-Q-e@ThWBk}=irZ!X|r`%gU2ea{{`}dTX6sY diff --git a/tests/snapshots/nanos_approve_dai_tokens/00005.png b/tests/snapshots/nanos_approve_dai_tokens/00005.png index cfe7258875f9edd2656a06f4503b0310589364b9..839e83a869bbd717b0171e8e377cb5616a3ec019 100644 GIT binary patch delta 375 zcmV--0f_$E1cw8V8Gix*0031$=W+l50ZvIoK~#90?U+dp!Y~X)9YpVc;4aF75>eY3 z8)vBg6AN%6JNeFpi2wiq09%f|tSQp}PV{3xKWYcr+IASj@Y9R5<`{1dAY_TO+9%*` z9Uw@i?%v|I;-BC|?f~_Bg^?vJC#muXVj*&Tw&P{$orvhz&wuskwg!_)3X}}tw#!KT z@YGg&x*S0b=flnxfAaVolhAZ->~{eDmX)0-Y|Zvv!Z&fY?&V_i7ABc*Wk%+q?h=+k zbDXQ=H)ox-Q$Y2knyZm;_(=6>rUb-%K2`k*QKW|Yok0#pf>UTDSCPdtwEx5FJ0SHX znqybJ$v*0XIB?>}i0S?$=9hO$OAfM#l&m$4U|cn{AuAU_*H3`Dsi)iNK_*Cm^&!B@ zv7t+45Tg@dAxG%GwT@fG=mhj(8o4FL)zBnr0rH=mXK19x87jxFd~X8)0000yfDekV V{F47&J%RuL002ovPDHLkV1k4vw6FjG literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfb{4x;TbZFupw)nD^L&!TF%O z?5nJgBoF^7OP-N9?PVJ5TRiVSeYuGV@70=Cn5yT^76h#Z72>am0^B z<}rS*4wg-9DRoyG&II$G__K>GrLD~~Z8@W)l-kUdj5EWdK(ZMQ&vH-r@PZJJQ82TS z`^KUY-uqb+MuyeDdQwJJ|= zWScpC!oo!7wl;tD1$(@hjjVw#;gts4bD`mk+hG-B6CWez!z!CE18p@p3DlPZ6aczp zy~+ZcEQe>GT$qjice17Y6X!i)6IB6p+tb4*E`0EC*qIHKJSa6`XY>vb>tRa9j_4he z7e4&-5G3})tF7&HJ5awit|-t?dJP$1KGR=;%y|6u#w*Gu^e%pOEom zHgaY*nta9$O5C3`QwpeNAtNX#fu!@q%Cx6Uypzw&Tr($@*~s5i;q%F`d!C2AO@V#| z`s2!nys&$%KGkeFx?KDHqQprzGj2=(;hDeyOPQDDkmd{wP$2VO wYeSLc+Sb!6bz}T;9~NbCPY;gXG3S>2-AA7aSJXOh2BsMXPgg&ebxsLQ0EBJ=c>n+a diff --git a/tests/snapshots/nanos_approve_dai_tokens/00006.png b/tests/snapshots/nanos_approve_dai_tokens/00006.png index b59840a8e16afd1ec442e77b440a9bc9f4e746f4..aca9efb867519bf79e2d58daf1330f47d32e9f3e 100644 GIT binary patch delta 369 zcmV-%0gnFO1c3vP8Gix*0031$=W+l50Z2(iK~#90?U~CGgCGn=u~Yy5gI(AKGYsVs z5?%qlXQe5I^hU@8jR61v@Kz4Z$?wY;V~&%uh+H`;JSg$i4xk_Vi0-p+0{oZSihEz- z1=E8Y99ZH3@526nr$TTW3`<_bV>nL{ex|d@3a}g}RV0!trhn*@xtNBrKmrI^b2{ey zNG+lbZ44i+iEFS*xrFtiyF&>JtN?-*U3^*X3m#imEW!)ar6*I67wS(SD>BrdMnY<+ zKN;je6YN5o{EHl&hE{YX#TGQ#?<6NGHoElDX<#7&6OG|`W-_Gd%dMNhPT%^LmV=#S zFru>~&ZNXsLTa|^glQIPrUZ2Agqba+N{!*H`nsK=$9~c&0n9k!T~&pOlnje@?X#eE zVy!DI$=chgoIa=qa2U58)iSpR(8M1GoEGs<^v9XTP&YU<1poj50N9%!Q+V4|qT6-$ P00000NkvXXu0mjfCcmVv literal 606 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfgflx;TbZFupw)Sad6j!R4T_ zR@#5=dHt1F*8X5)T-o01xnW7(NAL40g*U{%_88Co>Lb+tS0Lcrtwo#Xc|O{}&n;ec zEHRvAO8Iqz6KhO(jQq2AC~huQ=i7hs&Dl=f%!rASQWJpa=ae?jw5%B^ZEc>E^ZT@x$xn-w%tI@oPK{) zjDUuhpXA}4uU0($OstW4N*i0sy}O6xOca`Vcu}eZ3kA+;84hVn8E5X6Vw-87C6N*aq^Gtyre%SA zs5WzDqASQkkSLJ(?6lN`on?>YX67pvgEWHpz(Ck}vEj@G1mfY+3N*gmWY1c*6uD~+XD$O>)GEAQ<#VQyHgEoV#+mJ= z3Y#x|(4S*rvy5@3H1CN!K3l42cvq zNuYz5oA?<0U!6D!NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_approve_dai_tokens/00008.png b/tests/snapshots/nanos_approve_dai_tokens/00008.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_approve_dai_tokens/00001.png b/tests/snapshots/nanox_approve_dai_tokens/00001.png index c9f6ee048700d91605fb7e7786e6175838b79457..6816e9932215482705acb4f99823db0361a6a07b 100644 GIT binary patch delta 334 zcmV-U0kQtJ1l|IW8Gix*003RI=qLaH0VPR9K~#90?buNc!XONQVKm-k_dgPM@d2}t z!a$;ow*23dFyo+=vJnCR003~i$LayJ#2EADaU82gvNe$gXI`rZFeb*BuY=UgGbFB- zofsxoz}YN6bgwF8Yy}Ka9{R*{0!&mMdkHv;zKQsD*-JoGxqsj0o3oEpDRQ+fTl8E# zfZZ7@L7u8V0N}&)lZ<&O`g`U;=~GbkfV171ddg;bdRl&McjXFbA8>X%t6$K0P`ds_ z?EF`Xll|E@)e!xlqy*g`3q6%bMFOf-{*OPd`TbcYKI9h_OhtGB0000000000 g00000004k#-WOTZ#@^3?`v3p{07*qoM6N<$f|sb5WB>pF 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 diff --git a/tests/snapshots/nanox_approve_dai_tokens/00002.png b/tests/snapshots/nanox_approve_dai_tokens/00002.png index 6207f9e2009fa3dc41daa8c6edd7ee6b2a04ee50..42cf5e6a930877a93b7b07a047054b1a63904f91 100644 GIT binary patch delta 361 zcmV-v0ha#j1o;Ax8Gix*003RI=qLaH0YFJaK~#90?b$&RgCGn*QKr+IaQ`EDmo7SG zFhLN+K;^%cRjM>mkkmN<003ZR+qRAF!ot4MH_O31$$pRSz@a!s-uv*;doLQqd-S$A zkJ~3Zv|pWm0+QQ$-v?bu;RjOKMdYG?Db!WN|(}hWK zG+DnC3$AZ7UD3>xOJ`=i5>A$m&omR!6bokEOdRd`8@igJ8rns2G;cVGab0$NEvT1X zRUPBU)}WTjliB>*>JUCr(e+74 zu7S7-NdDW@DglZ|qzV5P8qP_0-h|i=0v`{ekXk<`>mET^+pAg4b?E zh|c@9PESpC1gwm>7YtI==ymi{oK}cj?tybgYY!T2r8@f0V5zH{8YDb}8JLI|JYD@< J);T3K0RSL59yB0@= zNgxdv8`92SB^V1?!ZM5#5kd$dgb+ghIVq*CLr(v9;d8YEzoe9o_sLzoak2q9#1f@SErVsn;j)n#IN zw6*f{*O#iL>VUIUb%rZjT4o2j;U{*`(o+1+exuXUbqI9ty3O8hT|tvxDWaTo;B7IT ziN?Vl+3>~$w6gij5iK)yJxx+(*SO8I4_i_OHmdwx1_k1duty_RzAJO=GNM_IWn?o9Zx=mG@_P`veS&shhAq z0e2UHmRh;I_?#?Gz#ZXm-VWY6?ilOufCtzo+?K`5Q0J`{*lvxeI#Ydn{?^ZJLI@#* c5JIl<4L{*SgZQ(6&;S4c07*qoM6N<$f@?8lMgRZ+ literal 1292 zcmYLJe@q)?7%tOItp)zNu}K(zkj&%*m$XZS0FF^0(5955{fJe$C3_0vp|T=@coL!OYXb7@5lQ- z@AEwGU1F`}$=Wxx8jU8|R8eY!XE)r(U)=}e?~l5=G@6&grqW`3A?exuq~^tnJ(~Ob zrJK*UZ~k%SH+M_Hz2ld2@~!8x2Dr2rt^c&loXE>~pl*Dc>PekS^*rFittYzEGn=Q< zcfa)?gJ_@F&h#i*Oi(B;bCFt^EZM8wX^!PD6jsj_+9!Hzxlq2{0!lx6sKYl-bq+~HKV`1*;uVYcHC$qK*o7-!2kwNSS%vdj5 zAkI++VwiU(O|Agz_B+`jgl|A)G!2$wjN=?(4Yv+K5!(y>7k=QSA zA+Lecq4q>bI`o*K$X*I%DErBw_Y17WF>=)b?8U4FES*U)T0PW^+IF|V&<_081YU9C`~4p zEkVSxyGDhkCeP7g|MVlY-6N21kwQfQ|!%ld>dt71;uNTyBdE`-q z8>*q=_*+onNog{`)}FpVKB&U%?qF zG8hM>8Tn~p$N6ttd%tbXzXQ!&@6MurZmn_!rbl8!&;j6>hR|^A$k^K-og7oRyRn-X;G26ou?#R;_wa*3q0Lv~#|D%z(&yFMm8Fsxzk9rgAc^V?O{w zSoh+%*G_Lq*Mhdl*XqIpVx-c5%`&~gF7`7(a3n6GC z?^L%x&5f>{I?YOij&;@1v}|eb-+ERqe{^DsMxWTJcBU(Lq`9bYRb^?!_|gQg^r<_v(cALXiQVqi$t_4d-apySF|50q4&y|Z$t&v^!DtXqzT zct!VkyFn)Ur>TUR=%0)+u*524sS#wx uU@5{20000000000000000000i^9Nx)J9tQ=I{5$q00{s|MNUMnLSTXl>%E5n literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|?F|>Eakt!T9!IV{Wu16T?Np zg?`KaPg*86m$RjNe^c#8RYO0+pZ9v@o?!Cb8qFIoprX?_cre$+`FiPD>xz ziiT?iA6*2LtO+|h^;A&dQlrqAm3tN)G+(f2kx{6R*89Mp9 za>bri*7qHbx`$|KsZIUwmbx-RYn|4#uKo}ot@SU?bqBAE2mx|EQ&;`q(h3J!Z9KJW zsngS|JpY75_b*BcnyF>y{Zv`Ye(|DDr{4W}3N&S2=$_?HPmO^rv8kR*7bOMG)LIu3 zcagWEASb&ZCl?95Jtw|$2hfChD}6+PW^27)IU~dl=(-r7Q^Q3kLp-3PmodHo-HsLh3?WPlYV}w8klQRREB?jBDyjU?_M2y$~{uYpN%dUI~^Cnbx)5 zz~bM+O|z}zS0n}g?CA;*UHBEL?emZIW*Pgn%D?A)57%uvszr4?XWk6*Z z$o!{~t*1cY3DgnFc3gjTz|S>YQ^Sj%%Yw864VxSS47;UHsX;&wh)wPCd|Do&qh%kw z5g5$fr@~hRRF*Nz#e}Sox$ob4>gt0 zb@Zcc=!zKLc`HI>?t8bM+ARIy!HsJVZrq|es%Q8bSjtnhkf92gbQwHd{an^LB{Ts5 D(^PG) diff --git a/tests/snapshots/nanox_approve_dai_tokens/00005.png b/tests/snapshots/nanox_approve_dai_tokens/00005.png index a2cb8f9dc97401fd76908866c585e2855970e054..570ce28d53e82ac396ba25c370110058f3a638f9 100644 GIT binary patch delta 457 zcmV;)0XF`k1=s_S8Gix*003RI=qLaH0iQ`kK~#90?b%UsgdhxnVeITpxc`y3OCOlB zStE*8Hi`3pPY!h{CWshQ0ssI20001h3rZ=a6zfr(@MArIJH-lp^_&E>=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_approve_dai_tokens/00006.png b/tests/snapshots/nanox_approve_dai_tokens/00006.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Approve DAI tokens', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'F869468506A8B15E0082EBEB946B175474E89094C44DA98B954EEDEAC495271D0F80B844095EA7B30000000000000000000000007D2768DE32B0B80B7A3454C06BDAC94A69DDC7A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF018080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'F869468506A8B15E0082EBEB946B175474E89094C44DA98B954EEDEAC495271D0F80B844095EA7B30000000000000000000000007D2768DE32B0B80B7A3454C06BDAC94A69DDC7A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF018080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_approve_dai_tokens', [7, 0]); + let clicks; + if (model.letter === 'S') clicks = [8]; + else clicks = [6]; + await waitForAppScreen(sim); + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_approve_dai_tokens', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "92243511396b65a4faa735a5472ea99b3ce0f7f2338eab426206730bc0ddc57f", - "s": "161bc0f861064d840de4f4304cfd19a571017e62df7d8f70cf605c0f025593b6", - "v": "25", - }); -})); - -test.skip('[Nano X] Approve DAI tokens', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'F869468506A8B15E0082EBEB946B175474E89094C44DA98B954EEDEAC495271D0F80B844095EA7B30000000000000000000000007D2768DE32B0B80B7A3454C06BDAC94A69DDC7A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF018080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_approve_dai_tokens', [5, 0]); - - await expect(tx).resolves.toEqual({ - "r": "92243511396b65a4faa735a5472ea99b3ce0f7f2338eab426206730bc0ddc57f", - "s": "161bc0f861064d840de4f4304cfd19a571017e62df7d8f70cf605c0f025593b6", - "v": "25", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "92243511396b65a4faa735a5472ea99b3ce0f7f2338eab426206730bc0ddc57f", + "s": "161bc0f861064d840de4f4304cfd19a571017e62df7d8f70cf605c0f025593b6", + "v": "25", + }); + })); +}); From 07e0d878e2c393f292c87c5f8b7f4c27f2613e63 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 14:11:17 +0100 Subject: [PATCH 09/87] Updated blind compound deposit test --- .../00000.png | Bin 541 -> 374 bytes .../00001.png | Bin 503 -> 399 bytes .../00002.png | Bin 431 -> 305 bytes .../00003.png | Bin 772 -> 502 bytes .../00004.png | Bin 813 -> 485 bytes .../00005.png | Bin 590 -> 387 bytes .../00006.png | Bin 619 -> 410 bytes .../00007.png | Bin 582 -> 414 bytes .../00008.png | Bin 531 -> 340 bytes .../nanos_enable_blind_signing/00000.png | Bin 531 -> 349 bytes .../nanos_enable_blind_signing/00001.png | Bin 344 -> 274 bytes .../nanos_enable_blind_signing/00002.png | Bin 480 -> 357 bytes .../nanos_enable_blind_signing/00003.png | Bin 566 -> 396 bytes .../nanos_enable_blind_signing/00004.png | Bin 514 -> 361 bytes .../nanos_enable_blind_signing/00005.png | Bin 614 -> 434 bytes .../nanos_enable_blind_signing/00006.png | Bin 628 -> 411 bytes .../nanos_enable_blind_signing/00007.png | Bin 338 -> 281 bytes .../nanos_enable_blind_signing/00008.png | Bin 531 -> 349 bytes .../00000.png | Bin 636 -> 414 bytes .../00001.png | Bin 590 -> 446 bytes .../00002.png | Bin 537 -> 327 bytes .../00003.png | Bin 1262 -> 748 bytes .../00004.png | Bin 752 -> 439 bytes .../00005.png | Bin 674 -> 472 bytes .../00006.png | Bin 628 -> 365 bytes .../nanox_enable_blind_signing/00000.png | Bin 0 -> 382 bytes .../nanox_enable_blind_signing/00001.png | Bin 0 -> 295 bytes .../nanox_enable_blind_signing/00002.png | Bin 0 -> 381 bytes .../nanox_enable_blind_signing/00003.png | Bin 0 -> 700 bytes .../nanox_enable_blind_signing/00004.png | Bin 0 -> 659 bytes .../nanox_enable_blind_signing/00005.png | Bin 0 -> 730 bytes .../nanox_enable_blind_signing/00006.png | Bin 0 -> 695 bytes .../nanox_enable_blind_signing/00007.png | Bin 0 -> 305 bytes .../nanox_enable_blind_signing/00008.png | Bin 0 -> 382 bytes tests/src/blind_compound_deposit.test.js | 59 ++++++++---------- 35 files changed, 26 insertions(+), 33 deletions(-) create mode 100644 tests/snapshots/nanox_enable_blind_signing/00000.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00001.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00002.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00003.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00004.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00005.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00006.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00007.png create mode 100644 tests/snapshots/nanox_enable_blind_signing/00008.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00000.png b/tests/snapshots/nanos_deposit_eth_compound_blind/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr6F1VEEqiKWlfD1|D5~c6=``))Cw&1m zP&T;zP8x3vN~5XJkpW$G2JJRyu0j9+ delta 488 zcmeBY{?0r>vYw5Bf#H@?fhq$7<33Lp$B+ufw+91@ZaFZx95mN@_K$sDe`l6phu`!ll?|Do5Rrp1JU0 z9rUKR zlQ?0f-18%wO=`M9eyEtv!+YYw2A~|<%!NP;%#555?@syl?1=J-n%QhAcB;;Y6*gxA zed=$j0Fud&NconLsGnlSdpTL>O()R%&cGnL474n zSvOADxE^*(>t~q~e$n7W4$zu*pc!UBP4{$s+SL~9nbf9j#DBHG6{O_l2C-$%(KGno Zii2}IgfwSQ)*+UUvd+^IJ_Ibz11J_F@l zGkX8J`T3c8L%0l-}N3KNtS}}paH>vrJ&6k nFsC+3&0m#-5E?=VAq0R2Z&`&@#syO$00000NkvXXu0mjf1iO8~ delta 416 zcmdnUw4Ql_WIY=L1H&z)0#ybE#xhSA$B+ufw+FrZZaXkIA3WYx@t?W)AcxbMAI6Mo z=X7*du0E0<>zTAmtn{eY>UAoHvF#0;vbw`SLTv}R`EuEoIq%V+$aa@k4^w zeM^BFFMmqLjgxPr%8YiirIhiW$dQr*Vl!UpnTsPV>ZNDKG8@fq0}?>leXeQO8+eRN z6pBrn7iT)8DLWtjvaeM+YewC%LxMmfmVMWi@nkjv8tCxsHpo<)j0*3=ZqGDWrlj+p z@KL|iaAxzt%|I7Sp1APg%?EMJMwdNLUMR>fxZH52q{ztR4o_Z6#tgr8j5B8+w3U=v zHaV-_;n}=~Piq)w_FwzpkaqclQyNfdGtebhHcb4vx~=z&d$z-~n}@|5? zbGxa+=1hlYuFOUzH8wNX^DO&*Qs(ZViKcH-_AO2PmHhBT%D4{2H%^Fr`owKBFfJH8UHx3vIVCg! E0Ln7EeEcU3bG0t6!kNRlK;lDX_#TbD9^aP@s-gqN1mg$Cb&x;>@W(>SPrq>1E@a5Xrd zvlkF?+P$_cYx5&TYQH%&?%3ZQjb<#fjmj*Vpe7%J$5iP60Dt@Tio0bE*oGClfyZiKyGQu(yYSz^*>p~f~#j@Jb}67(XESUANhfFVsZ z*X>Xe0D3;est=VA(?g~ykUjb!QAM%ti1DZtw}pr=VfsC(>m=m?Di)2W^4Wx`cs=T~ zmfeCUQxV!7P=m|AOkcq=wjMBEr(;h%k`IDQKs49@pj#0A@eo+ap`tun zaI7Bm4!8(SnNY%?)*`SR;7K^BNQoZV%t)_jbQRC}kmMsw9cp_Ks9am6EY$S^NRlK; dk|g=J`~j&qSf}4tMcx1a002ovPDHLkV1i*_=E?v7 literal 772 zcmYLHZAep57~XAh3*9AfwAjsP=1M9lxtmZZxleStHq#;#vy98wjLI}>k>o16YYcVG zNKfL&1VyoQ6n%)5*dp%eQZsd$_`x*x%g7;7f=2JvA8|P6J-pBRp65BwIj%fYHW5e0 z2?PSdkfY0o=zuBPjKey)t9-XWu;G(Ir#@lFeheM2APoZD&?)ig>Xzc2FLchaNLUts z+Rvt;xrP?Q++xwF;`7z8!jM?vbX0^T&A*HZ&T)UNspX1&@AknQO@h~cpE0Lbbw#R& z{noZfJL9{JlMlr0TfRnfOKd?r&WC1=EWGfG*d{XD_G`DPz+aFJjzv}l>H z5fRRmaR=8_GaC$*+w%!_#iY8?hoNRh9qlA>)T0zp1%X;FAVd2U2?> zs|P`^OjQjcu>GuU!uE$k-545JlZ0?6aIY0ERjh4gzFndZa)CL8(V`U+kbhS<^h{&I*3tGOcKuk zrg@B=G?%2Hf%_4;rDUEGV`aCLhBVloDIl3D0ZzMZVf zP_r`AWg;`OAAhgab6UP$X4a-csbeav){wXi*W`Gt=ulz)BuSDaNs=T1J|qrwj6qp9%>V!Z M07*qoM6N<$g7`Y)fB*mh literal 813 zcmX|AZ%7ki7~h@B@Izg1i4XH9J0*{>CcA+yKnZPi75>1IhEjj?&W>>JpGxe*<#~JeIrZ&g+FsK|^7VqdPO=E;+c%-@SuGZVHdlCQu}k}@&pM%?WbXQJ7L|M6%%WiFzUx;AQG6f)o3w~ANwz* z0Xo{Yc+I{RW2*cyGNENM!m2LD4lLpHsDB-WF>m$?wzWwk9 zXoVl(kS-|#`6}W!2&N{5UL{;#>qZ;_+z|=*DL|fqA=mMu_V0oNm^S4cWq-mW`TKIe z79Pxbn8G3qSx<*mFx<+GxLZt246;6<_bta>B&@f9U1tH-G4hxc&RiqpnBY9fBH2a= zUnExo3ae?#Ig|_&e3Cd!Z(eY8-^)97Z95Q|9WO0kNbQ^1&C1b{Z99!&#N}mLHNuM%IFe*q?H%y7 z9^eqA-J>K-)jz>Xx&y@TCxpyl8mFcyhz+69*^ZB?b|Ru>UVq~;Obr%OG*EGfFzsd% zrzf`B( zgMa?>KV!b0ain+R)4i-SBQ}Mo{<~=H8FS8c?_IIebWb z@8cpZrc-hz3ZK1sPwctUaAte9Lt4g+6f>y_3lk^Jl$ubvT)O%~0}t;BnYJ@PX&_QC zHdWXxZvJiE!{t(OSu;}F+B`uzfYh_gcW-QFOIg;ol5ytBMAx(|pivPMZ%(KL@~5^r zKASGZHq*0>E#+S7!@E)wBvUeei1C`_0O21)AZLcugvg1GZEdzYH?s5I_e*n5%Wz1W zASpHBX9;(;LNkw1zM}KtE*{?beh!t>*+4FolnMh{COUH=$at6|(iSt$1Uen4FEVpR z$}*sBo(`4Q8qPdzWlQ-d%zNUGKG0L!KCEG!dAfb#!iO^(K3xDxHk&GZ-tYm$I(+iN zhYcSToDV-e3>KTp!#kb-YQvdurc*$_m90&5PRo)=36oL-+5+^VL`vN%#+k9%4$p4( zhNtj3rey*B0kj;5Dm}q&VVv39<~*S?_2H-YrV7O==6!1tC;e3BoqXns!O1^i%tr3z zk57QyS?3K3Ez8BNr|)M=NM%S!^}RUu^!>>-CJMzaKur%-CBebh=9sn==)IH-i4?nu v4Mmn~TTidljq%HUSd_&*Jve&DoLl@S`(LFeK07T2OeYMUu6{1-oD!Mye7 diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00006.png b/tests/snapshots/nanos_deposit_eth_compound_blind/00006.png index eafd4a205fbbc07310a250391ab1dc4d4625c365..1d461c6fac822757eb499b39a4347b74fefa5018 100644 GIT binary patch delta 395 zcmV;60d)TB1eybo8Gix*0031$=W+l50bxl*K~#90?U~CGgCGn=u~Yy5gI(AKGYlmm z1mqF*o|R28;tdZIoC5#=@K&~!4?hp*oZEKEQspYp;9(Kp)g9=^eMFBj9DsOGdvVVr zy-<1xjS~xP@GkuO2NjZ^Ni+6>w$a=r_?ga4W`JkgrA>mJF@Hs$%E>eg0|5|Z&FPr) zQ){VO(8lmt_23q~QXycy=hacQGb}zRejKOrioi+!bMgWb{goB2`lr-(Hl%o{oLx2G^UGWa#!e)rv#w*iDi|Edw>i*6$m=gzvPpd p>wRN8llZY%Nd*7^006iRKWQT6SD%t+-2eap07*qoLFSiZd5Jyqh97snR3OJuSoG*-hO!j?6|UE_?_F;x}P^%N}|I^`7K0GVw8TKCJTj z4a<~j-V-r=OBiQXbAOkbuv4aohxfZ!T(-lrq5vb4J=;DkVw`#U;K>Ugk{-75@J??A zN*q0uZDbO|w~BG*b+GQ5h{J7XE^JT+dSdg%hBMB*&1YsyvCZrSI>(pygb%MY&?b-q zMPpO2rQkq_U^e<5CO7e?$xPXq3mIqfXFC9$o3@-0#DSo>ZS5&#Da+bC)3QJzF>$8U z1W7RZDKOJrOfQ=E#GIq2$}?xA{PQ^cALtl!py|L+dINHW!AT#WEADUl6q|C-H*N95 zOrSI7D;b;QoZtbu=zi+cPtk`j7?>)2o)0uS)8Sb#(4zI*ihcqWGtOKb{Sy=!(mdKI;Vst00WT^n*aa+ diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00007.png b/tests/snapshots/nanos_deposit_eth_compound_blind/00007.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00008.png b/tests/snapshots/nanos_deposit_eth_compound_blind/00008.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVJp&6E+D$bdC^02(jb+y4vyF2&dy>z=Az1RijD2Djex@kBY(Vc{LwH^L4U3H$cs9T66OLVbMC?z z3J~R-Fbl~eG1nLo9=ti_*k1^mvtO~`RE00000NkvXXu0mjf!Ev7< delta 516 zcmcc1G?`_BWIY=L1H&z)0#ybE##^2)jv*C{Zx7z?yW_^-e9+nP&wu`B%(h~Wj%Ac3 z>6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVw z?=7Q!1&DwEV-R4BdjWa+&L7g@5_7VHTR#g6AWD010I(G=j2mY=!g+M_00000NkvXX Hu0mjfe2j2n delta 328 zcmV-O0k{5=0@wnO8Gi-<007z|a3uf$0Ut?3K~#7F?ZH8A8$l2R!K{J%{|~N1X)*8; z6iLhWb-E+OZ@EZf^rBq2=#q;hMjrygB?-FZB8kz%;z=%yRs@8OVm1|>Ejo&Mi0N$6 zP0X8^t`?od{83Cti!NgRDyEyoXiY%qB<3R(9WA<2fr{=HpMS)R!^C{Dcol<+aTpcE zyb=&@F{l^^i$TS0af?C4IGhS%Zi|}=V#eWOP;py4Q$fr)R17MfEncZ0W*jC46|V$@ z(bg|c74t^LKZ)5?oK8SEP0Xg^A!bwY-(ofur&)9rL(CRK%tH(@Tg*cYF(+A!pQ(6I zfr^tXMr(`F+CgHpwm6ZBEru9kHWhDTQ1K%bTMRKL5fDxnv#A*0Ejm!K#f0;?DGiPT z2t>wH{8q)HRv7<65J{3GN#4qYUcgn><@bA#IPoV z?q=u!NE3r%G*0<`AJgvKkD9}Q2Ec92&(Vex-G3y?5LSAnV2oz2wnMmQG(KYt;TI5l n3maetyc={28iU({l0-zliUggB1=U9m00000NkvXXu0mjfq*s}I delta 465 zcmaFL^niJSWIY=L1H&z)0#ybE#^s(ajv*C{Zx1@=-F9GbzUZ&G=YQkQgjPq}4R4m5 zSmdhQdrx?Ose0$_s4KG8Z+A^Tk}Jz}YMt&akdTzwyprR&noOs%r1(<8R2QsS^sqlA zOnJeY1&Na^GiIcOZQ3X`)7)tFtq8}%3dW`v3{LX!YTw+UTkq=-2^9Ifvdu9~ReE)1 z#pMlJj88+Ejiz7z;BGYiYQq_A#;1`$?zIAi%`I#x^Efs5c~9KYTf;cBy|h%ST*x@nlT9*3 zO)_QQm4-9ZQ`BZMOQxJlc&wAMtPQAp!9(|q1rK@5&bg#zSxj&Qs{FST=qaG@f4nq1 zx8Py0(f?i^qx_T!mfVa_d4Qp`tc`i*O0UF8l2U4tQb6Mqfo_-}DRmF%0Cpq$xeZ0X y=K=L+Nu-?1c)ZPo@#(i(-u#qvUJg5TUyCQ-TpOqpwk!Y`c?_PeelF{r5}E*-{mRDx diff --git a/tests/snapshots/nanos_enable_blind_signing/00003.png b/tests/snapshots/nanos_enable_blind_signing/00003.png index e4ad84fa4c9cc7ae289ababb8e8767f7cefed828..c72ea3dfdf38a5551acd739d3eaa356064d87b80 100644 GIT binary patch delta 380 zcmV-?0fYXw1dIca8Gix*0031$=W+l50aHmtK~#90?U}(6gCGnmD7tts?Ey5r| zVtSv|lYx}B6#gQDIBab)>%Ty+3`Tz@u4_PMcInSjvPDk9G+T3Nzoro}v}|wpucm-# zRjGkouIWj$+I2|B7{3u?cdCX|bD6Y|?F_ATaq0zA5p<+zhPgTu)Y-DswBVMexJ-a; z5GY;yS0=rgEEoYw*pD;S_U?G4B1U`+cm$3Skj?>}5B(odnWPk6wCIId-`E}k00000 a06RX`_6WW`vy#> ztF}5Y&U{o~JK@ONs4MJpUoNnF-dX4DP?^y!_e-JkwyDpbh5UE)TpcWf4!50I#5mKH z+35YXhBLEG6h0^Np7^6;oUUMO@@7({)lC11KQq(ny4X_0c(v<|w0ZwuF*uLNN=lif^cfVh@iw2CeS(JiJF~lt!E~tt@CSROEF8C=k|;z?c9Qgr-ADH zfu^o&bA0A)TF+zTE*OxP&3j@E(4m zp)&JX2FO(oX^R@1wEuFWQ b{$=VYIlX+!+eI&cX@bGi)z4*}Q$iB}XkhmD diff --git a/tests/snapshots/nanos_enable_blind_signing/00004.png b/tests/snapshots/nanos_enable_blind_signing/00004.png index 7b3e0eabd1c82eea977be9fade67750f84753ce1..cabccc8c58fb713305cb81db58e08c26d8209d14 100644 GIT binary patch delta 345 zcmV-f0jBaWek@2fJ_<7{bsB zRUR#RPh1!tm!VC|Seyd@004TiZ+}l{OkN~9l>;ir&q}<{8+K=P9>iC9{e5%Gdb|XD zOBj%u8;@tDd@n1WUz&={3e7)`3x#5!P){T+8O@rdJ4fE9tAF~zvK~+K&CH*dv{O(G zN#=?1j;YKWO+-q}>;R7sti()BtTrU?4{^ZlM3K*0$ssK4lG8-wb)22d<3%LOgAQR3 zAThmY{gRHHeNv1U$%rGZDKq~c=$V1_HL+-Ywp<~cC~UkvtSw|wGaq6vIh4pY%{U;T zSfQkitP5$c#ZnBQPUgnOaVEQ3$P~(IU?u`2Dd>sUIA$CmguQYpjyDWS5z3f}0AcAd ra~{x%apA@H_P7)R000000N42eVf)O!2GIiW00000NkvXXu0mjf4c(QW delta 499 zcmaFK)WkADvYw5Bf#H@?fhq$7<4I2!$B+ufw+91@ZhJ5|A7mFR{LlQD`SgZKD=$nk zFUxUX)PDET@;sHoncce*7yFt|+HuC&;pP_C*&w0Ahw^tlG!kWeI#DX`#2cvzH%%2j z=kcD{APzm{>PabzW%k@MkLqj< zx<^*98J$pYK5T#4VE5F>lR)ctu1-|{{8FmSsDF!*wIqn>%=^}*l^~(*tunmY*HCNCbWf{?ukBpIm_YM(y7LicJ7&c##Z~j zE7(5@#wI*Q>$4<){xFWVT-@fEHbGJc%YFRxtC{q0}ty e=_`SpZ}OQU+mj{2`mX?^m%-E3&t;ucLK6T+OV|AX diff --git a/tests/snapshots/nanos_enable_blind_signing/00005.png b/tests/snapshots/nanos_enable_blind_signing/00005.png index 28e70e8bc22cd0c7f2b114c25504765b2c7b1592..4c435a4b13d70edd54c7c51d03fdeea4df95ba25 100644 GIT binary patch delta 419 zcmV;U0bKs(1hNB=8Gix*0031$=W+l50eMM8K~#90?U~yS!ypJi?Xv#=2lrunuyGbB zV!h%xS(ert76dDG&M*wa_*b@mqCUq}^3JtnYM+U&JD^H{0l=-Ws*32QvNCy(6@L=6 z5Y{PKg0Fe6!peI|KXM#Y6b2*fVq$t^15bfNe}4g7Jrj@z*s>e!qFTCDDn3Y zK(b`r>6))?z#IlBL3yz5YXEYWi+4X}6LzV14J-jRRc4Ubhep2?%`gKo^7q<#NK8`2 zGXyjmz%ldG@&GZP}==7q?-qt8mio8A;^%Se-kbt_Z)MkVHn0*d;!d3`tNV&590s; N002ovPDHLkV1l;F!0G@1 literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfi$Qx;TbZFupw)7<4;|!R4T_ z-r0ZRHu9h6L_ZYU7!dI>FmED*5n)}qyMo{vg+#N%Fy zE_W6T__ip~`B}ZG!e?En36)~p)ykVMHJowIba*DHV>7GGGc9XI$}%<(YHQ=2+1s{T zDl8>KLW)fiNPkOuIMGDG*ksKKAKnvty3br_IOE1_6nt34*p$ZzC~?weE)oe$5J zdY2^uRB0;|kOy?#6{!i4Ku2ksDipsyw3aQ!&)==BEt=_6H(Ltd;zZYHFM(>D9DXik zoOzkiMB(%4R&gVfIrCzejr8^Qs5u{g=?Rpd)ljsWai;#&hBICuXSSWWvO#h4#SMza zKsim`6MuqvfevI#$w7hziMua0 zoM|_$i8wq@M`kWaMf*t}-uFtI)y3rVNBf zQX!$(dlrr&5WJA6!8rf`0AMn&bM*-RnV`Pe9PB*VPdiglCV%jkp`<)dwN6XIG1jlv ztPVq7vuyaglpa79Y3DMYUn^AVvu|sF$K39mOIE8twhj)I*MF(;I65KdPP#{QB9G1l zRKqK%F?#~iH>dkVA%A4yh`mgEliPKIMcOjN)|59K1#4CnMqa3IKvQI>Z$?FGsBaAB zU?qq`E6GLnmD?kqS)@71=VX?-a<-LxoP!TFv8#zAX&MlwYx>!tZ>zDRn#JrOq3|ah zf4)>H^P{bFDSv5|-fj77KVv!-!*sMBMCeYKB7&xKP(3O8*}wywl@mndwuJH-evItz z0c6?A>$7!CP}mO$7;gq#HWwON`fHA+2apV6|8uj0@V#1w>8c5Kp321M&32Y_xuDci qan(W)kg@+ucm&}#4gdh$lsA%;^)zao1pEL1002ovP6b4+LSTZEyti}! literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfdtrx;TbZFupw)nD^L&!TF%O zWAX3HHRKeIp zVe>_xz=r9qwm{yA3kAC_IUJrB_U&51ua-0S!oH~)o6eb+ovP1!BIm?~1|B05AEOf& z3{EOIA6D6X@q;pN^O@- z;Qq|-uJ1;k!0eR%}dZ70wNT%?)Kbtt! z_9W1g!5|O%7&#wqJLAkNZ3OkJ!AT$9^BanoW?CBsGaHqsENgRYV@rXeHlRH#6ZN&L zCog22IUN`@+f8et4{JwSTFnFs$1yTmjiJ`OI>ueLkT0ny~PpB+Hb`Va!JVJ(-Qx=RGXR&|ZH3s=_HEO5{y)8 z#bo2oQ4rD{6OAH-5JCtZ`zHJ5UBoD}cL7hqkG_B@pr${qu64Wspnyc_i^$|%Kqu|V z1E>VB19E}Z0g`P50d_#mJ;jHR5dd+jTn-di=Si`MDN-E<4u7Wa4;}bJ2ma6j`4zD@ z;Zr+yt-j^n@Y^!NCLBJ*5f<+P`q6En-L$VqwTLrZ>{s-09FXImEfDl5+PdNb8hEciSzM3)s P0000KtzLG- zupkh}wj;y`FOnF&$P0@WFOnF22r!Fnw0M!k=pp#T3!@bQrXv@dlFovTT#SdH8y6QP z-36VvxF{JQz;xi^Pn2{LjMfC0E?iuc3PNXDSx@R=q~um1xk*lWIPBk zPcBe0`Usv}pk(wCJSoA&=q30}2`)w-!BERI|K?&-a-!f=O2+Tr z=)}d1k{cH{N^V?iN=_lboW#YAl5e@#lx!|GB{wc!C^N|FDLF~d zg^NuIO2$JlKs(8=lx!|e5}eA#jgrj;E?y|vT;Kv1KXP#j0cNxnjMjqDS}Jp&6E+D$bdC^02(jb+y4vyF2&dy>z=Az1RijD2Djex@kBY(Vc{LwH^L4U3H$cs9T66OLVbMC?z z3J~R-Fbl~eG1nLo9=ti_*k1^mvtO~`RE00000NkvXXu0mjf!Ev7< delta 516 zcmcc1G?`_BWIY=L1H&z)0#ybE##^2)jv*C{Zx7z?yW_^-e9+nP&wu`B%(h~Wj%Ac3 z>6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00001.png b/tests/snapshots/nanox_deposit_eth_compound_blind/00001.png index 2d580d8dae5e95a7b7dea3be73ae2e53afe0ede0..9901736504e1dc93fdf161b16cb0fb89081ebf60 100644 GIT binary patch delta 431 zcmV;g0Z{(V1ik~18Gix*003RI=qLaH0fk9KK~#90?b=b2gCGz^QDe7amz7vn+btmAGywnr0001>NsKYZI68_`=FtIsJI4iBo_+6)z^i8zz-tT0 zlJ2(#UJLLTE(@^wygO|KE(`D^uh9YQw*91s5N?a43*Rjugn!^J;~8fK_}J0A8wq|! z2XKnJbOQhYS-e+Vs!Z=I`&(yTlf{|>OFx#!Ete9xwJgbV?GF(fAvv7}hY;+u^)7&B z_P5y$;dBuHte&I8)?hAwlCrCx$xf5%c`O_1e;1@#1KZv2B6u%JbqttPYw#pxGtE~+ z1sm)!nm1BLrGLI0eWpbo?!Ev30B|*x?}F^h;xZrH`z|lL_MlF4$?P7YpQV)R{#I%t zcHv}ox1e@HcB$*`qJ_{*xbd6A<>2EIdhLYrQUgg8z~*#pB=?gjz|>HKjsvXJSUr9W zXxxnJm@kpkC*uo{Z9>$tlMSb5biCB_b=>3C+%8rb11P?h%1n5}>IXu@F9iSq0001v Z_yue2>Yg1Qd?Nq=002ovPDHLkV1iTP$BqC1 literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|z}bL?_`?Vlf7@NKi?d+_9;jX#tp zDW-ppeOn;kgB0oPjlJ7$xJBnI*4=hd>~=ojyj0W z5B1psRLB$j(OC4d&bEs{%^h9u17;=}&geRo(ygeqZ*@`^KildV?-=~HZG;+Sb}LCb z_hW0<+r1$*PZ|8;LRQ=fJesaGy{r4w(npIvX=~|el?N~Ul=X3u)6;h$|N6U5sc4C= z7qbsp;S(76F{E(iiWL>1fraH-qW<0TAzJqwkGeh$4_Q$YRv5T*H`mnVN4ckV?GD}< z@@HLFc_7G~POqci;YCcbY_W49&}rX(+f@jQicj@E8Xlq*qBSo>55#HpIyxEXYHh9ZjXPEX zeO?(;<3FfMMVdG~a$9P)i8VU)@0WG0xeuuE8-4pZx dMUArm47O%}CQM&p5DrWy44$rjF6*2UngC9s5w`#U diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00002.png b/tests/snapshots/nanox_deposit_eth_compound_blind/00002.png index 5486e4a2ac6bdc1b5239f858643a0ca1b6b2d1ff..605cd906e70074510587f180e6f05b56ab36d7e2 100644 GIT binary patch delta 311 zcmV-70m%ND1jho98Gix*003RI=qLaH0S-w-K~#90?b$(Y!ypgZz5EgdL{;(R%Q|wE009|E{a?bl@&bhjw>}lK8 zbJEXZ@At2+eFF~LZR7dQSf9}Wq*RR7a-=U}mMLhpyzgcyKz}>4FCxAG<;t0Ev(VkO z@o-sAzp0-^7yuy9M|1$+dWSY`XSMHaw~{AYOuNsn-WI;|BAJCES%)J@F8}}l000000002|n=ild!0P<&!rTA=002ov JPDHLkV1k10k^2Au literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|@XU>Eakt!T9!IV4kwO0PDdw zO!=SQ)i1F*t;2rd0CN-fiA{EQ)^tVGSkAi^)f0E^k=G&5r@KQY6-;mO7Mir7JIUG8 zFJ~vm6(uy+MMrI7A{UQ_S~WJP#tKbrRu|}UP3@&bboV~z)IX089-H(bU-hBi(#=4h0?jrLDO<2; z(Wl#!7A%_7(tWBg>&UE diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00003.png b/tests/snapshots/nanox_deposit_eth_compound_blind/00003.png index 91fef4dcc2cbf0c03d6e41b96e672aceec025995..6a06db8de150abd7a7ce58b50d11742cfce8c99e 100644 GIT binary patch delta 735 zcmV<50wDeF3G4-s8Gix*003RI=qLaH0<%d(K~#90?VC|{gdhw>)1L0c{V$2V^uv~N z0)!Vt$#mZRs)zv-jO5u7A%qY@2qEOnNh!Hb8U0^{&)pOFBc*g4$3O6?i?7`i7yvH( z+;SX;_mKQ>`lWPk^Y4j96|hhbS(FrX<{uGRl7&)Aw$tOpAb(H_TIdv&TXN>fF)k1H z66FaHk>i*9?3XbP^1}bvJpqx{V$3bdW%;aXR2KLWCWH_|2no)38+vZquI$(l3#yOW zp&MIL!(eUAwqKvZx2?ui;DiTur)w6(g00>d(wkw>R`GhuMDN1kxD%5+aZ3?piPT$S z_L6ZeWMn?d)PF@;8=2C=TUek4)m5lHr(PbY&8q&jeWQeKT3c26Hg93Bz;*{9FD`tT zIVIBY@&wlfxaJeD>`Nyk(s$SGYN##Xc&*tUR9_Sp>YcSI-ht14bZ_(;ekmsXkzrHDZ4!Qj_Xn$;5dszs40SsapK_CD3be&A^ zKSsmV^!~#z20LLE+R4DljKQtc?j5M1J(1EYG=d62vl}Q+8hUEeCSD<`p7sz!k2x@e zOrxb)i-X!Es16|(Y~>PHTU|p;h%V3lV-{YjAla z2qEN62=No86HtSc{#Mw&s=S>0!Un4}$YJMD-&i~X{Yvry0QF6ABO>2S5y^_#?S<()OA$nuHnh-}~Br+gfE(w#3*^t$n)Xevk`C~u)anF6v z$NRp|`#kSC7kIa;(0I^jFc=E!>m1GSKMUWRPd^3Yjo$(RgW-v5^^W7XFYnIMCm+1) zDl#l>Az@sO=82PejS&(!M+i~J=cZfn8E$!V^BG*gQ6ZXsp2m57gs4`IcJ=0+%Kqrd zdHLkux`xLx~6$kehDQj5yQ$SB9(}h4oE+5Dfmi{&~ zyP3620cDcau+}wE7pM_QrmrA8^f_ytpxPw0B9Oc)nJz)N^D}kErmeR3pKVZ}^NXRO z0PNr-q$N={kI2Qy9utLCNb1UIHGuc=>gT~FJ@$X?KKe}}M;%ngE+^bby$-ToPyc{x z6$#c@LuVK{VBYmuz8zlKI1x?%GGmz~(e!zCD?-p!_{*F0@Yf*I8xwPQ2Y3FuwEZ&> zM`9^c$I*|+7eAX zAf&aI$6lP-lBoghkYB44FNm2+9k$E%fK%-60Kt{KeIW&rB`mgb?yVVJ0!v22Equ zylEypWWKPoV1L6*SUI0OJ>BnRzc+dmmFq#WIO@=Vv!Mf&ZEF6#)0z(h{ei-s#6rxb zN3R9x)msa~Wih<`HFkBwhjhU373;Ce4p?aYmNmtCS0J^d{z=}Mx!$&BV~RLykq7C0 z!WP}f>n54(-=>jjvVSxBz!Ia7r9qPEgQG|<0000003iSX0000000000aLhj@;!1kU Sk#Bwg0000Eakt!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&MC=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00006.png b/tests/snapshots/nanox_deposit_eth_compound_blind/00006.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB%sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o$Tg}e1&P( zg<|UtodolD7x+GLS#VfwY~I79_sp!SLEQG|Hc1JStDnm{r-UW|D(8I) literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_enable_blind_signing/00002.png b/tests/snapshots/nanox_enable_blind_signing/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..75b78e517c232788bb0dbf2c07d98e27ebc53e8f GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9dba4!+nDh2#tk59^9=E^} z?KkzFH@o?JeAJrC-kflMW$WLSyOgu#-xQE0D6lUME`Ly+cFq2JRI9C}aw=2Ji@iOW zC#E;Z)ylt1Oy(*tW#1>lG*|CkfMcednFWx;RDElj8uKiW@ z|D_dM5_jLfXr7fl-GcG&lju9uYSTm|D@`w-Z=!+qSXKZ literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_enable_blind_signing/00003.png b/tests/snapshots/nanox_enable_blind_signing/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..6cef7c948185ed09b993774788ff679bef05457f GIT binary patch literal 700 zcmV;t0z>_YP)fqr{4Sct8*?S z=ASvPnwETr^QC0@({t^dOCk|xiPvRTN*2Wc5G11^4pr!sTJVyr+VF~b{pYnbn^APt z|8psRW!=Se%`=G^r>t|1FbG+3L}`aLgWQ!MiUFuSL`|4Qy!QjncSA7%dc;p+Ee3)M ztm<05W(}YrR`1y6A;*eff2pq3iUF9JAKn0RJ$n3z0>oX305e zut!&n>s6!&Mlq*~_{e3fVS0Q>ir|Q>_6&{yra(x{=6S*5!DLdfmfqXiTw^FM)Nyrm z^O!VG<$yXHj>6A@7_0{|SP6Q6CFuQ?Ea-i{axmbh%V5&}RHP*6Tl>r6UJ$*#A{5Gp z?Du@@R1_GBqG_}0drpG~6wqFgb<#OMSA(;)pbO@u9j_)b$u-VEO*ra8#7UEb1Mrd@ zT7^Ur&+|^2EMA0ZXaTt?oetC}?&Nb2hl|Een4G-`U%=&eLuXD-=A8flz~<<#0m&OW zaXE)6!VFK%wf)-Izi5vkzCHJ_@4gic=yXm?hP|o2hN^GGiaS+7np)=YwNx9S={zYS z@2Om2Zbl-X*%E2m>?)&00AvTjCf8D>IBx_nF}Rj0f{_%l=e^7wup0rye=DAz2hiqP iDxMes00000a5Mi@;*np7PT_h00000P)8!C>RR#z*K5i0rzagk$UKog5^u|_mMn@6AjoDz>Z&*>E$3yATGK1#(Jx!+cB3ja z{&OjQW#v+a)|t$VQ#XV_7{o`ZM`^*9K`AAOq61nlQ5R;F`@Sc{y`ks;J<>O^YMi3YN{uY{aTNBf7BqkD~hYDUA7m)TWgd zr5o+`HfxUPJZDQNPq_qT8ZupjtfCm8*mVDxvgVf6W#g9)7>gGKwdB9($Zb-XO@1<~6pB13tR z<6dr^stJZ_(zM(3Ij6xB8PL%r>!LXSsRr-P1s$+1dAyp)q|9+fT8X0}L`1s0*Z~jO zp;astQC=76vN;IT&U5$-agonK94;D*FnMHuZTw7XSbN0001M{sDMxZVBGk3`_t3002ovPDHLkV1gK{AkF{) literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_enable_blind_signing/00005.png b/tests/snapshots/nanox_enable_blind_signing/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c3f94570cf2d94ed2c40b658f4b193436de7a8 GIT binary patch literal 730 zcmV<00ww*4P)+^n&+MLF3;O6#+Y|!nzf>vQv(|AE-6A( z9nQdS1W@ie(}c=vep^m=GM25l{3C^b-Yp1$d^@iFlzhU7;k^@*yV^UTpyjDpG{hy@B(4tHX64WDImc^-=`g5J@z(;;)6&LzSPF zbGnBrY^b`~QaY#S``;*$f2>4 zyDEO=pKYBJPywU5&gT!d`c`W_V2%?y{mf*FR54x@wyO*KjTpW0IfFFwW-4>h z#+>bT!U~E+Gt(5^MdwMUKTtmhjDX-Z2yV=8rh4i{$B%$fnNy-2c`mcF)KF*L@!XrK z6Gs5^&kgi=iH~F^mZw^IFcC8k91{U~I?BDthbmd#kP=dTJ01r> z^fIw2IZ?5UF}ia7jnfn~16P?R;V}XNa~Ahq$(wddCpaAdj{U_nS*D!BO8@`>006*V zWHpq$s}b$R*mRRI_<#&R-@CK_H*OC-Y?C6=q!xwyyoA)seVQRa6)kziI;9BU2mG{TV`)d}L)AuX(_T2K&FY=@i*fc8-xTQ{(!yBuJL(*O z6kNtJXcFQbs`gLNUGzwd%U7d1D&jRM@CZay) zL+HPUD_HCWw@x3wJKFLo$MsQu98{^*BFBnOCtpKGjk8D5+=VU{iY2-#X%{jTgBiN% z5ZrA|Y*G>Q$v&1z%9Y2RacLWK)rO>tdHI1~ZWJB|z|JJ6ti0UL6jV|oo7TcgS%~YG z{Bm}U^Q4C`00000zzGc2f?|2s8-GpI%d54v>{9iLUaHC literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_enable_blind_signing/00007.png b/tests/snapshots/nanox_enable_blind_signing/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..61861f2998e3ad1281d45331147c852277579e50 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Oh978JRyuIbfb;v+~^@7H| zCEx9X-aT^SS*SZTs=(;u-qgU3|FaFJP6KHIf&=TKve%kciB7+>Sp37@Hy8J(=q^~g zU&s56m!4PT0h5>0gYqtNTfD9Kv}Co)Q@$CV`(y*2NjYkkJDjdPxzwjX+Mwe(MyGSd_VM^|BG(C)wi7Q-}>);_3I}*@T>SEu)e}Y|G}2J z=r4C=;^ns;HBru(oiP86*;DPuucu$?Ss<2Co2~z&qDb28@1#Wyale=K&v~hNlIuok zz_G0FJQ|LSx8s}MK6d!~_3jS$cMvZyGsAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o { - // Enable blind-signing - await sim.navigateAndCompareSnapshots('.', 'nanos_enable_blind_signing', [-2, 0, 0, 3, 0]); +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Deposit ETH on compound, blind sign', zemu(model, async (sim, eth) => { + // Enable blind-signing + await sim.navigateAndCompareSnapshots('.', model.name + '_enable_blind_signing', [-2, 0, 0, 3, 0]); - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f8924685028fa6ae008306599594cc9a0b7c43dc2a5f023bb9b738e45b0ef6b06e0488016345785d8a0000b864474cf53d0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a900000000000000000000000070bc641723fad48be2df6cf63dc6270ee2f897430000000000000000000000000000000000000000000000000000000000000000018080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'f8924685028fa6ae008306599594cc9a0b7c43dc2a5f023bb9b738e45b0ef6b06e0488016345785d8a0000b864474cf53d0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a900000000000000000000000070bc641723fad48be2df6cf63dc6270ee2f897430000000000000000000000000000000000000000000000000000000000000000018080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_deposit_eth_compound_blind', [7, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [8]; + else clicks = [6]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_deposit_eth_compound_blind', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "b5ae3a011eb50e7d1fe9f5e6f6d91ca9f4dfca5f73805fc4866d49e72ead2f5c", - "s": "3c6e55db5925586bb58e434b58b2c04756f662131597f98c1aa2418b16992b81", - "v": "26", - }); -})); - -test.skip('[Nano X] Deposit ETH on compound, blind sign', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f8924685028fa6ae008306599594cc9a0b7c43dc2a5f023bb9b738e45b0ef6b06e0488016345785d8a0000b864474cf53d0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a900000000000000000000000070bc641723fad48be2df6cf63dc6270ee2f897430000000000000000000000000000000000000000000000000000000000000000018080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_deposit_eth_compound_blind', [5, 0]); - - await expect(tx).resolves.toEqual({ - "r": "b5ae3a011eb50e7d1fe9f5e6f6d91ca9f4dfca5f73805fc4866d49e72ead2f5c", - "s": "3c6e55db5925586bb58e434b58b2c04756f662131597f98c1aa2418b16992b81", - "v": "26", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "b5ae3a011eb50e7d1fe9f5e6f6d91ca9f4dfca5f73805fc4866d49e72ead2f5c", + "s": "3c6e55db5925586bb58e434b58b2c04756f662131597f98c1aa2418b16992b81", + "v": "26", + }); + })); +}); From cb373dad68fea4032163885992ee8c0730a45842 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 13:47:24 +0100 Subject: [PATCH 10/87] Updated chainid test --- .../00000.png | Bin 541 -> 374 bytes .../00001.png | Bin 474 -> 330 bytes .../00002.png | Bin 759 -> 451 bytes .../00003.png | Bin 479 -> 320 bytes .../00004.png | Bin 809 -> 497 bytes .../00005.png | Bin 837 -> 504 bytes .../00006.png | Bin 567 -> 373 bytes .../00007.png | Bin 628 -> 380 bytes .../00008.png | Bin 561 -> 367 bytes .../00009.png | Bin 582 -> 414 bytes .../00010.png | Bin 531 -> 340 bytes .../nanos_transfer_palm_network/00000.png | Bin 541 -> 374 bytes .../nanos_transfer_palm_network/00001.png | Bin 507 -> 343 bytes .../nanos_transfer_palm_network/00002.png | Bin 759 -> 451 bytes .../nanos_transfer_palm_network/00003.png | Bin 479 -> 320 bytes .../nanos_transfer_palm_network/00004.png | Bin 809 -> 497 bytes .../nanos_transfer_palm_network/00005.png | Bin 837 -> 504 bytes .../nanos_transfer_palm_network/00006.png | Bin 567 -> 373 bytes .../nanos_transfer_palm_network/00007.png | Bin 572 -> 357 bytes .../nanos_transfer_palm_network/00008.png | Bin 594 -> 396 bytes .../nanos_transfer_palm_network/00009.png | Bin 582 -> 414 bytes .../nanos_transfer_palm_network/00010.png | Bin 531 -> 340 bytes .../00000.png | Bin 636 -> 414 bytes .../00001.png | Bin 866 -> 526 bytes .../00002.png | Bin 1298 -> 761 bytes .../00003.png | Bin 737 -> 400 bytes .../00004.png | Bin 692 -> 396 bytes .../00005.png | Bin 674 -> 472 bytes .../00006.png | Bin 628 -> 365 bytes .../nanox_transfer_palm_network/00000.png | Bin 636 -> 414 bytes .../nanox_transfer_palm_network/00001.png | Bin 897 -> 547 bytes .../nanox_transfer_palm_network/00002.png | Bin 1298 -> 761 bytes .../nanox_transfer_palm_network/00003.png | Bin 680 -> 381 bytes .../nanox_transfer_palm_network/00004.png | Bin 721 -> 425 bytes .../nanox_transfer_palm_network/00005.png | Bin 674 -> 472 bytes .../nanox_transfer_palm_network/00006.png | Bin 628 -> 365 bytes tests/src/chainid.test.js | 108 ++++++++---------- 37 files changed, 47 insertions(+), 61 deletions(-) diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00000.png b/tests/snapshots/nanos_transfer_112233445566_network/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr61IhxB8Gix*0031$=W+l50TD?=K~#90?U>6FgCGn=L#O=z2fNUPEyWO0 zN(BOQ&q^Z`Ltbcz0001hw(OfB1NKd@=aig}*y8C4d+YhSoKQ3-7mu8_`*=3ho+aLu z^PgMi`GQ!IUNb#(^>0`oBMKKMO*-*fOu9dXg%Z6%wJd^1JAc(LLbk@4Zi=|Jh{*Y# zrgmvTHvMjcE&)h8J9yJL0BLnIiHLYC(=YL3hp_TqCf5)D9;}+A)%&{FAz!qu>U}a3 z08Qb--nWL}YIwghh`~tEg+_99vJ)N~oR;KfKBQ(D`LL6eHem8L$lnW3QD&w_x; zpmB5s;=i%7Y%>z(2|!`%tQ%d711)GU2*6f=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 diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00002.png b/tests/snapshots/nanos_transfer_112233445566_network/00002.png index 11ae75e8391d69f363be24e20c136f0ee32b13d0..c2af54e964e6227cfbee76037f4dba52af08a7ef 100644 GIT binary patch delta 436 zcmV;l0Zab(1;Yc78Gix*0031$=W+l50g6dPK~#90?U~6E!XONWsbk;&fj#I!2QeEd zCBW4G8xP77vOr2>N&o-=KrGM4DhfOwpN}|z_fFTm1KGBb%T*g~FP8y} zzdyH~4k%mrcOobK20M@cclZeqzl)phWTVz%>qEvz9)eq(=zkA+x0XA7I^ubHv+W~Q z9g>39@%tO%@u>_60MG0bS;_k;JOKQ3d+Zk<%jrn`$U~T{TM8%o*bn~^tguNVXtt}b zLn_j)>ix7#04#wQ_Wo)Ju7>vqgBZ*NS!gD|PTquW@z!NjS4fv}gVd%QBYCyw(2B+^ zj~t^#G)KGaihlzR;3>0IyR?D~ugNsmDGznoTD7$}r4_{2f|6d9`pj e00000F2oCTx>AX?P;^`X00006pnS>%$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 diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00003.png b/tests/snapshots/nanos_transfer_112233445566_network/00003.png index e0420108494b969f9c050ba46e44f5c255fa1f1b..a54fefd4c94fc7cfc5df4396112561399f2b0f6d 100644 GIT binary patch delta 304 zcmV-00nh&51Hb~18Gix*0031$=W+l50S8G$K~#90?b*Q&gCGnBU|7ccKd=XPaSYoI z=Cq~Y|78bGL-xdO_L3k4c=cPj2D;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 diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00004.png b/tests/snapshots/nanos_transfer_112233445566_network/00004.png index f979f716022e2492f86f9dcc9ba56e7622cefd3e..8656b81752a48501b840f96ec775d5a947435225 100644 GIT binary patch delta 482 zcmV<80UiFS2Jr)s8Gix*0031$=W+l50k}y-K~#90?U>7U#2^TUNl)|s51d81Nb9k} z&n0S-$>CegctJo!15uJBNs`QE-(p?L_|Db$O%Q&x99_-eH&Dz|dOeMu3Ls6;ehgPb z;(PW25U1Zu%d&?5a!~ur;c+MaKGA5#ve>B1;t6W;yP%)NpSY0$=HUdeR1HGT-X`2O_vSy?-&e2X~TL=uZASc@etn zM;NK~ljij;3V$K+yc1`MV?-T#UY2!>xQeL>DmtOn%izGf)>9EwYA?~UOmr3+sTY$y zwwM(sBv3DT0U}?*Q;W3z?;U6Ce+b=Q!e#}y9(KY({7{Fy@6Uc7{ppkmDv=E+m4KoI zx2maqHY1(h90*GEp+hWQ2E^`5(Qy4Hn^FsM+UD`Tcw49O%|`7`&cy+rB^qu?j%+|} zup$@5izq4tIz1PkDzu8na0cE0o^V7x>a|hrQ+agi@;ec8rfC!(W9p9#Pm&}_k|aq0 YKat#WpKwjx(*OVf07*qoM6N<$g6GHMQ~&?~ literal 809 zcmXAoe@GKy7{|9(n~5hP67E%TxlI3%nCJX45Or=&tu&RQiKdN?buLSBQL_Z+{y3DG zY?{iUh`Q9wa0@{cM3O;Vb=jO)DH9u$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 diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00005.png b/tests/snapshots/nanos_transfer_112233445566_network/00005.png index 93c90c542343a4423166f143ee5f43f335c73b96..fd3155c0d349a1236eb862c8f4f5fc3c3a981ccf 100644 GIT binary patch delta 489 zcmV|0wGk-swfz8xP`K=zI`<1y0oNUx>wq5-8A((Atf zzup5BG5S5VENk=E;6UyG^|_-lTQK`(BF0#Bj^oEwI{@t45r2=%I$$zY2U&(lCS}h6 zmUWDsW^Orx2F@otThhss))>O4(wLbJDE}RRzp(O~b{4ZFgeUVpfW=q6oN#K%T$XyX z#!N%sOSm*BSFYOc&Py`iZ@MQn+#3~zuk=1i5TdIK-s zsAV(6ZeuYnD{V^0ojtC0sWO?x-863hBI?UV_L4%&Sz?lgOM5lcHB&OiHMCtq-l86c zRlRSceF3Vcvp1KLia`wWKI+v_^4|r-A={URR_l@f#?mk(gGz<1X{efZXELRhS>OLb f5ClOG1P}57@$ZITS}Pb{00000NkvXXu0mjf;ri!$ 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 diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00006.png b/tests/snapshots/nanos_transfer_112233445566_network/00006.png index 402c20d84b73864383ebc9f5a2cc87b175f5db3a..c63f25f8dbf212867d4b40bfa2cc85583ca98105 100644 GIT binary patch delta 357 zcmV-r0h<1|1oZ-t8Gix*0031$=W+l50X#`WK~#90?U>6F!Y~L$iDUo&gS)7knz2Ch zCZWzf<3dSGk_&kV5dZ)HV9T-BH6@HXNxkNSXY9XpI=#OWnkON^ZZxU(c$?E~<( z?%OJ)jz?BTmkC$1|thtNl@h$#JVW)IgXd9cOs%=KY#NvYy&2f6)4+9*e)Z9 z!&6)BnX&~9oDbVu;?5IeOhQxN*slQkrj?y2ENADYa3{gmy-dbvVUopGW@H}P4q@48 ziF0-Q<~%2NDrlb6a5XXx|5APO6o8b^e^uWhiquelGKj%SunVo^DzdnSdixinj)x_R zy!a$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGR<9JL1W>QTPbJw&%?~kN1n{^L{B; z8-AQ^mMHX}5p5^-S9y^1DvhA&YmJW`K!r`f*X$_HgSLIj$bXGItxrH?o<||x4r1VD z2T=J+AT$mR_PNukrL!NH>VXDar>{RI?FhWpFNSPl0VgBVzX zEM&>I$y?^@`?qfVW-(Dp_m{0oGHF$he|!+R(lNE36;FS>(jwGevgL<9MJVSDpKcrz zo`iXXXUAN#_GP`|>`6GGn#!o%{TbQMBLg?P+$>vg7WC?v%6j-9?22)Gg?40&_+J`g zPI28IMk#2B`&70001hd%OU45*A(77^v_70000< KMNUMnLSTY5Uaf8b 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 diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00008.png b/tests/snapshots/nanos_transfer_112233445566_network/00008.png index 8b996b58a1ec0043e05a39e52d99ce49521f5116..c84d3ec3e6a544f948cc5423e2e0c648861ca25e 100644 GIT binary patch delta 351 zcmV-l0igb|1n&Zn8Gix*0031$=W+l50X9iQK~#90?U_LmgCGn=u~YAVU>A153_}To zpg^Mhx6+hG{4rpna{vGUR%O$?_<1M;RDXR6lW7H>x(y`>H z)zY+}jp3tp;VXEhLcn^_-C+v`GJxTZF0ris0jCy=o3Md>>CIH+h58dHiVXFqk&zne zPX;m21gnrH|00uaXy2-&TAgM~q3j&0H89^*O)N~Ch)%VyAX8s?ODUDu`P0~Pv***) zL}D!ccvL0)Mp(vI!ooy0vi;D-(2cE=#|J<-dwSawsIJK4yLAgMK~z?aw&(Ebb% xFtZ2n&~FAoLHd)#BAJ-QUMT(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* diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00009.png b/tests/snapshots/nanos_transfer_112233445566_network/00009.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00010.png b/tests/snapshots/nanos_transfer_112233445566_network/00010.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EV-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr6ZQxsp)~rld#7+kHHndN0Cz z6_(F!SkeaEl3yo&=sUl$Jx4T7PCn?wYjM#1X{@y93slQV@PBCM`b8YAe5AXA&n+Sf zi)E-LOOVgJ`@lqid}Rl38Vium?!+P@Zp(Bf=9mT)2o<~M$ZTY?r?*W$)8W}dwv;lX6AI3UcSqD$rt`8JneZ4n9|mdxq0QMA z6KVGuk?PqL_`W zC8hipGR|ZMN>_+$zh978)jPEuXrRyk`BTHQ9G*F}0k!x5-Sce0!*HPK%{;s(Y_8Tf zoN)x({8@|X)LyofW$Hj%{7n=-UpG}K&VLxkY;^hLi3`B^h*XOfR1_t^j})jRO5-2s~(1@WZXD8 z=j^Fapu}Z)?eyynXBt6Dr1(r;oU+{aN&o-=KrGM4DhfOwpN}|z_fFTm1KGBb%T*g~FP8y} zzdyH~4k%mrcOobK20M@cclZeqzl)phWTVz%>qEvz9)eq(=zkA+x0XA7I^ubHv+W~Q z9g>39@%tO%@u>_60MG0bS;_k;JOKQ3d+Zk<%jrn`$U~T{TM8%o*bn~^tguNVXtt}b zLn_j)>ix7#04#wQ_Wo)Ju7>vqgBZ*NS!gD|PTquW@z!NjS4fv}gVd%QBYCyw(2B+^ zj~t^#G)KGaihlzR;3>0IyR?D~ugNsmDGznoTD7$}r4_{2f|6d9`pj e00000F2oCTx>AX?P;^`X00006pnS>%$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 diff --git a/tests/snapshots/nanos_transfer_palm_network/00003.png b/tests/snapshots/nanos_transfer_palm_network/00003.png index e0420108494b969f9c050ba46e44f5c255fa1f1b..a54fefd4c94fc7cfc5df4396112561399f2b0f6d 100644 GIT binary patch delta 304 zcmV-00nh&51Hb~18Gix*0031$=W+l50S8G$K~#90?b*Q&gCGnBU|7ccKd=XPaSYoI z=Cq~Y|78bGL-xdO_L3k4c=cPj2D;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 diff --git a/tests/snapshots/nanos_transfer_palm_network/00004.png b/tests/snapshots/nanos_transfer_palm_network/00004.png index f979f716022e2492f86f9dcc9ba56e7622cefd3e..8656b81752a48501b840f96ec775d5a947435225 100644 GIT binary patch delta 482 zcmV<80UiFS2Jr)s8Gix*0031$=W+l50k}y-K~#90?U>7U#2^TUNl)|s51d81Nb9k} z&n0S-$>CegctJo!15uJBNs`QE-(p?L_|Db$O%Q&x99_-eH&Dz|dOeMu3Ls6;ehgPb z;(PW25U1Zu%d&?5a!~ur;c+MaKGA5#ve>B1;t6W;yP%)NpSY0$=HUdeR1HGT-X`2O_vSy?-&e2X~TL=uZASc@etn zM;NK~ljij;3V$K+yc1`MV?-T#UY2!>xQeL>DmtOn%izGf)>9EwYA?~UOmr3+sTY$y zwwM(sBv3DT0U}?*Q;W3z?;U6Ce+b=Q!e#}y9(KY({7{Fy@6Uc7{ppkmDv=E+m4KoI zx2maqHY1(h90*GEp+hWQ2E^`5(Qy4Hn^FsM+UD`Tcw49O%|`7`&cy+rB^qu?j%+|} zup$@5izq4tIz1PkDzu8na0cE0o^V7x>a|hrQ+agi@;ec8rfC!(W9p9#Pm&}_k|aq0 YKat#WpKwjx(*OVf07*qoM6N<$g6GHMQ~&?~ literal 809 zcmXAoe@GKy7{|9(n~5hP67E%TxlI3%nCJX45Or=&tu&RQiKdN?buLSBQL_Z+{y3DG zY?{iUh`Q9wa0@{cM3O;Vb=jO)DH9u$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 diff --git a/tests/snapshots/nanos_transfer_palm_network/00005.png b/tests/snapshots/nanos_transfer_palm_network/00005.png index 93c90c542343a4423166f143ee5f43f335c73b96..fd3155c0d349a1236eb862c8f4f5fc3c3a981ccf 100644 GIT binary patch delta 489 zcmV|0wGk-swfz8xP`K=zI`<1y0oNUx>wq5-8A((Atf zzup5BG5S5VENk=E;6UyG^|_-lTQK`(BF0#Bj^oEwI{@t45r2=%I$$zY2U&(lCS}h6 zmUWDsW^Orx2F@otThhss))>O4(wLbJDE}RRzp(O~b{4ZFgeUVpfW=q6oN#K%T$XyX z#!N%sOSm*BSFYOc&Py`iZ@MQn+#3~zuk=1i5TdIK-s zsAV(6ZeuYnD{V^0ojtC0sWO?x-863hBI?UV_L4%&Sz?lgOM5lcHB&OiHMCtq-l86c zRlRSceF3Vcvp1KLia`wWKI+v_^4|r-A={URR_l@f#?mk(gGz<1X{efZXELRhS>OLb f5ClOG1P}57@$ZITS}Pb{00000NkvXXu0mjf;ri!$ 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 diff --git a/tests/snapshots/nanos_transfer_palm_network/00006.png b/tests/snapshots/nanos_transfer_palm_network/00006.png index 402c20d84b73864383ebc9f5a2cc87b175f5db3a..c63f25f8dbf212867d4b40bfa2cc85583ca98105 100644 GIT binary patch delta 357 zcmV-r0h<1|1oZ-t8Gix*0031$=W+l50X#`WK~#90?U>6F!Y~L$iDUo&gS)7knz2Ch zCZWzf<3dSGk_&kV5dZ)HV9T-BH6@HXNxkNSXY9XpI=#OWnkON^ZZxU(c$?E~<( z?%OJ)jz?BTmkC$1|thtNl@h$#JVW)IgXd9cOs%=KY#NvYy&2f6)4+9*e)Z9 z!&6)BnX&~9oDbVu;?5IeOhQxN*slQkrj?y2ENADYa3{gmy-dbvVUopGW@H}P4q@48 ziF0-Q<~%2NDrlb6a5XXx|5APO6o8b^e^uWhiquelGKj%SunVo^DzdnSdixinj)x_R zy!a$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGROH!ypJn>9YR+2lt_SaB+@%|8fzVnql zryjG@iYv6HNBg)-b_&<6@Mv}lvMZD6&zc~)nlpL zD|V03x@bm^(@vI7r?PON)~RI%D3SFiY!cW#D=cH*(gEzDi>$ZaZj@y+A4KYgcCkw9 n)V&)z@HWso1poj50JtqLu@3@R;aRb_00000NkvXXu0mjf_E?&d 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&$mKvQpW)nO1vs`{`$$ArOn=sA;bJmlfdDA7rgTjC zskKxkG#fs%Zrp-X$_MN!E_YbN0xLkFM;9)ud%>k;#gFg;-=!y$kr(O@ASp7`A4WuK zs6QCQU?#{yGx--;bVEC<5?PL>Jj)xEH%GJeug+aIBxf2-$)FVxO{u&Yuu$F4$WF|rb7v5MY_B+b zdGjBW%|v$uLnbh)85iAPEW*@9X&->#@pu+e_N)qWi3BN*pDM9XEN#lCsGTPO00000 aNb>`EQQK!X#Ab2;0000hBKg$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 diff --git a/tests/snapshots/nanos_transfer_palm_network/00009.png b/tests/snapshots/nanos_transfer_palm_network/00009.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_palm_network/00010.png b/tests/snapshots/nanos_transfer_palm_network/00010.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00001.png b/tests/snapshots/nanox_transfer_112233445566_network/00001.png index a5592a6c410c0198aaf506d1610c176183154cd3..7aea2c0b9e764c728de17d734c50bee74381c7cf 100644 GIT binary patch delta 511 zcmVJYZb z<7gcBU)g8>-H~5F@>m}9H`?-REr4^u+Zw*?8bYKZq$P)Hp zOXTuuqoIWqc7JrKkSovKUg#;~pqHLlxJxrmp(Qz;s5CFv?J|XeGX16Gw-vee<@&gR z!c?VdYf+9C^2DET?iG;n`X|HpW1rQWd$=VSrzyG7OWgJ?_uN%Ao&z&KwA`fLxwwx(1<2NIX~0|8M91jVu&W% z3b(UjG5S|=HPj4)DI_2l;;Y;SZy<&DZTT+*1Gm002ovPDHLkV1gLO B^qBwv 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_DW`K~#90?VDM4!ypVr)t>Ie`(F}!=|@^Z zH6h_iY2N*cF~LG&5YGt_00000003`JYb|xlssAc`-fh5>*4nmh|G=jyzV0?)LU7>s zl5N|vm*9toUqEzh%|5q$I~+)e`lCZ=0`WStL%v z5rdYAkB;Eje}5JBYC*wM<#aW3zUVA&k#c69wfaTurxOm(i2!u*q#Gf7#Y9b3Gw96& zu@?H&Bvv;A`fI<{aepVHGt|&v-y+^u_cR%7t2}P-{;5eu$EPhP0x)*iY1bMrYEvn! z*>mx%vYry@xP%8lz8Hz5p=x0IWOR~Fzx|!4Yv#05vVYFheyiiM@yYn8ppXB1Oee$p zm!Y^C-oF^c;7+g#-O0qsh{35y_s(C+%e>7xgQUbxtD0lRR1=K|9+nvq?Xwp~6pmx^ zY)ep7HNUCY=~rH`Bxpv;o;3|MRWjn8ghyXrBQ!eWNY;$}u;+r~-cGy#I43$;jof+d z)S+RfvwtaXsaiq3K{goVsIW!GZcdC-H9u7&vTmt$n8nLvr@w`|*~q)Bq9xF z(@;nHpT6@cyZ-|K0002oNQu8FIang-cqv68=VdEM3UjE(y*-jcwHF?R{-)ZIBHeho z+ztrAMriiMgI`i@_*2ap5FsK4Fe2LI^}K2ToL>gM7KQ#P|DKea0rHji+Fr`q!G;U~ e00000z>{xumOAKEhM))l0000egH6v}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!)< diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00003.png b/tests/snapshots/nanox_transfer_112233445566_network/00003.png index f91355bb26c34e08aed93baf51cdb875bcd3a2f2..d3e6a0bff071cf39c789549bcdd45dc8fed78052 100644 GIT binary patch delta 384 zcmV-`0e}AC1&{-f8Gix*003RI=qLaH0ar;xK~#90?b%z7!ypWWVb7>LVgE~FFY|y} zANb!Fq$zUZBn&fZIP`(dxr+0HwDyMxaE64qnHdeqE}eYbr55-tpvGFeaGV)gUr z;AHQgR^4#!)Om+(PVR@Fa&0qCkI;=3Bmb91R8qR`(48gdNcz%Vi)Pj+C&~_Z>~V+d zti?h+)8=P0wNu$Ph}ZK}{Tj`XN&hjGs7e1}^ubN6LN^UUrVmUJF8}}l0000000000 e00000VCD}E=Y%s5xL+3l0000Eakt!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 diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00004.png b/tests/snapshots/nanox_transfer_112233445566_network/00004.png index a67fa259f1e9e3c91a4c6f3ca19bde81405243ea..4213f7912e6e0f6d884484413295b90e438e4614 100644 GIT binary patch delta 380 zcmV-?0fYXu1&jlb8Gix*003RI=qLaH0aHmtK~#90?b%TdgCGomVYcih-2X`2We+68 z02XkR%KX14We%|jN_7qZ003C-Wq9rof^*J$FO&>bm0YO7%E!6^(`*#WFF9**Tc>*mr;s z*0VUC)iYW$G@&VZTb=lV7^&1@vrMmWi2Vo<{1TUASmO;|mOT9-3;+ONM>iYVT%A^z zLe-T~a}6wKRkIQyO;k2@+~ltgM?#S}ZOg#VKIO1N_%-yt#S zYLlT;o`TdnpmnqLOv5e6);)I$D#L1$7JX<3n12RH@+oL~%ci`{mER0fJIkMX zN_rZm@fz9)?@gYB|Lru$M1Pq|sEPh!^noR2Axn)Q(+8>uF8}}l000000000000000 apymtSbQA2*!s*5U000065M^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 diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00005.png b/tests/snapshots/nanox_transfer_112233445566_network/00005.png index a2cb8f9dc97401fd76908866c585e2855970e054..570ce28d53e82ac396ba25c370110058f3a638f9 100644 GIT binary patch delta 457 zcmV;)0XF`k1=s_S8Gix*003RI=qLaH0iQ`kK~#90?b%UsgdhxnVeITpxc`y3OCOlB zStE*8Hi`3pPY!h{CWshQ0ssI20001h3rZ=a6zfr(@MArIJH-lp^_&E>=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00006.png b/tests/snapshots/nanox_transfer_112233445566_network/00006.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB%H@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_palm_network/00001.png b/tests/snapshots/nanox_transfer_palm_network/00001.png index 14404aefaf0540b95d7cd99e2aa4af6d11b7b49c..3c0adb2122a90919d4f6cff2ef80c62bfe154baf 100644 GIT binary patch delta 533 zcmV+w0_y#N2cra#8Gix*003RI=qLaH0qRLaK~#90?V4MXgdhw>nW^3h`(KiKnGdTe zhJ+9vN`QO5Y!nDY0^W{u00000005lKbzQSfIGB6(U-N+-XMbiJkR_fY?|t~`y-yy9 zOXzjdj{EQI@cik}6~JE8i~hp7{LVJOx#(?;-}FPU5`s>f_kVyD2hhlV2=g5f@0{)% zg^GJ4yDhsK|6vmb0000004Y}ly(Rn%b>$K}n2;h^{Fg+`*-Wmm>wrVp(*f}+(R^1= zWWE%ULy-HGa>WwZbpSiR`sg1PfpI_CbpXqLqG`GZm>n1^nuc4sGpjWU7TO=c24p80 zv;P{*RAcsE27f-738K(Uun*6KPVY}uP2uB6NLVXY7oMbfZB;!AwKVMrCG2pL)V$nd z)d&e?`djSUN)GRGe%wG~idMCiC|iqpLyXJ40#wg=Q#KgeSF<+th!mj_Ve}Tat>vCt z#o$T9X0tmVaX?5y?tjbJ;G0|NiB_Sh#da4r)j5`8#eX?sToQk)hL>}R+`>Q=k3BW8 zW6_Ljjsr%m-%%~}kQ@<)zex}za2Y_m$)SC8=k00000;6|&4+F|%% z5j3JvDDAUnYT`mHmY8+3M9SO#Bmrl|__H>(QZpEg@CW2VY;_EE*cbo+00000(C`On Xk@Ggkr4H}M00000NkvXXu0mjfdpz}P 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&DW`K~#90?VDM4!ypVr)t>Ie`(F}!=|@^Z zH6h_iY2N*cF~LG&5YGt_00000003`JYb|xlssAc`-fh5>*4nmh|G=jyzV0?)LU7>s zl5N|vm*9toUqEzh%|5q$I~+)e`lCZ=0`WStL%v z5rdYAkB;Eje}5JBYC*wM<#aW3zUVA&k#c69wfaTurxOm(i2!u*q#Gf7#Y9b3Gw96& zu@?H&Bvv;A`fI<{aepVHGt|&v-y+^u_cR%7t2}P-{;5eu$EPhP0x)*iY1bMrYEvn! z*>mx%vYry@xP%8lz8Hz5p=x0IWOR~Fzx|!4Yv#05vVYFheyiiM@yYn8ppXB1Oee$p zm!Y^C-oF^c;7+g#-O0qsh{35y_s(C+%e>7xgQUbxtD0lRR1=K|9+nvq?Xwp~6pmx^ zY)ep7HNUCY=~rH`Bxpv;o;3|MRWjn8ghyXrBQ!eWNY;$}u;+r~-cGy#I43$;jof+d z)S+RfvwtaXsaiq3K{goVsIW!GZcdC-H9u7&vTmt$n8nLvr@w`|*~q)Bq9xF z(@;nHpT6@cyZ-|K0002oNQu8FIang-cqv68=VdEM3UjE(y*-jcwHF?R{-)ZIBHeho z+ztrAMriiMgI`i@_*2ap5FsK4Fe2LI^}K2ToL>gM7KQ#P|DKea0rHji+Fr`q!G;U~ e00000z>{xumOAKEhM))l0000egH6v}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!)< diff --git a/tests/snapshots/nanox_transfer_palm_network/00003.png b/tests/snapshots/nanox_transfer_palm_network/00003.png index 14a7b7b70dea60246eec79bafc370f71cde1ab59..6d198029e8509310f34c702ca87c53ac81cf04e1 100644 GIT binary patch delta 365 zcmV-z0h0cx1^oh$8Gix*003RI=qLaH0YpheK~#90?burmgCG<|QPOlK%zsGCr60tG zTpogQ0dcP{N)_}VwO|YY008hp&bh+J0X@$3nSBAqR41}jaJ?)s0M^=Mxb9$%^uwC} zF>yJ0n5Z$Ej%c$m-^zkGE7wBJxzjB%159QT#LsLm&N*wXMt{q#zOyf&L@y&h-Ybm3 zDl@?3-vot&eS+80Z0b(WS~DOFMU;KP*OaqPo(KQ{fLCyV@?ovb-Z}jO?Jg7-V)oGY z9yZ%L9l8(;LlH|P@l|0Zm0S15E4bu3E-vSmd!qM6wk~Src8o<${T60ev(wh8;tVJ} zSvMsofnG+c&t|^j03-K2b zkV$`-MAW1|7-KLKzd|#egv=PIB3=Lh00000000000000006@(TFY{XGfZFQ900000 LNkvXXu0mjff)}CV 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 diff --git a/tests/snapshots/nanox_transfer_palm_network/00004.png b/tests/snapshots/nanox_transfer_palm_network/00004.png index 0ee720ae1bddea7e627d728afa242da36a58d2ed..e231ccdaad6f8f6f562aabb40de37e4be707f4c8 100644 GIT binary patch delta 410 zcmV;L0cHNt1*rp&8Gix*003RI=qLaH0dPq~K~#90?b%VX!XOMlQJ(X5!v2@UUi@H& zVFC?Mfl$5Yt5S>@3bxTX0001ByFbIv4k0+_y!T4WP^jca1S|j61DNJPNza`-0r^E8 zlN&-12b~d8XVFr2_$~4Kr!0tT~5Hpn~Y?kQ(huE(G#V2{m(;6@EvgOx*gaH5m>`bnPmXD+P zDN*<=JGj2$X!Chk4qk}v-}pLV!Z literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|^cz>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 diff --git a/tests/snapshots/nanox_transfer_palm_network/00005.png b/tests/snapshots/nanox_transfer_palm_network/00005.png index a2cb8f9dc97401fd76908866c585e2855970e054..570ce28d53e82ac396ba25c370110058f3a638f9 100644 GIT binary patch delta 457 zcmV;)0XF`k1=s_S8Gix*003RI=qLaH0iQ`kK~#90?b%UsgdhxnVeITpxc`y3OCOlB zStE*8Hi`3pPY!h{CWshQ0ssI20001h3rZ=a6zfr(@MArIJH-lp^_&E>=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_palm_network/00006.png b/tests/snapshots/nanox_transfer_palm_network/00006.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer on network 112233445566 on Ethereum', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf6181880851a21a278be8080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf6181880851a21a278be8080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_112233445566_network', [9, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [10]; + else clicks = [6]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_112233445566_network', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "509981d8dfb66757e25ff47c009b9b5bc5db0f169473e4735f5212b144f1c069", - "s": "5db989d81025de3c846e41a9ce01a3f9fd0982e2d827f1b88ffc95d73a48d04c", - "v": "344344f19f", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "509981d8dfb66757e25ff47c009b9b5bc5db0f169473e4735f5212b144f1c069", + "s": "5db989d81025de3c846e41a9ce01a3f9fd0982e2d827f1b88ffc95d73a48d04c", + "v": "344344f19f", + }); + })); +}); -test('[Nano S] Transfer on palm network on Ethereum', zemu("nanos", async (sim, eth) => { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer on palm network on Ethereum', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf61818808502a15c308d8080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf61818808502a15c308d8080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_palm_network', [9, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [10]; + else clicks = [6]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_palm_network', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "946700c4972b3da24ddaa95e590ad25a8f905da62e2bd053285a4cc17f93f490", - "s": "3698e84564e58477a49f7a9cea572ef5d672a5538db08f3ee42df5eb75a1b907", - "v": "0542b8613d", - }); -})); - -test.skip('[Nano X] Transfer on network 112233445566 on Ethereum', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf6181880851a21a278be8080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_112233445566_network', [5, 0]); - - await expect(tx).resolves.toEqual({ - "r": "509981d8dfb66757e25ff47c009b9b5bc5db0f169473e4735f5212b144f1c069", - "s": "5db989d81025de3c846e41a9ce01a3f9fd0982e2d827f1b88ffc95d73a48d04c", - "v": "344344f19f", - }); -})); - -test.skip('[Nano X] Transfer on palm network on Ethereum', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f044850306dc4200825208945a321744667052affa8386ed49e00ef223cbffc3876f9c9e7bf61818808502a15c308d8080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_palm_network', [5, 0]); - - await expect(tx).resolves.toEqual({ - "r": "946700c4972b3da24ddaa95e590ad25a8f905da62e2bd053285a4cc17f93f490", - "s": "3698e84564e58477a49f7a9cea572ef5d672a5538db08f3ee42df5eb75a1b907", - "v": "0542b8613d", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "946700c4972b3da24ddaa95e590ad25a8f905da62e2bd053285a4cc17f93f490", + "s": "3698e84564e58477a49f7a9cea572ef5d672a5538db08f3ee42df5eb75a1b907", + "v": "0542b8613d", + }); + })); +}); From 5df3c48d922fe284b921a9f34f195850a306584d Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 14:23:12 +0100 Subject: [PATCH 11/87] Updated contract data warning test --- .../00000.png | Bin 639 -> 428 bytes .../00001.png | Bin 631 -> 419 bytes .../00002.png | Bin 531 -> 349 bytes .../00000.png | Bin 903 -> 587 bytes .../00001.png | Bin 628 -> 382 bytes tests/src/contract_data_warning.test.js | 43 +++++++----------- 6 files changed, 16 insertions(+), 27 deletions(-) diff --git a/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00000.png b/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00000.png index e47d6482287f9d4f565681dc1111c4193eb68ef0..c2420afe1d5b2ea19c999ee43f90c67f120d4f5b 100644 GIT binary patch delta 413 zcmV;O0b>6D1gry)8Gix*0031$=W+l50dq-2K~#90?U~UIgCGn=b(#PF!9HvcE(~cY zXpxKYo|wh3+Cq_b?WTzkLI~;2XZ>Fdbtd{%0cp449B#uEYYsYtqiu_cJc2jMutM;{ zyzK6iucWX<9V9zs2+G9-_1<`$b0f9@=nz0pK+pH|v!>?c2!DbXdIBKE@c#7B4H(Az z6F3Cfi8LT{vLU7lsPQLOIMSBfnbV21TLu<}9vOmw#HX3S;2z-N9w4FjksR=T+%1qj zfOWHD!W4f~aS-%if=ZR@VlnSwV`CZM!$c^HX zr@$^f3+e?K9T@e1AEk+s4NtSE;t^;oLOod9f%9u_+g!V>g-|*Hr>)vEHnNj9aru-O zX(LJU#UxzW#2tv5bk|2oN7xMoGovT4Cs$JRS3(FO4;J7H42diyXJUEd00000NkvXX Hu0mjfZqB}z literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfh4!x;TbZFupw)SoGM9!TBKj zw1WT4kC_8~*Q$Ga_wCfaDd=0)9bcu|d3ocC@R*mY!Y5hCwl@@A6^s4qCA2&_;)m~g z3)!xQPp729Quc)~8wDR$C|=AcDWx`ZCF9KSvPAxrf8x9+E)*FnT^)_I9UE&4KyOd;h8E> z=H8)~5-AxK{tlM1?#xE{Vt&V!oDa`#y}S`9m-etkhWEsuyu@xcsf-1UZ7UPAerWT~ zHnmxjcwOor(B}8LIjYS(M)H$>78&tRtgPhqS1&%_nhx|zM#RL(%pV~juP7Ls+?lX2 z(G}!Fpzutoyc26o)||LtaFU1jgb(it9^T13yw0GYNt_g!IU~icIB|8GXPPi5kbvG? z`Ow+uzh_#8L)xU7QWJK1gN&IZ31em4@JX8lRK_ypzvdF*tE2V@8S^DE7{CXjB8E0vG`N*$!z-8E4K1hExXAsW{U$ sCv1EVcb)N9Sulq$8z{!T-1#^Ay@+4kX*zGpfC-Di)78&qol`;+0LSVDApigX diff --git a/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00001.png b/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00001.png index b4443b629cfd8207ffb304b6c5c928971f340552..b31e455967dd36ec248757eeb3ca37e26ae4def7 100644 GIT binary patch delta 404 zcmV;F0c-yE1fv6x8Gix*0031$=W+l50cuG^K~#90?V8OF!ypKN?XtfA1NX2UnsiJN zK~b#b%MOb_Kn1a~h2S`j<2;qkO!MaeR_tmrPf?ffNb)%#?Y$;G2SbU)Bb6gI?b` zRzEE3fSas-Fit_tgA{#n%nd_NX*B;pffKpJ?uAT&YUAym`acCt6bKLG*0FzkeD&>d zAK2qQu&1jJiq!(qT>iwU=D}yRh}3mJi&A3D*hR0sh~=u40V`Odjp+L>QT0Rz6WVFg z%4_Nac!MiGV1Hm=7!^oMk`-llLWqi3*b+7J6;)f#rg;Z6j%lA#1coqYV>KeY%+@-9 zsUzLLDq<^u`9V=p&V$8RXc!x+7OAGw)^arJc+=D-0$)sldm|! y=|2NF`s5CFA)bPavHM@p0`xf59mjD7@&#R+4xnH^xeXZr0000YrDKL=g(vw-sO*P{FuqZ>wo#f%C`LM z9V;K+mdaSr*mnQghaBncC;q%YdB>Ga5@_>=%NvwG=ZMQKO+2B)Yi+bR5$JxNnf|6g zPkmU*mNKnPc4mIIgpmnQlDC_O7ozAPvn0@6^|pF8PRvH$z!1xDNSi1L(hhR*gh(l1 zFfD#K9TZ@BKz}c1oVhe{BG5M%8_p~T1)+0VrbF6^KYiT&mp)2AtfKl1fdwC(J#`5defZo<% mI`wjcnP2<1LaQzN8ICObRl37osT`Q77(8A5T-G@yGywp?MGQay diff --git a/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00002.png b/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00002.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..ce795f34e8569e986af689fded3b59c9a8af2961 100644 GIT binary patch delta 333 zcmV-T0kZy+1lJp&6E+D$bdC^02(jb+y4vyF2&dy>z=Az1RijD2Djex@kBY(Vc{LwH^L4U3H$cs9T66OLVbMC?z z3J~R-Fbl~eG1nLo9=ti_*k1^mvtO~`RE00000NkvXXu0mjf!Ev7< delta 516 zcmcc1G?`_BWIY=L1H&z)0#ybE##^2)jv*C{Zx7z?yW_^-e9+nP&wu`B%(h~Wj%Ac3 z>6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVb@=2g?MI8Gix*003RI=qLaH0uo6?K~#90?V4L|#2^esY1N%%|4U*o{Xj(w z7~|OFajSbiMwvj2Wrx=#DG@>lA%qY@2qAR)N>Fa3+oQwkwV)PSY4=8lu2918gO@F|@0W|@$Nf-{u1hlj6 zY+Zx`UINB74|EQ|5-?kF;^qJ>0R?f*gS!wSgb+dqAs^&V>do%LVkcN3SpRCS@~5@y zh`VS9o$ZHlKM_~T-luK8-3{r7w{3mVR4EmW>rIbFM3-9Qof~2kwSM{S_I=_OJ$h0! zjz3B23d@c%W`AO)Wu7%|FO6H9*>t$kvXCNK-ez)0R&h+(wjXqnqTHlkhmnznv|o zjBrPlkmmvaiFbV$G}}_#Z-fv+$W9_M)>6#SpSA2rEq{$-vo`^eMwL4E2i+q@j3Qz! z5+%v;rnoqnZFy!s=vu7N|5o5^OH0uy&Gn{jmr+Di>gz_fm~HRamDi<{c8BeRdO)yF z{E;Q?D}2M(a}LeUlK^8I;u%Zatb^IXPLM9IKHZd3gdb6JJ*%6Z?g94M#-c1LX16H7 zMv=08mp1KZ3A4or^^eQhsJU_odYE^qp+Hb`C4>+{2qARhIwN0-k_vueF+p48OEXQk*4S>p%ao#64U^PtVOjQK$*3;K zmYrzmYHn-ZO;)}HBSkS&5T~D{=A1EMkA`us)bF}8SKh0 zM8WN&!8@r7>npP7>n`?JCwrb$z1=<({CMzF)rS|AsmZmGu^;En4W}2+vSh1$CzToI zrM`~VEM-P@ZTb7jfq~J=%BEKn@gBE4(O`($SeB6`8l!ghwJgz*$%KS9ykBwPx`-8w z7NrLp({J+rVslp0ay~?ty_E8=q8g^>_~SNKU1Syxj2+oPwTP}vrsvq>>#RD`D&k&t z)Pz4e`|ip8mhw0Ml+^7_&Uw%Umq}XCv1@{oKF2|WBQN6* z?#MXt*RyRjI5aN!J>h=fgzQW-S(fOEQSiK;S3=I5eCyCI35JqxN4M}psF4f(Sl#v!AE4>>{0G(>j;OG$RGG005gJg4Nm79D;PSE?JKt)jsy zdS$x39~#p=hrQvF2$wx6R+jx8XPB*y*6jc0d_JyUPn7T5xXcDW7@;oG75WN}T>S&J Clc)0l diff --git a/tests/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00001.png b/tests/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00001.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..a58590b988714545e7960f7f400f360ffc5de41f 100644 GIT binary patch delta 366 zcmV-!0g?Xn1pWe$8Gix*003RI=qLaH0YynfK~#90?b%z7!ypVmQB-v&?0-qwOFxhz z%DZWd9k}PKWeNcdj$oVv000000000000021IF94biq~4W{M@C4S(rA1_9y+V-GQ$; z^4>QJ<0|VFP6*I=?9Z*2eG1}B)E zf~4mt1oc6Ym>qy(&fQrW0Ex^{Y&p(C`75zjn22AzwY7h~gd4S{=}fQ6sw_Tq;r&q^ zn%0xZD`Owl;!1(^H=S# zog9MXj+~D)erLhi{_(H(sp_okfY`{|%vZN$j|7pxrQLzD;M1& literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|_QLba4!+V0?R!u}j*Lf#IOs z!}(wS&%cuYu~MNa@uRBZo2NP6q3rf| z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { - // we can't use eth.signTransaction because it detects that contract data is disabled and fails early - let transport = await sim.getTransport(); - let buffer = Buffer.from("058000002c8000003c800000010000000000000000f849208506fc23ac008303dc3194f650c3d88d12db855b8bf7d11be6c55a4e07dcc980a4a1712d6800000000000000000000000000000000000000000000000000000000000acbc7018080", "hex"); - let tx = transport.send(0xe0, 0x04, 0x00, 0x00, buffer); +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Try to blind sign with setting disabled', zemu(model, async (sim, eth) => { + // we can't use eth.signTransaction because it detects that contract data is disabled and fails early + let transport = await sim.getTransport(); + let buffer = Buffer.from("058000002c8000003c800000010000000000000000f849208506fc23ac008303dc3194f650c3d88d12db855b8bf7d11be6c55a4e07dcc980a4a1712d6800000000000000000000000000000000000000000000000000000000000acbc7018080", "hex"); + let tx = transport.send(0xe0, 0x04, 0x00, 0x00, buffer); - await expect(tx).rejects.toEqual(new TransportStatusError(0x6a80)); + await expect(tx).rejects.toEqual(new TransportStatusError(0x6a80)); - await Zemu.sleep(1000); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_try_to_blind_sign_with_setting_disabled', [1, 0]); -})); - -test.skip('[Nano X] Try to blind sign with setting disabled', zemu("nanox", async (sim, eth) => { - // disable blind signing - await sim.navigateAndCompareSnapshots('.', 'nanox_disable_blind_signing', [-2, 0, 0, 3, 0]); - - // we can't use eth.signTransaction because it detects that contract data is disabled and fails early - let transport = await sim.getTransport(); - let buffer = Buffer.from("058000002c8000003c800000010000000000000000f849208506fc23ac008303dc3194f650c3d88d12db855b8bf7d11be6c55a4e07dcc980a4a1712d6800000000000000000000000000000000000000000000000000000000000acbc7018080", "hex"); - let tx = transport.send(0xe0, 0x04, 0x00, 0x00, buffer); - - await expect(tx).rejects.toEqual(new TransportStatusError(0x6a80)); - - await Zemu.sleep(1000); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_try_to_blind_sign_with_setting_disabled', [0]); -})); + await Zemu.sleep(1000); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [1, 0]; + else clicks = [0]; + await sim.navigateAndCompareSnapshots('.', model.name + '_try_to_blind_sign_with_setting_disabled', clicks); + })); +}); From 571f439f58d1d73d1e2b0b3c3202c89ed9d7dad3 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 14:28:42 +0100 Subject: [PATCH 12/87] Updated eip1559 test --- .../nanos_transfer_eip1559/00000.png | Bin 541 -> 374 bytes .../nanos_transfer_eip1559/00001.png | Bin 414 -> 296 bytes .../nanos_transfer_eip1559/00002.png | Bin 724 -> 434 bytes .../nanos_transfer_eip1559/00003.png | Bin 727 -> 403 bytes .../nanos_transfer_eip1559/00004.png | Bin 544 -> 343 bytes .../nanos_transfer_eip1559/00005.png | Bin 536 -> 345 bytes .../nanos_transfer_eip1559/00006.png | Bin 582 -> 414 bytes .../nanos_transfer_eip1559/00007.png | Bin 531 -> 340 bytes .../nanox_transfer_eip1559/00000.png | Bin 636 -> 414 bytes .../nanox_transfer_eip1559/00001.png | Bin 521 -> 314 bytes .../nanox_transfer_eip1559/00002.png | Bin 1108 -> 550 bytes .../nanox_transfer_eip1559/00003.png | Bin 666 -> 374 bytes .../nanox_transfer_eip1559/00004.png | Bin 674 -> 472 bytes .../nanox_transfer_eip1559/00005.png | Bin 628 -> 365 bytes tests/src/eip1559.test.js | 57 ++++++++---------- 15 files changed, 24 insertions(+), 33 deletions(-) diff --git a/tests/snapshots/nanos_transfer_eip1559/00000.png b/tests/snapshots/nanos_transfer_eip1559/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr6O!8Gix*0031$=W+l50PjgeK~#90?U+jr!ypVqP1W50z+E(ps?@=J z(pIu3^1Kxg6rmZg!6JkZLP$K%NAwCZ^HSf<0~oXK(F+)(H7eVuTefzB9IrAt)Fc5Dah#I++9J)S~G%E`Nj& eLI@#Q*a3f^eGys#BO{Ig0000>_LWIY=L1H&z)0#ybE##B!i$B+ufw+9{jZaXkAAAIKU=YMl$0*j(p&U-mC zKfZ}+tB&N~^-P-Cy(@WnZ26>!XNn8n+*$-?8B|=7JsrX_MLWwO?Wc7!kZNoD?{-); z_m1abZb>OWqvdUr&#Yve8O&_d-X;#j&W9bJX_>vNcYAiF;mpE^KmsT$Khe@up_zyG zM9kR-SyB@$Ph8kgllQnwYFd5rWpN_LkJ;$G**@iBPoww~GEx(M zMgSepmZInS%(^)>OS=40!K9xP+h*q8={zGpx$>gH8Gix*0031$=W+l50eMM8K~#90?U~Dx#2^So$yDe6KRAo@A~RM- zPyxj}>Yi1L3J7Y{CISEe0AkrUTUDifr}cdklpm6#Dr@`(((o#^8eyjcB~MEE819C| zC)z*}W!#fwSq0fT7<$Z8_F zcd)Eu{8Te#3mQ0{Y!690Ps%Z|nBJTC6+nN}DlRD5oSi#`I|*I^e1RVlF-Fb6og3&s z!pUgUJ>LC-#q^xHW57MA;n8R)d}Z|MP6?>#d~5V?h!AQ-e=^9ym0%aTlK(+oglc{= zs~^R(Gq}EurhlUey%o1V{U!_})jSG{ue+KynvN#)R^0xK)kZ|-i&#qFIg_P3&bd}> zqv>cW>aDo_>D0!Exe2>3kbDEw7bA!_VN5`J40z6K*Ug#o7zfH26CggNX}&fS{&zH4 zar-k?n{W&jweVBad2_5E!m_WW*hbUQRMcB>`{UCF02}}S004-H=nIgmNQj;8!HEC> N002ovPDHLkV1h{d!6^U$ literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfh&bba4!+V0?S{uVL2>G+bBEczgQS8wM9?v{*R`3O`WQJMRxvgKQ=j!_*5B={zSeN&ih-$uv8hhVGPabqw$?MEGtEsE zKJPc-F`CT7d*aTiV{3uZCoX(Ymde<1sbJ~DXsHR2Cls6y+gcX#OV!N*s$U4SC@sU` z*~Q#D%#tY+c5+Hei5Z#L>=NF7rQwWI8(YeRg%5p=OlrD#cqgB^U~m#dfrQIU6*gzg z0NI=8>97;1_8~9ti9e!1+{Konmm8Di@a#hZ(ETb4_5e-)a6oE8<;IVT7-t@Cp1knk z(PP|_QhfaD7-x!0uRnRApdtY1WwixBO=%YmPSkiEc6t`e%RO^tqT=UdpmTx`JEdhs zobUk(m4o~W^yrlh6J|KDbc>h|)nfrl` zcV#x}W=jzRhHMD4(e{!@)+rehDSZFu^&Sqs{i6>QR*4rssPgWXs`CZLSuBvTZ%JY} zkhxwcz;1CO$jOpYKoaC7U|d4I0tr-T*j@m649UyDK!=MwQ)W8#Ff&(X-mPN~S0YjM YRzJ-wTc@vh4NR>Jp00i_>zopr0H6ao#sB~S diff --git a/tests/snapshots/nanos_transfer_eip1559/00003.png b/tests/snapshots/nanos_transfer_eip1559/00003.png index 21eac94e3f0922d047db08bc1a9766a1b7464fb0..32a2ee92966bd4321ef50d6ef6f25a44162df203 100644 GIT binary patch delta 387 zcmV-}0et?~1(O4i8Gix*0031$=W+l50a{5!K~#90?U~CG!ypJnvD5tj2WOFPQaeQ< zs1TjZJ<~;t6nUtzln4L-0Ep$-+lCbVk=c*^d{q_7QC~Nvk;79)Ey6(uB#AN_Ux0V? z1R}<~XGz+cKZ28T2UOp82wB1Gn@MrTV$+XTsC6QuV?Wnp+J78^xlE8{itG}5Pef_+ z@zcyLN04JY>}<&=Pp&Z)IW3)8>41vg0rXu~abdGHt1RKgvQI=Q)_fUomavrNQ6^*- z`X0j4q`L8{|KU93=KD`~Q102dF!;#q(@F)G*fJ&NSnt8zaT1pWAIaNJJo0es3iUZJmZ(p%*u%&8bcwFj%T5)(^@)$? z&MT;qYt~TZ-M)hBN)y4rv)PQuIs|oDZuQn<{+v$hT=`O93iauL$IV&|2^R zVJ66&Kr^|uj58hE+T<@f9Bysn<}J^3NXv3aQ*7qpJ^!RP{lbUGDS9V(cu(*cIWrr@ zXE{8}-};d!WrE`~#gvSQ6Bi0XnT_g=8J`A9P1tz>Y{5(^F_6;kHcyb#+uA&zIWYrW z<IRYt)FGeX0{Z*{SnMY z>C)-ECuHg@C8f@polD8E_*2AtVovTJb?3tmrvqJL%lLFL8!&KmAl?J|ZB?RTap+;E zXL-EbGgkxM5q#JwEi2+g%+(DOeog}hsZc=PMS~MD84^HUJVxf35-E9?3{KQUA66)y z+~)Yq2}mzYoUqgLu)^oydpp|C=*^5Z+AXCv(=ja^7_2AWWPv@DHsR(~gOfZ)yHm$=cz4*dORVpi@C12zEKhHekE~?E?B|W#S}Bpi>qm0%IN& xzhIyFz$8FAz!4uW7{I5W4YLSp--k>87`Qx)LV8x^?g1uP22WQ%mvv4FO#qscFB1R& diff --git a/tests/snapshots/nanos_transfer_eip1559/00004.png b/tests/snapshots/nanos_transfer_eip1559/00004.png index 4baa24f1db931a6dd3de32ed9a8ac67dae78bde4..1ed3d773d6b8965bb55d5ad3ea7c65161a503183 100644 GIT binary patch delta 327 zcmV-N0l5C41lIzP8Gix*0031$=W+l50Uk+2K~#90?U>sRgD?n&=`!E{fxU1yj%4&; zPZV_jmt9OSKmln25dZ)Hpv$qhsS59pct7^@mwX}C&JDv1K3+jvBODAMCn;$43-H!< zkfk#3ED2llBRGk_faL!Up(t2QQR5LLT-4Z{$4k{Z5z(=q{eKv?35U5%(4~v8{Y1jy zCAIo289@`zBW4Rv9((o2fy*|jY^NYFJOHzP|#%2+Fe!b0CA96PNs zo{V3e`}9r&-G`cEuf>`%?AJr%_jAt>5mNe56R0>C`&iTOc7RGrJdkPlH&d zlwW8#lW(fDbn$f6?LaiO8J`9+8=Y2{n(z~Z^?^cLKCWP#`7|XZqe5lD9aDwPb0V0H%B9PBPw1$tJ0HG# zY%UM)>64}k#oIql1hPDVfitn;6G)5W;l?xDFE*S}W=#FLxy|vJPu?8Y!z#umKA>QO zQ77h{?KKA3&p5Lg=qZrz9iDNSP4m7Tp_iNdvzj+udBGerB5%- m)tSC+W6Z5%MVUa(UxuqEuX(?*T)zPr^9-J@elF{r5}E*nW84=2 diff --git a/tests/snapshots/nanos_transfer_eip1559/00005.png b/tests/snapshots/nanos_transfer_eip1559/00005.png index 5512e8a2199b8d4bd1e3b58cfe135b88ddbfe566..f19d91cc08c165f9c1a9a879f0acf8647ac35bce 100644 GIT binary patch delta 329 zcmV-P0k-~_1laoWiUgL%*g5=N*L za6pUR6CYet3%gJnfCvBpz+2fg8$TQo(Y8yLrci+!5tR69cc35Zh#q5j0OCpQ#XVg5 zQW+sQCl>DTF8u!wDkMJ>x62pqQ}dM&XF7{yfM?sKB5|29#ebNU$utZD10cwn(=ivP z)zY+}jp3u!@EyETVZeIPJzxt4GC<%TU1C}N1m_luMc6=HdNKuhq5cH2B18RYTu2S| zCxbE21gnrHI(7JPzlU3LX9IF)xbq-ON7SZxu3=emp}UDpO(#E=j)|7q2?w+fa5^$^ zCtSJhEKa=#sX|Xv2cS|lenIwVR$GF?ok8yMU^Q$X#&MGTSbr_DR|D?BFBN)O00000 b0KfoFW{}d*y=fd100000NkvXXu0mjf<^YK) literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfiWtba4!+V0?QpFz>bpgUi9| zEWiJ;zw75Sj5J=f!7-!B;c&a{e zVd8{Jue6LGMl+YE%$roHU~HoB`JLFh1&op@85Nw8Qupqjx@l6Q4YHw`hu3=M!bJ7Y z?^vc(^PccgztnJMZ!4Ik?0k4{Ycxnq)%oz+R(=pm-T82PE5DJ6k2=sz?XA%u*42hH zx{Ocbn2q$W767fX0lEd`%4hbb3dI*7US$Wm((y2uyC;U(=zG|_i9h2{fK~n!qE zX~BgmHD{)aty{)8^X2xb<(D>0{yC-1KieVgSMt-jCu(K_jr~%|9e&ZkfLoC^vkzqU5VG@uU@KI^eedAUh!nRoOIz1+lITUuXU d0&;${=Ev__*(Gr1Ffhg$JYD@<);T3K0RUH=-2?yt diff --git a/tests/snapshots/nanos_transfer_eip1559/00006.png b/tests/snapshots/nanos_transfer_eip1559/00006.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_eip1559/00007.png b/tests/snapshots/nanos_transfer_eip1559/00007.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_eip1559/00001.png b/tests/snapshots/nanox_transfer_eip1559/00001.png index be296ea601b0083d972945fb69c7151e6eedc1ab..25b43ccedf0c4a683d1d4a8d33eedfd7d009443a 100644 GIT binary patch delta 298 zcmV+_0oDGA1iAu{8Gix*003RI=qLaH0Rc%wK~#90?bu0+~$FHva0=n(C@p)&gpXdpsRJ^U_o4$xymY~(*zMCZh?SIO?i1-AQJ7>DCLJ#-G z?zWs>$)8Oa03gsQdIEi;0#4gmok81UrQ_y1M#uT8|Ndo~viMV(q87BW_&?#1?vL)B zVSm)T33zhVeyEakt!T9#z!Q49m0;~uB zHJ^R*R6gjq)8qyYfo|IqoA}hySBb@MyBpPg@${{-H`nrRuiYw9tCNttJy$w=``c?# zJ#t;$xyLh78KoDmP1+LHbFE7{C{XhMx*d{JC!hN7{C_t1Y4>+T<|GY%X5d)G zCQWFWAMn#<>0)v7B}R4bg~D3PRa71>`4sEPFuuz>6P`9(ty_G5tcTXw^ z2;AAtn$xqb>td8)l(t*;(TuecYxh=gOkJ%a6LL@W;etsm+EZ0(76EM!-cvC_WsmnE zM^#SyrIT8ky@cj10I3z28Z5NWdFf_x{z)zSrvjDxK@77C*r_ZkI`#fE7SX9HcY05$ zbKlqz;CZM*ZmLR*sJND=#Q7;KQ&&Ig_7Xa_8R)@~8qcOv6=qXa=5%$dtmsJ(@;ns! xQH@jUab(D(4|#}iLw2a>;;oRtBu(%)Gh@f)IkxH|zt-Bthq diff --git a/tests/snapshots/nanox_transfer_eip1559/00002.png b/tests/snapshots/nanox_transfer_eip1559/00002.png index db02d0d16b1b986227a0d183144ef7450075ba4c..0616792db10c76a2c9037ee1bef32eeeffabbca3 100644 GIT binary patch delta 536 zcmcb@v5aMcWIYoD14HbV7a9xc36RjH8Vc{(BJ+evAYUh{YqqV zn(E-27IttV>$Dt!`<`AvT?`EQewwMTR`>m_e^~sTp-yw@lR5DU%Ytj(${k>M*jq1m z((=67!-Im;vkPX=7iC}F(pq(5k&ol?Ka+!uX1021{#|hVq+|U8%@YP1SML;^vq|q; ze|E1+B~y^sPj>tN*JaovKiHS?D=fWswnA>DQ(0ZK>>8U59Lzv_S<(aA8gsp-6v W{es6IKMvXm;(NOKxvXCFlaF= z>S2MuX4Bm_N4C`A$Q1ur#2Y2_Lr6_1dH7Ej(?2Yj*?B+yFzCU1=e>LGx#xU8_uO}f zuB=Ga?9-@Js#KG)+zR#v+{bpP;rV{1wN<6smToH7G9OC4JkS|*3DM_WHfyz#>C z*+1&WI(hYcv~%X2@bPL+AhLP^p$VHMkxx+_8?&xV$`%vWzWh2!RiKsuL%*F)Lsh6O zcA}otaO3W-0!xC}gM0CQMvF>qVR*y0J*&sJR(Lxf&v1U z77cn}FtO|E!m*gYPsfl9i>r+vBBaD>aUD*-ytGjp>wN*s!m2zDThox5W#sHyDvNbK zPjTi1Mz0i(cE!2n+RDZy$Hn3f+slOCqZiU(!cQE+0}$F{4O^c;vDhEBdH{mNGFw$7OJjv6{_973dJ_vqN#R z!R;WUu+QO#A?e-q$vYV`2tBm#MUXztkPyOuPEu%NAbnB~NTcIDV)@D28jAHWu`JY% zlScq}JI>&mj|0CWN}%IN7gg1jnWkQUYt; z)v)m;jy}Ddjc`tnsoy@j3Yvsr4x5Wh39dbQwv8Vdrn#|e0~+?zyREDz-oVkWkrZb) z?1Dm4C{_rcW5U+ol`>i}vq=4qsh}I@krJgjrpaF1ZOJ3aAt2d+wP-WhQsMPZ8JabZ z(@Hq?f-&aTVKZ{`4?r0WILoCWB0>kTLiMHOU4*+C-%3csGHv`YKpoMr4HDjSVWlU= zd%qchU^O1^`{rceA%7)J&|4-6;=hm{^0cT=*-w!!R3SHtBwTbrgc;6&eVpPBE1o~8><{SZ sTlM^J6$RA*kWD6Rbvgf^6gp^qdm#QO-t^TNg1?2zbiA_snc@7czlj6)6aWAK diff --git a/tests/snapshots/nanox_transfer_eip1559/00003.png b/tests/snapshots/nanox_transfer_eip1559/00003.png index de628de9b85b0d6df3dfce46449deaf3cb994b13..e483bc5604ee6237abb69de27fd4e9e5ab23c95c 100644 GIT binary patch delta 358 zcmV-s0h#`q1@;1v8Gix*003RI=qLaH0X<1XK~#90?b%xn!XOYpQ8ey^{V$2V_(4Jl zZz?c=_k2}~Qym^HR4D)e0ARV7;I)l0N-3>%p`_OukuMn0`^zSo>@Sl@ zHQ8T`Hjur0ba4!+V0?S9u~*uhf#IO7 z)7+f@s=2yd9e)(XAKL$8=~L{UWBH??-lDHLSNHhe#`eb#{}srv-?rj=aPIKmy5|); z>}8H0+}3vR=-E(KKWl~V!Os!>Io~|J2 zz{*hbdk#m#L$tKirq(YiT4fO$6FNt0Uy$L-J&UCE{gysj5>&WqM#!?R|IMdDk9t0x z>2-9a)6=Uwb;6?mU5_p?3ay!bDmn{R1vSOK0=!%%o6@NThfmSRj3N>6A19Wb<=wuN0lUCjy zfvM?Q!L6sx2Yg)Pl)5TlrdG%@uBj{0n3b%}M?+TR)bIM}q~)h|Kk#F$sMhUxkmh>t zr>l~F?>ndj^mf(1zarr0RiNVile~cT2CbYC;->|))pKc5kmbq{ zAFcgSt*16K?=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_eip1559/00005.png b/tests/snapshots/nanox_transfer_eip1559/00005.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer eip1559', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/0'/0/0", - '02f87001018502540be4008502540be40086246139ca800094cccccccccccccccccccccccccccccccccccccccc8000c001a0e07fb8a64ea3786c9a6649e54429e2786af3ea31c6d06165346678cf8ce44f9ba00e4a0526db1e905b7164a858fd5ebd2f1759e22e6955499448bd276a6aa62830', - ); + const tx = eth.signTransaction( + "44'/60'/0'/0/0", + '02f87001018502540be4008502540be40086246139ca800094cccccccccccccccccccccccccccccccccccccccc8000c001a0e07fb8a64ea3786c9a6649e54429e2786af3ea31c6d06165346678cf8ce44f9ba00e4a0526db1e905b7164a858fd5ebd2f1759e22e6955499448bd276a6aa62830', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_eip1559', [6, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [7]; + else clicks = [5]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_eip1559', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "3d6dfabc6c52374bfa34cb2c433856a0bcd9484870dd1b50249f7164a5fce052", - "s": "0548a774dd0b63930d83cb2e1a836fe3ef24444e8b758b00585d9a076c0e98a8", - "v": "01" - }); - -})); - -test.skip('[Nano X] Transfer eip1559', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/0'/0/0", - '02f87001018502540be4008502540be40086246139ca800094cccccccccccccccccccccccccccccccccccccccc8000c001a0e07fb8a64ea3786c9a6649e54429e2786af3ea31c6d06165346678cf8ce44f9ba00e4a0526db1e905b7164a858fd5ebd2f1759e22e6955499448bd276a6aa62830', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_eip1559', [4, 0]); - - await expect(tx).resolves.toEqual({ - "r": "3d6dfabc6c52374bfa34cb2c433856a0bcd9484870dd1b50249f7164a5fce052", - "s": "0548a774dd0b63930d83cb2e1a836fe3ef24444e8b758b00585d9a076c0e98a8", - "v": "01" - }); - -})); + await expect(tx).resolves.toEqual({ + "r": "3d6dfabc6c52374bfa34cb2c433856a0bcd9484870dd1b50249f7164a5fce052", + "s": "0548a774dd0b63930d83cb2e1a836fe3ef24444e8b758b00585d9a076c0e98a8", + "v": "01" + }); + })); +}); From 782e39c49480be113df963d8e95c1288b93324eb Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 14:55:11 +0100 Subject: [PATCH 13/87] Updated send test --- .../nanos_transfer_ethereum/00000.png | Bin 541 -> 374 bytes .../nanos_transfer_ethereum/00001.png | Bin 474 -> 330 bytes .../nanos_transfer_ethereum/00002.png | Bin 759 -> 451 bytes .../nanos_transfer_ethereum/00003.png | Bin 479 -> 320 bytes .../nanos_transfer_ethereum/00004.png | Bin 809 -> 497 bytes .../nanos_transfer_ethereum/00005.png | Bin 837 -> 504 bytes .../nanos_transfer_ethereum/00006.png | Bin 567 -> 373 bytes .../nanos_transfer_ethereum/00007.png | Bin 561 -> 367 bytes .../nanos_transfer_ethereum/00008.png | Bin 582 -> 414 bytes .../nanos_transfer_ethereum/00009.png | Bin 531 -> 340 bytes .../00000.png | Bin 541 -> 374 bytes .../00001.png | Bin 474 -> 330 bytes .../00002.png | Bin 759 -> 451 bytes .../00003.png | Bin 479 -> 320 bytes .../00004.png | Bin 809 -> 497 bytes .../00005.png | Bin 837 -> 504 bytes .../00006.png | Bin 567 -> 373 bytes .../00007.png | Bin 477 -> 338 bytes .../00008.png | Bin 561 -> 367 bytes .../00009.png | Bin 582 -> 414 bytes .../00010.png | Bin 531 -> 340 bytes .../nanox_transfer_ethereum/00000.png | Bin 636 -> 414 bytes .../nanox_transfer_ethereum/00001.png | Bin 866 -> 526 bytes .../nanox_transfer_ethereum/00002.png | Bin 1298 -> 761 bytes .../nanox_transfer_ethereum/00003.png | Bin 692 -> 396 bytes .../nanox_transfer_ethereum/00004.png | Bin 674 -> 472 bytes .../nanox_transfer_ethereum/00005.png | Bin 628 -> 365 bytes .../00000.png | Bin 636 -> 414 bytes .../00001.png | Bin 866 -> 526 bytes .../00002.png | Bin 1298 -> 761 bytes .../00003.png | Bin 592 -> 359 bytes .../00004.png | Bin 692 -> 396 bytes .../00005.png | Bin 674 -> 472 bytes .../00006.png | Bin 628 -> 365 bytes tests/src/send.test.js | 124 ++++++++---------- 35 files changed, 56 insertions(+), 68 deletions(-) diff --git a/tests/snapshots/nanos_transfer_ethereum/00000.png b/tests/snapshots/nanos_transfer_ethereum/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr61IhxB8Gix*0031$=W+l50TD?=K~#90?U>6FgCGn=L#O=z2fNUPEyWO0 zN(BOQ&q^Z`Ltbcz0001hw(OfB1NKd@=aig}*y8C4d+YhSoKQ3-7mu8_`*=3ho+aLu z^PgMi`GQ!IUNb#(^>0`oBMKKMO*-*fOu9dXg%Z6%wJd^1JAc(LLbk@4Zi=|Jh{*Y# zrgmvTHvMjcE&)h8J9yJL0BLnIiHLYC(=YL3hp_TqCf5)D9;}+A)%&{FAz!qu>U}a3 z08Qb--nWL}YIwghh`~tEg+_99vJ)N~oR;KfKBQ(D`LL6eHem8L$lnW3QD&w_x; zpmB5s;=i%7Y%>z(2|!`%tQ%d711)GU2*6f=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 diff --git a/tests/snapshots/nanos_transfer_ethereum/00002.png b/tests/snapshots/nanos_transfer_ethereum/00002.png index 11ae75e8391d69f363be24e20c136f0ee32b13d0..c2af54e964e6227cfbee76037f4dba52af08a7ef 100644 GIT binary patch delta 436 zcmV;l0Zab(1;Yc78Gix*0031$=W+l50g6dPK~#90?U~6E!XONWsbk;&fj#I!2QeEd zCBW4G8xP77vOr2>N&o-=KrGM4DhfOwpN}|z_fFTm1KGBb%T*g~FP8y} zzdyH~4k%mrcOobK20M@cclZeqzl)phWTVz%>qEvz9)eq(=zkA+x0XA7I^ubHv+W~Q z9g>39@%tO%@u>_60MG0bS;_k;JOKQ3d+Zk<%jrn`$U~T{TM8%o*bn~^tguNVXtt}b zLn_j)>ix7#04#wQ_Wo)Ju7>vqgBZ*NS!gD|PTquW@z!NjS4fv}gVd%QBYCyw(2B+^ zj~t^#G)KGaihlzR;3>0IyR?D~ugNsmDGznoTD7$}r4_{2f|6d9`pj e00000F2oCTx>AX?P;^`X00006pnS>%$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 diff --git a/tests/snapshots/nanos_transfer_ethereum/00003.png b/tests/snapshots/nanos_transfer_ethereum/00003.png index e0420108494b969f9c050ba46e44f5c255fa1f1b..a54fefd4c94fc7cfc5df4396112561399f2b0f6d 100644 GIT binary patch delta 304 zcmV-00nh&51Hb~18Gix*0031$=W+l50S8G$K~#90?b*Q&gCGnBU|7ccKd=XPaSYoI z=Cq~Y|78bGL-xdO_L3k4c=cPj2D;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 diff --git a/tests/snapshots/nanos_transfer_ethereum/00004.png b/tests/snapshots/nanos_transfer_ethereum/00004.png index f979f716022e2492f86f9dcc9ba56e7622cefd3e..8656b81752a48501b840f96ec775d5a947435225 100644 GIT binary patch delta 482 zcmV<80UiFS2Jr)s8Gix*0031$=W+l50k}y-K~#90?U>7U#2^TUNl)|s51d81Nb9k} z&n0S-$>CegctJo!15uJBNs`QE-(p?L_|Db$O%Q&x99_-eH&Dz|dOeMu3Ls6;ehgPb z;(PW25U1Zu%d&?5a!~ur;c+MaKGA5#ve>B1;t6W;yP%)NpSY0$=HUdeR1HGT-X`2O_vSy?-&e2X~TL=uZASc@etn zM;NK~ljij;3V$K+yc1`MV?-T#UY2!>xQeL>DmtOn%izGf)>9EwYA?~UOmr3+sTY$y zwwM(sBv3DT0U}?*Q;W3z?;U6Ce+b=Q!e#}y9(KY({7{Fy@6Uc7{ppkmDv=E+m4KoI zx2maqHY1(h90*GEp+hWQ2E^`5(Qy4Hn^FsM+UD`Tcw49O%|`7`&cy+rB^qu?j%+|} zup$@5izq4tIz1PkDzu8na0cE0o^V7x>a|hrQ+agi@;ec8rfC!(W9p9#Pm&}_k|aq0 YKat#WpKwjx(*OVf07*qoM6N<$g6GHMQ~&?~ literal 809 zcmXAoe@GKy7{|9(n~5hP67E%TxlI3%nCJX45Or=&tu&RQiKdN?buLSBQL_Z+{y3DG zY?{iUh`Q9wa0@{cM3O;Vb=jO)DH9u$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 diff --git a/tests/snapshots/nanos_transfer_ethereum/00005.png b/tests/snapshots/nanos_transfer_ethereum/00005.png index 93c90c542343a4423166f143ee5f43f335c73b96..fd3155c0d349a1236eb862c8f4f5fc3c3a981ccf 100644 GIT binary patch delta 489 zcmV|0wGk-swfz8xP`K=zI`<1y0oNUx>wq5-8A((Atf zzup5BG5S5VENk=E;6UyG^|_-lTQK`(BF0#Bj^oEwI{@t45r2=%I$$zY2U&(lCS}h6 zmUWDsW^Orx2F@otThhss))>O4(wLbJDE}RRzp(O~b{4ZFgeUVpfW=q6oN#K%T$XyX z#!N%sOSm*BSFYOc&Py`iZ@MQn+#3~zuk=1i5TdIK-s zsAV(6ZeuYnD{V^0ojtC0sWO?x-863hBI?UV_L4%&Sz?lgOM5lcHB&OiHMCtq-l86c zRlRSceF3Vcvp1KLia`wWKI+v_^4|r-A={URR_l@f#?mk(gGz<1X{efZXELRhS>OLb f5ClOG1P}57@$ZITS}Pb{00000NkvXXu0mjf;ri!$ 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 diff --git a/tests/snapshots/nanos_transfer_ethereum/00006.png b/tests/snapshots/nanos_transfer_ethereum/00006.png index 402c20d84b73864383ebc9f5a2cc87b175f5db3a..c63f25f8dbf212867d4b40bfa2cc85583ca98105 100644 GIT binary patch delta 357 zcmV-r0h<1|1oZ-t8Gix*0031$=W+l50X#`WK~#90?U>6F!Y~L$iDUo&gS)7knz2Ch zCZWzf<3dSGk_&kV5dZ)HV9T-BH6@HXNxkNSXY9XpI=#OWnkON^ZZxU(c$?E~<( z?%OJ)jz?BTmkC$1|thtNl@h$#JVW)IgXd9cOs%=KY#NvYy&2f6)4+9*e)Z9 z!&6)BnX&~9oDbVu;?5IeOhQxN*slQkrj?y2ENADYa3{gmy-dbvVUopGW@H}P4q@48 ziF0-Q<~%2NDrlb6a5XXx|5APO6o8b^e^uWhiquelGKj%SunVo^DzdnSdixinj)x_R zy!a$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGRA153_}To zpg^Mhx6+hG{4rpna{vGUR%O$?_<1M;RDXR6lW7H>x(y`>H z)zY+}jp3tp;VXEhLcn^_-C+v`GJxTZF0ris0jCy=o3Md>>CIH+h58dHiVXFqk&zne zPX;m21gnrH|00uaXy2-&TAgM~q3j&0H89^*O)N~Ch)%VyAX8s?ODUDu`P0~Pv***) zL}D!ccvL0)Mp(vI!ooy0vi;D-(2cE=#|J<-dwSawsIJK4yLAgMK~z?aw&(Ebb% xFtZ2n&~FAoLHd)#BAJ-QUMT(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* diff --git a/tests/snapshots/nanos_transfer_ethereum/00008.png b/tests/snapshots/nanos_transfer_ethereum/00008.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_ethereum/00009.png b/tests/snapshots/nanos_transfer_ethereum/00009.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EV-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr61IhxB8Gix*0031$=W+l50TD?=K~#90?U>6FgCGn=L#O=z2fNUPEyWO0 zN(BOQ&q^Z`Ltbcz0001hw(OfB1NKd@=aig}*y8C4d+YhSoKQ3-7mu8_`*=3ho+aLu z^PgMi`GQ!IUNb#(^>0`oBMKKMO*-*fOu9dXg%Z6%wJd^1JAc(LLbk@4Zi=|Jh{*Y# zrgmvTHvMjcE&)h8J9yJL0BLnIiHLYC(=YL3hp_TqCf5)D9;}+A)%&{FAz!qu>U}a3 z08Qb--nWL}YIwghh`~tEg+_99vJ)N~oR;KfKBQ(D`LL6eHem8L$lnW3QD&w_x; zpmB5s;=i%7Y%>z(2|!`%tQ%d711)GU2*6f=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 diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00002.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00002.png index 11ae75e8391d69f363be24e20c136f0ee32b13d0..c2af54e964e6227cfbee76037f4dba52af08a7ef 100644 GIT binary patch delta 436 zcmV;l0Zab(1;Yc78Gix*0031$=W+l50g6dPK~#90?U~6E!XONWsbk;&fj#I!2QeEd zCBW4G8xP77vOr2>N&o-=KrGM4DhfOwpN}|z_fFTm1KGBb%T*g~FP8y} zzdyH~4k%mrcOobK20M@cclZeqzl)phWTVz%>qEvz9)eq(=zkA+x0XA7I^ubHv+W~Q z9g>39@%tO%@u>_60MG0bS;_k;JOKQ3d+Zk<%jrn`$U~T{TM8%o*bn~^tguNVXtt}b zLn_j)>ix7#04#wQ_Wo)Ju7>vqgBZ*NS!gD|PTquW@z!NjS4fv}gVd%QBYCyw(2B+^ zj~t^#G)KGaihlzR;3>0IyR?D~ugNsmDGznoTD7$}r4_{2f|6d9`pj e00000F2oCTx>AX?P;^`X00006pnS>%$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 diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00003.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00003.png index e0420108494b969f9c050ba46e44f5c255fa1f1b..a54fefd4c94fc7cfc5df4396112561399f2b0f6d 100644 GIT binary patch delta 304 zcmV-00nh&51Hb~18Gix*0031$=W+l50S8G$K~#90?b*Q&gCGnBU|7ccKd=XPaSYoI z=Cq~Y|78bGL-xdO_L3k4c=cPj2D;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 diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00004.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00004.png index f979f716022e2492f86f9dcc9ba56e7622cefd3e..8656b81752a48501b840f96ec775d5a947435225 100644 GIT binary patch delta 482 zcmV<80UiFS2Jr)s8Gix*0031$=W+l50k}y-K~#90?U>7U#2^TUNl)|s51d81Nb9k} z&n0S-$>CegctJo!15uJBNs`QE-(p?L_|Db$O%Q&x99_-eH&Dz|dOeMu3Ls6;ehgPb z;(PW25U1Zu%d&?5a!~ur;c+MaKGA5#ve>B1;t6W;yP%)NpSY0$=HUdeR1HGT-X`2O_vSy?-&e2X~TL=uZASc@etn zM;NK~ljij;3V$K+yc1`MV?-T#UY2!>xQeL>DmtOn%izGf)>9EwYA?~UOmr3+sTY$y zwwM(sBv3DT0U}?*Q;W3z?;U6Ce+b=Q!e#}y9(KY({7{Fy@6Uc7{ppkmDv=E+m4KoI zx2maqHY1(h90*GEp+hWQ2E^`5(Qy4Hn^FsM+UD`Tcw49O%|`7`&cy+rB^qu?j%+|} zup$@5izq4tIz1PkDzu8na0cE0o^V7x>a|hrQ+agi@;ec8rfC!(W9p9#Pm&}_k|aq0 YKat#WpKwjx(*OVf07*qoM6N<$g6GHMQ~&?~ literal 809 zcmXAoe@GKy7{|9(n~5hP67E%TxlI3%nCJX45Or=&tu&RQiKdN?buLSBQL_Z+{y3DG zY?{iUh`Q9wa0@{cM3O;Vb=jO)DH9u$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 diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00005.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00005.png index 93c90c542343a4423166f143ee5f43f335c73b96..fd3155c0d349a1236eb862c8f4f5fc3c3a981ccf 100644 GIT binary patch delta 489 zcmV|0wGk-swfz8xP`K=zI`<1y0oNUx>wq5-8A((Atf zzup5BG5S5VENk=E;6UyG^|_-lTQK`(BF0#Bj^oEwI{@t45r2=%I$$zY2U&(lCS}h6 zmUWDsW^Orx2F@otThhss))>O4(wLbJDE}RRzp(O~b{4ZFgeUVpfW=q6oN#K%T$XyX z#!N%sOSm*BSFYOc&Py`iZ@MQn+#3~zuk=1i5TdIK-s zsAV(6ZeuYnD{V^0ojtC0sWO?x-863hBI?UV_L4%&Sz?lgOM5lcHB&OiHMCtq-l86c zRlRSceF3Vcvp1KLia`wWKI+v_^4|r-A={URR_l@f#?mk(gGz<1X{efZXELRhS>OLb f5ClOG1P}57@$ZITS}Pb{00000NkvXXu0mjf;ri!$ 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 diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00006.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00006.png index 402c20d84b73864383ebc9f5a2cc87b175f5db3a..c63f25f8dbf212867d4b40bfa2cc85583ca98105 100644 GIT binary patch delta 357 zcmV-r0h<1|1oZ-t8Gix*0031$=W+l50X#`WK~#90?U>6F!Y~L$iDUo&gS)7knz2Ch zCZWzf<3dSGk_&kV5dZ)HV9T-BH6@HXNxkNSXY9XpI=#OWnkON^ZZxU(c$?E~<( z?%OJ)jz?BTmkC$1|thtNl@h$#JVW)IgXd9cOs%=KY#NvYy&2f6)4+9*e)Z9 z!&6)BnX&~9oDbVu;?5IeOhQxN*slQkrj?y2ENADYa3{gmy-dbvVUopGW@H}P4q@48 ziF0-Q<~%2NDrlb6a5XXx|5APO6o8b^e^uWhiquelGKj%SunVo^DzdnSdixinj)x_R zy!a$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGR-Q&H^Iokh-28aPn z1xS4+XmpMW{-)-k+g%1&1*D>6?MSq=wN?kZ0U#;vOh;a-KY^;qRDT+Z)Kq^mjDaP5 z3R&_ka!|g;S-PdZMz3lMQ>m;tp?;3w`O~3Mk?OfcX@Re4q@D1&ILS4zop8y>p0?Z` zJ5k>cBj@WN0|Z&~T7BH0)%)M23cg%!~w-R}IK46KO!^)!B|?lWRcc!{C_=4a=k&ka;GcylOz^ zk{V8Ab`1xaL&HJlhZ>N%tOjIW2`DpZK<1|!ka^R9%$tUt%xnhB&ov-3s|Pb`ILQ1` z!%pU;0hyUSn2pS#;Y|ZFCo;PRWbR~eCk@DaNyDyzhDTk)Y#!W212SJGbJBp!Y#z*} z;UII;aFE$G9AxfBKv`~Uu-w{UxwXM^YlG$12FtB|1LIP};k|%$+yDRo07*qoM6N<$ Eg5i$OlK=n! diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00008.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00008.png index 8b996b58a1ec0043e05a39e52d99ce49521f5116..c84d3ec3e6a544f948cc5423e2e0c648861ca25e 100644 GIT binary patch delta 351 zcmV-l0igb|1n&Zn8Gix*0031$=W+l50X9iQK~#90?U_LmgCGn=u~YAVU>A153_}To zpg^Mhx6+hG{4rpna{vGUR%O$?_<1M;RDXR6lW7H>x(y`>H z)zY+}jp3tp;VXEhLcn^_-C+v`GJxTZF0ris0jCy=o3Md>>CIH+h58dHiVXFqk&zne zPX;m21gnrH|00uaXy2-&TAgM~q3j&0H89^*O)N~Ch)%VyAX8s?ODUDu`P0~Pv***) zL}D!ccvL0)Mp(vI!ooy0vi;D-(2cE=#|J<-dwSawsIJK4yLAgMK~z?aw&(Ebb% xFtZ2n&~FAoLHd)#BAJ-QUMT(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* diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00009.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00009.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00010.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00010.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_ethereum/00001.png b/tests/snapshots/nanox_transfer_ethereum/00001.png index a5592a6c410c0198aaf506d1610c176183154cd3..7aea2c0b9e764c728de17d734c50bee74381c7cf 100644 GIT binary patch delta 511 zcmVJYZb z<7gcBU)g8>-H~5F@>m}9H`?-REr4^u+Zw*?8bYKZq$P)Hp zOXTuuqoIWqc7JrKkSovKUg#;~pqHLlxJxrmp(Qz;s5CFv?J|XeGX16Gw-vee<@&gR z!c?VdYf+9C^2DET?iG;n`X|HpW1rQWd$=VSrzyG7OWgJ?_uN%Ao&z&KwA`fLxwwx(1<2NIX~0|8M91jVu&W% z3b(UjG5S|=HPj4)DI_2l;;Y;SZy<&DZTT+*1Gm002ovPDHLkV1gLO B^qBwv 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_DW`K~#90?VDM4!ypVr)t>Ie`(F}!=|@^Z zH6h_iY2N*cF~LG&5YGt_00000003`JYb|xlssAc`-fh5>*4nmh|G=jyzV0?)LU7>s zl5N|vm*9toUqEzh%|5q$I~+)e`lCZ=0`WStL%v z5rdYAkB;Eje}5JBYC*wM<#aW3zUVA&k#c69wfaTurxOm(i2!u*q#Gf7#Y9b3Gw96& zu@?H&Bvv;A`fI<{aepVHGt|&v-y+^u_cR%7t2}P-{;5eu$EPhP0x)*iY1bMrYEvn! z*>mx%vYry@xP%8lz8Hz5p=x0IWOR~Fzx|!4Yv#05vVYFheyiiM@yYn8ppXB1Oee$p zm!Y^C-oF^c;7+g#-O0qsh{35y_s(C+%e>7xgQUbxtD0lRR1=K|9+nvq?Xwp~6pmx^ zY)ep7HNUCY=~rH`Bxpv;o;3|MRWjn8ghyXrBQ!eWNY;$}u;+r~-cGy#I43$;jof+d z)S+RfvwtaXsaiq3K{goVsIW!GZcdC-H9u7&vTmt$n8nLvr@w`|*~q)Bq9xF z(@;nHpT6@cyZ-|K0002oNQu8FIang-cqv68=VdEM3UjE(y*-jcwHF?R{-)ZIBHeho z+ztrAMriiMgI`i@_*2ap5FsK4Fe2LI^}K2ToL>gM7KQ#P|DKea0rHji+Fr`q!G;U~ e00000z>{xumOAKEhM))l0000egH6v}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!)< diff --git a/tests/snapshots/nanox_transfer_ethereum/00003.png b/tests/snapshots/nanox_transfer_ethereum/00003.png index a67fa259f1e9e3c91a4c6f3ca19bde81405243ea..4213f7912e6e0f6d884484413295b90e438e4614 100644 GIT binary patch delta 380 zcmV-?0fYXu1&jlb8Gix*003RI=qLaH0aHmtK~#90?b%TdgCGomVYcih-2X`2We+68 z02XkR%KX14We%|jN_7qZ003C-Wq9rof^*J$FO&>bm0YO7%E!6^(`*#WFF9**Tc>*mr;s z*0VUC)iYW$G@&VZTb=lV7^&1@vrMmWi2Vo<{1TUASmO;|mOT9-3;+ONM>iYVT%A^z zLe-T~a}6wKRkIQyO;k2@+~ltgM?#S}ZOg#VKIO1N_%-yt#S zYLlT;o`TdnpmnqLOv5e6);)I$D#L1$7JX<3n12RH@+oL~%ci`{mER0fJIkMX zN_rZm@fz9)?@gYB|Lru$M1Pq|sEPh!^noR2Axn)Q(+8>uF8}}l000000000000000 apymtSbQA2*!s*5U000065M^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 diff --git a/tests/snapshots/nanox_transfer_ethereum/00004.png b/tests/snapshots/nanox_transfer_ethereum/00004.png index a2cb8f9dc97401fd76908866c585e2855970e054..570ce28d53e82ac396ba25c370110058f3a638f9 100644 GIT binary patch delta 457 zcmV;)0XF`k1=s_S8Gix*003RI=qLaH0iQ`kK~#90?b%UsgdhxnVeITpxc`y3OCOlB zStE*8Hi`3pPY!h{CWshQ0ssI20001h3rZ=a6zfr(@MArIJH-lp^_&E>=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_ethereum/00005.png b/tests/snapshots/nanox_transfer_ethereum/00005.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB%H@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00001.png b/tests/snapshots/nanox_transfer_ethereum_5234_network/00001.png index a5592a6c410c0198aaf506d1610c176183154cd3..7aea2c0b9e764c728de17d734c50bee74381c7cf 100644 GIT binary patch delta 511 zcmVJYZb z<7gcBU)g8>-H~5F@>m}9H`?-REr4^u+Zw*?8bYKZq$P)Hp zOXTuuqoIWqc7JrKkSovKUg#;~pqHLlxJxrmp(Qz;s5CFv?J|XeGX16Gw-vee<@&gR z!c?VdYf+9C^2DET?iG;n`X|HpW1rQWd$=VSrzyG7OWgJ?_uN%Ao&z&KwA`fLxwwx(1<2NIX~0|8M91jVu&W% z3b(UjG5S|=HPj4)DI_2l;;Y;SZy<&DZTT+*1Gm002ovPDHLkV1gLO B^qBwv 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_DW`K~#90?VDM4!ypVr)t>Ie`(F}!=|@^Z zH6h_iY2N*cF~LG&5YGt_00000003`JYb|xlssAc`-fh5>*4nmh|G=jyzV0?)LU7>s zl5N|vm*9toUqEzh%|5q$I~+)e`lCZ=0`WStL%v z5rdYAkB;Eje}5JBYC*wM<#aW3zUVA&k#c69wfaTurxOm(i2!u*q#Gf7#Y9b3Gw96& zu@?H&Bvv;A`fI<{aepVHGt|&v-y+^u_cR%7t2}P-{;5eu$EPhP0x)*iY1bMrYEvn! z*>mx%vYry@xP%8lz8Hz5p=x0IWOR~Fzx|!4Yv#05vVYFheyiiM@yYn8ppXB1Oee$p zm!Y^C-oF^c;7+g#-O0qsh{35y_s(C+%e>7xgQUbxtD0lRR1=K|9+nvq?Xwp~6pmx^ zY)ep7HNUCY=~rH`Bxpv;o;3|MRWjn8ghyXrBQ!eWNY;$}u;+r~-cGy#I43$;jof+d z)S+RfvwtaXsaiq3K{goVsIW!GZcdC-H9u7&vTmt$n8nLvr@w`|*~q)Bq9xF z(@;nHpT6@cyZ-|K0002oNQu8FIang-cqv68=VdEM3UjE(y*-jcwHF?R{-)ZIBHeho z+ztrAMriiMgI`i@_*2ap5FsK4Fe2LI^}K2ToL>gM7KQ#P|DKea0rHji+Fr`q!G;U~ e00000z>{xumOAKEhM))l0000egH6v}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!)< diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00003.png b/tests/snapshots/nanox_transfer_ethereum_5234_network/00003.png index e3682dea0d1431057f34ba69636647e08efa8a98..e5f3ac6c0c94cfe604e001b734397ec399fdb84c 100644 GIT binary patch delta 343 zcmcb>@|O}}dDvHNTW;TQqC{y~)9$WLHV(y*!&jSSUM@GCpM0w5 z>xMOMbz5Bhy+6;@NlD+j&Y<{RnVMUJ37g~1^!1BYDYl4)*W10``kS%pTB^wH+fLFE zl8l%B36=2man?E^5%UdhKY zQ?@=0Os>AFVBA2f3J@2^Z+war-8Ernlwy$*Y{bjzGx9pMb nmdgq$w-PiTu>w7f45n2wAG^n}-*}yb4M^D2)z4*}Q$iB}`!t>f 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= diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00004.png b/tests/snapshots/nanox_transfer_ethereum_5234_network/00004.png index a67fa259f1e9e3c91a4c6f3ca19bde81405243ea..4213f7912e6e0f6d884484413295b90e438e4614 100644 GIT binary patch delta 380 zcmV-?0fYXu1&jlb8Gix*003RI=qLaH0aHmtK~#90?b%TdgCGomVYcih-2X`2We+68 z02XkR%KX14We%|jN_7qZ003C-Wq9rof^*J$FO&>bm0YO7%E!6^(`*#WFF9**Tc>*mr;s z*0VUC)iYW$G@&VZTb=lV7^&1@vrMmWi2Vo<{1TUASmO;|mOT9-3;+ONM>iYVT%A^z zLe-T~a}6wKRkIQyO;k2@+~ltgM?#S}ZOg#VKIO1N_%-yt#S zYLlT;o`TdnpmnqLOv5e6);)I$D#L1$7JX<3n12RH@+oL~%ci`{mER0fJIkMX zN_rZm@fz9)?@gYB|Lru$M1Pq|sEPh!^noR2Axn)Q(+8>uF8}}l000000000000000 apymtSbQA2*!s*5U000065M^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 diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00005.png b/tests/snapshots/nanox_transfer_ethereum_5234_network/00005.png index a2cb8f9dc97401fd76908866c585e2855970e054..570ce28d53e82ac396ba25c370110058f3a638f9 100644 GIT binary patch delta 457 zcmV;)0XF`k1=s_S8Gix*003RI=qLaH0iQ`kK~#90?b%UsgdhxnVeITpxc`y3OCOlB zStE*8Hi`3pPY!h{CWshQ0ssI20001h3rZ=a6zfr(@MArIJH-lp^_&E>=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00006.png b/tests/snapshots/nanox_transfer_ethereum_5234_network/00006.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer Ether on Ethereum app', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880018080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880018080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_ethereum', [8, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [9]; + else clicks = [5]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_ethereum', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "6f389d15320f0501383526ed03de917c14212716f09a262dbc98431086a5db49", - "s": "0dc994b7b97230bb35fdf6fec2f4d8ff4cfb8bfeb2a652c364c738ff033c05dd", - "v": "26", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "6f389d15320f0501383526ed03de917c14212716f09a262dbc98431086a5db49", + "s": "0dc994b7b97230bb35fdf6fec2f4d8ff4cfb8bfeb2a652c364c738ff033c05dd", + "v": "26", + }); + })); +}); -test('[Nano S] Transfer amount >= 2^87 Eth on Ethereum app should fail', zemu("nanos", async (sim, eth) => { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer amount >= 2^87 Eth on Ethereum app should fail', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f83f268e02cc9be5c53ea44bd43c289dcddc82520894dac17f958d2ee523a2206206994597c13d831ec7928db8b0861b8f7fe5df83cd553a829878000080018080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'f83f268e02cc9be5c53ea44bd43c289dcddc82520894dac17f958d2ee523a2206206994597c13d831ec7928db8b0861b8f7fe5df83cd553a829878000080018080', + ); - await expect(tx).rejects.toEqual(new TransportStatusError(0x6807)); -})); + await expect(tx).rejects.toEqual(new TransportStatusError(0x6807)); + })); +}); -test('[Nano S] Transfer Ether on network 5234 on Ethereum app', zemu("nanos", async (sim, eth) => { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer Ether on network 5234 on Ethereum app', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'ED44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818808214728080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'ED44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818808214728080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_ethereum_5234_network', [9, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [10]; + else clicks = [6]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_ethereum_5234_network', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "07a7982dfd16360c96a03467877d0cf9c36f799deff4dace250cdb18e28a3b90", - "s": "773318a93da2e32c1cf308ddd6add1e8c0d285973e541520a05fb4dc720e4fb1", - "v": "2908", - }); -})); - -test.skip('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880018080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_ethereum', [4, 0]); - - await expect(tx).resolves.toEqual({ - "r": "6f389d15320f0501383526ed03de917c14212716f09a262dbc98431086a5db49", - "s": "0dc994b7b97230bb35fdf6fec2f4d8ff4cfb8bfeb2a652c364c738ff033c05dd", - "v": "26", - }); -})); - -test.skip('[Nano X] Transfer Ether on network 5234 on Ethereum app', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'ED44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818808214728080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_ethereum_5234_network', [5, 0]); - - await expect(tx).resolves.toEqual({ - "r": "07a7982dfd16360c96a03467877d0cf9c36f799deff4dace250cdb18e28a3b90", - "s": "773318a93da2e32c1cf308ddd6add1e8c0d285973e541520a05fb4dc720e4fb1", - "v": "2908", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "07a7982dfd16360c96a03467877d0cf9c36f799deff4dace250cdb18e28a3b90", + "s": "773318a93da2e32c1cf308ddd6add1e8c0d285973e541520a05fb4dc720e4fb1", + "v": "2908", + }); + })); +}); From 80d02b9f34abe2abaac1b9693ed5b16cd201b2c4 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 15:03:37 +0100 Subject: [PATCH 14/87] Updated send BSC test --- tests/snapshots/nanos_transfer_bsc/00000.png | Bin 541 -> 374 bytes tests/snapshots/nanos_transfer_bsc/00001.png | Bin 499 -> 337 bytes tests/snapshots/nanos_transfer_bsc/00002.png | Bin 759 -> 451 bytes tests/snapshots/nanos_transfer_bsc/00003.png | Bin 479 -> 320 bytes tests/snapshots/nanos_transfer_bsc/00004.png | Bin 809 -> 497 bytes tests/snapshots/nanos_transfer_bsc/00005.png | Bin 837 -> 504 bytes tests/snapshots/nanos_transfer_bsc/00006.png | Bin 567 -> 373 bytes tests/snapshots/nanos_transfer_bsc/00007.png | Bin 449 -> 323 bytes tests/snapshots/nanos_transfer_bsc/00008.png | Bin 569 -> 377 bytes tests/snapshots/nanos_transfer_bsc/00009.png | Bin 582 -> 414 bytes tests/snapshots/nanos_transfer_bsc/00010.png | Bin 531 -> 340 bytes tests/snapshots/nanox_transfer_bsc/00000.png | Bin 636 -> 414 bytes tests/snapshots/nanox_transfer_bsc/00001.png | Bin 891 -> 549 bytes tests/snapshots/nanox_transfer_bsc/00002.png | Bin 1298 -> 761 bytes tests/snapshots/nanox_transfer_bsc/00003.png | Bin 561 -> 348 bytes tests/snapshots/nanox_transfer_bsc/00004.png | Bin 699 -> 404 bytes tests/snapshots/nanox_transfer_bsc/00005.png | Bin 674 -> 472 bytes tests/snapshots/nanox_transfer_bsc/00006.png | Bin 628 -> 365 bytes tests/src/send_bsc.test.js | 55 ++++++++----------- 19 files changed, 24 insertions(+), 31 deletions(-) diff --git a/tests/snapshots/nanos_transfer_bsc/00000.png b/tests/snapshots/nanos_transfer_bsc/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr66FgCGn=L#O`#2fMHfTZ$pP ztieF4wi$(XNvC@)1pfoqZLx0cp8(*zqrJEw$TSVlR zo>T2|1lf$c4Z0*CKH0$s5g5NbrfGswZ6;1s%(W00Nj*qU0x%ED_t?DH{Jhsd7tV=%mBQi4ytI%F7q zEl3Zu;!+DY$vV-kh(E@c3?35L*jQ0?shd4vGJa$X<q3)vLl3-&(=r@D=z4*| z=Ik4$Z&K=1KA#Lb=LZ%uFi|izQTVKFkVf%x2E%+@DW#bK5WeR6sY~>A*l(K5fwl;?y``S zk`t3l$(W(Hj&Wvt>v|At730kHEK`75YPPhA8|`LG;ggzh({#^-pBcO-Y@&bmolylk zhn@GtACI(*9~DOTBX?*^O2xj*dwNQWZD#$F#0fiBP1T+(33aPD$gAO74DQ}Kbob_T1oBQ%wU7zjSKq^YI>lr^gZ_f`u?VbmWPXN&o-=KrGM4DhfOwpN}|z_fFTm1KGBb%T*g~FP8y} zzdyH~4k%mrcOobK20M@cclZeqzl)phWTVz%>qEvz9)eq(=zkA+x0XA7I^ubHv+W~Q z9g>39@%tO%@u>_60MG0bS;_k;JOKQ3d+Zk<%jrn`$U~T{TM8%o*bn~^tguNVXtt}b zLn_j)>ix7#04#wQ_Wo)Ju7>vqgBZ*NS!gD|PTquW@z!NjS4fv}gVd%QBYCyw(2B+^ zj~t^#G)KGaihlzR;3>0IyR?D~ugNsmDGznoTD7$}r4_{2f|6d9`pj e00000F2oCTx>AX?P;^`X00006pnS>%$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 diff --git a/tests/snapshots/nanos_transfer_bsc/00003.png b/tests/snapshots/nanos_transfer_bsc/00003.png index e0420108494b969f9c050ba46e44f5c255fa1f1b..a54fefd4c94fc7cfc5df4396112561399f2b0f6d 100644 GIT binary patch delta 304 zcmV-00nh&51Hb~18Gix*0031$=W+l50S8G$K~#90?b*Q&gCGnBU|7ccKd=XPaSYoI z=Cq~Y|78bGL-xdO_L3k4c=cPj2D;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 diff --git a/tests/snapshots/nanos_transfer_bsc/00004.png b/tests/snapshots/nanos_transfer_bsc/00004.png index f979f716022e2492f86f9dcc9ba56e7622cefd3e..8656b81752a48501b840f96ec775d5a947435225 100644 GIT binary patch delta 482 zcmV<80UiFS2Jr)s8Gix*0031$=W+l50k}y-K~#90?U>7U#2^TUNl)|s51d81Nb9k} z&n0S-$>CegctJo!15uJBNs`QE-(p?L_|Db$O%Q&x99_-eH&Dz|dOeMu3Ls6;ehgPb z;(PW25U1Zu%d&?5a!~ur;c+MaKGA5#ve>B1;t6W;yP%)NpSY0$=HUdeR1HGT-X`2O_vSy?-&e2X~TL=uZASc@etn zM;NK~ljij;3V$K+yc1`MV?-T#UY2!>xQeL>DmtOn%izGf)>9EwYA?~UOmr3+sTY$y zwwM(sBv3DT0U}?*Q;W3z?;U6Ce+b=Q!e#}y9(KY({7{Fy@6Uc7{ppkmDv=E+m4KoI zx2maqHY1(h90*GEp+hWQ2E^`5(Qy4Hn^FsM+UD`Tcw49O%|`7`&cy+rB^qu?j%+|} zup$@5izq4tIz1PkDzu8na0cE0o^V7x>a|hrQ+agi@;ec8rfC!(W9p9#Pm&}_k|aq0 YKat#WpKwjx(*OVf07*qoM6N<$g6GHMQ~&?~ literal 809 zcmXAoe@GKy7{|9(n~5hP67E%TxlI3%nCJX45Or=&tu&RQiKdN?buLSBQL_Z+{y3DG zY?{iUh`Q9wa0@{cM3O;Vb=jO)DH9u$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 diff --git a/tests/snapshots/nanos_transfer_bsc/00005.png b/tests/snapshots/nanos_transfer_bsc/00005.png index 93c90c542343a4423166f143ee5f43f335c73b96..fd3155c0d349a1236eb862c8f4f5fc3c3a981ccf 100644 GIT binary patch delta 489 zcmV|0wGk-swfz8xP`K=zI`<1y0oNUx>wq5-8A((Atf zzup5BG5S5VENk=E;6UyG^|_-lTQK`(BF0#Bj^oEwI{@t45r2=%I$$zY2U&(lCS}h6 zmUWDsW^Orx2F@otThhss))>O4(wLbJDE}RRzp(O~b{4ZFgeUVpfW=q6oN#K%T$XyX z#!N%sOSm*BSFYOc&Py`iZ@MQn+#3~zuk=1i5TdIK-s zsAV(6ZeuYnD{V^0ojtC0sWO?x-863hBI?UV_L4%&Sz?lgOM5lcHB&OiHMCtq-l86c zRlRSceF3Vcvp1KLia`wWKI+v_^4|r-A={URR_l@f#?mk(gGz<1X{efZXELRhS>OLb f5ClOG1P}57@$ZITS}Pb{00000NkvXXu0mjf;ri!$ 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 diff --git a/tests/snapshots/nanos_transfer_bsc/00006.png b/tests/snapshots/nanos_transfer_bsc/00006.png index 402c20d84b73864383ebc9f5a2cc87b175f5db3a..c63f25f8dbf212867d4b40bfa2cc85583ca98105 100644 GIT binary patch delta 357 zcmV-r0h<1|1oZ-t8Gix*0031$=W+l50X#`WK~#90?U>6F!Y~L$iDUo&gS)7knz2Ch zCZWzf<3dSGk_&kV5dZ)HV9T-BH6@HXNxkNSXY9XpI=#OWnkON^ZZxU(c$?E~<( z?%OJ)jz?BTmkC$1|thtNl@h$#JVW)IgXd9cOs%=KY#NvYy&2f6)4+9*e)Z9 z!&6)BnX&~9oDbVu;?5IeOhQxN*slQkrj?y2ENADYa3{gmy-dbvVUopGW@H}P4q@48 ziF0-Q<~%2NDrlb6a5XXx|5APO6o8b^e^uWhiquelGKj%SunVo^DzdnSdixinj)x_R zy!a$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGR88MA%qYBfDcDNq~EXe^pyYr002ovPDHLk FV1m4_g69AL delta 434 zcmX@ibdY(1WIY=L1H&z)0#ybE#tu&x$B+ufw+C-`-F9GbIe5AG_ka5x@>WhMt*O=% zxKk#ktvcd=*CT0W_pZdnzUGr6o+&QKxwQz)GN`!3dpd+=%IXY#UieVK`LN@&3mYc?)HO1ZNqOhtPziKWkuvXzJyLtJ9MX15N=n7? z&NHo7*nDRS5AS)lc&Q1Id46qe`px=ACOYQV8_rBWXe=o;ZFZK!vzZN_Rx!>zon4{4 zIoo2QrOBKVF>%aB>*Z>cilvR(+k|JD^IFf0p7=9m!=A}Ak2delwm31zM8SA7d$~H$ z2Wjdcubs&-u%0=ScUn2`=8A%HpjT>CoSAvqwP)@Y3YeD3J8dO0`paN^VIBK|Lum%U P*kSN=^>bP0l+XkK9UHaO diff --git a/tests/snapshots/nanos_transfer_bsc/00008.png b/tests/snapshots/nanos_transfer_bsc/00008.png index 6a16a429052c635d7602bcd7b47f8cc6236b866f..95e7fbbe65d82a1709956624c0b23adaa4a3cd8d 100644 GIT binary patch delta 361 zcmV-v0ha!`1o;Ax8Gix*0031$=W+l50YFJaK~#90?U_LmgCGn=u~YAVU>EIz8Jdz1 zL4id5Z)IZ)_#-e$LjV8(@KhGd!9QCFAuOwAX$qA%5W$GI^#uBH9nmR{6F@)eDDG#= zFDfG>=gh(#o<)5Bq(b&Ha}zJPPt8+GoatO-1w@urJ0!#vvws`2axo3VK>`$6OFEX~ zv|5@rv@yJ_20lVmDkZEJ-2=AZUR`x4v}sF00000fUbN2R!GZb1jyCB00000NkvXX Hu0mjfWcHf< literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcKAx;TbZFupw)n0MQQ!R6rf zmS6wa-}UzyMEJXOx?S_g@l;uTq`peE^YX?O;V~~)g-^1OZEq;LDi-_IOK5p=#Ey&F ze(g#N_UvkNOk0{b;b%54f6BLahhCb`T)cCGI8$aHfmL=)@mm-V+L&FE#KO@uy6vWEcOoBylniZ}XYuQei1=ZN9v-r9h(hIzeJ; zGZ#KQonm$}XHuntv5CUxS7Ln&7$s9Oeh3l`nEaUt3L>C|K%XcW1H<8jkC6$FQN0R?YwBZkUTMJ`zU+r38QjaAqb+1_ h9eQ~|%&+|$_rrN-_HXN{{RT`D44$rjF6*2UngCex@D~68 diff --git a/tests/snapshots/nanos_transfer_bsc/00009.png b/tests/snapshots/nanos_transfer_bsc/00009.png index 3158ea690450f2b8c85c12004b002b02e7b02539..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b 100644 GIT binary patch delta 399 zcmV;A0dW4t1fBzs8Gix*0031$=W+l50cA-NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_bsc/00010.png b/tests/snapshots/nanos_transfer_bsc/00010.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_bsc/00001.png b/tests/snapshots/nanox_transfer_bsc/00001.png index 92b6eb54119639e6f8b57d9ec07839ac4d4c5d5d..999e48e92043f3349bc248fd67514280fea9c41f 100644 GIT binary patch delta 535 zcmV+y0_gqw2Bid$8Gix*003RI=qLaH0qjXcK~#90?V3??#2^TUZKpT!{zvjIeb{Nn z3L;S>694ZhYt$gD3TOxb000000Gv!p$y$Vi`DlNc4fZkikF@|*avjAOub(l-qC#Fm zpNoFNe`80001B$d|PMZ3@rw%I6f`C(Zl>4_>By9H4;>(`w;@ub6I&Tu>kH zNF4c?0c_Aar7~!v$xF-0=bdr91ib_I2JpTUlzV_C6S*E)#f1%awnsy~JB$7rs!E3T zm%*qS+FuN8V1Ef#Axj!ch7BHts#lv06^^irSHf9&t+`N>-fO${MWL0ZAEAUDPH{D_ zR_!*zg);psc5bDVs0%MU^;3jtO4V1Q>@80oX&Uk*vT+R)d%Y} zuw&7T%fkXfl-hq-KH(qYTy%ymB(h;w6LjyJj00000001=n Z0w&<%*%0HgG5r7l002ovPDHLkV1l_>@i+hg literal 891 zcmYjQZ%7ki9KJFv=AUn8)+|3rN^gH;`(kEkUaqDa^LBf0_K%9uh(ICB(v>t#R$f%gr)57|^qg*Ojx_ zUKc-tbGZ^;k5f?_!o?=1AT(qwKYn!otD*2iU(K<+vEfBk{jmUAE2fgDibOl*9ImQv z(j%HlIAvQq(7}q)RzAKg~6lDomXBmDsF<(C`R4BLl}i$+j+hJfPky-iIn>J zQ*(tpyAR>DYo7Y^rA%DR=mazAQ&_nxepSQucuSp9gy{gwLyo~S#4YwP{@+e)P6lNr|#RkkXF{5ftn5qZxME914<0+>Ax&Z^h-wmq)1rD!1fd=51ulf=Yo>B}(moJNG<6 zK9JBW%^5ukr_i-*Y=JGP$3o*p4fiq;6GGygL0d0!d v4mxrCmPbpl}n@o0q&_pSdvxKNV4Ku$1*uhtK~7FhZ5V diff --git a/tests/snapshots/nanox_transfer_bsc/00002.png b/tests/snapshots/nanox_transfer_bsc/00002.png index 4228ae193adbfaa0a04cbc0fd31351cfaa89582b..0ca5382b578fb4489579240a3657c7b2636fdb9b 100644 GIT binary patch delta 748 zcmVDW`K~#90?VDM4!ypVr)t>Ie`(F}!=|@^Z zH6h_iY2N*cF~LG&5YGt_00000003`JYb|xlssAc`-fh5>*4nmh|G=jyzV0?)LU7>s zl5N|vm*9toUqEzh%|5q$I~+)e`lCZ=0`WStL%v z5rdYAkB;Eje}5JBYC*wM<#aW3zUVA&k#c69wfaTurxOm(i2!u*q#Gf7#Y9b3Gw96& zu@?H&Bvv;A`fI<{aepVHGt|&v-y+^u_cR%7t2}P-{;5eu$EPhP0x)*iY1bMrYEvn! z*>mx%vYry@xP%8lz8Hz5p=x0IWOR~Fzx|!4Yv#05vVYFheyiiM@yYn8ppXB1Oee$p zm!Y^C-oF^c;7+g#-O0qsh{35y_s(C+%e>7xgQUbxtD0lRR1=K|9+nvq?Xwp~6pmx^ zY)ep7HNUCY=~rH`Bxpv;o;3|MRWjn8ghyXrBQ!eWNY;$}u;+r~-cGy#I43$;jof+d z)S+RfvwtaXsaiq3K{goVsIW!GZcdC-H9u7&vTmt$n8nLvr@w`|*~q)Bq9xF z(@;nHpT6@cyZ-|K0002oNQu8FIang-cqv68=VdEM3UjE(y*-jcwHF?R{-)ZIBHeho z+ztrAMriiMgI`i@_*2ap5FsK4Fe2LI^}K2ToL>gM7KQ#P|DKea0rHji+Fr`q!G;U~ e00000z>{xumOAKEhM))l0000egH6v}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!)< diff --git a/tests/snapshots/nanox_transfer_bsc/00003.png b/tests/snapshots/nanox_transfer_bsc/00003.png index d354b8c0fbee0bbe61296943b95f046891d077ab..2253c824195f679aebffa735ff0999c6217869ad 100644 GIT binary patch delta 332 zcmdnUa))VxWIYoD14HbV7a9x zHPbhr4e7nJ#eKKz=Ukl?i@nk_EU(S!7F1|;{P6copHMQ7;+cAj;`P(N@?JS}TI1{X zcDoNoOiTW#tuXQ9{5LJ_`qO70O_}-@t|-!4GOOy^O=d<0h6kq(|6-f9f^~P))U@mt z(-#iQ=a+wz;;&w<*H?DPS?Bwe-?uo!Q_Q#f?R$PF{v|)d&pBn&X4gMq3%>A5IpHT? zz%*%=D#=&HVQ2N6z4KYGo^hQzxng>CO;`xe%rE+rJ7;~-cax7u65CWFWK?S)`Vka5 c$l&rG#*Ckj6RLcl%YuYGUHx3vIVCg!015?=j{pDw 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 diff --git a/tests/snapshots/nanox_transfer_bsc/00004.png b/tests/snapshots/nanox_transfer_bsc/00004.png index a4514d7bb667fbde80bcb910cecd75bfe7c5171e..38606912e4a4b225847ab1af9284cd752fda867b 100644 GIT binary patch delta 388 zcmV-~0ek+t1(XAj8Gix*003RI=qLaH0b5B#K~#90?b%TdgCGomVYcih-2X`2We+5T zP^jR5>ioYahlp4NQ|251006Mv%kbVI1m~RhUMU%BDml@Dm5+4?rnynjbJrb!{H2b; z4IvZ z$+vf8W!ajN1M9o0CrV^$eKYw3t?z9>Am&^v>3SWXND3_qQ(_as9F$PLy z`JX}Rr##hD(s_$?N_)r=2jS(F+@Kj`qQ6Zg)I@(X#=sJ*kfnnlGX_f$UH||900000 i0000000000V3{wc#U!zZqV3fH000037w;57i_q4&mw7kzon0s1Qo8D5wfhy-tpz01-1K*NVNlv{V7+9HVUS~12t1Deper3Q)@$3+r;F($>>$HI8r)$ZtoDl-DI0op}aM8)9LXR#f3N>6g z2dIDF;okfuMXPqK3i#Or^qI1#R&eX7&0JGgI;E}(0GhB2%3KLl0p$8=-Ov57C`7A{ zYwG+L$IMq*to$P_sy=o83ZMsM^JISt^~5xr*?ThEe`>PR`5~Jr~a!0D$5wk^|V5^ zeGgt(WV&NTz|DJ;y^daeFr91a+r2A8=CJKw5t8$Mt=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_bsc/00006.png b/tests/snapshots/nanox_transfer_bsc/00006.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer bsc', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'EB0185012A05F200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880388080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'EB0185012A05F200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880388080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_bsc', [9, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [10]; + else clicks = [6]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_bsc', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "f667cc34e9815df4f052fb3463cdbe355fff5c1acf4e919b3539806521a059ad", - "s": "6b35492b7108d9d9e1cc7aede536ed6b3173197b56dd873cbc3b43e041d6f407", - "v": "93", - }); -})); - -test.skip('[Nano X] Transfer bsc', zemu("nanox", async (sim, eth) => { - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'EB0185012A05F200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF6181880388080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_bsc', [5, 0]); - - await expect(tx).resolves.toEqual({ - "r": "f667cc34e9815df4f052fb3463cdbe355fff5c1acf4e919b3539806521a059ad", - "s": "6b35492b7108d9d9e1cc7aede536ed6b3173197b56dd873cbc3b43e041d6f407", - "v": "93", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "f667cc34e9815df4f052fb3463cdbe355fff5c1acf4e919b3539806521a059ad", + "s": "6b35492b7108d9d9e1cc7aede536ed6b3173197b56dd873cbc3b43e041d6f407", + "v": "93", + }); + })); +}); From 29739c63c8931d3f8104e03b134448f7ba779555 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 28 Jan 2022 11:38:36 +0100 Subject: [PATCH 15/87] Updated send ETC test --- .../nanos_transfer_ethereum_clone/00000.png | Bin 541 -> 374 bytes .../nanos_transfer_ethereum_clone/00001.png | Bin 475 -> 336 bytes .../nanos_transfer_ethereum_clone/00002.png | Bin 759 -> 451 bytes .../nanos_transfer_ethereum_clone/00003.png | Bin 479 -> 320 bytes .../nanos_transfer_ethereum_clone/00004.png | Bin 809 -> 497 bytes .../nanos_transfer_ethereum_clone/00005.png | Bin 837 -> 504 bytes .../nanos_transfer_ethereum_clone/00006.png | Bin 567 -> 373 bytes .../nanos_transfer_ethereum_clone/00007.png | Bin 557 -> 380 bytes .../nanos_transfer_ethereum_clone/00008.png | Bin 582 -> 414 bytes .../nanos_transfer_ethereum_clone/00009.png | Bin 531 -> 340 bytes .../nanox_transfer_ethereum_clone/00000.png | Bin 636 -> 414 bytes .../nanox_transfer_ethereum_clone/00001.png | Bin 875 -> 537 bytes .../nanox_transfer_ethereum_clone/00002.png | Bin 1298 -> 761 bytes .../nanox_transfer_ethereum_clone/00003.png | Bin 695 -> 403 bytes .../nanox_transfer_ethereum_clone/00004.png | Bin 674 -> 472 bytes .../nanox_transfer_ethereum_clone/00005.png | Bin 628 -> 365 bytes tests/src/send_etc.test.js | 137 +++++------------- 17 files changed, 33 insertions(+), 104 deletions(-) diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00000.png b/tests/snapshots/nanos_transfer_ethereum_clone/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr6OPgCGcoac8~%19wpuZO#O2 zYiYpwzpF+b(jQO<5dZ)H(3fR4G=XIn=CfJ0SJhzmb{)^I-c`y~ zrRnoCP4$4%!k;TYwAVL}FAj4gX&oXkAHryU*v2pGu;$rZ4ptL zMox9e7GzU*8w?2m-`T;N&H>=nU0FoLW0`)5Uv&sKzFXPbhyMtoCh6&QT`S0ex2Woq znECZRy~s&;ZLnLS^?WL$IMNh0b{#L4)y@ zUpKX*Pays`_BoHA0L0Qg6K)IgMz{cYJA~Oa)F#^HlHcl#Uqb-^000005fQCcFRbenmCWIY=L1H&z)0#ybE#zmekjv*C{Zx06cU3Oq_Ie0zn*FW}m{l_+)$e1gz z(aAxkdessCSkI(gVx>pDRM3_pBmx2eMBi3=Z! zNKLpo(Xp*<@s2_k-pkc@ESP34O#D@!w}kz0v}kEQhozpe_3sG0v=C$2ilSyI*R;Oh31_Hg~2|vCKx7J53dew-;P*I8#z& zWO7IM&dCb~b7Po|%DLk~tPp0ScuozVmY)^8)N&o-=KrGM4DhfOwpN}|z_fFTm1KGBb%T*g~FP8y} zzdyH~4k%mrcOobK20M@cclZeqzl)phWTVz%>qEvz9)eq(=zkA+x0XA7I^ubHv+W~Q z9g>39@%tO%@u>_60MG0bS;_k;JOKQ3d+Zk<%jrn`$U~T{TM8%o*bn~^tguNVXtt}b zLn_j)>ix7#04#wQ_Wo)Ju7>vqgBZ*NS!gD|PTquW@z!NjS4fv}gVd%QBYCyw(2B+^ zj~t^#G)KGaihlzR;3>0IyR?D~ugNsmDGznoTD7$}r4_{2f|6d9`pj e00000F2oCTx>AX?P;^`X00006pnS>%$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 diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00003.png b/tests/snapshots/nanos_transfer_ethereum_clone/00003.png index e0420108494b969f9c050ba46e44f5c255fa1f1b..a54fefd4c94fc7cfc5df4396112561399f2b0f6d 100644 GIT binary patch delta 304 zcmV-00nh&51Hb~18Gix*0031$=W+l50S8G$K~#90?b*Q&gCGnBU|7ccKd=XPaSYoI z=Cq~Y|78bGL-xdO_L3k4c=cPj2D;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 diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00004.png b/tests/snapshots/nanos_transfer_ethereum_clone/00004.png index f979f716022e2492f86f9dcc9ba56e7622cefd3e..8656b81752a48501b840f96ec775d5a947435225 100644 GIT binary patch delta 482 zcmV<80UiFS2Jr)s8Gix*0031$=W+l50k}y-K~#90?U>7U#2^TUNl)|s51d81Nb9k} z&n0S-$>CegctJo!15uJBNs`QE-(p?L_|Db$O%Q&x99_-eH&Dz|dOeMu3Ls6;ehgPb z;(PW25U1Zu%d&?5a!~ur;c+MaKGA5#ve>B1;t6W;yP%)NpSY0$=HUdeR1HGT-X`2O_vSy?-&e2X~TL=uZASc@etn zM;NK~ljij;3V$K+yc1`MV?-T#UY2!>xQeL>DmtOn%izGf)>9EwYA?~UOmr3+sTY$y zwwM(sBv3DT0U}?*Q;W3z?;U6Ce+b=Q!e#}y9(KY({7{Fy@6Uc7{ppkmDv=E+m4KoI zx2maqHY1(h90*GEp+hWQ2E^`5(Qy4Hn^FsM+UD`Tcw49O%|`7`&cy+rB^qu?j%+|} zup$@5izq4tIz1PkDzu8na0cE0o^V7x>a|hrQ+agi@;ec8rfC!(W9p9#Pm&}_k|aq0 YKat#WpKwjx(*OVf07*qoM6N<$g6GHMQ~&?~ literal 809 zcmXAoe@GKy7{|9(n~5hP67E%TxlI3%nCJX45Or=&tu&RQiKdN?buLSBQL_Z+{y3DG zY?{iUh`Q9wa0@{cM3O;Vb=jO)DH9u$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 diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00005.png b/tests/snapshots/nanos_transfer_ethereum_clone/00005.png index 93c90c542343a4423166f143ee5f43f335c73b96..fd3155c0d349a1236eb862c8f4f5fc3c3a981ccf 100644 GIT binary patch delta 489 zcmV|0wGk-swfz8xP`K=zI`<1y0oNUx>wq5-8A((Atf zzup5BG5S5VENk=E;6UyG^|_-lTQK`(BF0#Bj^oEwI{@t45r2=%I$$zY2U&(lCS}h6 zmUWDsW^Orx2F@otThhss))>O4(wLbJDE}RRzp(O~b{4ZFgeUVpfW=q6oN#K%T$XyX z#!N%sOSm*BSFYOc&Py`iZ@MQn+#3~zuk=1i5TdIK-s zsAV(6ZeuYnD{V^0ojtC0sWO?x-863hBI?UV_L4%&Sz?lgOM5lcHB&OiHMCtq-l86c zRlRSceF3Vcvp1KLia`wWKI+v_^4|r-A={URR_l@f#?mk(gGz<1X{efZXELRhS>OLb f5ClOG1P}57@$ZITS}Pb{00000NkvXXu0mjf;ri!$ 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 diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00006.png b/tests/snapshots/nanos_transfer_ethereum_clone/00006.png index 402c20d84b73864383ebc9f5a2cc87b175f5db3a..c63f25f8dbf212867d4b40bfa2cc85583ca98105 100644 GIT binary patch delta 357 zcmV-r0h<1|1oZ-t8Gix*0031$=W+l50X#`WK~#90?U>6F!Y~L$iDUo&gS)7knz2Ch zCZWzf<3dSGk_&kV5dZ)HV9T-BH6@HXNxkNSXY9XpI=#OWnkON^ZZxU(c$?E~<( z?%OJ)jz?BTmkC$1|thtNl@h$#JVW)IgXd9cOs%=KY#NvYy&2f6)4+9*e)Z9 z!&6)BnX&~9oDbVu;?5IeOhQxN*slQkrj?y2ENADYa3{gmy-dbvVUopGW@H}P4q@48 ziF0-Q<~%2NDrlb6a5XXx|5APO6o8b^e^uWhiquelGKj%SunVo^DzdnSdixinj)x_R zy!a$}+Z;wl?0GvNM-UO}LpM zky5uhal%ZHQK4dSYZ+%cwzcJ7bU5q>gz}StoRy3-c_mXaD%7>#FL-$Sd3dKc15MFpd>Y7XB)^&w=$kU2LncsOmxlb>jgobGR4yM90Zlx?Fh%JSg$jet>!GBYKG80ECm;iF;r1 zMWY8lII^Szo`w7WUWMpmG%S0Oj%oQ7<42rLR)FI;xkDnmVt=YW8yC|u3&7EErF_6-Xx(S|IEFQuJ&ZU2*A}`bzpeQob7b7Dz z)E5RZ&;+}XCf_0_-O#yJNwqpnyEK$b3abS$-%^b%Ophpi&bb+?bkSE@Qjz_>xW(7f z0vhZ5j9I2)rezW~R0@f*z7n=rZ5D|3hvBzFJ**FaS>3DKu}G`V%oZd}DyvdY)Jy;* zGhpp^03nNC%9oPM>;%k?48IMt#wddvOG8UOX{)0P00000U_(CL9>HRtjM$|B0000< KMNUMnLSTYu!=F?D literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfe}cba4!+V0?QpuM9RO-ZL%{L?=Ji~`^?Qd7L(dK&s=B#q5RAnCvv3BjGPaH`o<&}mr|JNld8JoNTx?au5-;~GbewIXv8ZXevi4$&`NH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00009.png b/tests/snapshots/nanos_transfer_ethereum_clone/00009.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00001.png b/tests/snapshots/nanox_transfer_ethereum_clone/00001.png index 6b7d579c9a383a3e0fad8eb9b4a62645fce31528..169fe0de33d8dddb7d3dd1d9f8fae4f8634a3faa 100644 GIT binary patch delta 523 zcmV+m0`&ds2AKqq8Gix*003RI=qLaH0pLkQK~#90?V3xHgdhw+nW?^s_dgPMnMGGq z3!cs|-`Ju4?&K>#yv{G$3vKze7Qne^w#GAk6Gm}CyXieJihlue&%O!v28ee~_whof zd!x85yDRo%69xbP05IgoS^yQLcurC%)`Sj}PWMT<_kOzXxFKRe9hq*{+kXiw5x;vE zU>XA~ruV>VE@(PdGr;tl@UR2$A1Zai33b@x(1}!I3cVObC8Pbv5LAu!9|jv(f)}!c zeb|y*z1nDK<$o7;@~HB!ywto>Q;crv-&kp->8Da64kt;?D^X?5y6bGLchoL@0O z2nn>$GST^#R(g`)rD-L;F7B#vET;`^!qJKUy)?X%Nq_1+bWD8|PYvQ&G~=={K(F=N ztA`d!V^K<_GC)Yg%zGCf<&xb-b2Q8g?@6V6SBvlf0002+W{%v@nC^!~xQQl0IXKbFocr&2Q+Z*O-gC@M>dP-lvzk~z~98tAI= zLP2Mbn!LBIPzgygm&GeKAxKcNNgvuEG8GqSl4fTr;e-3`<(zZx{e7H!n^vEdN)AXU ziju0%r7oqYkm{h>;UGg~!ZvEydb4hH&B(aYi=&kV>Y3c1 z9bwsr9ies4TnVj>rLk{UrDd)1CHdR(p2ySF+~C0H`KYqFvexN>oY!t~RqACzzr5>r zT1qd+ct_P%I$c~`Q`E?iR;aM2BqtXcl!QMX)Mg z6(52cJr5!B)Cc9 zgq35+5}0!VNaK1605Nd@-r~vP+en>{nkyMe3>dY=Yx%y-k__m{2223Da|$}4MI<3O zGU{dL&UG%%Z-sx%5_YVkgz(PqZoC6jk@2~S#lnFVR6sh9lu^VyDW`K~#90?VDM4!ypVr)t>Ie`(F}!=|@^Z zH6h_iY2N*cF~LG&5YGt_00000003`JYb|xlssAc`-fh5>*4nmh|G=jyzV0?)LU7>s zl5N|vm*9toUqEzh%|5q$I~+)e`lCZ=0`WStL%v z5rdYAkB;Eje}5JBYC*wM<#aW3zUVA&k#c69wfaTurxOm(i2!u*q#Gf7#Y9b3Gw96& zu@?H&Bvv;A`fI<{aepVHGt|&v-y+^u_cR%7t2}P-{;5eu$EPhP0x)*iY1bMrYEvn! z*>mx%vYry@xP%8lz8Hz5p=x0IWOR~Fzx|!4Yv#05vVYFheyiiM@yYn8ppXB1Oee$p zm!Y^C-oF^c;7+g#-O0qsh{35y_s(C+%e>7xgQUbxtD0lRR1=K|9+nvq?Xwp~6pmx^ zY)ep7HNUCY=~rH`Bxpv;o;3|MRWjn8ghyXrBQ!eWNY;$}u;+r~-cGy#I43$;jof+d z)S+RfvwtaXsaiq3K{goVsIW!GZcdC-H9u7&vTmt$n8nLvr@w`|*~q)Bq9xF z(@;nHpT6@cyZ-|K0002oNQu8FIang-cqv68=VdEM3UjE(y*-jcwHF?R{-)ZIBHeho z+ztrAMriiMgI`i@_*2ap5FsK4Fe2LI^}K2ToL>gM7KQ#P|DKea0rHji+Fr`q!G;U~ e00000z>{xumOAKEhM))l0000egH6v}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!)< diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00003.png b/tests/snapshots/nanox_transfer_ethereum_clone/00003.png index 4a61a9d6364a79f37ebebfd6808e6ee8092b0a95..1c037ec6fb4e81d2b9f6c2fbffa8e7862fdad710 100644 GIT binary patch delta 387 zcmV-}0et?q1(O4i8Gix*003RI=qLaH0a{5!K~#90?b%xrgCGn*QQGNF*#DBUmwqtg zFgyi;Kzq-Zr4(%tjnNnY003aQm*T!f#290(EwnTZb?F#E%SZbFhB+wczI`XaKdD`C zMI_j`Il|RBXo)-g7x(|KCh9U>4G-NTWiN1T%@iE8)f)_P4rhl!IQZ7VRa{X-16@?VE_OCJ#(v})u+?A zN@G$dbBTP=E+U1L|4s?0ukzE^GS)6n!e^go4@`d&K4>im zMWODuLrtbnzw_;T7G_%LbX~FOvv0(O--?(8N_pQzgjE!Bm770000000000 h000000001(<_qv46|M@p9ti*d002ovPDHLkV1oI-u2BF0 literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|_2Aba4!+V0?S9F<04~f#IO7 z)7+f@s=2yd9Df+a5B`%ls6Ng0oXnr1dW*j1T;1b;8`~d0{8u2ue%p%g!MVeK>z-Ha zu$MW0a9i8KqkkK7HQ5W&qpu}I-vXju@zBB`%g{L?|E6@MYrTJW?3=lk_Rf#YAuB>^ zmOS!GU1hN{WKPJwRgb)$h7>L}3XNI0XVF3FfWW|+T541KSJW(9^eDt|J{bT2 diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00004.png b/tests/snapshots/nanox_transfer_ethereum_clone/00004.png index a2cb8f9dc97401fd76908866c585e2855970e054..570ce28d53e82ac396ba25c370110058f3a638f9 100644 GIT binary patch delta 457 zcmV;)0XF`k1=s_S8Gix*003RI=qLaH0iQ`kK~#90?b%UsgdhxnVeITpxc`y3OCOlB zStE*8Hi`3pPY!h{CWshQ0ssI20001h3rZ=a6zfr(@MArIJH-lp^_&E>=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00005.png b/tests/snapshots/nanox_transfer_ethereum_clone/00005.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { + const tx = eth.signTransaction( + "44'/60'/0'/0/0", + 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818803D8080', + ); -test("[Nano S] Transfer on Ethereum clone app", async () => { - jest.setTimeout(TIMEOUT); - const sim = new Zemu(NANOS_CLONE_ELF_PATH, NANOS_ETH_LIB); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [9]; + else clicks = [5]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_transfer_ethereum_clone', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - try { - await sim.start(sim_options_nanos); - - let transport = await sim.getTransport(); - - const eth = new Eth(transport); - - const tx = eth.signTransaction( - "44'/60'/0'/0/0", - 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818803D8080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_transfer_ethereum_clone', [8, 0]); - - await expect(tx).resolves.toEqual({ - "r": "60df850d297e355596f87dc313a742032de4b59c5579186b3d59bdf31402fec0", - "s": "23c3a2beacabc1943d487a2e1d545e4c46c718b1e70e9d1c11a98828c9338927", - "v": "9e", - }); - } finally { - await sim.close(); - } + await expect(tx).resolves.toEqual({ + "r": "60df850d297e355596f87dc313a742032de4b59c5579186b3d59bdf31402fec0", + "s": "23c3a2beacabc1943d487a2e1d545e4c46c718b1e70e9d1c11a98828c9338927", + "v": "9e", + }); + }, true)); }); -test("[Nano S] Transfer on network 5234 on Ethereum clone", async () => { - jest.setTimeout(TIMEOUT); - const sim = new Zemu(NANOS_CLONE_ELF_PATH, NANOS_ETH_LIB); +nano_models.forEach(function(model) { + test("[Nano " + model.letter + "] Transfer on network 5234 on Ethereum clone", zemu(model, async (sim, eth) => { + const tx = eth.signTransaction( + "44'/60'/0'/0/0", + 'ED44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818808214728080', + ); - try { - await sim.start(sim_options_nanos); - - let transport = await sim.getTransport(); - - const eth = new Eth(transport); - - const tx = eth.signTransaction( - "44'/60'/0'/0/0", - 'ED44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818808214728080', - ); - - await expect(tx).rejects.toEqual(new EthAppPleaseEnableContractData( - "Please enable Contract data on the Ethereum app Settings" - )); - } finally { - await sim.close(); - } -}); - -test.skip("[Nano X] Transfer on Ethereum clone app", async () => { - jest.setTimeout(TIMEOUT); - const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB); - - try { - await sim.start(sim_options_nanox); - - let transport = await sim.getTransport(); - - const eth = new Eth(transport); - - const tx = eth.signTransaction( - "44'/60'/0'/0/0", - 'EB44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818803D8080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_transfer_ethereum_clone', [4, 0]); - - await expect(tx).resolves.toEqual({ - "r": "60df850d297e355596f87dc313a742032de4b59c5579186b3d59bdf31402fec0", - "s": "23c3a2beacabc1943d487a2e1d545e4c46c718b1e70e9d1c11a98828c9338927", - "v": "9e", - }); - } finally { - await sim.close(); - } -}); - -test.skip("[Nano X] Transfer on network 5234 on Ethereum clone", async () => { - jest.setTimeout(TIMEOUT); - const sim = new Zemu(NANOX_CLONE_ELF_PATH, NANOX_ETH_LIB); - - try { - await sim.start(sim_options_nanox); - - let transport = await sim.getTransport(); - - const eth = new Eth(transport); - - const tx = eth.signTransaction( - "44'/60'/0'/0/0", - 'ED44850306DC4200825208945A321744667052AFFA8386ED49E00EF223CBFFC3876F9C9E7BF61818808214728080', - ); - - await expect(tx).rejects.toEqual(new EthAppPleaseEnableContractData( - "Please enable Contract data on the Ethereum app Settings" - )); - } finally { - await sim.close(); - } + await expect(tx).rejects.toEqual(new EthAppPleaseEnableContractData( + "Please enable Contract data on the Ethereum app Settings" + )); + }, true)); }); From 041ca9a89565ba90cd3d2bba8b026a30805d840f Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 27 Jan 2022 15:10:20 +0100 Subject: [PATCH 16/87] Updated starkware test --- .../nanos_starkware_usdt_deposit/00000.png | Bin 541 -> 374 bytes .../nanos_starkware_usdt_deposit/00001.png | Bin 530 -> 359 bytes .../nanos_starkware_usdt_deposit/00002.png | Bin 829 -> 488 bytes .../nanos_starkware_usdt_deposit/00003.png | Bin 809 -> 477 bytes .../nanos_starkware_usdt_deposit/00004.png | Bin 622 -> 408 bytes .../nanos_starkware_usdt_deposit/00005.png | Bin 774 -> 391 bytes .../nanos_starkware_usdt_deposit/00006.png | Bin 882 -> 420 bytes .../nanos_starkware_usdt_deposit/00007.png | Bin 884 -> 429 bytes .../nanos_starkware_usdt_deposit/00008.png | Bin 759 -> 409 bytes .../nanos_starkware_usdt_deposit/00009.png | Bin 452 -> 313 bytes .../nanos_starkware_usdt_deposit/00010.png | Bin 458 -> 315 bytes .../nanos_starkware_usdt_deposit/00011.png | Bin 401 -> 281 bytes .../nanos_starkware_usdt_deposit/00012.png | Bin 586 -> 357 bytes .../nanos_starkware_usdt_deposit/00013.png | Bin 582 -> 414 bytes .../nanos_starkware_usdt_deposit/00014.png | Bin 531 -> 340 bytes .../nanox_starkware_usdt_deposit/00000.png | Bin 636 -> 414 bytes .../nanox_starkware_usdt_deposit/00001.png | Bin 651 -> 388 bytes .../nanox_starkware_usdt_deposit/00002.png | Bin 1240 -> 693 bytes .../nanox_starkware_usdt_deposit/00003.png | Bin 1557 -> 571 bytes .../nanox_starkware_usdt_deposit/00004.png | Bin 914 -> 432 bytes .../nanox_starkware_usdt_deposit/00005.png | Bin 588 -> 333 bytes .../nanox_starkware_usdt_deposit/00006.png | Bin 568 -> 345 bytes .../nanox_starkware_usdt_deposit/00007.png | Bin 511 -> 294 bytes .../nanox_starkware_usdt_deposit/00008.png | Bin 716 -> 395 bytes .../nanox_starkware_usdt_deposit/00009.png | Bin 674 -> 472 bytes .../nanox_starkware_usdt_deposit/00010.png | Bin 628 -> 365 bytes tests/src/starkware.test.js | 90 +++++++----------- 27 files changed, 35 insertions(+), 55 deletions(-) diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00000.png b/tests/snapshots/nanos_starkware_usdt_deposit/00000.png index 2994983f84cf76ab587bac356d5afe297c0e0632..8d84cc70fea8013b7e8b25c0982ce142fa103d5c 100644 GIT binary patch delta 358 zcmV-s0h#`t1oi@u8Gix*0031$=W+l50X<1XK~#90?U~UIgCGn=VVVE`!9KVLmaU_u zfG{a?PmE!tf?lAk#W?@~0IT8$_kZl)vft_+tg;6(bO30186KlwAi=S}FUJOkSEh`Y zAKd~(jk*;0-6YS^FF@3xKD|mZ!}?}1FaSaKNW`iQcIn;t<9~n8O+(!U@s7%k#j-sb zRsjF7P}4pi{U-aRc4K>-jRSPYJ)sa6!NQlezoC)P&^-%Xujk?JSosM!L?5ex*uCkn z4pP$`)4zmnD?m&V0G;1`xFH*wl6#h|ct}3Af2SP-u?w)bMu(mUM27)1jNs=4;>kf2 zdFVEj&_$}9R9{m!B%3o3Qx19_LNUlTqF4R_1Iaj%@^2O=@;n%h1N>H$2;%-~Dvx1! z0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4oje8$F8UO$Q07*qoM6N<$ Eg7waz<^TWy delta 527 zcmeyyG?!(9WIY=L1H&z)0#ybE#wVUGjv*C{Zx7z?6Lw^9KKMBB&wu$h?8Z_Hw(gA- zXju@mZ1oZTyPipw;-$y^cE3~EIH$c~Q+9V5NT|J+e^;`lDC1L66Q7j4YYk_Z#N#^8 zTxdAsn=@i||dehV=B|{)PwnLY$;PIXWqO(^(T0Y zfExM>9>$v7S;9DT;X@y@d!0N+^*(HpKx0qLIe3i8$YjpN*6>RO6MhCAjt2%-Tbs6# z36D{GTk{zgPzXqJYMjo@)mgr6OPf*=frrIYXfz+Tt|W^2G8 zZEdsvyXYt?{ERW$rU?K5z`v5L1w2`ox7#$U4588OMPLiSZdJ!Jx;kDMhd%WtnYNv!}hlNs}*j-R;VCUZzJGe5!se)H_=(<JD9nq$1gHqwK(`WIY=L1H&z)0#ybE#+#lljv*C{Zx2TH-SJ>>KIrba=YQi*$J3pKi$Y@E zwof9Z1=9j#l9d$d&8#8ZnL`{kIHzt`FA}m(_}hz(WFMgLN0XY7@Yfjk%O^s5FZd3ddjta&G&xdLLIxL{yX&tv4ismP7@1V|>B*~pn0L{2{A zZDaz}!<~NB;c)!r0yph+)z8;~YEH~KdFbuylnjf>Qx|95m^d>fV@ArdHqW$43lk^J zlv0~HU5ag{vS7eGpoLbvCt`w_jn0dKIM$MqQuB0evK*e31sR#x2nFoR1~M6WPt@0J z|Ip0CyL~c{-`?tOWOB!E72`~Irc;~QQtmk&?mHu&>F}&bYC`3wrcTrfEK#zX<)ZlKdm-T<9B86>)A^;G2y2cXj!XL_aq9ShRy*v6KU z;Q%JmCd`y7OQ~7LmeST%zU|XHAm#XMX`4RKA=6E3A`c7d$h4kWo-*O*6dvCFu52^? zPbxH@v5wxMB`KvQDK$Y7XwI`UVfSJW`pTY%Bc;OXk;vd$@?2>|n)+Mxgd diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00002.png b/tests/snapshots/nanos_starkware_usdt_deposit/00002.png index 637a8983a2979b7f9ab78124c35f3b0ab4d1e00d..e90234003da94ee8622de01efd7e002c952c46fa 100644 GIT binary patch delta 473 zcmV;~0Ve*v2IvEj8Gix*0031$=W+l50k26!K~#90?U~(@!ypKS&Cd4yAGjCYi_B2# zK|H9@W|nVy(Gmp2h(Ap!2!bF8C|=L^XL}^Z&*?7IE}s%i$W_T1%zJlRwc&z3i%m(i z9aW*v@#~A}cql^gCr|STPGR1Mc1mlV}YYkB!t=ZJ#S66tkuNJ+0RqvlwcYd2DGk4!i z*^KPxTrmLF(|^eRGL%$D_7@Xlu#>1lJNZoVp*&V^SL}Ti>NF+l=C4D?2)g<@YU{Bnm0mr^9~*I+GkLQX-?maI#0r+>Gg;Ep|j6UzT+;)fGmJy_L)OF zd9b&g$^p9-n129h(-h6z4O}$prc$dcOt~49fLoFKOH$B8rleKY8(esovrE^b~-%T)<_Au=Hm>4AP9mW`1kw)8@jC(#Pk`! P00000NkvXXu0mjf4gcz{ literal 829 zcmYjQeMl2=7~b4mA>KbN)E#1TCV~2g+*XRHn>shwaGHu*#%y%18B)tZDTa=q8@h?} zo5MbwrA`GCEI|-OPU4aabbghHv_Xgc5e`NuB-ne4NVvP_{k`|T_j{h_{at&hL5oD8 zQ9K?G(G{u70PS!~&x_!>E3+o^cmknLombJs|G9jl@s{qQdbwQq;WTnbi#)o!>5rLn zgo-H*d)X=sKh*$8@wC5-@6ZrK@ko=Ae`QlyqXDdQ>|a1CXN z!xU*4gabq>QowdZBlPY1FSLv3j7FS{Z-#za#GW>?64ZSYE_^_QyFGlelY#a$gl<6H z^ITOoyp$k%0rtj!U4T8QkHehsp_2)Dt&SS+fres=LKC*_jK-{xhP?9HPR7!dLatk5 z$#>sYlF-F$32NLTTRyF+D486$RO1h})A80xKk#uf!0}R#$FyP1kf1Rn5Ci@KY=|f{ zgZhMs)fR+~f92(qCF^#^fx4RySGdfgM1t;%OZUN$VaLw&6N$E7B5@WZ3;}>Q{~@I36cc~-63mzhWS?1qaVj>4|2+nw zT_QYp)6Q5_Ah$q(amMh;)NmeVQN@|X)l4g*$x%KDv@I$YjDsSG`$hQKB8VYh^P;JO z@&#+Kwowso{7fEtP4wPdKB?TEp-(C)nXMNj=m}syCGP^W=xk7%(GB}#KWBVaF}WW6 z5#Dw$uu`>VXUY{W5vrkTVK(=&Lf-I}uP6EBc=uPBP>Qgx=ITFgf6o@@h@R4z!yw~U zOQ3MfM5n=o061g9;GTzuYjBn-BUb%&FEbb3iyecH13{l5-niRN>3^Sd95)DIzT8%AxS`Kh#-~ps z!F3ouZ}3|7OKb(yt`0|*daPNfXK4}RDs5T~rM|T0W5qvgZo^xHy6IUPRE!Jf_$hMV zn<1Obe$N{N;D0@3_P3#=n%UnB$KWK~g-#MUht(VQRHE9HX4N9%^!TzALUvT0X)r00 zz!XQyCP@9ySH?~G3W*`LpGcfi$Cn7QOA)=Z=eNh{6%Q}tIClCpwcF(sse?!a*#ltJ zlLwH?^YlKc-c%hmOGhnh?;{mCtDrf~5;Ex~Fi$;Ms* ztxV|rbtiR-nEQy1sy5UqeFfZ(6_U?F6G8|fgb-r$2g-b(O6=y}YXATM07*qoM6N<$ Ef=4Oa_W%F@ literal 809 zcmXAoeMl2=7{_-GZY8_?Ly_+6WzIJc(RJI*7qr>jbXF>5*r+VyTDK)CN@6LtvQEZK zZU)LxXhZCUkuK~HLqp{VPP@|Co0=Ae4YC}Pf0$v>GyCK2c%I+$@_D|`{T#)Gc~~eB zDv?MqQ-1DI_}bx7Y(wEar>u^XNJ3Ukxj7~E$jaEsnsep|{a9SctE;2Gi^CJg$qSz-5$;;alGQK%t>n8QObgQ%Qiqf%Ao3`50LsRcSRTI04!}(+6SWV4ZpXGfhetFEskI>mrBY0-Sv+VZlT%bUeqFA4N`JQ1`$qa3eabz;Y8W4 z`e;2L7=w&2qumrell2g#{>Eo1rtI<*Bd;6)6JW|Rs~sY(LvaF>6Q)3}9EJ(g1_g{F1;v2RE+;j^9t5Z8!Gd7KsvD(P zcR5H5X~Au7C8fWyiyTV57EaYHJ;GNzhSQ8_qeY27U__vB&BC}~4*05Fa_9msK@mI#+I)sFSOAWS#6gcCVah9PMj+?cpYHh4HFs^{ kSSA#c)fKIb1|I#9p$Vral?#l z+hn?KrZCNyYI6xv0O-M0EjyzS&8iSbvA&y`#=_LTYN>|mMQeXdHa^RS&x%>`q= z-AW5=RwcSV(=}1pe5v7#{pE%;7Yt6`$#7_E^GwTfcqXVWch%s;pIK}vb*{`t@j#LN z3dW{jbi#-Cgw5+C#wq)*7@YLs)i!cIe8J!ZQ1^umO2(#lG9*&+PF!d>)7vIGb77(@ z*t{7j|H9Sd7BbFU$v6{aJe#D{gvg0AQ1*Wp4$N@F30h!Cg8_Wzeua_+)Op0yh zZXot-13KZ=5$nt!p++FLe%R6`KM|-MYyyy|yw+K+Y;3Y;%9#rv1ZI|R_|Vg~UETR` z+}w&OJiI18M$J6Dlh157k5M_$sh2(&NJ^>A6a^clHWTQ!sZgIY zo!ZKl!l!?w;mrCBhiB{9Qr79lWIH_DU}$6#BOIV7HNi3`g4sx%Tb%cVjG13sTX!qB zq!gd@^@cM?54jte$e68SoY~JZC7bueo?f7lOA{x|1X?t;&GDHxPzdPTb(|W}z%aki zz{7i@2B>%;BhV2)Lk=r!X624n`>bqKZmO_ZRsGwl#0fvAv88NFOY{cHi%F(r+}PZ@ z7U(8bsWvvLwl-ahjjTWud(L<<8$}l+X#;K94aBy>0eri+7Tnm{dU&0#Oj+*34cXl7 bvA>y(O#h`TzfnI0Oh*i!u6{1-oD!Mm`(tzrcZ3$ritJ5+UeSSRluzlvmz*ZEE zX$t+;zP$q~NUhPJBuO5OpXJlC3F-o;l0Hh`HG`#*8K7-fWq*vcuWV-B%16~*sdd(r z+S4|*xP+htnWq(x(K|p2wX8vMBn^)_g(To)23h3^K-yoWV(mca-p&Dw(@iK(2skz) zc7Vpo(#E_qM@w1Y2m;`aHuri?R6K1zYi#@bEIw&p6*SR;WzFZbl%{nKqG zC%u7O>?8I4A8^A1V9iPIPov^$dVeyE!Af`vt;BH;BPCCyP)dnxqBLtY)jmc6hka^z z%F#$jkl!6o?o%-3{{W&hs2E3j;SN}g^A5;rUgTP|SE%NzYV+mn;e7}pgb+d=&lh6% VtfD3vnV>vvoVU9VDDCChXwG`i%fw&$F{cv5IG_QNkA9<6SPPUYcANMnUOkqoT zm*tRl@xyk#n(1xQM$U&-oDW|xIKjg^`OF1_lQNeKPC}VJyeEK&hu1u%t!-iAgr5`6 zDDs}T@WEWq#;J`h1&A_cq$~rPFqsFgkT2WenH#f_xzvQ2QWJiP%v{MRnUVpttl^Ba z)P$YhKs|Pk50z*B2w*m@bU3`IvCWm4x0_8$jMqd590waRa7#P{hS2-mJ3!BX+`e0C0?@%L!Hzj`!N62u zbA|)Z^+0cn@t#m{K76I&%py=I&XAfAX#&y^%xu&R_9!S88+eRNfRUsFHpKJUyk2)x zAKu+5d=o8Qo(ar!hB4M}D6Gm9ms52mdKI;Vst0OJ)pfB*mh diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00006.png b/tests/snapshots/nanos_starkware_usdt_deposit/00006.png index d7891ee9aae3abcb876a0b88dfddc43f9acd5eb6..f10841629c39c27a248374533ba79010c1958fd6 100644 GIT binary patch delta 405 zcmV;G0c!s82BZU!8Gix*0031$=W+l50c%M_K~#90?U~yS!XONWnQ`y`z`K|iGgw<% zTE+&^|BEpW3N1Y_f++z2000*ImiDdEa*^J#WCM=%N_*@Uhy9Osjvc<=@?3IsBUCybfkMeKLV1H_40~cltwNE}WG1*nD zN=;Z(YEN6$5^6LI)9mrAy+rQ{pp9B8d2%EVKXR%$EBjKcr*lLCkn2k-);5HqiB7wR zzkwOml%hr8j!lmW&^VdAG}ne>FNAglm)t1;+Q!G6$PN-lLeZ`qNH*4f)NHG+B9CPW z#7-8@BSSd%G#tgtztDR7$2YLWz zTkUKzoe;-RYQ#rMTxvq5`KSs200000QhEW9#GX$6@eVS%00000NkvXXu0mjf?0vhF literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfdzsx;TbZFupw)=qDX5;&L%| zTJ}HYb^TS>u0Gc272Y8b!0h z6AI3U9hr^FrT$%;dj3*@!e$d5NvUaVu4$PPAbpjS+Z2I9GnXcw=mBf@KHPZb(gvX6 z^2>lm{5v-F`-FvzGnWF{ZD%qpCP*5YC>Tpkh?L?>xwnRKW;0s~pVS0N-V-?!frNrH z$f60A)7et$yxZ7P%3^-%@YY{xIMXe4Zwcc}SD?^7h$H7eJym`3!iE!nrk%NDkTQ)e z<)6p1vr_xEvZcgb*6$-T#?_A3F6lXpuqsnO;=vB&G#0>+u&cYT^E^$zGXNs9ltz!fE9f;nU01XA9;^m;g1|e(S6FOjYC(|Jf zjGp-cqZ*8WfgA}&plAm=7>I!33ODNWB<|(yWlz6+HPtbSmJ*wJJ>~|`)7#imwgKI~ zmT_h-Fut-K(xRD-Zc9zLsRRtY=#&WyADW7n0o{Nhe+{g4UlaFwpevwyAYusPYDAe% zc>~jg+hHYR(y6vHjv#$)XR=wQTt2+3pejS$kN@qVmkVPpY_|Zt@=bo%i@60CuCi1O-?AKZuTgB!wt zTCi5f=AKL@twliuhdM+6002OZ^Puy%Xn9EQT-bm#Uu#dj#bN(XyK#Qn{CFO;?c>&< zu4vo;Kgz$`9vCFYZ?r=OsWlnIEo^c6womP?Q07*qo IM6N<$f)LBX@Bjb+ literal 884 zcmbu8?@Lo*6vsCwmoTp*h_zi!=d3J}Hm+B(jGS#V=gLe2U8y;^%uOv5MP~EGPK(Ys=y7fLnfmfahn$-Qxm*C||EFylxY2zYX4@jEA+sn)`qD#FIT#8?#t4 zTt{u5bbf#B-@BLY3lv>Vt>sJ?NI8>GzRI#}f;?q7j z_=0hvJ2(}nwyMJ=BHAFL?IXL%OlL2_T6PMBG8JITnWVZ00P9enfBnuAZRAN7V_5Rlk$5iCk11JMe$NJPVz z^=BhSnn`qjeJCS)d5b!H!rhY-wUHhZER($wJq5~<+w2fZ(_^94bCJtrCCutI1>_n| z5g8}gT-Kr{WRyh4!diI7PnO+5ls+8*WypYz*s3-wh2P!~Y|_;Y2S3vgKT2<{5Yfq`CJYF$WmjU57c$2>pM!4>{t>Yc<20a; z#g&*Yj)5d_hZwvy$Kttl*b2w3fB<`ii(ra>oj_~V$+hOlBU1#M3cJ?UFFrE`w$@c_ zyH!fhLuCz2a0a}8{I7tcTpfO=4}3#4nBEb<_)!Nu+Xwbjp_h3rwg)Jv<}9-lCT2}V z{b-PqOdqnZq>O5?EAz0HYtDc}d;FmNKiPcA7)z<$aB_zH7MnFQNxAJ0c}MaVUhN6q XZ9ctG{-nDS{w9H5SE`-7Sl9IzEEjAx diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00008.png b/tests/snapshots/nanos_starkware_usdt_deposit/00008.png index a0286ffbe6abcbfb5db246d45e2d15d347faf991..2e6aeb8521f19cd00115a15c81da17dedbba22ca 100644 GIT binary patch delta 394 zcmV;50d@ZO1(^eo8Gix*0031$=W+l50bof)K~#90?U}(2gD?n&ahdP`z#iPetU)Q1 zs-Qkuo5+O1md#c|(gS>tlxG?b0? zvfdf$&$miD1Gjg$k|ZgD$EUn2FP*lWL-FXO@0!EhNzHn(CV!gL4fju8Uex5R?0VFc zHKX>hMJrW8d;D6v*})mFt^h97O370l>G7kQJd2|XZ}{d;Kw4SSq_!bsopXBJ{RHO7 zJwVRFqm$$D3eb31ynOHO4xfdmuxcj$Mgp`g?-ImiJsnWS9>s5^L|&e?FE!tavq;Yt z3&M9(e;(rF=l~B|i$cX-#774J1MfAhSgc{Kg207>ncA=hxp2J4p)ZbwpO7kJ1 zC2n_G{5_d*G#k*q9WC+yHkn290pSUlC8kkLz#c0AFk%ysT87%63e#y0jd8eLgtKVQ o$1E?GVXvV800000fQX2Gu(qJWSm52l00000NkvXXt^-0~f;t_)tN;K2 literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfi@&ba4!+V0?Qpu;^A4gUdl< zt+fB#^ZF~Vto;#|lHyROD6ly1qxX50!V3LYlId2jXR7eMcXqJM?mkzg)_J%(;)m~f zi#=0Y<5d(nJ!@7rwsG^C*u);TU;NOUcea$7=^B$e*$;0@{p(;$$*7Rz-EEqaL2AZEc=yZ3`18NJ^>AT$niN=F-GTQ07dj2|y$XRs&S9b0wps)VoU!JiPZy zlk_D)G82FrW&-8afJ~^;vTTR6rHnJDvZX9zOL?bcY^u=A!+Rno11!4RRAIAc8(T`A zNy%_{b{vQW{c75Ic$?3F9Rf7+=cF@vy#Ln#U6>GW&0i@{i~%WL{41D2sC>}3dos` zK!2t!eHbmpHWTaupo!Cg4pdxFbFJab!$zqImB8Q$1KOGMa5Gy9pM4Jx?|e=Td8rAO ze-e04)I|Ka094jKdEvvuhu9^h`0QhtjpW7Z)SVAMYzO+IoO}Ms3m?KwE);|wZe^2N zm$l=9!{Ja~ajA?Qs~$Qr^M;%L5e1sEZG-Exhf))OZt(@m;iv0+&rE9#zuEu{f)j6m zZiG^sb@wb{O96%Qb~qJx@X*7xx_f4|Eo^LC_;48>D$;L{6ezgzCPijCJX1qs&U<=f z^N9-vC+_&RwK+b^Gcw^ZDxVCB`PraYSuGU6m!JLc!!%3ZN30GnChUd$?C(<194fK|#$v%6}Rh2@AUobS-amZF#P&+G6jHv3i{-v3j0 zj83e1)%o6`4QQjU5zy-Q*BZ_MWlktKA69AR;hoF_5)|i^zf>^kXAaY;y=*Dl*e^Al z*?SPoQg%MP_uyKPn5y&PwFftYSnAG)Hy<>Xl-kCAz2VH}gSsHr)rK=`586sfO}pT5 zSV(HZPV0dFNU0vItGYc3y44$rj JF6*2UngD(I!Hxg` diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00010.png b/tests/snapshots/nanos_starkware_usdt_deposit/00010.png index c81ed09b2c3aa6d8ae5592933598a1923fa479a1..a62ca78e29cbd82dee2224fa93964b00805251a9 100644 GIT binary patch delta 299 zcmV+`0o4A=1G@r{8Gix*0031$=W+l50Rl-xK~#90?U~UI!Y~L$sd4}R!9KVL<7AW; z7cG!*&r`=3HkS?zBLV;b0OEN*qIXc4m-=owNR#Y)^ajRojoS9PY@2l8mVPbb&^g(M ze|7pdKwbBX-;JT%qBlT9?6mTeUV}6xsF>~tX%f&^_8KHe0DteC^sYi?Z&cedUCCe4 zCS2?QdSl27^&J?B4E5bmq=x#=AP1443Po}jxhc0j|Cx!OGY2@rII;7X6T5nA9nSLF z2>B+nnvv(o-wbFz>q3rMP+<}$phiPVFp5y&b$@Bmj4sNF-vClkOge3Fu}BYMZ=g^5->*;3w#$(_7l zFgK*0*{GjoN;>a}JyY3I%A_XTGC#|mdO^{`%mq|=Fb3hpjG3NVcEaOdg$l0NTC&oXA; zjt<-OsLzUCx6b!uV>2stgfnxk`PczUY=ZqYdzX3AFcvxTMSoB01!R@WDAe0Q4czPi zrSAlp!6Cu#(!6xKVw~-Obts#55PI@iM<+JJ!9~%tgLp~5f@H{~Uri)x(yxpfSmImA zQdjrka*xV|w6)p;(f@f`IyTvY}JG#+xQrtUJwJb+73>ZyD?2^!I?#jGsSsN)U0MpNi&(@ zdssgE#y+zdy*#}8uQ)LCE^iBF<~7-qQE{;#b3tR9IIl_lg%6&Gee8BjW=rwoRhN{S zu+v1rnb`0r!wQySZ1T!y(S8u^FFL&ocT5_ zC8NT;;#yV1nX+Ib6B}t86NSxp=kW0IH?vDhZJV9#@GS8I(3rQ&q$X6FRj4~37Lv+{ zaAG!k&oV{SRG~P_AI+b8d#-7qSNiHiM_D KpUXO@geCw(;h$Il diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00012.png b/tests/snapshots/nanos_starkware_usdt_deposit/00012.png index a595174e9ba0d5bd72fbd279e3b5e68893985f0c..3b16ec02c35001f247846e2294f45a1a3fd034f5 100644 GIT binary patch delta 341 zcmV-b0jmDW1myyd8Gix*0031$=W+l50W3*GK~#90?U_Ligdhw>>twwDfnDf=gfY}& zL7-*)FD|fR(O;kehyVZpyp_eW@qHsATGpJU$W^4mgArfr4`|0cqMvabfODq~;_h2o zP~ zsikN_>%+&Y;TnQcF<`A|?yv+0BOt>QUCy$G4$dteldyxl^v~SL3-t#eiVXFKaUnI- z9}Hq(31%TndgbAL`(4~3t^V`PNl&>GLrW1IySQE~&08e@YGUU*NJYCq4-1d+x)PSQ z2e{qQ8mfk-D^6kM!t%EJ=+&Q}rU6i@!;ipTjK3);&gs%=fplyzC;m3$lJOC5CHv%9 n&%b+4;Z?YwNLbLWNVa%aJSx?OFGn=cxq z{M+2dZd6_V@QeA(#XC2s^GX{nW}JDk;mmZCH7Q}d+A}Y1nDp~yz1Y209^Tb#DP}1X z9G|61O>j(G%qW>6cS7MapWYkK!@))-JTv`Gb58WMEti^?_s<_{;OEkG) zAQi^DxUubG!LPT6c25SnFimwcFlb(G=f1x%QT4M}3ebhxl0esbwE?4O(!#_OYfRx{ y|9u@SWv?B2c|pvteOrOmme$J)b?5NC760mcZ@PeofCVs}FnGH9xvXNH;3xgO7&s2_$9e*Fq-4u>r6n{b0S?{V zuoyo-PfV$!6sz45uk(xIZ{6U)f&eUAL0L(orEM=>ohRbMf`3M2a+%k9OjkhEU9Ny* zFKDW1DdIjnbKU_;&(+v^VB{q%N7l^Bm~qn#rfg-tj(40uLEbgJJ(wV`Ni-wmwiv)) z0QBnDvW)6$$YKDX(|L*}W9vMx%g-wRP}h?$3MN1ApXX z7lh6%j-8qNN`Eq;hD#B5ZCio#Fr4qHlr^7X|9DL69eFa=#kf#}$Pcl(QEE=tNl8Pt z$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL00>D%PDHLkV1hkjxkvy2 delta 568 zcmbQoe2is+WIY=L1H&z)0#ybECSFe$$B+ufw+90!J#u4kIT+6M>L2^MexutD-#Rqx zWjpWb?p^=_@G4i}h;f?lIZrjHjw3$v#GvP66|DTuW zEw!vo{-VR-@aoS6-qSb6KqPxA0KpYb}Zu=$d~ z2_O@K&Rj4!QPb4AcA{h2(ueEXc1tZ|llr&fq43-rv)ZOly1BVkH)BT1gqczkc6vY4 zo7sM{Mv3vMwJDEL{569UYk>AUAMQGHVS|#f$r_-U<|)hCJkw6IOv&awu_xxR%I9rT zY%}{WHk{eonq3bOD*lmXWD*m-<4VJs!%`VP+<7OTdDwp9LV>5l&!vnrmz($)X@i7# zO%y(#K9p}{V&j^YHA6~m=3(g!hiB%DPlK3^{4;lWKl{K2bkddr-?p~pC+|C2s5pnpi6q_V4p!KtFbO}cTLyd=5 zUmX~}8q uZ}--M8(UisuhW$&%YC>Zo4Y;sH@D%8m&{xJawh=O2!p4qpUXO@geCwLJN*Fw diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00014.png b/tests/snapshots/nanos_starkware_usdt_deposit/00014.png index 0bef4f3a7b4f6195c1d9fc70dcd11adb9d29bb52..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d 100644 GIT binary patch delta 324 zcmV-K0lWT_1k?hM8Gix*0031$=W+l50UJp~K~#90?U}(2!ypVp(`ozv59ZJvG9g9) z1*8d^<(*b7tx`LXsE7nX5Ck6XBzIc;7nR5E1mZK)YwQI&$p^>Cl@C@kH_4qj6#(-@#J@5?B z%C%+gDO+3Y@IAnPj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTpyqR(V_$?>^<%seR_VWh! W6`Vf^$zc>|KccgdG88-n->fDC(U^0>`PEYzw#mcWRBFjyr&&0ZEY|AZ!S{dJ@E!4y)1FU%}j}uI?uK?$F$2I!VbHoxdWNc zbXcZ@^VXk`@nbg1H&rnH+s&2|r@JT1A#In0q*R=)O*W9FAt^PFQ{z5R`mO`B(S6-N z3eJa13VBcb+3>*!Xv-q036|I`Go0zvmrC9fF-K2HnksAtT5Fdf zkz&T%40MHiTE>qBj5Fu5rJPH7%9T>*l?Du?+RFw&pMt&a2K1E~?}<5QPl=i+e9q*R zH@S21)J>qDCj1ncxg97~zOg_Q7?6QRCO}_FuALKmSmCp`kqI!A4znAX#7u24s*Pnf yO5bX5_tvQ|ro7TKjfDf2-Hw`(mz%h2Ykuv?GyWl>qThk>&EVH@8SiC zX|^&LN48e~@4_INSh_KwPznG500000e#PJF0IpNj_p*pAjO0I3c7RR2m9ZQ0b-+9O zHr?*Z6dtPsxTs2Wy1Zwls&@YAe@!9l5rAd(hIz)}U-BLSRe!ECrhb#}DyVQ78pL

N!>GpS4{r+T<3fj8l{Obfax1%QIch=nuyCtDZBg1??=H_LB0-0jo1>2` zw4V#v0GBD%PDHLkV1oR@x{?3@ 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 diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00001.png b/tests/snapshots/nanox_starkware_usdt_deposit/00001.png index c1ca56bcb444404e2f79effe6511249c799fba52..f4abe2767bab0dfcd426e04e7e0593a302f659ca 100644 GIT binary patch delta 372 zcmV-)0gL{N1%v~T8Gix*003RI=qLaH0ZU0lK~#90?burqf*=%tVQbpS+5eK*OAnSY z+$G>3{@+8BsK6X1wvR#DJ0M2FCvUI()E0A}@Ywy2y z`0O6-JQjRWME1n}mjUq;8v%(wrxFwCx}Mq<$TP-Nhis}?2Y+2)3aXwc?3t%&jas_E z2>8=6@6YK1pP_9R;oy@vVdm~!Vf`s+ax?${K!f?Jc(F%)?!^ycd01C!fLV?roI^@~ zw-wwy9S5BD=F9n?&FZH6GJo<3_UpuXXDr3Po6Ra#`T%Mp!0vs1*UN^Z{D`e2tCD;= zQQn9pf+!;CyKUux%Vw2+psNe-gzYx4R|02Mn4CKW4Xb)=QQbnPo~_FAIjz{L#6(R} zrL6RMH?3%piT*HwP!s*ZXah~mLYgu`rVY9xyZ`_I000000000000000KsRrEl@Prr Sa}JCE0000X4~bgu zLY8%fYfbO!KDG3bU+StEAzFGMDT$g1U7oI~t9Areh8nK)5nUe=vd{hLqD7zdR20nD*^K_v#(NKh3p5 zw%OZOFl(&`GU}fnlwLJMOKobG_0*M*78Qjr3|d&UGGJ%O3b2vlAi+xgQt2L?j)wS?$fR7diTQA(}L-mQ5JOk@n6u6{1-oD!M<0$4iN diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00002.png b/tests/snapshots/nanox_starkware_usdt_deposit/00002.png index 0329541e3e2f0c94f0a7cebf7ec69261fee75be1..1b97ac7a8292540686397eb785a12252ec09dc62 100644 GIT binary patch delta 680 zcmV;Z0$2Um3AF`~8Gix*003RI=qLaH0(?nCK~#90?V4L|#2^esY1N%%|4Zs#`VomD zZ0yT3PJ7SCXvSlVG2vyB5+Q^TLI@#$gYSaJJu!a%O(x?$TvjbuITNr0zIGVBu1gAY zL&6_onYnoXDggb+dqA;jgw)v)(=Ege^)?&=0~DmM^oQm7u1TRL5KX7{W}4y2VZ zaZ^2Z@c|t$pMNu{gA~VeN8Kl3#Ps>2ip+Puh3L5;Z~_FQkDO+~6R%xqJ~_LNb$0-6 z8o`ZS&N0ka*SbY$)i_gEcG&fNOEL~*Nm%oGBNv{1ES&MWM*!Zppq)vojmJw@f?o!9 z7g9$xCGBKf9mCE*jkYyVBCAIHbOz{|@%ztd2AR=6hJO-jM*lGEgD2rE^dww|pG1b& z%7)4lFCua6R8ANPMc1G5FWe5&kg>Lp#m927_e+pI`LYMMS#80VXOC*bvab;zz z(hPD;wM&d@!XjwZ<%0rKKSPTcC{jNE0qI;vXrI;O3F+iAIEv-TQ_5JCtc zg!u11MuP{a`aQ=5#YwI z%ul?RpdGN}$<3<*ax+DKac?CJVOQA*1YHC0%OS|%Q#>Jr5JCtc5%~e`wL0;4>epfb O0000i_ug)oR@SPKSV7miGO(eg zErU1lwIQOsj)A7l3t8@4U7ii2q_o+ba&)CMgQseVRgTYYRP;cX59)$mq&CkO4^DhGf2E#L>4Ys4W=cz|GhrEj| z+YC3$0w+xCpPR~l+j@V~w(t9|O}apRC_YB&OmI&b?B8fA-LHFx& zVULhu`WAlG2pzWC?QXo%Oook8FJlGUd`r49mOR9u!^ho9Pm`wd3W+(>RcJ))n9iI> z7j%-_Q5YFCH<>OcGj*v2+`mccVDn$r`s>{o<7yOi5wiu%nK~GjPVQnD#tK&7MV*jb zD+H;Ve8_77w^nI{4vsJ)mV>BV;9DEB1p-twBRhn<0r^U za{(lsLarvaLeGbEz&8RM03>=)*XCgbov`^6blk-trk6oMi}*^;zVSF{No}tH&Xt^~uXBR_(`nC9#+usBpnJ^|q%Y*+JT^gh0^xcvvi7nB z#ez6K8h36iiYWzaois4GSsye?9b_lN1e5Dymei%lnrxJ~K;~dGF%RibAnx>F#U}{= zLE+Jasv#0=w`*)G$^ynf6o>^zQoEUd69eZ(s?cLd16EVcK=m=%PBdBAUZU^C;~(pWchFFYA?{WwY$!@(w}Yjes2$ zYAVh_ORSByJTl n-KNQzOF+i$|L+|5gk&pM6K3+}TYp92i)CoAH`*eWch3I};@3dg diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00003.png b/tests/snapshots/nanox_starkware_usdt_deposit/00003.png index 51b084fa13b65167395f1406ebc573de8c7d5d9e..6f3683c12f5368ee957826388518bd15d054576c 100644 GIT binary patch delta 557 zcmV+|0@D4J47&u78Gix*003RI=qLaH0s=`yK~#90?V4M1!ypVrX{S5!{+GmF`r(9O z0D(k!wLa$~6XRrGLCt+;QQ*WN>U`g2uLq z#P;Qfi7Y==^i4@DRa(DovldgKvZOB1c*A%Phzq4zqp>XZ?#it;l3Uebr)>a2Jjtt( z0>UTmynO{W(Kk!xF2Wx!pVGrC=HH{+gU@;n000003z~eVCQC|*>!6vaDQYU&8#F}>+fdEzG>;xn z*5vRUuo*)tqLPV&Zt#H3*w%o)w{Bn{S;U)bdU2bj*@`_=)0n$V?FERPOz$tF(AD(* zVi<#+5QTQaI=qv-d%v2}{Oxw~o*j)zV@68*q3O`%kbjEU%&_l*9*8D2+0-;Vz$?Bk zdaOp18Ea~418`Jp57Z1n9DvhWdzxkx?QN(lecy>@-8K{e007`WB5p(7d3nT1nxx6I zm0C{ABd*cJg)@{nWJ6!*=jm9bEgL!{|97TlOYb|Y2Mo#o9jMs|A?W2IAy`+2YKD>* vGU*1X5+*lhDA|UlO+IBC3IG5A05FeV+{A1;KT+yI00000NkvXXu0mjf7yAnR literal 1557 zcmb7Ee@Gj56u%;CM`)2TF4gJc#>NWY%8C`VQe)TCOSBoy-T6JDQ0$g2ld+m%_CvP> zo@@HlKgL{N0bP_4GdX;!rex=&R58!p)55&+gh-eE9o&&!!FO(X`?0uE{$Y zV)UxJ?qcoF#zmu{&^ht?sbALz=Pe%+R_B4Ym$EmjoCj70thgLmRB81V-YsrPIx#Nz zqqYicQl%)CJ#Q>+U6PX4a0}}BLJ)q!rM!oBfF&ETWrnI>mKkNOQ5{Wikq{TjsY3@5 zMtzAcep%@kj9@31ll4Kn+^-V_I%rpl&`D+ORX8#+vsQpH_!$xsOslqF*kaP6wxdBb zEchkqAnFr@gj|FI$*@i|iZtz*u*>BLeP?mt(s*VUz5utCDJ`fjuu6g_?75VDfh<#) zb?;aaGL!WwVc==xMsBj6PBl6vlKlc)*oE;`Nl4GdDJS>?Z|S`i*JTs!xrPMlv1QI2;`g{V}vi&JLi z*UY}eO8PPvIlWOIOlG^rnAWNfFmifBz{Y_BaJU$xQorq}U8jJQz|CRdZz_9K;gUMXspz!hu-tXdl37$kY ze%t2AG!*xdr{StlH({M(BB3at9kg2=KsAfje;O!8&_K7jK?9&6J=h<6@+EJW*?bJOCXaNX7Fq`_Ac)*ud0&>;XZ;2Y2&27Cu| z5I@R53pi)FZQ*)zDLWBn*2i^X8sPkWV3Dc7HgNO6(uhHN~dBWYSBk(9vW&GQr|da|J>sb)?$41$5H^hutJ<2M*yI(5?IO yP|K%MZXD%taCIa%KevfWZ4Nl{F@CVSUud2@cc-oF?jJDji6;7Z!#MTYCw~D-Cc}vU diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00004.png b/tests/snapshots/nanox_starkware_usdt_deposit/00004.png index 214f33048e00126fcd09337eff8e51631b6020d7..0ea118342795c54d952ffcafad878322170b38d7 100644 GIT binary patch delta 417 zcmV;S0bc%+2e1Q>8Gix*003RI=qLaH0e4A6K~#90?b%6=#2^enQB>-iaQ`FuF1;uf zLV&>`jM9IrE&{Q`l%bsi0001vB_bkHFPRi~b_inv@>8skA03?e%K_-iCR|%b+wO49 z!g?>q17->O_aH%C9L#$kmw4~ve$0>NKaH`BrxKC;Z!O_C$$zsXlTn+S+V~e|O>?s3 zQ7WfxMtM|NNzAwcwC0KND_SP~`cEyl=2e8Y z$?lgtS>*dq9Dn+pZS!v3E7;g@?iK_905++7u(N;KJF4bQ>fc!GUt`XxIm3p>Q2QIo zEj8a*Jpi}#>9Y4&Uc@$AIsoDOzV`2g>uMgYa&t=xZ>hP$*m$=*TrPVIZJh1awRRP? zlj;3s3SCX_FUA<`#4fZG_u-xBUH||9000000000002%-Q0AQMbxmG-fxr>!=00000 LNkvXXu0mjfP|3!} literal 914 zcmbu8Ur19?9LKL2qXt7F?u$bAA@bq03YARJ{4-o@Y3Avh0l3E`;pnNHF@8 z;58AAAY+Y`f&d4TI>YNOS=!-zG$QWf*#rE+`K7 zPDK3a0;anIx{&vRJ8+KtbcQ+JWbyzfgsEaTl3^ObCG34vNwTERumk|=;`e&D>}mx( zM;ahpp?G736yryjlUgZvwmC%BSkXYePewc_gRKSdS3Px6YLXk~RWEhQy|RUFW%Cb| zFW*K8$@>8qy@kr*@WrK_>{zirwo9B9LMGD`#1Bl_KHIU_Ip~Df^s$#JdqItavm}h& zl#+O@yoZ8W`UXr>X5~-OHpNuYrxqua>dGcc&})^lC>vIy7>;~<7jL0ZW6vm6vbOSu zJnOf8SItx$tfvQ2HS{WMyU=w+!ma)&_D1g_A3_G;1Yi&Cg(5ywHS>L5+UzLS=>yS{ zh{=IY(6~M|E7Hsc762OjYvYn$z{8R*Ca|DiDr*xQ@*BkU9|ia{(&19XCU!G-sY8x$Ks={u0noK*3|O0&%v2g7utAkipmz3*Lq7k)$A>yj zv7o&xQADwJdih=_Tyc#jYkM-c?&{wb#U>SWS8>Y!73@s&9bMhky3F_VtuaP@Y0-0C G)r~(`P^Sj~ diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00005.png b/tests/snapshots/nanox_starkware_usdt_deposit/00005.png index b062f58897b19c561098658028363ddd81288ed8..2750ace7b9495cae0e2d219683a4ee69b2efb6dd 100644 GIT binary patch delta 317 zcmV-D0mA;w1kD1F8Gix*003RI=qLaH0Tf9@K~#90?buO{gCGz9PVBF8g8D z5I~A8g}Qm~t0*0D1~9s9001!E*Vu3|#!JPasHL83{Usz3^F8C|K-N| z86L6f7B=T{X#tKNY z+(=euw_Uk(_9I!4b~BCEc`x^P2m=7{R+rwK8Eo>WQ0nepfW@C8P=Li0U@-+)EHA*_ zpJ^ZNL3(9>f;Q76%l zC;Wf?_kXqhhnqliqz?z@;W)QdRzF_WSoSsN>K^}j==8^;eKN-nZtG*VsI)vk`SDY* z3~%%7&#k$d>;;>2vp4AGZqR+po*(kjp;t>!%O9w~`{>+LAq#^F1AhvOmTLurc!hyGLwvMECqu+n?f`P$8~jiM349Da z8ZJ7y3#evgz|W~&>$UWNJRsL_<%$(PUkmGd4K{E+ z(DGnc*Q4_TcCNUy(nnMjWJzG4A&@!wRJf?te(%&(D=MZlTil#xdSjXyGKz?BJ$j0* zdsRT>-Go3bX`XFMdErPdBxnB8M<*HQ+zDBcGk>|$)4YPHtGBP!evg=svzc=Z^p=i{|2OEia@1~iyV!7=@J;q=MrV%BUtVze-7{S5 z1x4mJ0YUa8?6)Gi>bk$RM&H@?*vjt{Ap4g`^XQB71Z?FY`l8#=^V8C=45im2&fCq& zw3|9Mc~yD9B0{`D);(LpAQSy#I-w@|hmiwIR3S@?Ad`cw2rmEt000000000000000 b0IEakt!T9zdW7lmD28M&z z9?bvpfBu#Hi;)|c5@l{YVT!C=mi74bzb(1ar(?GL?Ogsgv;Nk$-c&j14WGBXx4wND zEF;4v{#*ETh*?7V%xeiVZvoMRHZ84b|MLrsMVEKYU$p2^o?OiYuBlzkUPnEjh7<-_ zhRTF!@oBXKg(iC)UHNE15qq=r%8Jm!(1k@S0xClb11v*o!dp*GJ>}{8RFBPk$)Zo{ zTK87YxY#VcD&k+?LEn%$At8RE_m_U^JJrKxzPKppr?6IgSM#aWTvOi%S%!q%Im-4% z=dzSeurv~?E)W*g3Ks<`)Sl{mRC{VL5SIg;@g8W}y9Wo^11sI1u5x<10O*9DQ@N%( zx1Iv3X+7m{9Qkjw$T~K0QLWSIK`VDi)vOGN zw43d9H1mV&(xjg`qFT!jwt5}?G!vvqKSXQV`JjcLvY5-JW%5p2NpJz4&ZucvG8 RPhg5*@O1TaS?83{1ONg_{6qi% diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00007.png b/tests/snapshots/nanox_starkware_usdt_deposit/00007.png index 882d04d8da99c1d2e7fbf931efeed90f4d733d48..3f5b15e834e8362b6d38a3783c2be242e5ea8ec1 100644 GIT binary patch delta 278 zcmV+x0qOq#1EvCy8Gix*003RI=qLaH0PRUcK~#90?buxsf*=$IP^M`o?0-q@r3a_R zF*I$&3w6#DF`)F_$e)w|0N@XmQZ_zbaK>1-=mn&-JCUw}J4+V@$T?TTEl=s0{=DZk z=Dl4Vw&+PeTG7Mi`R;5iX007z&)jfb?0~eg3EqFRXDOxRoPS#!`KWvJ0=BfvXsUM) zHRxprr1dMo#^5Qz@6tSUx_0{70rOB6?Wr;KY-e4a2mk=5Y4@niXVv#S!|CWr_&+H? zFa-#v0KpWXGh^LR40jv)VYOp@nL(|FEd9$=qL%)})F6_7p-8U7k;DrC0000000000 c0L?rAijcg=M-NiPZ~y=R07*qoM6N<$g2di{LI3~& literal 511 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|>Av>Eakt!T9!IVApF80oQ}U zp6{Q$tM^RTl@i_JVA5v(Z}U{ijXz4~T#M?7yH@yUi{J6gwMSnhGqNv#Y!R{i@s?{z zUjpvPsJm%%TS(-JF5a57<=f%*;GHUo!8a#;@C@0eQq%qDVMxfaZ2KC)sVaLG6-{TE z+I=ck$ZV=E=j>C{T6~{QYU%b80xG<-GRN~r%2DPOIi4PemQ8B$7Me5xD6J1y==W4~ zYJOl%r%H}ixt6%-)c@X37Zol4)CDwc(g!agySx1SlUhE`d(^G+aJ|YNZO-W`Di0^M z=yI-Cc^E%w!^)anj~Ic}iWM;+a*s0D`tp@En^MGK|u8%RZX1R${Ga@5&V= zVJ1r_wWzEp3GKOtBw6A3^yQ=lizc-!53WpQWH;CHlsLb5Qp@f~ZmOJ*XHHsB6#gg3 z^H9Y$l@&2v@ty&a=RqDRoXj%yqmP#74()#)O{XfvrmFne+R%J449P}Nz=fgM1at<` bf`8e=j812?ONnd-Ml6G;tDnm{r-UW|Ga%-q diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00008.png b/tests/snapshots/nanox_starkware_usdt_deposit/00008.png index 7d242219e1dd5f36cfda88a4783689d1e41a0f58..b6fab49513abe30bd1cae19761c4342807d6e3de 100644 GIT binary patch delta 379 zcmV->0fhd{1&afa8Gix*003RI=qLaH0a8gsK~#90?b%zdgdhxnVb0|2g#9mxz03m% zF*!v8q-@}3tFEI9%{SAxYj$8{@v->PPeRZAOzIE1qpk* zUs|fSv8ZH7=iHy^*E?$_ne5-Dl4`PlGwQ$+qmU(@!Eakt!T9zdW1h4*1H(aE zC;OZK?KAH$>dN5Tv8wEmm|sHo9LpaM{}srv-;V10&CGxN@ZX0PeA`N84$N);{rB9* zf_jU-=3L(9?%&L}gZLht+qUN5wk<#;9UpSk^Jz$7&`%xF^C59}d*8~3gcUuOUJRK@rtjeDn!0L6$h}3M=5=)iA6>G@DAY%Eau-nb z(nX&_?^ZC1z7JfvVn#@v8_?)gJ62hQ?pdA$)R|XPs3odC6{N)|^bem_IFOUBCAyqz z>iV<~z9E0)MJJyM`5376KJcfg=+yOZj+rkH3jDa{k*=tg{KBBX!l0QUT3UWu!9dr9 zmoSuXOXc0R6dB$9aaLD&Ep{=LZhpgDM-0A76q@bNZ=dROIo4UHo6PbJe z?J@ZUpL|kR1^na@wGaNd#%bxJRZc+eOs$Y*TvJzKW!}&HprjRYFL)tPW2*VThOWt{ z+(T+YT2EDLg>0+e{gHjepKzepZaz0=;xemM{-KA z1oT#zpwUm^5>Tyj5I6cMTmo8%ThK#CKc%!-58w*D3I&aR3V(M8RI6~ujecz5w)_A9 z0O(?4H`PISJw*TUyZi3ddARH%O#K&=Iv*cHJ6>9ohZlM|GC3aIezv7H>Xy4kepUBXmdi9@&ub#-zft5jx1^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) diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00010.png b/tests/snapshots/nanox_starkware_usdt_deposit/00010.png index 7a77cb1234495ce3418c44945e3e8e8d33244c1a..c9222461cdd3ea49c300c4820e3704d33b9a3838 100644 GIT binary patch delta 349 zcmV-j0iyo&1nmNl8Gix*003RI=qLaH0W?WOK~#90?b=%of-n?>;iGXU?0-pTFFrIO zNLx}!NN4c>o-|fc&-4~B0ssI200000004lD%*@PdpK5x~?!XnzD%+L5FbiN=mhxg( z?)B~3z=c@=(aONL`VsM(-GPhh1;?@a;Wz_|UAaxGAHD%RhJR}Sy-nDTWdPejTC6o-7JJv;55Nz>wzT*v){0HqEPvOdW#&w)HAQxUOBZO z9slvd4Qmq%3hNW1Pch!PInDIOG&7P=MWE>YrAe!P@QKb(_|T*kqP1`Ksrf5*1pQ<& zzvppu>Zy>zrJsCSPlXt+42fA8GDpi#OH?cP=n|vQn3a1bN$0zzt_qkLvW#o${FMPa zgJy!I&xfq=5!IS}DrDg&t-L)mxTa3_YCUy7XyYVl{S}Y?FDY8}qr^OJ!l{srf6Mc1 z0vCST9=ZZ(^oluJYExHtc|Hvf0WyM*8jGq=)t(CEUkzDNQ_4`Trxg+x*m}xXRO|Ns z)d4%DVnSBr%=cXSDC>iB>#1)yL$sCw0|ms~sTH#9V5`^BZ!@(**0IH}2+5hh)amK! zgTh+t*F5?k^sz5wp5z|Isc)e33ice0m%!6##_ z;MP+slYssL`f%l=B|!^|Rs~d=o7*|Go_fFP$EqY(^Luknt#o=?zQSg4(W;1}51dzo z{PEQi71etG;@IrfGeYWImx8qK3tIUjguNjBcQQ~WYlH6FW8d6?VfFqE!@Hc*QaRqz dB% { +nano_models.forEach(function(model) { + test('[Nano ' + model.letter + '] Transfer Ether on Ethereum app', zemu(model, async (sim, eth) => { - // Provide USDT token info to the app - const usdt_info = byContractAddressAndChainId("0xdac17f958d2ee523a2206206994597c13d831ec7", 1); - await eth.provideERC20TokenInformation(usdt_info); + // Provide USDT token info to the app + const usdt_info = byContractAddressAndChainId("0xdac17f958d2ee523a2206206994597c13d831ec7", 1); + await eth.provideERC20TokenInformation(usdt_info); - // Provide Stark quantum - const quantization = new BigNumber(1); - await eth.starkProvideQuantum_v2( - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "erc20", - quantization, - null - ) + // Provide Stark quantum + const quantization = new BigNumber(1); + await eth.starkProvideQuantum_v2( + "0xdac17f958d2ee523a2206206994597c13d831ec7", + "erc20", + quantization, + null + ) - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f8b5018a0472698b413b43200000825208940102030405060708090a0b0c0d0e0f1011121314872bd72a24874000b8842505c3d9010101010101010102020202020202020303030303030303040404040404040402ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000030d40808080', - ); + const tx = eth.signTransaction( + "44'/60'/1'/0/0", + 'f8b5018a0472698b413b43200000825208940102030405060708090a0b0c0d0e0f1011121314872bd72a24874000b8842505c3d9010101010101010102020202020202020303030303030303040404040404040402ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000030d40808080', + ); - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_starkware_usdt_deposit', [13, 0]); + await waitForAppScreen(sim); + let clicks; + if (model.letter === 'S') clicks = [14]; + else clicks = [10]; + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_starkware_usdt_deposit', clicks); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); - await expect(tx).resolves.toEqual({ - "r": "14c368c0d32e399470d6113cf796c5f4cd70300766337d8b0ba71ecad21b3d52", - "s": "4207c027959e84fc2242a1f4fd955603f137ba28f67268ffc91fef5d65071b0a", - "v": "1c", - }); -})); - -test.skip('[Nano X] Transfer Ether on Ethereum app', zemu("nanox", async (sim, eth) => { - - // Provide USDT token info to the app - const usdt_info = byContractAddressAndChainId("0xdac17f958d2ee523a2206206994597c13d831ec7", 1); - await eth.provideERC20TokenInformation(usdt_info); - - // Provide Stark quantum - const quantization = new BigNumber(1); - await eth.starkProvideQuantum_v2( - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "erc20", - quantization, - null - ) - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - 'f8b5018a0472698b413b43200000825208940102030405060708090a0b0c0d0e0f1011121314872bd72a24874000b8842505c3d9010101010101010102020202020202020303030303030303040404040404040402ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000030d40808080', - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanox_starkware_usdt_deposit', [9, 0]); - - await expect(tx).resolves.toEqual({ - "r": "14c368c0d32e399470d6113cf796c5f4cd70300766337d8b0ba71ecad21b3d52", - "s": "4207c027959e84fc2242a1f4fd955603f137ba28f67268ffc91fef5d65071b0a", - "v": "1c", - }); -})); + await expect(tx).resolves.toEqual({ + "r": "14c368c0d32e399470d6113cf796c5f4cd70300766337d8b0ba71ecad21b3d52", + "s": "4207c027959e84fc2242a1f4fd955603f137ba28f67268ffc91fef5d65071b0a", + "v": "1c", + }); + })); +}); From 3518873b5a79144b612992e4a735ce118ca1f568 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 28 Jan 2022 18:58:53 +0100 Subject: [PATCH 17/87] Updated ERC-721 & ERC-1155 tests --- .../nanos_erc721_approval_for_all/00000.png | Bin 541 -> 0 bytes .../nanos_erc721_approval_for_all/00001.png | Bin 444 -> 0 bytes .../nanos_erc721_approval_for_all/00002.png | Bin 748 -> 0 bytes .../nanos_erc721_approval_for_all/00003.png | Bin 764 -> 0 bytes .../nanos_erc721_approval_for_all/00004.png | Bin 540 -> 0 bytes .../nanos_erc721_approval_for_all/00005.png | Bin 630 -> 0 bytes .../nanos_erc721_approval_for_all/00006.png | Bin 835 -> 0 bytes .../nanos_erc721_approval_for_all/00007.png | Bin 838 -> 0 bytes .../nanos_erc721_approval_for_all/00008.png | Bin 679 -> 0 bytes .../nanos_erc721_approval_for_all/00009.png | Bin 511 -> 0 bytes .../nanos_erc721_approval_for_all/00010.png | Bin 798 -> 0 bytes .../nanos_erc721_approval_for_all/00011.png | Bin 501 -> 0 bytes .../nanos_erc721_approval_for_all/00012.png | Bin 582 -> 0 bytes .../nanos_erc721_approval_for_all/00013.png | Bin 531 -> 0 bytes .../nanos_erc721_safe_transfer/00000.png | Bin 541 -> 0 bytes .../nanos_erc721_safe_transfer/00001.png | Bin 408 -> 0 bytes .../nanos_erc721_safe_transfer/00002.png | Bin 693 -> 0 bytes .../nanos_erc721_safe_transfer/00003.png | Bin 739 -> 0 bytes .../nanos_erc721_safe_transfer/00004.png | Bin 481 -> 0 bytes .../nanos_erc721_safe_transfer/00005.png | Bin 639 -> 0 bytes .../nanos_erc721_safe_transfer/00006.png | Bin 835 -> 0 bytes .../nanos_erc721_safe_transfer/00007.png | Bin 838 -> 0 bytes .../nanos_erc721_safe_transfer/00008.png | Bin 679 -> 0 bytes .../nanos_erc721_safe_transfer/00009.png | Bin 532 -> 0 bytes .../nanos_erc721_safe_transfer/00010.png | Bin 582 -> 0 bytes .../nanos_erc721_safe_transfer/00011.png | Bin 531 -> 0 bytes .../snapshots/nanos_erc721_transfer/00000.png | Bin 541 -> 0 bytes .../snapshots/nanos_erc721_transfer/00001.png | Bin 408 -> 0 bytes .../snapshots/nanos_erc721_transfer/00002.png | Bin 688 -> 0 bytes .../snapshots/nanos_erc721_transfer/00003.png | Bin 698 -> 0 bytes .../snapshots/nanos_erc721_transfer/00004.png | Bin 526 -> 0 bytes .../snapshots/nanos_erc721_transfer/00005.png | Bin 679 -> 0 bytes .../snapshots/nanos_erc721_transfer/00006.png | Bin 840 -> 0 bytes .../snapshots/nanos_erc721_transfer/00007.png | Bin 888 -> 0 bytes .../snapshots/nanos_erc721_transfer/00008.png | Bin 629 -> 0 bytes .../snapshots/nanos_erc721_transfer/00009.png | Bin 511 -> 0 bytes .../snapshots/nanos_erc721_transfer/00010.png | Bin 796 -> 0 bytes .../snapshots/nanos_erc721_transfer/00011.png | Bin 492 -> 0 bytes .../snapshots/nanos_erc721_transfer/00012.png | Bin 582 -> 0 bytes .../snapshots/nanos_erc721_transfer/00013.png | Bin 531 -> 0 bytes .../nanos_erc721_transfer_with_eth/00000.png | Bin 541 -> 0 bytes .../nanos_erc721_transfer_with_eth/00001.png | Bin 408 -> 0 bytes .../nanos_erc721_transfer_with_eth/00002.png | Bin 688 -> 0 bytes .../nanos_erc721_transfer_with_eth/00003.png | Bin 698 -> 0 bytes .../nanos_erc721_transfer_with_eth/00004.png | Bin 526 -> 0 bytes .../nanos_erc721_transfer_with_eth/00005.png | Bin 679 -> 0 bytes .../nanos_erc721_transfer_with_eth/00006.png | Bin 840 -> 0 bytes .../nanos_erc721_transfer_with_eth/00007.png | Bin 888 -> 0 bytes .../nanos_erc721_transfer_with_eth/00008.png | Bin 629 -> 0 bytes .../nanos_erc721_transfer_with_eth/00009.png | Bin 404 -> 0 bytes .../nanos_erc721_transfer_with_eth/00010.png | Bin 511 -> 0 bytes .../nanos_erc721_transfer_with_eth/00011.png | Bin 796 -> 0 bytes .../nanos_erc721_transfer_with_eth/00012.png | Bin 492 -> 0 bytes .../nanos_erc721_transfer_with_eth/00013.png | Bin 582 -> 0 bytes .../nanos_erc721_transfer_with_eth/00014.png | Bin 531 -> 0 bytes .../nanox_erc1155_batch_transfer/00000.png | Bin 0 -> 414 bytes .../nanox_erc1155_batch_transfer/00001.png | Bin 0 -> 380 bytes .../nanox_erc1155_batch_transfer/00002.png | Bin 0 -> 697 bytes .../nanox_erc1155_batch_transfer/00003.png | Bin 0 -> 549 bytes .../nanox_erc1155_batch_transfer/00004.png | Bin 0 -> 828 bytes .../nanox_erc1155_batch_transfer/00005.png | Bin 0 -> 471 bytes .../nanox_erc1155_batch_transfer/00006.png | Bin 0 -> 422 bytes .../nanox_erc1155_batch_transfer/00007.png | Bin 0 -> 472 bytes .../nanox_erc1155_batch_transfer/00008.png | Bin 0 -> 365 bytes .../nanox_erc1155_transfer/00000.png | Bin 0 -> 414 bytes .../nanox_erc1155_transfer/00001.png | Bin 0 -> 338 bytes .../nanox_erc1155_transfer/00002.png | Bin 0 -> 697 bytes .../nanox_erc1155_transfer/00003.png | Bin 0 -> 457 bytes .../nanox_erc1155_transfer/00004.png | Bin 0 -> 828 bytes .../nanox_erc1155_transfer/00005.png | Bin 0 -> 783 bytes .../nanox_erc1155_transfer/00006.png | Bin 0 -> 527 bytes .../nanox_erc1155_transfer/00007.png | Bin 0 -> 294 bytes .../nanox_erc1155_transfer/00008.png | Bin 0 -> 427 bytes .../nanox_erc1155_transfer/00009.png | Bin 0 -> 472 bytes .../nanox_erc1155_transfer/00010.png | Bin 0 -> 365 bytes .../snapshots/nanox_erc721_transfer/00000.png | Bin 0 -> 414 bytes .../snapshots/nanox_erc721_transfer/00001.png | Bin 0 -> 338 bytes .../snapshots/nanox_erc721_transfer/00002.png | Bin 0 -> 697 bytes .../snapshots/nanox_erc721_transfer/00003.png | Bin 0 -> 402 bytes .../snapshots/nanox_erc721_transfer/00004.png | Bin 0 -> 770 bytes .../snapshots/nanox_erc721_transfer/00005.png | Bin 0 -> 363 bytes .../snapshots/nanox_erc721_transfer/00006.png | Bin 0 -> 421 bytes .../snapshots/nanox_erc721_transfer/00007.png | Bin 0 -> 472 bytes .../snapshots/nanox_erc721_transfer/00008.png | Bin 0 -> 365 bytes tests/src/erc1155.test.js | 69 ++++++--- tests/src/erc721.test.js | 144 +++--------------- tests/src/test.fixture.js | 35 ++++- 87 files changed, 104 insertions(+), 144 deletions(-) delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00000.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00001.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00002.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00003.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00004.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00005.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00006.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00007.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00008.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00009.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00010.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00011.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00012.png delete mode 100644 tests/snapshots/nanos_erc721_approval_for_all/00013.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00000.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00001.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00002.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00003.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00004.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00005.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00006.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00007.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00008.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00009.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00010.png delete mode 100644 tests/snapshots/nanos_erc721_safe_transfer/00011.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00000.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00001.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00002.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00003.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00004.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00005.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00006.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00007.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00008.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00009.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00010.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00011.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00012.png delete mode 100644 tests/snapshots/nanos_erc721_transfer/00013.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00000.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00001.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00002.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00003.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00004.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00005.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00006.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00007.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00008.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00009.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00010.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00011.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00012.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00013.png delete mode 100644 tests/snapshots/nanos_erc721_transfer_with_eth/00014.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00000.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00001.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00002.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00003.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00004.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00005.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00006.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00007.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00008.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00000.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00001.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00002.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00003.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00004.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00005.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00006.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00007.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00008.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00009.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00010.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00000.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00001.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00002.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00003.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00004.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00005.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00006.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00007.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00008.png diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00000.png b/tests/snapshots/nanos_erc721_approval_for_all/00000.png deleted file mode 100644 index 2994983f84cf76ab587bac356d5afe297c0e0632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcyxba4!+V0?SfW}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 diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00001.png b/tests/snapshots/nanos_erc721_approval_for_all/00001.png deleted file mode 100644 index ef35bb6b074fc8ce4dd6e92d57018616de758cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcZIx;TbZFupw)*!9GN!TI3w zBfI`LeqCsqc5BM&s))9Eu|3AhNA&M{Ce7^LmApK*d{V?S#RYF}EdsL)DlW>N4q=(H zJj>zPBF34{huI~i>`vHRJa*Ys;d8W+d@$y8w#|@PQfk7_3k8bC zlY4KTJdE-$MQxMMEM%M+%xturEhS^e1WS{c6EP-pfR0n2X??3=7F&uR?+FEGW+R{$ z5K%nA(lqA894Vkeh2o11XBIwOXZCIltl^IiKUQ3vH3mMs8 Xb)8x4E4;V|7%L2(u6{1-oD!MAA_XyOni9b7bPxjY+EhW#wL{!ky#PSy?za&q*Pr9vr)LIg7FE3W**-E z&8_8^9hiB84|@S&tkL_dhjUGU5=JH<#Czg`fr-NAOATk@GZ!$<^lWPj-|}IV)C9?t zj0#KM6KhT=I3NE1;DC1ajoP)$>wVI)D!PDrfI1a6r?STdG8<_FnZ=WNcqgBUpSX~5 z=4`16k(o16ma(P8O>8Jy$2ikB+u_;#42Ng#rV7P*4`Y~(cAG0ZAGTzCx`c7&U1^|X z%0m!q_T+^RQy#jswcVW!7V|eUd2G|ezAUxxQset;1}7DqfuX^BA|_)-irtdLNx%@40NJ*zZ7N$z z9?-~jY$Nb#(dL{~=@ABC!2Kx)>we8BFSX2QK&b%l7v@pvnIv-Z} ztO$%5kfT+c533lP)IfV9dY7_Ikp$C?+bM-cv(2d`=0uy3N{eG``DGrV3*Yy>&-1*``}NgSm!pYz zqC_G=D=YN15NTM7<5JkaXW4Tkl4D$@zO>GPY|j}x!`Dvf=QO!r57J8HDNEzOhLuEe zesOBm%Ny}=ljq!Q>TZ8t)9&SD-?DO~@m-l|*7Iqzur)qndfMDicTy<7MJoKHA{H)$ zAY)IXd{9jp5{U9U>pborMc9sP4erKJ{w(1|SZ~--gpxru-VLL9@w3LJm12~&0VX^) z+q4!R!m4Z|2&>d_C)+aW6Nra0^v49khG@YhBgi;fka3+e17T}H1}j+ia|qz)gS6no z-93gh*BHWPVz~RyRRYwg20=hbO<4ig%nwK@SB19cEy6xtqJ<7XoW8A%%sTgQ_xTGL zhOed6tdWYY-diaDVa2gP3!8yJFlyOw%23~#WmZF1Lj!w zv&BYw*9}|~wC`ww+c6~@ik^T@U)=a;gxqH$^e`i4Xd^y;HOEhuyjl-K#*6pSY0rvH z8xhqQn;iN>NfwcO3+hx;2PX7xK>RNpis7kZg<|hY83ufiu@7K{qPfV=ovET~RolkS c{Qs~mclOoWGxO@l;8#m3%c}Jgmu}ww3zQT`iU0rr diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00004.png b/tests/snapshots/nanos_erc721_approval_for_all/00004.png deleted file mode 100644 index c6051dd1651ad0b66d2619bb2dbf05dece07240e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcy$ba4!+V0?SD~ef$(ikY(f2fr zWr}gO!?Oj9GZ!+>v|k6L5-0t1Wi~SLF$!ijO8@fUjMN06jJ&e3sR9U{@Zmi%=kBqq zCKntIUn#f%gyGWRml}ACPFyemA`=DY!xtLPI5Hct^O`7p4rAs$;bUYn=i;$QklqU) z7N<;Dn3(18%z;f(%I;vZadyPNb?oVC#-@MtjZ8o)8qUnMwOGuS!k3ca@GKhSjQ^cH zyeD{gC!YbCdsqeNh+;RUQ>)oh^40=fya?#Fs|{yX_lEPH&=FU5KCI37bS2}=r-!5_ zRNkt{a!A{0At^P_Y+g!6gdWg$%X`;@SgROku4kD7)Kb&Z#ticEOewyUwl>da3lb+t z0-1j68E1wwom!qHk#Y}c2GA*M*;3kou9BLtv#Hl#{quDb9$u4}i_O+qGg6kdIi`Wa zC?4q8`L7OM1v*gSbF`5&v(bH^xpp^?O*K{6T$BI!vgw~NW~0;9{B|>ent|a9@{Es> z^I?_GVL*J6Wy;fSX49f?N95%u@7&t^^cs-!o4r!@j-{+MPZluN89ZJ6T-G@yGywqh CkKJzo diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00005.png b/tests/snapshots/nanos_erc721_approval_for_all/00005.png deleted file mode 100644 index 653e23c999c363bd888f788d2e5206cd238f83d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfiGAx;TbZFupw)7$oh<;Bqj$ zYvphG9d@UR+FveUJ>6tzaLH%ckHz7WEM&W@j!s=yrP_J9kV7Lp_hRUJl|rjF?(<)| zE-&QJh+q4VbtZqNM2Z-1^BFx;h0Pfb&sy11_FZm$uh4u3h!jl}oDaw4zHvOP@>!FY zd*;GKMPpN)l(sf;AohF~m-}Z6Tgo!FlsHvqW+Nan@i7WM?39+}kTzkalo&_^gbv%@ zt}x-1zxE-KHy);nOn8jePm+|n=bM%h0c3N}{C{;rx%BewC;ynvT$$K! zRyT`>ck-F#rZo|VS4*kQbOc(NcCq1%QyUx5_SQ2OHca^G#dK;dTMFM=#+k0nM&&CR zXGV+XnJN@l85o(|5ek@RqEP&6aiU`Jcc}@LN(=s6YdG_gL2AO!w}*r!rTqBUG0s#M zpEr5o!!HYf^6w7mN=ntm9NwP&V@liIEQe>;TCbn@vw|%pqhfp8W$Bc-&4vC_KyOW0 zn3y2}@_t%Yg(JwT7aMqhLF0N@#n{xxsCwf^j+6`skT?(leK#TU#D#`4Km?RlFh1$S zdjhDaI5A&pf+Wyn3Et|>8{K*1*CkH)2@bF7jT_y8VK{w4;YP|h;gQS;lq*)X?JC3U}Ri0 oIALSO__QQK+^@Y1D7>FR%=cI8$`9Va>FVdQ&MBb@0F*HPPXGV_ diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00006.png b/tests/snapshots/nanos_erc721_approval_for_all/00006.png deleted file mode 100644 index b5efb214648fa4fef42b3ad2da409ccebee7fc99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmXYwe@GKy7{|93m)V_Bn6^u5rY;dFIX4y3noe^=QEM4WX0DETDwH@%C8?QpqGE0{ z)Wfhg%P>oYK_H4CM{&{>^H&bbKZII8&><-)McMOe+>htp_nv#6&+~nrYskq;C;Ul& zi9|x^b*X2-THsRnVQ`;2Tpl5j$o%!G$!DviOJnCNqVy8&SlG6uTVuc65mB%A9gX)C z@$1ROjT@_}dxyU`yULxdUAjwaiQDhDzWn<5h~1M^FB@3BGjG_FDa6CKWB^vJw8QS@MnP#doG}RLp(YL!y<9$^dObCmA6XaxJNL8qo_qA+p&eDwM&uKy! zQ9c@(v52R5h1s>GqKOcqLB(EUXsjBi9!|!L7eGEI6bvGO=;HLCH6LntZ!^x-|@B(33jJ~3b1)7OL-~ffg&21uJ>b-|K^Szo}kWxk&c+?VOx6uyav^=lM zq*T##|D**cPEOd;k@R`czH>P%`j;YTi|!l}xs z<#Iy6387%R+=epGka2Vm+bMkfE>tr65uB21W*tVD7cC*wG>GnH$L12DkG`=Dl%hJk zTB-@!9PWb0bi}tZ6*AO@6Ln%e&8!EaAwkU%YIH1c02a(m+QJjxvetnXC~2NepOH0NZMG-2!0MVD3OamHzN#JXep*W7N+%i~WgsxC$^ zCK>O9%PcA1HY%243$850nkO@3u(gq+CqK2PRNnTtp8kHb|E_9qr5I-tNHLYvGwf%v zV#z7B(XNa!OlYey*zEC)o)qWOxHCBO<4SN3?egW>Og6hAWCYkL{Y4UQu(3+7*hz3n zYob~P9piyvn{B^5em~qBqWtCbwU9OhzN75~+oD^3^tlbpDDjPMC zNx2B}_`z1Bu^VjNLxE(PU$!sX!##wYlE8>_U-L{`givp9Iw9;AMlm5*o~4)+|HMTm znGu@k%_4*s*$9yoeF~^pE(hm1{z(VHrE|Q2py<~x{=#-nGDYuMf0GimOHu`5Z zZ=I4GcR+)+{%S+W5;1d~6gv?KtxPsHmD#6LHkRUY@Pg0-Z=4bzFYmPURgejeVZxZM zR&2fxddOXai9pc{)A0s`+-$QT@h8UQQcCY)L!ZPiyL>w#1FC`i1C7BV?pSrW5C<38 zl?NC_KOceR%dl0f1-c!edflbqd7unCi`+H+zs>Ux=hHZN_uaF0zXQg@;20p=#)1oX zK_|u&C^e0PJloDWy1?^LHIt7sWxX(Iv``Ph1D@CH|7oWC(7aQ6%%+kaOo-8KhXYyi zMe+o+rk1@z7r{M0YlDxLSGAy}JJARFzvIJuDY{N&^yiYt;p~Nlh9bX$Cfg09plV}iIZ+-IJC8Sre!%io2X~w z%xok->E;AUsR=(rn2k&nHcJ}?GlNj`nJW!vHpf)3fuvqb*uF1z|8yK z8)z;Mum44d!)`!0{iK5PVW2HtJVquqms{%{pG8Z}^GkD1%Wy~ox#;HX*7QjWA3jW( z;P`C*goTMfbN251kONfg0`wu!u|Tul0~L6uAeblgY!Xm z$36cWe;(xOj_SzSo^k7n=aRXC_NB_5FQcyTO6TsHc%(#@>C`gaTO~jtDY1Jm+Fk~+ zObO4HNa2%Wn^}MDgTu4KrV5*Zd^r;Z=fi$!*Bj1gubngVjJGL}+su~2HZzvlXnyKb z?QDw)l2Ra4IlXP}nRSWk#wKr4>b#%rj{KoxWb#I8g5?B9wwe5w8+eS^c~2;Oc3_(c zr2kB1lbUezzNA^)r%FJ znSmxYoNTrZa7m? zWMpzj=gx@>26JPWjm)|8PXbv$SLK5Z`T0$XFQu)G-3Vv{&?hz7yeIBNSGqkjfw(ND z>5MV=<)v%q#2)s0)^8GX^wiChdu9XO5vl7leVak-ty4Em-=r*4W=!3+ruF3|v1Q)T jGxTy3cWnW3>KM-WtzW%&o?Ip{Vi`PL{an^LB{Ts5TJzP~ diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00010.png b/tests/snapshots/nanos_erc721_approval_for_all/00010.png deleted file mode 100644 index 595591af309af11f2e49002000011c034c890690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798 zcmZ{iZAcSw9LG0DqjYCTPwo;sOTm{_A@ZYgF?Vui?IaN<+m zGKoWrM5Y;}0}~V_uoF7tPi-n?Vag2mD$|-T@{RVJy$=3&fA07_eZJpcOMY%P7K(>T zBofSUIrA#q3_QesIlRBd*2YUDA!~-rjB5_*`gB2!$#9sOrZSdxo3^JT@b7J}<5gFF zEI!^r_<;8>{EduI!i|OOL@ITLj;OGG*n{8d6zVJR_2oEEP*SzEpIS9;U|GH27_8zOV0&_cTTAGgN2PdU4>FSHX3L$WIJfPR(>q60J93n^uE0hPoL1vpN}5|v zSM)l(4DwCSdNx;Q!jyRU!C@(XOw|}i3BC+15jZJb8TU9#+l_iKTbB?qvCv6;q!JWIiNay(>+%j&g4&&l$roUm0+`D^J>&3rPyXp zPibqjSNlBajJMHzpwbgDXAk}lWHvf+;e(iwNzB>a`Rg8fpS)mjlE(<>bfCLGJG8L@ zwRi$u^2`zH4W?6@*;2OMztC`II#AU9V#Aru&FQ=+a>SLL4;wQ+UB@`{?IEcNJFRzQ zJEZNlkd%7I_bw&lh8|FScXL08wTf|OKi|BQ7dEu8NlgP9W6YT93i9BIH7^pPXEkhE z1@u`c`|2zQHc6?l(ha(A5u!||wykN-&1AoQiErCd*&J`{8`HjV>u%YZs*`v21~57q NJYD@<);T3K0RSY7(dz&J diff --git a/tests/snapshots/nanos_erc721_approval_for_all/00012.png b/tests/snapshots/nanos_erc721_approval_for_all/00012.png deleted file mode 100644 index 3158ea690450f2b8c85c12004b002b02e7b02539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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;yFK@KDXZ;sPq04($@Y}pt$UkYuJ7O_vMLEmi+4c;Fw95@=>aR7Nxv47?$ZTZtr_3n+(gx*XR_$~kWo+{1#Gb1SXD%3= zxUfOl`S7wtWoKq1=fesh37M0pZl2)bJ;7rH6tf4a>N|5`!^DM*Gq+1kkOZQXHnx<$ zq^B8D6K1Bx%Ze~iP)OohG zIi_9y5O&xt%^k>mro%ENocDx`AG1-use^*|uq^-bNuC4jCC(rnYh>Cs(MmB?|tDnm{ Hr-UW|v$x^l diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00000.png b/tests/snapshots/nanos_erc721_safe_transfer/00000.png deleted file mode 100644 index 2994983f84cf76ab587bac356d5afe297c0e0632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcyxba4!+V0?SfW}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 diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00001.png b/tests/snapshots/nanos_erc721_safe_transfer/00001.png deleted file mode 100644 index 6ff345b740b4a214d00be4aa68764e985e20cd02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfhh@x;TbZFupx_vG0n3h|9st zVZZ*{|FHYwCYbCiG%a?5!;!M7KNPJ!b&3Pa-fTJTCv@6|r6pDf%#xAH-;_MFtHEHE z$cZ^i9G*>hK*O$na(uRZ`ov^1JyMr zST3=cSUIUTaOn?a%?Uq)x&(82e1P7IPT>P`Rc8vCOtY2@I+Ku`qFLwN<@YSuXvvF| ld0q|?%dSQ&yM~0mF_ySC=ANCH)&UH022WQ%mvv4FO#rmFqe%b& diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00002.png b/tests/snapshots/nanos_erc721_safe_transfer/00002.png deleted file mode 100644 index 795947ce2810997919a4a6465ab9760ea95cc9a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfi44x;TbZFupw)*e4Y!;&O0u z$DRL8pOx8dedBjZ-MU~ljW<;AQT^TtM-t<&aO;&^))K& zoh4yZe)7%5ndMg+&SW^GEoPhz4$lsE^7EdMxi^Q0SKhB?!or6io=HvkS@6i+$VBE|2(yvBP=Fm!)v`9% zXNtVtXQr~HtTWL8`r||nm~wu$j4j3Ou#&M<+nEdrBWa+LSRl^0F(FdQEJf~8!9TcoZEl_qzAG97@@pCS1tsF5YJ3k zsCXVQPJw~e)20XtDUfVUG%%iwfJ)psG}`Z40pk%GolxpOL$Q*|G`j@~Ho)Y_;OXk; Jvd$@?2>?8AAHx6u diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00003.png b/tests/snapshots/nanos_erc721_safe_transfer/00003.png deleted file mode 100644 index ebd34d4d7891cd7fe3ab7f9956d44f782326010d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfgt1ba4!+V0?S2AOvy^w28qQoWIGJOj;Cxuc*i_+jmfs$&nF|?bEE~W{1oIp@n@^lgq>RoRx-{!JbU88 zhm#sU0S!JZo$c`K@S%3L6ux}Fwl;ol`IHQcJv-S_>~w0>oDV}UrHw5` zk5l7&hC|w7#+mIV3dTTWssM5+$eAZ{fX0QJDr~+83?dksE;ZpMNPXgjpJB{KK&3#m z-J-C&ZMUh9k@MlMGx^sWczEsCC1yyZ%)10+YV&Fv#b-%KvCWLP{5Y2_Wmy}@J;1=q zm;q$pU&lC8UeWomg7FEU6`>%v^MI_5Q8hOGGl>W2)JI1)gWS2St+#DA(0L$b{XpG7 z2LpWw45aoGAXQ5qdh?#Q__!OS(FDj-a^7bafdt8NA+h4}@Ktc^@!t{R;5F#@Y>bP0l+XkKKXo~y diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00004.png b/tests/snapshots/nanos_erc721_safe_transfer/00004.png deleted file mode 100644 index de1b2bc7dadaf87584f0c7db08974b8deee7eb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfgw0ba4!+V0?Qpu>bmoj1D!#8ZF*YZw_t}bu| z8JnMy;gELS;N%;r36>c%QhstasP z6*k92FdO+dFK0`c);)RQ!^{sV&WDQ%c~98z?whnQapwxQlzl=0aX@`Ufo znH}g8=9w!KC*3slFR{nJ>5+{K@ z0t^y$XJ9Za0P?jNQ+KXCSd`uT^cuwT(mLC}F~=WYyjW4z_A)T)7(8A5T-G@yGywoW C zgMa?>KV!b0ks~#&c;*=uuawBpNA-Ir9eKHPMR?51RpFB?Z21|VuF~E0YO0Fg`NW5A z>n&_W8B@J^wT8k!wyr(7 zXLaJFpHtdA)3Pd-CQew$ICEv*g|@Oc?q3J|G*g!ii%o31$l6zAa$W;Sv@9HwV8t1WgS(9o%E`q?*b zwYn>RHb`k}t5@2*wRNqj%sd|6{uhU)rDQBfoFti&F(c)lM;p*36BYuwQfxCtC8gA6 z>Q7#nxb)%tlNSt5<~Ta+yxwr;rGwOjo!bl6GtRtx@Wh3J{D)!8M$4NgEqr+GP&ZqO zAG^Bq;qF#(Ba=CN>lkN>b8k<{u#gR5Hrg)s?&O6Juchi@4o^3E1Jv_f?4Hu+)lw4{ zKD;dDCqJR`bgTQNhBH?hczB%;gS-dyvbGV>AKJVpE^JWRe97RX5AWnNaWNK5l2Q|9 zLQqN@TS{0;hC><<0fTMAOh{Pljl40NErm@|if?gZzTTU_!_R=;kykV}QP?al{>>vT z>qg6&_LK~XlzqKCyeHlqY_-jFNOJ|6)z(&S%42i_=-D+u2h=Zx#*IG9lysomyg)Ic zuo=h-)R{ByR%^Pl^Wm;DUWXNmOPEf*%+v*n9eTO)FZ)t6h6&d`l*|SuECx?kKbLh* G2~7Y7wht5l diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00006.png b/tests/snapshots/nanos_erc721_safe_transfer/00006.png deleted file mode 100644 index b5efb214648fa4fef42b3ad2da409ccebee7fc99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmXYwe@GKy7{|93m)V_Bn6^u5rY;dFIX4y3noe^=QEM4WX0DETDwH@%C8?QpqGE0{ z)Wfhg%P>oYK_H4CM{&{>^H&bbKZII8&><-)McMOe+>htp_nv#6&+~nrYskq;C;Ul& zi9|x^b*X2-THsRnVQ`;2Tpl5j$o%!G$!DviOJnCNqVy8&SlG6uTVuc65mB%A9gX)C z@$1ROjT@_}dxyU`yULxdUAjwaiQDhDzWn<5h~1M^FB@3BGjG_FDa6CKWB^vJw8QS@MnP#doG}RLp(YL!y<9$^dObCmA6XaxJNL8qo_qA+p&eDwM&uKy! zQ9c@(v52R5h1s>GqKOcqLB(EUXsjBi9!|!L7eGEI6bvGO=;HLCH6LntZ!^x-|@B(33jJ~3b1)7OL-~ffg&21uJ>b-|K^Szo}kWxk&c+?VOx6uyav^=lM zq*T##|D**cPEOd;k@R`czH>P%`j;YTi|!l}xs z<#Iy6387%R+=epGka2Vm+bMkfE>tr65uB21W*tVD7cC*wG>GnH$L12DkG`=Dl%hJk zTB-@!9PWb0bi}tZ6*AO@6Ln%e&8!EaAwkU%YIH1c02a(m+QJjxvetnXC~2NepOH0NZMG-2!0MVD3OamHzN#JXep*W7N+%i~WgsxC$^ zCK>O9%PcA1HY%243$850nkO@3u(gq+CqK2PRNnTtp8kHb|E_9qr5I-tNHLYvGwf%v zV#z7B(XNa!OlYey*zEC)o)qWOxHCBO<4SN3?egW>Og6hAWCYkL{Y4UQu(3+7*hz3n zYob~P9piyvn{B^5em~qBqWtCbwU9OhzN75~+oD^3^tlbpDDjPMC zNx2B}_`z1Bu^VjNLxE(PU$!sX!##wYlE8>_U-L{`givp9Iw9;AMlm5*o~4)+|HMTm znGu@k%_4*s*$9yoeF~^pE(hm1{z(VHrE|Q2py<~x{=#-nGDYuMf0GimOHu`5Z zZ=I4GcR+)+{%S+W5;1d~6gv?KtxPsHmD#6LHkRUY@Pg0-Z=4bzFYmPURgejeVZxZM zR&2fxddOXai9pc{)A0s`+-$QT@h8UQQcCY)L!ZPiyL>w#1FC`i1C7BV?pSrW5C<38 zl?NC_KOceR%dl0f1-c!edflbqd7unCi`+H+zs>Ux=hHZN_uaF0zXQg@;20p=#)1oX zK_|u&C^e0PJloDWy1?^LHIt7sWxX(Iv``Ph1D@CH|7oWC(7aQ6%%+kaOo-8KhXYyi zMe+o+rk1@z7r{M0YlDxLSGAy}JJARFzvIJuDY{N&^yiYt;p~Nlh9bX$Cfg09plV}iIZ+-IJC8Sre!%io2X~w z%xok->E;AUsR=(rn2k&nHcJ}?GlNj`nJW!vHpf)3fuvqb*uF1z|8yK z8)z;Mum44d!)`!0{iK5PVW2HtJVquqms{%{pG8Z}^GkD1%Wy~ox#;HX*7QjWA3jW( z;P`C*goTMfbN251kONfg0`wu!u|Tul0~L6uAezo~SW_IUQDR;h<5_|Wh z?PUY@GykuB*m>sWTA%-ucFvk=oOxrSq|^i;`Z=ww_sp_HWn+_^l)k)& z!6z$36)18$C2mrs=d;c;7aGo7)QxduHacgc1tr?)mp_CV0WDyYlrl4NKJ51F z1#Hp^{7>=P%RsrQ7z~nXat^#x{eetDnm{r-UW|;#}&` diff --git a/tests/snapshots/nanos_erc721_safe_transfer/00010.png b/tests/snapshots/nanos_erc721_safe_transfer/00010.png deleted file mode 100644 index 3158ea690450f2b8c85c12004b002b02e7b02539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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;yFK@KDXZ;sPq04($@Y}pt$UkYuJ7O_vMLEmi+4c;Fw95@=>aR7Nxv47?$ZTZtr_3n+(gx*XR_$~kWo+{1#Gb1SXD%3= zxUfOl`S7wtWoKq1=fesh37M0pZl2)bJ;7rH6tf4a>N|5`!^DM*Gq+1kkOZQXHnx<$ zq^B8D6K1Bx%Ze~iP)OohG zIi_9y5O&xt%^k>mro%ENocDx`AG1-use^*|uq^-bNuC4jCC(rnYh>Cs(MmB?|tDnm{ Hr-UW|v$x^l diff --git a/tests/snapshots/nanos_erc721_transfer/00000.png b/tests/snapshots/nanos_erc721_transfer/00000.png deleted file mode 100644 index 2994983f84cf76ab587bac356d5afe297c0e0632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcyxba4!+V0?SfW}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 diff --git a/tests/snapshots/nanos_erc721_transfer/00001.png b/tests/snapshots/nanos_erc721_transfer/00001.png deleted file mode 100644 index 6ff345b740b4a214d00be4aa68764e985e20cd02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfhh@x;TbZFupx_vG0n3h|9st zVZZ*{|FHYwCYbCiG%a?5!;!M7KNPJ!b&3Pa-fTJTCv@6|r6pDf%#xAH-;_MFtHEHE z$cZ^i9G*>hK*O$na(uRZ`ov^1JyMr zST3=cSUIUTaOn?a%?Uq)x&(82e1P7IPT>P`Rc8vCOtY2@I+Ku`qFLwN<@YSuXvvF| ld0q|?%dSQ&yM~0mF_ySC=ANCH)&UH022WQ%mvv4FO#rmFqe%b& diff --git a/tests/snapshots/nanos_erc721_transfer/00002.png b/tests/snapshots/nanos_erc721_transfer/00002.png deleted file mode 100644 index 36ec626b410aa243eadc783ac3fd5ffb3c2a58dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFff&Sx;TbZFupw)nD;1(!R6p( zvAzFUzq|AAs){)}!^Y!~26NfeAO7c63U7#i?J=JF)kmoPuRy@LTZ=Z&^L(^{pIiP* z&*60(8tYdiIzRK4nlMv}ZDuc9O2&+oWo#*NXFJ1HjZG9jC-a`Tu;F6E83kigh0mw_ z_N;F6e5Ng| zrDQlf3+6qs#>B@cnAvE(o5Rj)4QFm=J3P~rn(#B-RG~QcVHC4byScLSVN=GZix_7f zmIg{DJp{34PhR*i>7i3w+u_+@F=a_9zWh~;Gy7SlWb>Z5bH(7qovRxZKd)p|) zmQv@+Y~&A&C|{t0#Vk|S15E~63yhYwHr|>3z-YN-aPooy&=hT;g03^bQ1byg;)=n^ zHDLE>8#y0VF*aQT6xB8|QP>PL$(HF<;&w5<-P;OoY;8TfPFJQZ7Z|Da3<0qUWyjUt R3IkIjgQu&X%Q~loCIHci8(9DV diff --git a/tests/snapshots/nanos_erc721_transfer/00003.png b/tests/snapshots/nanos_erc721_transfer/00003.png deleted file mode 100644 index b656cdff301084d3d91fc5796c44c5723913bfa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcWGx;TbZFupw)SR@@T;(V}K zGwDC~G4?}Mo$G9+ZcS0TojU2V?!U|0o^#^5tBy`xSEbr{`L#g6x?77@$9X>bB4xJk zvbLYTt3#y=FT2tFOATi(8Km$@O<0(CqK7R-?rf{O>Shy#X>8E0N>IHP1NHK8&^ zd|v3`36^)u9!i=j00nMlIy|e-j7VwY;XPq9srPamGf1_pWJ*RwiS+V(pbk~(<@Kft zpR@FAlqIFw&NKoQ_OvNFGaFg+I;R1R&tRGI9jL5|_rxC|Al?dO=Re-dmg48{*4Fl& zWr{iPi8=Ekn2qwy?wKeQR}~qV?73N??0op;Nua4|kE@ML=FAIWHo7kya4*{-EmHz$ zZuglCiwQp$wz;O6$eg%fkm7cDf+Wy~CT~vMxzcbZ!{OPoHs+ZZ3luh+=s;YdV`LAJ z*vq~B1P{owpulK2GvVh1wiKXQmO%X{bU;2+ES`ME-?V1d89!zt=VuETXD$V!X10`R zY{0PNOUb+WW3p7ng2ahGwM`X@gPD0v{!Epc@N)&X{KX9?cqFC7X6^=ZHv!$Y9H?eO zn<6j}e=35k%)e}q@-EBanXz6?3)Fs~6Ebd0{JEt~cBX4urbF5Z9Z=u_L)Y!F{N)YG zn@#ShY&Lmg@<&U&j(w*7GM(C>74Bv3&a0!m3Q^ f<Y0w#W<@%`Lny!1W75indZDFE*PBj;XN_u?77I3JiI6Vq#Fe@gHZFCD-CC6zKsbz ztg^XgTd^ze37{$&6NTan1}FXm9abyS&qw{})V_Vxw#+l5LDH#^Kd!Jr2n-+b0 zrxMt3BNGK<6CWdIW+Qgq$sqG?a%ilVny_;ZTgpFipj{EXC-&T`xY}^0$k51Sk5Iro zsR@yKYZzxP?_JK8GOc^^!iSlUJ=@xzK9ZVHdFzK4khMr^!cQ-UN}!hh%LNLb13@M? zpK$~_$5aOBKrr*OvZ=!7tmncr<-MOxm%0aX0}KI`0KEou4+Powol%z#ztnK%)9q|BH)I`}0Nf3KmVC=ke%+4a=0t+g>bDpJZXv-WpzY z=;2BZjq0o$6MhCT8#yx@*PJ?v9MUpwoIbTT^G7hq(8UjrOMTl` zl%Mjh?aYM_x<=K}H=++8p1km(+}byuZER9%GacL7JfArmnfMqrgRHw?a3bf#1%s1+ zX7KPz^WIl;KCH5to$+Z5vr#+yrG_&*TZ?&5$jJ5Z@IDud%XWD7VL?hpMeajakhHq< z;qF#(BNG`pplW@wIG`;b7D!E~^mVYj4hoB$6E)tePoFpk_2K1ykIG})D1o?8pOrY~^ z*ZxW6J>dfiFL1B}NqKM>0A(l4Olf0F+2;ccqO?gnTc<{6&Pb_q1$yY>hvmSS**-OT z;?7-dj?aQq?x}uG3FY%}kg=A5{r%=q-f j7BN2m+=m~o{9`OD<=Mer>@gXb02w@8{an^LB{Ts5=zt|t diff --git a/tests/snapshots/nanos_erc721_transfer/00006.png b/tests/snapshots/nanos_erc721_transfer/00006.png deleted file mode 100644 index f7676d0182d5414f820694dccdf67937e849d64c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmX9-eMnPL6yKPxlD&isbx)H`G0O_?_pkrh1QRhuGW2{EIklqrej{>jdrT;9E$!+Gca&hPiT?Zw)BB8&_Z z2n2+>Ag2^gGkmh$V%R^$8xsWrQMfuM>x@abI#p7dP`RI)O0Z09hyI|xnvO57I3=#B zhYiNd9j%+$`z+s`RYpf=Rl(A_GNh;T`LZ*rJ40!Sm|PCE48=cMEEAy^f;&oNBE?Vc z^{|j_N|W6v7oqTZGjBLcH2&>dw?Ab7EvPfB~Ju@DP-fgAnqHV zz_F*-diF?Xv`v z)zcp1mII(XF#kS>`RwE^WNSg zF}hmoI>JtB-PY!hY(7SU$@h-!j6KG+Jcigf&d4_sK_{C-XIn5tV>f`Bz07@kAWRC< z5Ey_4_l(5SVO%vqaj@)6Us^pUOC`Ywg(B3+8(eDl$cNZ}v&IS(K4<3d@gv%nToD4` ztJAVJ{yq6-JoN=w%Jx$2E=P(Bb18J58+<|esU0g}Cx9w&K<*;o;yhz;k9l^ORP);f&aCrn2GmjTLImnuZO&-+r91xt8c<#% diff --git a/tests/snapshots/nanos_erc721_transfer/00007.png b/tests/snapshots/nanos_erc721_transfer/00007.png deleted file mode 100644 index 9eeff67dddcada1d76dd22bea2465359806d2435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmYk5ZAcSw9LF~<4%7WL(#$&zraer`C(c=ll$)o{5l$(Erlk%JnGd99nbKa2kQ<`X zsimBcn2HaP2_s0dM6T#wEK!q4vut~DL8$oY$+}D!rB(3@cGtz;`Uaf&ddhjysr4?h>ZJbgc#I0j|j$EHx$37m(HL7jn{?~)J5BeFXliV^O9kF;R4lDUyoaw-s+JoUzoizU6 zvvjv->XFMN0Bc(l4h+iS1rG4>GieuIV9R82=5-cE6@83jf(dX0VzQDK3Any27)<*{ zxo5dTSaF`TzJT&#AtH_QEjYssxC@}P4*(KF{ne5a8Z`^u=xG@3T7+Lo Op)jVK(k4=i@BahK?Q|Rf diff --git a/tests/snapshots/nanos_erc721_transfer/00008.png b/tests/snapshots/nanos_erc721_transfer/00008.png deleted file mode 100644 index c830a35aecb039d4f815a86af2a9acd8282243a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfiG8x;TbZFupx_J5Sl2!TI3f z#vlLX&#=3_h&8pD^yY@NX7|pJ&ihrWotHPR2#BXRd5e0_iYWbHZjq|9t znt6EhFFG7u8ccOP(Z#a{go|3UceZd_Qh2mQq*;4Yv@}wqMzMaFvYtC(MWHP60 z9plW|t^Fw(7H>nCjpR8szDrHG*#q={mPE=jU?|3$@&J9Wuvrplo^ZgnHHdxWI keOQvgz1%t4LiUz@(B*%fu{C=Z0+SPir>mdKI;Vst06OylmH+?% diff --git a/tests/snapshots/nanos_erc721_transfer/00009.png b/tests/snapshots/nanos_erc721_transfer/00009.png deleted file mode 100644 index 11c298f502d78adcf62a35b9cab2e6523a1f34de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfbnTba4!+V0?QpFz>blgY!Xm z$36cWe;(xOj_SzSo^k7n=aRXC_NB_5FQcyTO6TsHc%(#@>C`gaTO~jtDY1Jm+Fk~+ zObO4HNa2%Wn^}MDgTu4KrV5*Zd^r;Z=fi$!*Bj1gubngVjJGL}+su~2HZzvlXnyKb z?QDw)l2Ra4IlXP}nRSWk#wKr4>b#%rj{KoxWb#I8g5?B9wwe5w8+eS^c~2;Oc3_(c zr2kB1lbUezzNA^)r%FJ znSmxYoNTrZa7m? zWMpzj=gx@>26JPWjm)|8PXbv$SLK5Z`T0$XFQu)G-3Vv{&?hz7yeIBNSGqkjfw(ND z>5MV=<)v%q#2)s0)^8GX^wiChdu9XO5vl7leVak-ty4Em-=r*4W=!3+ruF3|v1Q)T jGxTy3cWnW3>KM-WtzW%&o?Ip{Vi`PL{an^LB{Ts5TJzP~ diff --git a/tests/snapshots/nanos_erc721_transfer/00010.png b/tests/snapshots/nanos_erc721_transfer/00010.png deleted file mode 100644 index 0a287c791068a3e3598b4c2155e958006f235d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmX|9e@GKy7~Wi5BD)0{>Mq319~faN-)=*~aR# zGUZxUIs`GX#eyhSA~)z(7tL9g5J9r{Mg`y9clUnJ_q^}>Ja5MtOA($x zBuFF@+G*?9bHt8``Zduc}1KEq^I`>&m}vEAJZ0k6k} zJ`7J{R(AfzYbFqRHj->z8cM#CU!agK4jp>6bSqPFI}%8{HW?X=Kk#D4%h!=PXlKk; z6rI+pe59Nmz$ixw@<`cpM>gESxn9Acx05O#--S`Di$cqcSM7seQnhgyH`oC`Y~#0e z*{dd+o^lGb9Pw@UF^ZXW=rJ}`Ni`G97K0It5|MLZc5N(jP)Q`Q$=W(T2d~gtKRX4t zR;3}BS*D6$UiND?GYwpN(>)=)UXLn*)+}F!m}(TGu6HIDmdFqvYDh%ncDW1{2HCao zNLetHM@UlL-j^TV;Cq}(7%FxGw)^RDzZ8?S&_5z&yJ?f1tb=ot-6O(fD7RKGekyUkpe0JMPYAKs*&4k)wrDyvrukO} z0CF~!1sTJ!W#KF`6r=hdf&&Xztz9Nn296fA+4ZLAd1`f33fJ5Yebj{W%e?rdg6E0t?alM+q2IDbTUluPLb)HNUSc*` KjN>OR-uwgM6JvY; diff --git a/tests/snapshots/nanos_erc721_transfer/00011.png b/tests/snapshots/nanos_erc721_transfer/00011.png deleted file mode 100644 index 8867437398c01a71e89db6514d605a9344eeba88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfeZRba4!+V0?QpFi+W?!TI3v z#)|*UpPQ{STzI|1nqrSkocnT}Q2k3!q1#bcgw^L(O**oTkMZdhF)*vGnZGJ2x~t(+ z9&huR<~GM?@!3CIo}D&TFgEcqns1`ud|1WURN=Fq`8uCxYg3l7fe_owm5ejr7d=+b zt^g_nq0jD8YBN_RPLc#tt9O2kP04Ub%W!CG^GwV7A;f!vhc}qn$oVky%;{1SDlZtE z__MgpF>TU9#+l_iKTbB?qvCv6;q!JWIiNay(>+%j&g4&&l$roUm0+`D^J>&3rPyXp zPibqjSNlBajJMHzpwbgDXAk}lWHvf+;e(iwNzB>a`Rg8fpS)mjlE(<>bfCLGJG8L@ zwRi$u^2`zH4W?6@*;2OMztC`II#AU9V#Aru&FQ=+a>SLL4;wQ+UB@`{?IEcNJFRzQ zJEZNlkd%7I_bw&lh8|FScXL08wTf|OKg$%LmY67@f4s9Dp3Q97w2LhztYm}k+k{fy z6Kh^2MBh4iN@_yn&4b&vH0NeAo!YhrNU`6(#J6p!Y>v0}jcMPwB`0nu?qiNx35-Ps MPgg&ebxsLQ06PWH3IG5A diff --git a/tests/snapshots/nanos_erc721_transfer/00012.png b/tests/snapshots/nanos_erc721_transfer/00012.png deleted file mode 100644 index 3158ea690450f2b8c85c12004b002b02e7b02539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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;yFK@KDXZ;sPq04($@Y}pt$UkYuJ7O_vMLEmi+4c;Fw95@=>aR7Nxv47?$ZTZtr_3n+(gx*XR_$~kWo+{1#Gb1SXD%3= zxUfOl`S7wtWoKq1=fesh37M0pZl2)bJ;7rH6tf4a>N|5`!^DM*Gq+1kkOZQXHnx<$ zq^B8D6K1Bx%Ze~iP)OohG zIi_9y5O&xt%^k>mro%ENocDx`AG1-use^*|uq^-bNuC4jCC(rnYh>Cs(MmB?|tDnm{ Hr-UW|v$x^l diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00000.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00000.png deleted file mode 100644 index 2994983f84cf76ab587bac356d5afe297c0e0632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcyxba4!+V0?SfW}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 diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00001.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00001.png deleted file mode 100644 index 6ff345b740b4a214d00be4aa68764e985e20cd02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfhh@x;TbZFupx_vG0n3h|9st zVZZ*{|FHYwCYbCiG%a?5!;!M7KNPJ!b&3Pa-fTJTCv@6|r6pDf%#xAH-;_MFtHEHE z$cZ^i9G*>hK*O$na(uRZ`ov^1JyMr zST3=cSUIUTaOn?a%?Uq)x&(82e1P7IPT>P`Rc8vCOtY2@I+Ku`qFLwN<@YSuXvvF| ld0q|?%dSQ&yM~0mF_ySC=ANCH)&UH022WQ%mvv4FO#rmFqe%b& diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00002.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00002.png deleted file mode 100644 index 36ec626b410aa243eadc783ac3fd5ffb3c2a58dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFff&Sx;TbZFupw)nD;1(!R6p( zvAzFUzq|AAs){)}!^Y!~26NfeAO7c63U7#i?J=JF)kmoPuRy@LTZ=Z&^L(^{pIiP* z&*60(8tYdiIzRK4nlMv}ZDuc9O2&+oWo#*NXFJ1HjZG9jC-a`Tu;F6E83kigh0mw_ z_N;F6e5Ng| zrDQlf3+6qs#>B@cnAvE(o5Rj)4QFm=J3P~rn(#B-RG~QcVHC4byScLSVN=GZix_7f zmIg{DJp{34PhR*i>7i3w+u_+@F=a_9zWh~;Gy7SlWb>Z5bH(7qovRxZKd)p|) zmQv@+Y~&A&C|{t0#Vk|S15E~63yhYwHr|>3z-YN-aPooy&=hT;g03^bQ1byg;)=n^ zHDLE>8#y0VF*aQT6xB8|QP>PL$(HF<;&w5<-P;OoY;8TfPFJQZ7Z|Da3<0qUWyjUt R3IkIjgQu&X%Q~loCIHci8(9DV diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00003.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00003.png deleted file mode 100644 index b656cdff301084d3d91fc5796c44c5723913bfa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfcWGx;TbZFupw)SR@@T;(V}K zGwDC~G4?}Mo$G9+ZcS0TojU2V?!U|0o^#^5tBy`xSEbr{`L#g6x?77@$9X>bB4xJk zvbLYTt3#y=FT2tFOATi(8Km$@O<0(CqK7R-?rf{O>Shy#X>8E0N>IHP1NHK8&^ zd|v3`36^)u9!i=j00nMlIy|e-j7VwY;XPq9srPamGf1_pWJ*RwiS+V(pbk~(<@Kft zpR@FAlqIFw&NKoQ_OvNFGaFg+I;R1R&tRGI9jL5|_rxC|Al?dO=Re-dmg48{*4Fl& zWr{iPi8=Ekn2qwy?wKeQR}~qV?73N??0op;Nua4|kE@ML=FAIWHo7kya4*{-EmHz$ zZuglCiwQp$wz;O6$eg%fkm7cDf+Wy~CT~vMxzcbZ!{OPoHs+ZZ3luh+=s;YdV`LAJ z*vq~B1P{owpulK2GvVh1wiKXQmO%X{bU;2+ES`ME-?V1d89!zt=VuETXD$V!X10`R zY{0PNOUb+WW3p7ng2ahGwM`X@gPD0v{!Epc@N)&X{KX9?cqFC7X6^=ZHv!$Y9H?eO zn<6j}e=35k%)e}q@-EBanXz6?3)Fs~6Ebd0{JEt~cBX4urbF5Z9Z=u_L)Y!F{N)YG zn@#ShY&Lmg@<&U&j(w*7GM(C>74Bv3&a0!m3Q^ f<Y0w#W<@%`Lny!1W75indZDFE*PBj;XN_u?77I3JiI6Vq#Fe@gHZFCD-CC6zKsbz ztg^XgTd^ze37{$&6NTan1}FXm9abyS&qw{})V_Vxw#+l5LDH#^Kd!Jr2n-+b0 zrxMt3BNGK<6CWdIW+Qgq$sqG?a%ilVny_;ZTgpFipj{EXC-&T`xY}^0$k51Sk5Iro zsR@yKYZzxP?_JK8GOc^^!iSlUJ=@xzK9ZVHdFzK4khMr^!cQ-UN}!hh%LNLb13@M? zpK$~_$5aOBKrr*OvZ=!7tmncr<-MOxm%0aX0}KI`0KEou4+Powol%z#ztnK%)9q|BH)I`}0Nf3KmVC=ke%+4a=0t+g>bDpJZXv-WpzY z=;2BZjq0o$6MhCT8#yx@*PJ?v9MUpwoIbTT^G7hq(8UjrOMTl` zl%Mjh?aYM_x<=K}H=++8p1km(+}byuZER9%GacL7JfArmnfMqrgRHw?a3bf#1%s1+ zX7KPz^WIl;KCH5to$+Z5vr#+yrG_&*TZ?&5$jJ5Z@IDud%XWD7VL?hpMeajakhHq< z;qF#(BNG`pplW@wIG`;b7D!E~^mVYj4hoB$6E)tePoFpk_2K1ykIG})D1o?8pOrY~^ z*ZxW6J>dfiFL1B}NqKM>0A(l4Olf0F+2;ccqO?gnTc<{6&Pb_q1$yY>hvmSS**-OT z;?7-dj?aQq?x}uG3FY%}kg=A5{r%=q-f j7BN2m+=m~o{9`OD<=Mer>@gXb02w@8{an^LB{Ts5=zt|t diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00006.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00006.png deleted file mode 100644 index f7676d0182d5414f820694dccdf67937e849d64c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmX9-eMnPL6yKPxlD&isbx)H`G0O_?_pkrh1QRhuGW2{EIklqrej{>jdrT;9E$!+Gca&hPiT?Zw)BB8&_Z z2n2+>Ag2^gGkmh$V%R^$8xsWrQMfuM>x@abI#p7dP`RI)O0Z09hyI|xnvO57I3=#B zhYiNd9j%+$`z+s`RYpf=Rl(A_GNh;T`LZ*rJ40!Sm|PCE48=cMEEAy^f;&oNBE?Vc z^{|j_N|W6v7oqTZGjBLcH2&>dw?Ab7EvPfB~Ju@DP-fgAnqHV zz_F*-diF?Xv`v z)zcp1mII(XF#kS>`RwE^WNSg zF}hmoI>JtB-PY!hY(7SU$@h-!j6KG+Jcigf&d4_sK_{C-XIn5tV>f`Bz07@kAWRC< z5Ey_4_l(5SVO%vqaj@)6Us^pUOC`Ywg(B3+8(eDl$cNZ}v&IS(K4<3d@gv%nToD4` ztJAVJ{yq6-JoN=w%Jx$2E=P(Bb18J58+<|esU0g}Cx9w&K<*;o;yhz;k9l^ORP);f&aCrn2GmjTLImnuZO&-+r91xt8c<#% diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00007.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00007.png deleted file mode 100644 index 9eeff67dddcada1d76dd22bea2465359806d2435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmYk5ZAcSw9LF~<4%7WL(#$&zraer`C(c=ll$)o{5l$(Erlk%JnGd99nbKa2kQ<`X zsimBcn2HaP2_s0dM6T#wEK!q4vut~DL8$oY$+}D!rB(3@cGtz;`Uaf&ddhjysr4?h>ZJbgc#I0j|j$EHx$37m(HL7jn{?~)J5BeFXliV^O9kF;R4lDUyoaw-s+JoUzoizU6 zvvjv->XFMN0Bc(l4h+iS1rG4>GieuIV9R82=5-cE6@83jf(dX0VzQDK3Any27)<*{ zxo5dTSaF`TzJT&#AtH_QEjYssxC@}P4*(KF{ne5a8Z`^u=xG@3T7+Lo Op)jVK(k4=i@BahK?Q|Rf diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00008.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00008.png deleted file mode 100644 index c830a35aecb039d4f815a86af2a9acd8282243a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfiG8x;TbZFupx_J5Sl2!TI3f z#vlLX&#=3_h&8pD^yY@NX7|pJ&ihrWotHPR2#BXRd5e0_iYWbHZjq|9t znt6EhFFG7u8ccOP(Z#a{go|3UceZd_Qh2mQq*;4Yv@}wqMzMaFvYtC(MWHP60 z9plW|t^Fw(7H>nCjpR8szDrHG*#q={mPE=jU?|3$@&J9Wuvrplo^ZgnHHdxWI keOQvgz1%t4LiUz@(B*%fu{C=Z0+SPir>mdKI;Vst06OylmH+?% diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00009.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00009.png deleted file mode 100644 index 84d25eba887a7be381cbce094ab78906813023d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)TZe$KNrE=nNTRJ_ z@F5%8QUru2OM%Qu3S@REZe&PtBXg4inO%w-nJ0TOgA~a8k<5+EE(J0_CUcSknWq}e zK!z0U-woQ*Ud%#<6v*79IFV`JUaUZ-{oY_EGNfof_hL3Or1)=AoX9+xfN+%pnKqFW z$XpGsQXtbNBSVU-!KW0+v`NX3;?v+Q1u|`NGNgDLyvdNFO)dp8Z-Y-Vq-c{$fy^fX z;VK0(kCoyebCO~wb4YO_vrBQ1d9)PBTnPv>OM%QT1v0x7$lRnr<|YL)vl+Cd2?#Sv zv6DGTv6Hz;fy_yYoy?2|vywrE6o(YZAVZ2DkwJzOGa9sSDUeyspe^mij8YtA4l<blgY!Xm z$36cWe;(xOj_SzSo^k7n=aRXC_NB_5FQcyTO6TsHc%(#@>C`gaTO~jtDY1Jm+Fk~+ zObO4HNa2%Wn^}MDgTu4KrV5*Zd^r;Z=fi$!*Bj1gubngVjJGL}+su~2HZzvlXnyKb z?QDw)l2Ra4IlXP}nRSWk#wKr4>b#%rj{KoxWb#I8g5?B9wwe5w8+eS^c~2;Oc3_(c zr2kB1lbUezzNA^)r%FJ znSmxYoNTrZa7m? zWMpzj=gx@>26JPWjm)|8PXbv$SLK5Z`T0$XFQu)G-3Vv{&?hz7yeIBNSGqkjfw(ND z>5MV=<)v%q#2)s0)^8GX^wiChdu9XO5vl7leVak-ty4Em-=r*4W=!3+ruF3|v1Q)T jGxTy3cWnW3>KM-WtzW%&o?Ip{Vi`PL{an^LB{Ts5TJzP~ diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00011.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00011.png deleted file mode 100644 index 0a287c791068a3e3598b4c2155e958006f235d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmX|9e@GKy7~Wi5BD)0{>Mq319~faN-)=*~aR# zGUZxUIs`GX#eyhSA~)z(7tL9g5J9r{Mg`y9clUnJ_q^}>Ja5MtOA($x zBuFF@+G*?9bHt8``Zduc}1KEq^I`>&m}vEAJZ0k6k} zJ`7J{R(AfzYbFqRHj->z8cM#CU!agK4jp>6bSqPFI}%8{HW?X=Kk#D4%h!=PXlKk; z6rI+pe59Nmz$ixw@<`cpM>gESxn9Acx05O#--S`Di$cqcSM7seQnhgyH`oC`Y~#0e z*{dd+o^lGb9Pw@UF^ZXW=rJ}`Ni`G97K0It5|MLZc5N(jP)Q`Q$=W(T2d~gtKRX4t zR;3}BS*D6$UiND?GYwpN(>)=)UXLn*)+}F!m}(TGu6HIDmdFqvYDh%ncDW1{2HCao zNLetHM@UlL-j^TV;Cq}(7%FxGw)^RDzZ8?S&_5z&yJ?f1tb=ot-6O(fD7RKGekyUkpe0JMPYAKs*&4k)wrDyvrukO} z0CF~!1sTJ!W#KF`6r=hdf&&Xztz9Nn296fA+4ZLAd1`f33fJ5Yebj{W%e?rdg6E0t?alM+q2IDbTUluPLb)HNUSc*` KjN>OR-uwgM6JvY; diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00012.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00012.png deleted file mode 100644 index 8867437398c01a71e89db6514d605a9344eeba88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW(PFfeZRba4!+V0?QpFi+W?!TI3v z#)|*UpPQ{STzI|1nqrSkocnT}Q2k3!q1#bcgw^L(O**oTkMZdhF)*vGnZGJ2x~t(+ z9&huR<~GM?@!3CIo}D&TFgEcqns1`ud|1WURN=Fq`8uCxYg3l7fe_owm5ejr7d=+b zt^g_nq0jD8YBN_RPLc#tt9O2kP04Ub%W!CG^GwV7A;f!vhc}qn$oVky%;{1SDlZtE z__MgpF>TU9#+l_iKTbB?qvCv6;q!JWIiNay(>+%j&g4&&l$roUm0+`D^J>&3rPyXp zPibqjSNlBajJMHzpwbgDXAk}lWHvf+;e(iwNzB>a`Rg8fpS)mjlE(<>bfCLGJG8L@ zwRi$u^2`zH4W?6@*;2OMztC`II#AU9V#Aru&FQ=+a>SLL4;wQ+UB@`{?IEcNJFRzQ zJEZNlkd%7I_bw&lh8|FScXL08wTf|OKg$%LmY67@f4s9Dp3Q97w2LhztYm}k+k{fy z6Kh^2MBh4iN@_yn&4b&vH0NeAo!YhrNU`6(#J6p!Y>v0}jcMPwB`0nu?qiNx35-Ps MPgg&ebxsLQ06PWH3IG5A diff --git a/tests/snapshots/nanos_erc721_transfer_with_eth/00013.png b/tests/snapshots/nanos_erc721_transfer_with_eth/00013.png deleted file mode 100644 index 3158ea690450f2b8c85c12004b002b02e7b02539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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;yFK@KDXZ;sPq04($@Y}pt$UkYuJ7O_vMLEmi+4c;Fw95@=>aR7Nxv47?$ZTZtr_3n+(gx*XR_$~kWo+{1#Gb1SXD%3= zxUfOl`S7wtWoKq1=fesh37M0pZl2)bJ;7rH6tf4a>N|5`!^DM*Gq+1kkOZQXHnx<$ zq^B8D6K1Bx%Ze~iP)OohG zIi_9y5O&xt%^k>mro%ENocDx`AG1-use^*|uq^-bNuC4jCC(rnYh>Cs(MmB?|tDnm{ Hr-UW|v$x^l diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00000.png b/tests/snapshots/nanox_erc1155_batch_transfer/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*4jdEx%&iQh`U-~093w7vdJ?lRrqNB>N3JH>PJYu$DY(ZJN4b%%?N zJ!LxUT>tm#>P>%hCTMS|Um13wKlYXz_u17~`%}{9r}LKndz7;}zFF5Sv(qP%@u^By z-L6@u?q9obHf>Vr%?neNA7*M#|7pUOy=_*-$sN_X{_C%4FW9d&_m_21shi6wjXOr~ z+vY8vrF-w*(mNUJw;c|8`~PL~gwB6Py#d01k4iMpz0q3sODN@7g4Q8!psSIA&u2E_ W1#e%AG3I^-346NwxvXM-Po6Gel)=X>%ZgqT2pcrAqxLI@#*kjMGTRv<>Lwf(tm zTb3ptP3MMJ^OLQ>91fRoPCP+31KOXjn;hTS3Vb?rKr(bdGXG%_-nNa4Fd>8xLdd%q zWJCAuoxithPyc&ObyFxsbtR4*wPdK6Dxtd@($FaZyNGd!b`mVLR{t)3f%F?q_28OY zipe@%$!X*4#7@GhY0}R=^$+!@)nur)te`fr(ZvYOYp01D+YwP#?ZLe3uTSc|*Rcw9oNO=)$9wDC67ih54$wqB`Q0=t^(2CQ@-BUFY8?_n3{hO?`<`|g64(GC{%a`!00000pUZl{?pA#`J4$47 zn(c_IM7~qJY(HlCBgJRsd}Gl0LxO(fC(Drg5;r~~wrD2?%$<_OP&I0)Fu1d6#hPIID(cQWpoKuaF zriMa{`UC_@E4j;z`?k2%M5keE=lV-nJC7MkZGcXApINBAjAl%(2o?*VqJ-t5NU;Dd z?pp(p+?s`;q7!7+;8J9GbJWln>3?l^pL^k-bhYvc5^R8JC%||;tt&&y4uhg*Ok4eI z{Ay)DryTco8`EA*bgGpG@2D3hzZ*Itt-K>kpoUIn+6ho=&^;q{71L8MXrAg!Eeiku n000000000000000@D6?fMi~ovoz*H~00000NkvXXu0mjfAny4` literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00004.png b/tests/snapshots/nanox_erc1155_batch_transfer/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..5262c83b9d39c0bf1560ba947748c8c5e32a1b07 GIT binary patch literal 828 zcmV-C1H=4@P)vV*Mef&v9r1 zo}-`Fer@TCrSqn_4GLeM*|>fmuyLce`0}$mi9O1rdCgQciZ&XbKE#Jt!01!9(JAKh z-p_G4@&Z4%0?Ljj_xfR1m$ZJdDLuUoPOpIJA&G~vz12;Hsg+*fvoB#n2qA=!?5wrnr(2muCta5v5dJJXqoBx zHY=>@7BnycEqzD2D4qgycaEEklKRg442LV96HARQt$?HT9EuBP`7!#VgQ+=V_#;$+UjqiFXI{5CYr>~+W$3z%v} zFOgcQX)EnHUUo&wqKMrkyaJ(j1uRU8h zr55pLaBn7$Ys*U!p00j{n$^uTEyNj4DSa8U8=vxiS@~t$?RQ+Ds^3xRvWJIm8;Hf- z22~B|Tp?KjUV(5I8-p(MO^ftAkenFrsK=5Cc(mSGtdMEWkZywa+>@Le?}HxGaZVZ+ z1x?~mN55b_ZT1x+| zcAlgElqZ^Zg`wU@e=n4*);9nlmMY&d0zwEOgb+ghEB*p8B+>Gs%7cpl0000u*>TbXYqG<>K004lyujvs}O66vZ(Hy7! z?X2Lp8hxcIQ-<%fM|<`dh(V@A?(yT(Oejw27-Glf@i)d;p0HsImLoTRZeyP9DZ7z7 zQ+2p)XlvC7DmU|Iedyhq0b=~lui19a;x_|yE6&aBHZtP-=??sfF;1V|D`L*I%M93A zUKLhcOQ#D^F0<8|7NiyOGRRq|O6Ofj%p23UWy(L zPLoXb-3X~B`_8xqPvS20q>ChT4VEIk0000000000000000002MGQaA|Y7zyBXnz0z N002ovPDHLkV1ghk*}wn* literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00006.png b/tests/snapshots/nanox_erc1155_batch_transfer/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..4211264b4f4d4f2c32b6a2a4390c415ed81ba2ab GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`Jkba4!+nDh2#bl+hG9*4kX zv*vF2uex!1or0^NL^4Oe%HHRzU5^+nYdLPg4%DUdef!3@0!_u|s@G33X|*bGx$(5V zoV~3w;L`bb)(p?(OMUV<6n`f46omMBed5}$`tPs1*rfHIrXQW-j(?gWl)g9pOv8!l z^*Tb2dR87Y@mp5;jlW^iwIDg~!YJ=qaT$|q%1rMlroEEb5ZK0^v#FjtXnE{TSwFvHIsb=HxlQ&3!UCyywD3Ufb&%^PQ*mu2emD z;6#^K)%y?nyRK`i&3vP;ykyoJ{bLeujzniH_nIWxywXD-7+%Q0;H6P)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 O0000MjqtrV%Nn6esuj!jIMi}Btw`sohxwi1&U@}K{{10Q-!s%eVxF#kF6*2U FngGM>p?d%T literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_transfer/00000.png b/tests/snapshots/nanox_erc1155_transfer/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*UtP)B3TIhpj8YW_nfadA`!U*IEG~b0D$4XW_O@V&N-#jUgn(3 zW+|oioiROpxSVsD?E1QjyKQiP-?KZ=s~z3X5T*c6^_ty*UwBV~YFRI*MZ^_9QUNwa z480U=33}e0AXovG_(L85faMOmq1WwSzQ5Vu)-E4^yo&O?cGInhHNNW6w><_}2YCCD zY6g@I+ROj08nBz=ck>uv?`&Z2^7JfWu$#_+Qh!qIUg_VyXQTiHShiN4gEo6LxaU$6 zZ!_*#xb4z<1{}}gS$Z-(zNwalnfL=w;*B+Sg4zvP`onBQE&ajNU?!{3OeZ0$!KK6t k0000000000005Wy0dz~F66uoCdH?_b07*qoM6N<$g1d>8!2kdN literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_transfer/00002.png b/tests/snapshots/nanox_erc1155_transfer/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ac2d140a0138245861a74a6a8a1173df87aa2e GIT binary patch literal 697 zcmV;q0!ICbP)M-Po6Gel)=X>%ZgqT2pcrAqxLI@#*kjMGTRv<>Lwf(tm zTb3ptP3MMJ^OLQ>91fRoPCP+31KOXjn;hTS3Vb?rKr(bdGXG%_-nNa4Fd>8xLdd%q zWJCAuoxithPyc&ObyFxsbtR4*wPdK6Dxtd@($FaZyNGd!b`mVLR{t)3f%F?q_28OY zipe@%$!X*4#7@GhY0}R=^$+!@)nur)te`fr(ZvYOYp01D+YwP#?ZLe3uTSc|*Rcw9oNO=)$9wDC67ih54$wqB`Q0=t^(2CEaktG3V{g=%Q8yo`yuf z<<^D&y^Hi~3tky8CMg7_ocnJ(*Ggc@>>0~gfV$RXpMP=mNdLVsx4d;>*M+q%_-)i+whh&FFiwH(-JtDev;fI@M zE37tu>VA4I`DbEhab;jk;5Uclg6Dc#Eo&M2)yvz81bMc|RUBR~(eRRc=bcKOr_M+A zv|QG{pRfCKn_cV~E((6!9n&I0~jY-C9Yt{DbU#4DsXwyPr z-}y)7idZ$;*BW)N-jhGsGCO0nAJbw+`QgO&3z(B*wfX|Wt~$(6969y#XvV*Mef&v9r1 zo}-`Fer@TCrSqn_4GLeM*|>fmuyLce`0}$mi9O1rdCgQciZ&XbKE#Jt!01!9(JAKh z-p_G4@&Z4%0?Ljj_xfR1m$ZJdDLuUoPOpIJA&G~vz12;Hsg+*fvoB#n2qA=!?5wrnr(2muCta5v5dJJXqoBx zHY=>@7BnycEqzD2D4qgycaEEklKRg442LV96HARQt$?HT9EuBP`7!#VgQ+=V_#;$+UjqiFXI{5CYr>~+W$3z%v} zFOgcQX)EnHUUo&wqKMrkyaJ(j1uRU8h zr55pLaBn7$Ys*U!p00j{n$^uTEyNj4DSa8U8=vxiS@~t$?RQ+Ds^3xRvWJIm8;Hf- z22~B|Tp?KjUV(5I8-p(MO^ftAkenFrsK=5Cc(mSGtdMEWkZywa+>@Le?}HxGaZVZ+ z1x?~mN55b_ZT1x+| zcAlgElqZ^Zg`wU@e=n4*);9nlmMY&d0zwEOgb+ghEB*p8B+>Gs%7cpl0000?N zx7K<$yRJ*NsD5m-F5=5rb=CabjitAbr`CF(vi5g3kJ4b&-Wf>y&T`g1hu>+DiuUVH zi<=)5By|BYSt%o#Ka`)GFpbyPWG%iMB&4C{aAc!oFM!JN5^?aUd!PiJdJ>E{d*(T_ z19q)}QM=Sy*Lsa=U_0O*-<01#c#XgI7)l5sgpj{DYN$Nt#afEcBc%q}#qFfiS#PTU zQ7^-Dti>K(1VcMSS`494ZBcd8u0=g8PUV0b+dA%4J{@m&3`H(MnYSb))=ECmO&F1` zw#Zw?-Szc{;SeblG0!oO=;gQ=2QHHO3T$N49J;!K`Y_l9sA~8n=((T2`lM|SfVUFt zp5xdKkSnCVG5&h`1$b!WP5!hGmw4X}o;ea7t1l7=8_qFG)yPtBA_N54QbK%1a$VBc98M%w%>B(5CNL9uaZ(}}w zq9wXLr&?qql7Q{G-oRra&R0s%v>4ab*6um{#7hFOmumxx&&fLA^a6~w>T`K-nfZ&2L29lW9Z^hUy<|QaPX$5rP%GD>H&k`IW?N)k~+-JgH?w|d%2OF%%~C43_JNP_~84q^We z2*0{f*(GT2V(;jRy#RY9z3{QjJ$J^Asz^R7Gq6P)CWH_|2qEMV{s3eu$DjML?*sq< N002ovPDHLkV1jYydMy9| literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_transfer/00006.png b/tests/snapshots/nanox_erc1155_transfer/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..40a868db1523fc7cb83d985967d1425255b91210 GIT binary patch literal 527 zcmV+q0`UEbP)Q@-F?zOzNN_F%jMLy|1ic!G(wfHv|9x0001YzT7OOlwyqK$COeo z7Go?&s(N&>s$^AFc~?yJC8U&cmz~$bkEK9sTnLo%`iOG3WqJnRZk9sr=?2#TcycF= zcs?jUK4wmi-&W@0Tws#v+-`LaOY**V0IE3ra^1fRcijak$bTo;*85@A3V138O70T5 zF0VC}9C((kFDyg-8IJL5%TNFS0QjTR4XySOkHMQGPid}JqGPu5TbJ}3XLXCRQ`o&Q z_CBA|JYcI@Zi=q$*gTc#38s{x^WI{f(%jPH{|eTB6Bdi>e2G;?N-Q$N-x3*S%vMmn zKNgrL!#S`3Eh$Ksv7fz+eXAwVJ;^y~jVSXJtn7w*uJ^7ju`4LOYh`a2akBinWdYdA z`=Kal+~y_&kcy-8<6_1h(9PWz&6XKf#fDKH{I2p&Xe~JlZqjrz-gl$oYP|0ZF<1#% zXeAvd6N9Og?)Cd`=q1W-qOtg!T7do|l!bVy$GQK4e$}D;CqCm_{4=gfE9V#wRTMpN z0m~7`Ko@o&UX_AA5dyH7P4@sx(P>HU!>3~a000000000000000008jm`~vwIGqmm) RFV+A6002ovPDHLkV1j06?&1Id literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_transfer/00007.png b/tests/snapshots/nanox_erc1155_transfer/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..c08b576099d7f294b60455ec60a412652be6b72d GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qg1z7978JRyuIPb*JL2T8enoS z}PWHVG~9Mhw|xfIDM8*`IYNpBESFVjOQCY>bG7> zxe=ypUVeJsfn~p@TgP8ld>1aaUhw0N?RtLaU%y#D{lq!074}u%v*(Kj%apUO@jAbH zXZAOidt!p=w+z{$8P}d!?o_2eS=xX-F#Or;{C{WGJgc5?fq&KKe|7sFFKL{&FvDS1 zP}dj6wsiCJTPpUs^<9)UxVL%1zopr01Ui*xBvhE literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_transfer/00008.png b/tests/snapshots/nanox_erc1155_transfer/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..69bbc6035cf783400d069649ee23b5751d79e253 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=lrba4!+nDh2#v{17Gk3-LYiew5*c_9PTQ?RT5;ZA3cbC&OGm%CiOlIG4GR(DNy z#xplZ|JZVdOWjs%<}DLsIihc9rK_g4mUsTI?{@lTxH`;M3AUCFCub33yfqn~7#K9WsZvW;x6kzzuWK1 zOM8}J=RVaXD|OM9+H1Qm`&DSJ-g{%=+zkclJF6DQzjfPnZR;i9!#WrGSOZ>PVBqkN zeEZJj@SM5dT%B$fSxw9I{F=7l(-~C{p^VQiC11`k?wDA^85AoXys7gk(_Fs~Z?ru- zpNI&pIv$XCy7@!gL(#jBO`Cnb_y=>EUbL4?PUs9haY^As&%vM;abU0^gNSGRTUYut TADHucI!M^l)z4*}Q$iB};ugRw literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc1155_transfer/00009.png b/tests/snapshots/nanox_erc1155_transfer/00009.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 O0000MjqtrV%Nn6esuj!jIMi}Btw`sohxwi1&U@}K{{10Q-!s%eVxF#kF6*2U FngGM>p?d%T literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc721_transfer/00000.png b/tests/snapshots/nanox_erc721_transfer/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*UtP)B3TIhpj8YW_nfadA`!U*IEG~b0D$4XW_O@V&N-#jUgn(3 zW+|oioiROpxSVsD?E1QjyKQiP-?KZ=s~z3X5T*c6^_ty*UwBV~YFRI*MZ^_9QUNwa z480U=33}e0AXovG_(L85faMOmq1WwSzQ5Vu)-E4^yo&O?cGInhHNNW6w><_}2YCCD zY6g@I+ROj08nBz=ck>uv?`&Z2^7JfWu$#_+Qh!qIUg_VyXQTiHShiN4gEo6LxaU$6 zZ!_*#xb4z<1{}}gS$Z-(zNwalnfL=w;*B+Sg4zvP`onBQE&ajNU?!{3OeZ0$!KK6t k0000000000005Wy0dz~F66uoCdH?_b07*qoM6N<$g1d>8!2kdN literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc721_transfer/00002.png b/tests/snapshots/nanox_erc721_transfer/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ac2d140a0138245861a74a6a8a1173df87aa2e GIT binary patch literal 697 zcmV;q0!ICbP)M-Po6Gel)=X>%ZgqT2pcrAqxLI@#*kjMGTRv<>Lwf(tm zTb3ptP3MMJ^OLQ>91fRoPCP+31KOXjn;hTS3Vb?rKr(bdGXG%_-nNa4Fd>8xLdd%q zWJCAuoxithPyc&ObyFxsbtR4*wPdK6Dxtd@($FaZyNGd!b`mVLR{t)3f%F?q_28OY zipe@%$!X*4#7@GhY0}R=^$+!@)nur)te`fr(ZvYOYp01D+YwP#?ZLe3uTSc|*Rcw9oNO=)$9wDC67ih54$wqB`Q0=t^(2C&*v$ed<2GsRu-QOd6YI^Io8GR~oIe?M8i|=op&m$PVN3+ z*|L4Y^XRjc(edZfS!LF%^r?OQvFhqp?Ptz6R+xS`@bmG~k27+lfX;hZvMj_^v~Xcv zx8C9XXS1I^=6C1_X*qi$%cf$Uc#9sQ~(Q?Qg0kQLcPa`G)0|bapN&o-=0000i=W9V7rIegAy)32F zVmW78Vp=nADe|8}DW&%8^}BI56_9R)6cuYb@Uy0xV{}g%iB7*?CC&WvT+U-r2h5}H z*LrTz!c=*a4TFuZ*95Nb1$7+I5TDNI)Wj%>%WJHuD6~@jauN^EfaoY2=oEIm*L|Fp zEa2;AKpHV}^U0_tQTt6$nmrFz&w%bnY6j!AsLNd({J<&#G^sI(%oV6xB zg7jRhx(Y8^E)Oy{h7Av46z)bwO`Tx}MQP$Od!~2Ut zA3O=7(34;teiG_lEgRZMOJ6e4(>9g43PUoU62+`u9%?}JL2C8>V}W@BP~;`8kc_F` zA)qw-W@}l?W<*)~UC>R+dE$RXoOF(TBNag>pj6n`g3t_|@r7?~kWDpu9+nML&UP9d zKrKp9)vR*Tu=ShOgLM)zU1mD7JA-sECL2n<-;{)M=zc;EKX`?dxk9CCC(KQ000000MxAbr~FtvyG$izt7riio000000KhZ+0`320OjSpSLjV8(07*qoM6N<$g3Fj+ AWB>pF literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc721_transfer/00005.png b/tests/snapshots/nanox_erc721_transfer/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..0b34592c31d788e6da1abc8898b76d4288a283be GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-zba4!+nDh2#E?=_(PebCi zH)?zTPpq2$SHZX??D?4`uJ@l$7YYg5w^0PBCt-(s31ihNEv0W^p|^9Cl7jDi&q;Uo z54}A>_j;^MZrj!`dWWO_X`Fw-WRdfF--aI10`2uLn0{obZ#Y~vJF#M+-^49UG1ED# zwBHMqOrEJw%Ksx=Hm2we&^a@rx-MVX<@1Km@%EHd*_V1sw{17?ezc|kw*I~F-d0=2 z(sBl~jn=kXE$_NtyJsKw$M1&O;lI3>=ZVYyPFirq`eCm0#qIT_uUuDM2>)oCus`|j z-YH5-oX+vS!Hju}sRdo346NwxvXgj(dw?Jx(O1uyRF(z*}30SEXNL>b%fS$_N={s=(>fP*;-Kb zmey)SV!>+Jn|8wE_Ei_u!)oq?2RD|x_x-KxXH!R6gX$OiPG>j;wGOqWpphAG+3TmE za#eSi1>k-4)0000000000000000Jix9XFg{VoFH$! P00000NkvXXu0mjfsA$6N literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_erc721_transfer/00007.png b/tests/snapshots/nanox_erc721_transfer/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 O0000MjqtrV%Nn6esuj!jIMi}Btw`sohxwi1&U@}K{{10Q-!s%eVxF#kF6*2U FngGM>p?d%T literal 0 HcmV?d00001 diff --git a/tests/src/erc1155.test.js b/tests/src/erc1155.test.js index 59eeee0..bb78883 100644 --- a/tests/src/erc1155.test.js +++ b/tests/src/erc1155.test.js @@ -1,27 +1,58 @@ import "core-js/stable"; import "regenerator-runtime/runtime"; -import { waitForAppScreen, zemu, txFromEtherscan } from './test.fixture'; -import { TransportStatusError } from "@ledgerhq/errors"; +import Zemu from '@zondax/zemu'; +import { waitForAppScreen, zemu, nano_models, apdu_as_string, send_apdu } from './test.fixture'; -// ------------------- -// TODO: Actually write the tests +const model = nano_models[1]; -test.skip('[Nano S] Transfer 1155', zemu("nanos", async (sim, eth) => { +test('[Nano ' + model.letter + '] Transfer ERC-1155', zemu(model, async (sim, eth) => { - const rawTx = "" - const serializedTx = txFromEtherscan(rawTx); + const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5ef242432a00000000000000010001473045022100ec4377d17e8d98d424bf16b29c691bc1a010825fb5b8a35de0268a9dc22eab2402206701b016fe6718bf519d18cc12e9838e9ef898cc4c143017839023c3260b2d74'); + const provide_nft_info = apdu_as_string('e01400007b0101124f70656e53656120436f6c6c656374696f6e495f947276749ce646f68ac8c248420045cb7b5e0000000000000001000147304502210083e357a828f13d574b1296214a3749c194ab1df1f8a243655c053b1c72f91e0c02201ed93cfac7e87759445c4da2e4bfd6e1cf0405ea37c7293bc965948f51bef5cc'); + const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f901090b8520b673dd0082bcb394495f947276749ce646f68ac8c248420045cb7b5e80b8e4f242432a0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596cabf06640f8ca8fc5e0ed471b10befcdf65a33e4300000000'); + const sign_more = apdu_as_string('e00480008b00006a0000000064000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); - // with ETH need to test - // const serializedTx = txFromEtherscan("0x02f901350182022f8459682f0085246ad7eb3182de2994424db67b40b15ed85475c3f29dedf601b6ee75b283424242b8c4f242432a000000000000000000000000dcdb88f3754b2841093d9348a2d02df8cf06314c000000000000000000000000df9fb2eff1f2871caeeb94bf262ffba84efddddc0000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000c001a0c4283f86dc852e43e9fd1077b448c63fec76bdeb44dfac977730725e41fa3676a0543b2d2f99f65fb20cd548964eee94b1c1865919f4574c7089d8b95678b667c2"); + 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); + send_apdu(eth.transport, sign_more); - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_transfer_ethereum', [12, 0]); - - await expect(tx).resolves.toEqual({ - }); + await waitForAppScreen(sim, current_screen); + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_transfer', [10]); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); + // Sleep so it has time to send the response APDU + await Zemu.sleep(500); +})); + +test('[Nano ' + model.letter + '] Batch transfer ERC-1155', zemu(model, async (sim, eth) => { + + const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5e2eb2c2d60000000000000001000147304502210087b35cefc53fd94e25404933eb0d5ff08f20ba655d181de3b24ff0099dc3317f02204a216aa9e0b84bef6e20fcb036bd49647bf0cab66732b99b49ec277ffb682aa1'); + const provide_nft_info = apdu_as_string('e0140000820101194f70656e536561205368617265642053746f726566726f6e74495f947276749ce646f68ac8c248420045cb7b5e00000000000000010001473045022100c74cd613a27a9f4887210f5a3a0e12745e1ba0ab3a0d284cb6485d89c3cce4e602205a13e62a91164985cf58a838f8f531c0b91b980d206a5ba8df28270023ef93a3'); + const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f9020b0e850d8cfd86008301617d94495f947276749ce646f68ac8c248420045cb7b5e80b901e42eb2c2d60000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c00000000000000000000000000000000000000000000'); + const sign_more_1 = apdu_as_string('e004800096000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000003abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a0000000064def9d99ff495856496c028c0'); + const sign_more_2 = apdu_as_string('e00480009689732473fcd0bbbe000000000000a30000000001abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a00000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000'); + const sign_more_3 = apdu_as_string('e00480006100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); + + 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); + await send_apdu(eth.transport, sign_more_1); + await send_apdu(eth.transport, sign_more_2); + send_apdu(eth.transport, sign_more_3); + + await waitForAppScreen(sim, current_screen); + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8]); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); + // Sleep so it has time to send the response APDU + await Zemu.sleep(500); })); diff --git a/tests/src/erc721.test.js b/tests/src/erc721.test.js index 58052f1..2e147c1 100644 --- a/tests/src/erc721.test.js +++ b/tests/src/erc721.test.js @@ -1,130 +1,30 @@ import "core-js/stable"; import "regenerator-runtime/runtime"; -import { waitForAppScreen, zemu, txFromEtherscan } from './test.fixture'; +import Zemu from '@zondax/zemu'; +import { waitForAppScreen, zemu, nano_models, apdu_as_string, send_apdu } from './test.fixture'; -test.skip('[Nano S] Transfer erc721', zemu("nanos", async (sim, eth) => { +const model = nano_models[1]; - // https://etherscan.io/tx/0x73cec4fc07de3a24ba42e8756e13b7ddfa9bd449126c37640881195e8ea9e679 - // Modified to put a bigger token id - const rawTx = "0x02f8d101058459682f0085233da9943e8301865b94bd3531da5cf5857e7cfaa92426877b022e612cf880b86423b872dd0000000000000000000000004cc568b73c0dcf8e90db26d7fd3a6cfadca108a3000000000000000000000000d4c9b20950c3eca38fc1f33f54bdf9694e488799ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080a094c8632fe7277aa8c54cea9d81a15911cfa4970a2bf7356d14d04cc5afbcdab7a013a77b8c79e5d9b2b35edb3c44db3bb41b92f5c463ff126bf19d213b2b9ba8b5" - const serializedTx = txFromEtherscan(rawTx); +test('[Nano ' + model.letter + '] Transfer ERC-721', zemu(model, async (sim, eth) => { - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); + 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); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_transfer', [12, 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); + send_apdu(eth.transport, sign_more); - await expect(tx).resolves.toEqual({ - "r": "59f6a9769cff66eed8be8716c44d39808d1e43f3aa0bb97538e124dba4bc4565", - "s": "662990a841c663a165ba9a83e5cc95c03a999b851e0bd6d296aa70a0f7c96c1a", - "v": "01", - }); -})); - -test.skip('[Nano S] Transfer erc721 with attached ETH', zemu("nanos", async (sim, eth) => { - - const rawTx = "0x02f8d601058459682f0085233da9943e8301865b94bd3531da5cf5857e7cfaa92426877b022e612cf8854242424242b86423b872dd0000000000000000000000004cc568b73c0dcf8e90db26d7fd3a6cfadca108a3000000000000000000000000d4c9b20950c3eca38fc1f33f54bdf9694e4887990000000000000000000000000000000000000000000000000000000000000f21c080a094c8632fe7277aa8c54cea9d81a15911cfa4970a2bf7356d14d04cc5afbcdab7a013a77b8c79e5d9b2b35edb3c44db3bb41b92f5c463ff126bf19d213b2b9ba8b5" - const serializedTx = txFromEtherscan(rawTx); - - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_transfer_with_eth', [13, 0]); - - await expect(tx).resolves.toEqual({ - "r": "9c42e10b49f3ee315ab2d5f7ad96f1068c75578734b66504716cc279ead27d47", - "s": "45dde78470ad75ffdb27a799b87e4934e2e10e98dbc6f88bc4a9bc19c4de86bc", - "v": "00", - }); -})); - -test.skip('[Nano S] set approval for all erc721', zemu("nanos", async (sim, eth) => { - - // https://etherscan.io/tx/0x86b936db53c19fddf26b8d145f165e1c7fdff3c0f8b14b7758a38f0400cfd93f - const rawTx = "0x02f8b0010c8459682f00852cfbb00ee682b54294d4e4078ca3495de5b1d4db434bebc5a98619778280b844a22cb4650000000000000000000000002efcb1e8d4472d35356b9747bea8a051eac2e3f50000000000000000000000000000000000000000000000000000000000000001c001a0c5b8c024c15ca1452ce8a13eacfcdc25f1c6f581bb3ce570e82f08f1b792b3aca03be4dba0302ae190618a72eb1202ce3af3e17afd7d8a94345a48cae5cad15541"; - const serializedTx = txFromEtherscan(rawTx); - - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_approval_for_all', [12, 0]); - - await expect(tx).resolves.toEqual({ - "r": "8b6a70a1fe76d8e9b1250531a17eb1e367936732d4dfb9befc81a5031b271dc8", - "s": "7658d7151bba0d8504cea2013bead64cb8407dc6be1fca829bb9594b56f679af", - "v": "00", - }); -})); - -// NOT DONE -test.skip('[Nano S] approval erc721', zemu("nanos", async (sim, eth) => { - - // INCORRECT, need to find / create an approval tx - const rawTx = ""; - const serializedTx = txFromEtherscan(rawTx); - - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_approval', [12, 0]); - - await expect(tx).resolves.toEqual({ - }); -})); - -test.skip('[Nano S] safe transfer erc721', zemu("nanos", async (sim, eth) => { - - // https://etherscan.io/tx/0x1ee6ce9be1c9fe6f030ff124ba8c88a410223c022816547e4b3fedd3a4d2dc1e - const rawTx = "0xf8cc82028585077359400083061a8094d4e4078ca3495de5b1d4db434bebc5a98619778280b86442842e0e000000000000000000000000c352b534e8b987e036a93539fd6897f53488e56a0000000000000000000000000a9287d9339c175cd3ea0ad4228f734a9f75ee6200000000000000000000000000000000000000000000000000000000000000621ca08250f4b2c8f28c5e4ef621dba4682990d1faf930c8cb6d032c6e7278e8951d92a03c1e1f6d63ed339041f69f24c6c0968ba26f244f779cb4fa7a468f3ba3d3e06e"; - const serializedTx = txFromEtherscan(rawTx); - - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_safe_transfer', [10, 0]); - - await expect(tx).resolves.toEqual({ - "r": "b936684d5d0e99e09701021fb73ae9403f2ec79414d822d42c5bd1c0a2118f1a", - "s": "23e517c6cac998f392d179be2fe7c3225f0e0a165b1af85548da5d6acaa73c4f", - "v": "25", - }); -})); - -// NOT DONE -test.skip('[Nano S] safe transfer with data erc721', zemu("nanos", async (sim, eth) => { - - // need to find or create a safe transfer with data on etherscan? - const rawTx = ""; - const serializedTx = txFromEtherscan(rawTx); - - - const tx = eth.signTransaction( - "44'/60'/1'/0/0", - serializedTx, - ); - - await waitForAppScreen(sim); - await sim.navigateAndCompareSnapshots('.', 'nanos_erc721_safe_transfer_with_data', [12, 0]); - - await expect(tx).resolves.toEqual({ - }); + await waitForAppScreen(sim, current_screen); + // Go to the reject screen + await sim.navigateAndCompareSnapshots('.', model.name + '_erc721_transfer', [8]); + // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot + // twice, so accept it manually + await sim.clickLeft(); + await sim.clickBoth(); + // Sleep so it has time to send the response APDU + await Zemu.sleep(500); })); diff --git a/tests/src/test.fixture.js b/tests/src/test.fixture.js index 2251bdc..beffd71 100644 --- a/tests/src/test.fixture.js +++ b/tests/src/test.fixture.js @@ -4,8 +4,10 @@ import {RLP} from "ethers/lib/utils"; const transactionUploadDelay = 60000; -async function waitForAppScreen(sim) { - await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot(), transactionUploadDelay); +async function waitForAppScreen(sim, current_screen = null) { + if (current_screen === null) current_screen = sim.getMainMenuSnapshot(); + + await sim.waitUntilScreenIsNot(current_screen, transactionUploadDelay); } const sim_options_nano = { @@ -30,8 +32,33 @@ const nano_models: DeviceModel[] = [ const TIMEOUT = 1000000; +// useful to take an apdu as a hex string and convert its JS representation +function apdu_as_string(str) { + let buffer = []; + + for (let i = 0; i < str.length; i += 2) { + const str_extract = str.substring(i, i + 2); + buffer[i / 2] = parseInt(str_extract, 16); + } + return { + cla: buffer[0], + ins: buffer[1], + p1: buffer[2], + p2: buffer[3], + data: Buffer.from(buffer.slice(5)) + }; +} + +async function send_apdu(ts, apdu) { + await ts.send(apdu.cla, + apdu.ins, + apdu.p1, + apdu.p2, + apdu.data); +} + // Generates a serializedTransaction from a rawHexTransaction copy pasted from etherscan. -function txFromEtherscan(rawTx) { +function txFromEtherscan(rawTx) { // Remove 0x prefix rawTx = rawTx.slice(2); @@ -89,4 +116,6 @@ module.exports = { nano_models, TIMEOUT, txFromEtherscan, + apdu_as_string, + send_apdu } From 75b843b51c525c2f4423b6637ba68afa790ce544 Mon Sep 17 00:00:00 2001 From: Coline Date: Thu, 3 Feb 2022 14:25:47 +0100 Subject: [PATCH 18/87] refacto(Makefile): chain environnement into subdirectories - Allows you to more easily add a new chain - More maintainable - More clarity in the makefile --- Makefile | 218 ++---------------------- makefile_conf/chain/akroma.mk | 3 + makefile_conf/chain/artis_sigma1.mk | 3 + makefile_conf/chain/artis_tau1.mk | 3 + makefile_conf/chain/atheios.mk | 3 + makefile_conf/chain/bsc.mk | 3 + makefile_conf/chain/callisto.mk | 3 + makefile_conf/chain/dexon.mk | 3 + makefile_conf/chain/ellaism.mk | 3 + makefile_conf/chain/ether1.mk | 3 + makefile_conf/chain/ethereum.mk | 13 ++ makefile_conf/chain/ethereum_classic.mk | 4 + makefile_conf/chain/ethergem.mk | 3 + makefile_conf/chain/ethersocial.mk | 3 + makefile_conf/chain/ewc.mk | 3 + makefile_conf/chain/expanse.mk | 3 + makefile_conf/chain/flare.mk | 8 + makefile_conf/chain/flare_coston.mk | 3 + makefile_conf/chain/gochain.mk | 3 + makefile_conf/chain/goerli.mk | 14 ++ makefile_conf/chain/hpb.mk | 3 + makefile_conf/chain/kusd.mk | 3 + makefile_conf/chain/mix.mk | 3 + makefile_conf/chain/moonriver.mk | 3 + makefile_conf/chain/musicoin.mk | 3 + makefile_conf/chain/pirl.mk | 3 + makefile_conf/chain/poa.mk | 3 + makefile_conf/chain/polygon.mk | 3 + makefile_conf/chain/reosc.mk | 3 + makefile_conf/chain/ropsten.mk | 14 ++ makefile_conf/chain/rsk.mk | 3 + makefile_conf/chain/rsk_testnet.mk | 3 + makefile_conf/chain/shyft.mk | 3 + makefile_conf/chain/songbird.mk | 3 + makefile_conf/chain/thundercore.mk | 3 + makefile_conf/chain/tobalaba.mk | 3 + makefile_conf/chain/tomochain.mk | 3 + makefile_conf/chain/ubiq.mk | 3 + makefile_conf/chain/volta.mk | 3 + makefile_conf/chain/wanchain.mk | 3 + makefile_conf/chain/webchain.mk | 3 + 41 files changed, 173 insertions(+), 203 deletions(-) create mode 100644 makefile_conf/chain/akroma.mk create mode 100644 makefile_conf/chain/artis_sigma1.mk create mode 100644 makefile_conf/chain/artis_tau1.mk create mode 100644 makefile_conf/chain/atheios.mk create mode 100644 makefile_conf/chain/bsc.mk create mode 100644 makefile_conf/chain/callisto.mk create mode 100644 makefile_conf/chain/dexon.mk create mode 100644 makefile_conf/chain/ellaism.mk create mode 100644 makefile_conf/chain/ether1.mk create mode 100644 makefile_conf/chain/ethereum.mk create mode 100644 makefile_conf/chain/ethereum_classic.mk create mode 100644 makefile_conf/chain/ethergem.mk create mode 100644 makefile_conf/chain/ethersocial.mk create mode 100644 makefile_conf/chain/ewc.mk create mode 100644 makefile_conf/chain/expanse.mk create mode 100644 makefile_conf/chain/flare.mk create mode 100644 makefile_conf/chain/flare_coston.mk create mode 100644 makefile_conf/chain/gochain.mk create mode 100644 makefile_conf/chain/goerli.mk create mode 100644 makefile_conf/chain/hpb.mk create mode 100644 makefile_conf/chain/kusd.mk create mode 100644 makefile_conf/chain/mix.mk create mode 100644 makefile_conf/chain/moonriver.mk create mode 100644 makefile_conf/chain/musicoin.mk create mode 100644 makefile_conf/chain/pirl.mk create mode 100644 makefile_conf/chain/poa.mk create mode 100644 makefile_conf/chain/polygon.mk create mode 100644 makefile_conf/chain/reosc.mk create mode 100644 makefile_conf/chain/ropsten.mk create mode 100644 makefile_conf/chain/rsk.mk create mode 100644 makefile_conf/chain/rsk_testnet.mk create mode 100644 makefile_conf/chain/shyft.mk create mode 100644 makefile_conf/chain/songbird.mk create mode 100644 makefile_conf/chain/thundercore.mk create mode 100644 makefile_conf/chain/tobalaba.mk create mode 100644 makefile_conf/chain/tomochain.mk create mode 100644 makefile_conf/chain/ubiq.mk create mode 100644 makefile_conf/chain/volta.mk create mode 100644 makefile_conf/chain/wanchain.mk create mode 100644 makefile_conf/chain/webchain.mk diff --git a/Makefile b/Makefile index 4607051..7e2856d 100644 --- a/Makefile +++ b/Makefile @@ -28,221 +28,34 @@ APP_LOAD_PARAMS += --path "45'" # Samsung temporary implementation for wallet ID on 0xda7aba5e/0xc1a551c5 APP_LOAD_PARAMS += --path "1517992542'/1101353413'" +################## +# Define Version # +################## + APPVERSION_M=1 APPVERSION_N=9 APPVERSION_P=17 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) +########################### +# Set Chain environnement # +########################### + ifeq ($(CHAIN),) CHAIN=ethereum endif -ifeq ($(CHAIN),ethereum) -# Lock the application on its standard path for 1.5. Please complain if non compliant -APP_LOAD_PARAMS += --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"ETHEREUM\" CHAINID_COINNAME=\"ETH\" CHAIN_KIND=CHAIN_KIND_ETHEREUM CHAIN_ID=1 -# Starkware integration -APP_LOAD_PARAMS += --path "2645'/579218131'" -DEFINES += HAVE_STARKWARE -DEFINES += STARK_BIP32_PATH_0=0x80000A55 STARK_BIP32_PATH_1=0xA2862AD3 -# Allow to derive ETH 2 public keys -APP_LOAD_PARAMS += --path "12381/3600" --curve bls12381g1 -DEFINES += HAVE_ETH2 -APPNAME = "Ethereum" -DEFINES_LIB= -APP_LOAD_FLAGS=--appFlags 0xa40 -else ifeq ($(CHAIN),ropsten) -APP_LOAD_PARAMS += --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"ETHEREUM\" CHAINID_COINNAME=\"ETH\" CHAIN_KIND=CHAIN_KIND_ETHEREUM CHAIN_ID=3 -# Starkware integration -APP_LOAD_PARAMS += --path "2645'/579218131'" -DEFINES += HAVE_STARKWARE -# Keep for Starkware Ropsten tests -DEFINES += HAVE_TOKENS_EXTRA_LIST -DEFINES += STARK_BIP32_PATH_0=0x80000A55 STARK_BIP32_PATH_1=0xA2862AD3 -# Allow to derive ETH 2 public keys -APP_LOAD_PARAMS += --path "12381/3600" --curve bls12381g1 -DEFINES += HAVE_ETH2 -APPNAME = "Eth Ropsten" -DEFINES_LIB= -APP_LOAD_FLAGS=--appFlags 0xa40 -else ifeq ($(CHAIN),goerli) -APP_LOAD_PARAMS += --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"ETHEREUM\" CHAINID_COINNAME=\"ETH\" CHAIN_KIND=CHAIN_KIND_ETHEREUM CHAIN_ID=5 -# Starkware integration -APP_LOAD_PARAMS += --path "2645'/579218131'" -DEFINES += HAVE_STARKWARE -# Keep for Starkware Goerli tests -DEFINES += HAVE_TOKENS_EXTRA_LIST -DEFINES += STARK_BIP32_PATH_0=0x80000A55 STARK_BIP32_PATH_1=0xA2862AD3 -# Allow to derive ETH 2 public keys -APP_LOAD_PARAMS += --path "12381/3600" --curve bls12381g1 -DEFINES += HAVE_ETH2 -APPNAME = "Eth Goerli" -DEFINES_LIB= -APP_LOAD_FLAGS=--appFlags 0xa40 -else ifeq ($(CHAIN),ellaism) -APP_LOAD_PARAMS += --path "44'/163'" -DEFINES += CHAINID_UPCASE=\"ELLA\" CHAINID_COINNAME=\"ELLA\" CHAIN_KIND=CHAIN_KIND_ELLAISM CHAIN_ID=64 -APPNAME = "Ellaism" -else ifeq ($(CHAIN),ethereum_classic) -# Also allows ETC to access the ETH derivation path to recover forked assets -APP_LOAD_PARAMS += --path "44'/61'" --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"ETC\" CHAINID_COINNAME=\"ETC\" CHAIN_KIND=CHAIN_KIND_ETHEREUM_CLASSIC CHAIN_ID=61 -APPNAME = "Ethereum Classic" -else ifeq ($(CHAIN),ethersocial) -APP_LOAD_PARAMS += --path "44'/31102'" -DEFINES += CHAINID_UPCASE=\"ETHERSOCIAL\" CHAINID_COINNAME=\"ESN\" CHAIN_KIND=CHAIN_KIND_ETHERSOCIAL CHAIN_ID=31102 -APPNAME = "Ethersocial" -else ifeq ($(CHAIN),ether1) -APP_LOAD_PARAMS += --path "44'/1313114'" -DEFINES += CHAINID_UPCASE=\"ETHER1\" CHAINID_COINNAME=\"ETHO\" CHAIN_KIND=CHAIN_KIND_ETHER1 CHAIN_ID=1313114 -APPNAME = "Ether-1" -else ifeq ($(CHAIN),expanse) -APP_LOAD_PARAMS += --path "44'/40'" -DEFINES += CHAINID_UPCASE=\"EXPANSE\" CHAINID_COINNAME=\"EXP\" CHAIN_KIND=CHAIN_KIND_EXPANSE CHAIN_ID=2 -APPNAME = "Expanse" -else ifeq ($(CHAIN),pirl) -APP_LOAD_PARAMS += --path "44'/164'" -DEFINES += CHAINID_UPCASE=\"PIRL\" CHAINID_COINNAME=\"PIRL\" CHAIN_KIND=CHAIN_KIND_PIRL CHAIN_ID=3125659152 -APPNAME = "Pirl" -else ifeq ($(CHAIN),poa) -APP_LOAD_PARAMS += --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"POA\" CHAINID_COINNAME=\"POA\" CHAIN_KIND=CHAIN_KIND_POA CHAIN_ID=99 -APPNAME = "POA" -else ifeq ($(CHAIN),artis_sigma1) -APP_LOAD_PARAMS += --path "44'/246529'" -DEFINES += CHAINID_UPCASE=\"ARTISSIGMA1\" CHAINID_COINNAME=\"ATS\" CHAIN_KIND=CHAIN_KIND_ARTIS_SIGMA1 CHAIN_ID=246529 -APPNAME = "ARTIS sigma1" -else ifeq ($(CHAIN),artis_tau1) -APP_LOAD_PARAMS += --path "44'/246785'" -DEFINES += CHAINID_UPCASE=\"ARTISTAU1\" CHAINID_COINNAME=\"ATS\" CHAIN_KIND=CHAIN_KIND_ARTIS_TAU1 CHAIN_ID=246785 -APPNAME = "ARTIS tau1" -else ifeq ($(CHAIN),rsk) -APP_LOAD_PARAMS += --path "44'/137'" --path "44'/00'" -DEFINES += CHAINID_UPCASE=\"RSK\" CHAINID_COINNAME=\"RBTC\" CHAIN_KIND=CHAIN_KIND_RSK CHAIN_ID=30 -APPNAME = "RSK" -else ifeq ($(CHAIN),rsk_testnet) -APP_LOAD_PARAMS += --path "44'/37310'" -DEFINES += CHAINID_UPCASE=\"RSKTESTNET\" CHAINID_COINNAME=\"RBTC\" CHAIN_KIND=CHAIN_KIND_RSK CHAIN_ID=31 -APPNAME = "RSK Test" -else ifeq ($(CHAIN),ubiq) -APP_LOAD_PARAMS += --path "44'/108'" -DEFINES += CHAINID_UPCASE=\"UBIQ\" CHAINID_COINNAME=\"UBQ\" CHAIN_KIND=CHAIN_KIND_UBIQ CHAIN_ID=8 -APPNAME = "Ubiq" -else ifeq ($(CHAIN),akroma) -APP_LOAD_PARAMS += --path "44'/200625'" -DEFINES += CHAINID_UPCASE=\"AKA\" CHAINID_COINNAME=\"AKA\" CHAIN_KIND=CHAIN_KIND_AKROMA CHAIN_ID=200625 -APPNAME = "Akroma" -else ifeq ($(CHAIN),wanchain) -APP_LOAD_PARAMS += --path "44'/5718350'" -DEFINES += CHAINID_UPCASE=\"WAN\" CHAINID_COINNAME=\"WAN\" CHAIN_KIND=CHAIN_KIND_WANCHAIN CHAIN_ID=1 -APPNAME = "Wanchain" -else ifeq ($(CHAIN),kusd) -APP_LOAD_PARAMS += --path "44'/91927009'" -DEFINES += CHAINID_UPCASE=\"KUSD\" CHAINID_COINNAME=\"KUSD\" CHAIN_KIND=CHAIN_KIND_KUSD CHAIN_ID=1 -APPNAME = "kUSD" -else ifeq ($(CHAIN),musicoin) -APP_LOAD_PARAMS += --path "44'/184'" -DEFINES += CHAINID_UPCASE=\"MUSICOIN\" CHAINID_COINNAME=\"MUSIC\" CHAIN_KIND=CHAIN_KIND_MUSICOIN CHAIN_ID=7762959 -APPNAME = "Musicoin" -else ifeq ($(CHAIN),callisto) -APP_LOAD_PARAMS += --path "44'/820'" -DEFINES += CHAINID_UPCASE=\"CALLISTO\" CHAINID_COINNAME=\"CLO\" CHAIN_KIND=CHAIN_KIND_CALLISTO CHAIN_ID=820 -APPNAME = "Callisto" -else ifeq ($(CHAIN),ethergem) -APP_LOAD_PARAMS += --path "44'/1987'" -DEFINES += CHAINID_UPCASE=\"ETHERGEM\" CHAINID_COINNAME=\"EGEM\" CHAIN_KIND=CHAIN_KIND_ETHERGEM CHAIN_ID=1987 -APPNAME = "EtherGem" -else ifeq ($(CHAIN),atheios) -APP_LOAD_PARAMS += --path "44'/1620'" -DEFINES += CHAINID_UPCASE=\"ATHEIOS\" CHAINID_COINNAME=\"ATH\" CHAIN_KIND=CHAIN_KIND_ATHEIOS CHAIN_ID=1620 -APPNAME = "Atheios" -else ifeq ($(CHAIN),gochain) -APP_LOAD_PARAMS += --path "44'/6060'" -DEFINES += CHAINID_UPCASE=\"GOCHAIN\" CHAINID_COINNAME=\"GO\" CHAIN_KIND=CHAIN_KIND_GOCHAIN CHAIN_ID=60 -APPNAME = "GoChain" -else ifeq ($(CHAIN),mix) -APP_LOAD_PARAMS += --path "44'/76'" -DEFINES += CHAINID_UPCASE=\"MIX\" CHAINID_COINNAME=\"MIX\" CHAIN_KIND=CHAIN_KIND_MIX CHAIN_ID=76 -APPNAME = "Mix" -else ifeq ($(CHAIN),reosc) -APP_LOAD_PARAMS += --path "44'/2894'" -DEFINES += CHAINID_UPCASE=\"REOSC\" CHAINID_COINNAME=\"REOSC\" CHAIN_KIND=CHAIN_KIND_REOSC CHAIN_ID=2894 -APPNAME = "REOSC" -else ifeq ($(CHAIN),hpb) -APP_LOAD_PARAMS += --path "44'/269'" -DEFINES += CHAINID_UPCASE=\"HPB\" CHAINID_COINNAME=\"HPB\" CHAIN_KIND=CHAIN_KIND_HPB CHAIN_ID=269 -APPNAME = "HPB" -else ifeq ($(CHAIN),tomochain) -APP_LOAD_PARAMS += --path "44'/889'" -DEFINES += CHAINID_UPCASE=\"TOMOCHAIN\" CHAINID_COINNAME=\"TOMO\" CHAIN_KIND=CHAIN_KIND_TOMOCHAIN CHAIN_ID=88 -APPNAME = "TomoChain" -else ifeq ($(CHAIN),moonriver) -APP_LOAD_PARAMS += --path "44'/60'" --path "44'/1285'" -DEFINES += CHAINID_UPCASE=\"MOONRIVER\" CHAINID_COINNAME=\"MOVR\" CHAIN_KIND=CHAIN_KIND_MOONRIVER CHAIN_ID=1285 -APPNAME = "Moonriver" -else ifeq ($(CHAIN),tobalaba) -APP_LOAD_PARAMS += --path "44'/401697'" -DEFINES += CHAINID_UPCASE=\"TOBALABA\" CHAINID_COINNAME=\"TOBALABA\" CHAIN_KIND=CHAIN_KIND_TOBALABA CHAIN_ID=401697 -APPNAME = "Tobalaba" -else ifeq ($(CHAIN),webchain) -APP_LOAD_PARAMS += --path "44'/227'" -DEFINES += CHAINID_UPCASE=\"WEBCHAIN\" CHAINID_COINNAME=\"WEB\" CHAIN_KIND=CHAIN_KIND_WEBCHAIN CHAIN_ID=24484 -APPNAME = "Webchain" -else ifeq ($(CHAIN),dexon) -APP_LOAD_PARAMS += --path "44'/237'" -DEFINES += CHAINID_UPCASE=\"DEXON\" CHAINID_COINNAME=\"DXN\" CHAIN_KIND=CHAIN_KIND_DEXON CHAIN_ID=237 -APPNAME = "DEXON" -else ifeq ($(CHAIN),volta) -APP_LOAD_PARAMS += --path "44'/73799'" --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"VOLTA\" CHAINID_COINNAME=\"VOLTA\" CHAIN_KIND=CHAIN_KIND_VOLTA CHAIN_ID=73799 -APPNAME = "Volta" -else ifeq ($(CHAIN),ewc) -APP_LOAD_PARAMS += --path "44'/246'" --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"EWC\" CHAINID_COINNAME=\"EWC\" CHAIN_KIND=CHAIN_KIND_EWC CHAIN_ID=246 -APPNAME = "EnergyWebChain" -else ifeq ($(CHAIN),thundercore) -APP_LOAD_PARAMS += --path "44'/1001'" -DEFINES += CHAINID_UPCASE=\"THUNDERCORE\" CHAINID_COINNAME=\"TT\" CHAIN_KIND=CHAIN_KIND_THUNDERCORE CHAIN_ID=108 -APPNAME = "ThunderCore" -else ifeq ($(CHAIN),flare) - -APP_LOAD_PARAMS += --path "44'/554'" --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"FLARE\" CHAINID_COINNAME=\"FLR\" CHAIN_KIND=CHAIN_KIND_FLARE CHAIN_ID=14 - -# Pending review parameters -APP_LOAD_PARAMS += --tlvraw 9F:01 -DEFINES += HAVE_PENDING_REVIEW_SCREEN - -APPNAME = "Flare" - -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),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 ($(CHAIN),polygon) -APP_LOAD_PARAMS += --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"POLYGON\" CHAINID_COINNAME=\"MATIC\" CHAIN_KIND=CHAIN_KIND_POLYGON CHAIN_ID=137 -APPNAME = "Polygon" -else ifeq ($(CHAIN),shyft) -APP_LOAD_PARAMS += --path "44'/60'" -DEFINES += CHAINID_UPCASE=\"SHYFT\" CHAINID_COINNAME=\"SHFT\" CHAIN_KIND=CHAIN_KIND_SHYFT CHAIN_ID=7341 -APPNAME = "Shyft" +# Check if chain is available +ifeq ($(shell test -s ./makefile_conf/chain/$(CHAIN).mk && echo -n yes), yes) +include ./makefile_conf/chain/$(CHAIN).mk else -ifeq ($(filter clean,$(MAKECMDGOALS)),) $(error Unsupported CHAIN - use ethereum, ropsten, goerli, moonriver, 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, bsc, songbird, polygon, shyft) endif -endif + +######### +# Other # +######### APP_LOAD_PARAMS += $(APP_LOAD_FLAGS) --path "44'/1'" DEFINES += $(DEFINES_LIB) @@ -320,7 +133,6 @@ DEFINES += HAVE_NFT_TESTING_KEY endif endif - # Enabling debug PRINTF DEBUG:=0 ifneq ($(DEBUG),0) diff --git a/makefile_conf/chain/akroma.mk b/makefile_conf/chain/akroma.mk new file mode 100644 index 0000000..27d91e1 --- /dev/null +++ b/makefile_conf/chain/akroma.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/200625'" +DEFINES += CHAINID_UPCASE=\"AKA\" CHAINID_COINNAME=\"AKA\" CHAIN_KIND=CHAIN_KIND_AKROMA CHAIN_ID=200625 +APPNAME = "Akroma" \ No newline at end of file diff --git a/makefile_conf/chain/artis_sigma1.mk b/makefile_conf/chain/artis_sigma1.mk new file mode 100644 index 0000000..2170e48 --- /dev/null +++ b/makefile_conf/chain/artis_sigma1.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/246529'" +DEFINES += CHAINID_UPCASE=\"ARTISSIGMA1\" CHAINID_COINNAME=\"ATS\" CHAIN_KIND=CHAIN_KIND_ARTIS_SIGMA1 CHAIN_ID=246529 +APPNAME = "ARTIS sigma1" \ No newline at end of file diff --git a/makefile_conf/chain/artis_tau1.mk b/makefile_conf/chain/artis_tau1.mk new file mode 100644 index 0000000..3316dc2 --- /dev/null +++ b/makefile_conf/chain/artis_tau1.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/246785'" +DEFINES += CHAINID_UPCASE=\"ARTISTAU1\" CHAINID_COINNAME=\"ATS\" CHAIN_KIND=CHAIN_KIND_ARTIS_TAU1 CHAIN_ID=246785 +APPNAME = "ARTIS tau1" \ No newline at end of file diff --git a/makefile_conf/chain/atheios.mk b/makefile_conf/chain/atheios.mk new file mode 100644 index 0000000..111852d --- /dev/null +++ b/makefile_conf/chain/atheios.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/1620'" +DEFINES += CHAINID_UPCASE=\"ATHEIOS\" CHAINID_COINNAME=\"ATH\" CHAIN_KIND=CHAIN_KIND_ATHEIOS CHAIN_ID=1620 +APPNAME = "Atheios" \ No newline at end of file diff --git a/makefile_conf/chain/bsc.mk b/makefile_conf/chain/bsc.mk new file mode 100644 index 0000000..7c8f00d --- /dev/null +++ b/makefile_conf/chain/bsc.mk @@ -0,0 +1,3 @@ +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" \ No newline at end of file diff --git a/makefile_conf/chain/callisto.mk b/makefile_conf/chain/callisto.mk new file mode 100644 index 0000000..ec068db --- /dev/null +++ b/makefile_conf/chain/callisto.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/820'" +DEFINES += CHAINID_UPCASE=\"CALLISTO\" CHAINID_COINNAME=\"CLO\" CHAIN_KIND=CHAIN_KIND_CALLISTO CHAIN_ID=820 +APPNAME = "Callisto" \ No newline at end of file diff --git a/makefile_conf/chain/dexon.mk b/makefile_conf/chain/dexon.mk new file mode 100644 index 0000000..9d9a4a5 --- /dev/null +++ b/makefile_conf/chain/dexon.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/237'" +DEFINES += CHAINID_UPCASE=\"DEXON\" CHAINID_COINNAME=\"DXN\" CHAIN_KIND=CHAIN_KIND_DEXON CHAIN_ID=237 +APPNAME = "DEXON" \ No newline at end of file diff --git a/makefile_conf/chain/ellaism.mk b/makefile_conf/chain/ellaism.mk new file mode 100644 index 0000000..c47ad84 --- /dev/null +++ b/makefile_conf/chain/ellaism.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/163'" +DEFINES += CHAINID_UPCASE=\"ELLA\" CHAINID_COINNAME=\"ELLA\" CHAIN_KIND=CHAIN_KIND_ELLAISM CHAIN_ID=64 +APPNAME = "Ellaism" \ No newline at end of file diff --git a/makefile_conf/chain/ether1.mk b/makefile_conf/chain/ether1.mk new file mode 100644 index 0000000..21b9a9f --- /dev/null +++ b/makefile_conf/chain/ether1.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/1313114'" +DEFINES += CHAINID_UPCASE=\"ETHER1\" CHAINID_COINNAME=\"ETHO\" CHAIN_KIND=CHAIN_KIND_ETHER1 CHAIN_ID=1313114 +APPNAME = "Ether-1" \ No newline at end of file diff --git a/makefile_conf/chain/ethereum.mk b/makefile_conf/chain/ethereum.mk new file mode 100644 index 0000000..73c0c16 --- /dev/null +++ b/makefile_conf/chain/ethereum.mk @@ -0,0 +1,13 @@ +# Lock the application on its standard path for 1.5. Please complain if non compliant +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"ETHEREUM\" CHAINID_COINNAME=\"ETH\" CHAIN_KIND=CHAIN_KIND_ETHEREUM CHAIN_ID=1 +# Starkware integration +APP_LOAD_PARAMS += --path "2645'/579218131'" +DEFINES += HAVE_STARKWARE +DEFINES += STARK_BIP32_PATH_0=0x80000A55 STARK_BIP32_PATH_1=0xA2862AD3 +# Allow to derive ETH 2 public keys +APP_LOAD_PARAMS += --path "12381/3600" --curve bls12381g1 +DEFINES += HAVE_ETH2 +APPNAME = "Ethereum" +DEFINES_LIB= +APP_LOAD_FLAGS=--appFlags 0xa40 \ No newline at end of file diff --git a/makefile_conf/chain/ethereum_classic.mk b/makefile_conf/chain/ethereum_classic.mk new file mode 100644 index 0000000..2c72c66 --- /dev/null +++ b/makefile_conf/chain/ethereum_classic.mk @@ -0,0 +1,4 @@ +# Also allows ETC to access the ETH derivation path to recover forked assets +APP_LOAD_PARAMS += --path "44'/61'" --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"ETC\" CHAINID_COINNAME=\"ETC\" CHAIN_KIND=CHAIN_KIND_ETHEREUM_CLASSIC CHAIN_ID=61 +APPNAME = "Ethereum Classic" \ No newline at end of file diff --git a/makefile_conf/chain/ethergem.mk b/makefile_conf/chain/ethergem.mk new file mode 100644 index 0000000..6eeb421 --- /dev/null +++ b/makefile_conf/chain/ethergem.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/1987'" +DEFINES += CHAINID_UPCASE=\"ETHERGEM\" CHAINID_COINNAME=\"EGEM\" CHAIN_KIND=CHAIN_KIND_ETHERGEM CHAIN_ID=1987 +APPNAME = "EtherGem" \ No newline at end of file diff --git a/makefile_conf/chain/ethersocial.mk b/makefile_conf/chain/ethersocial.mk new file mode 100644 index 0000000..cbba795 --- /dev/null +++ b/makefile_conf/chain/ethersocial.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/31102'" +DEFINES += CHAINID_UPCASE=\"ETHERSOCIAL\" CHAINID_COINNAME=\"ESN\" CHAIN_KIND=CHAIN_KIND_ETHERSOCIAL CHAIN_ID=31102 +APPNAME = "Ethersocial" \ No newline at end of file diff --git a/makefile_conf/chain/ewc.mk b/makefile_conf/chain/ewc.mk new file mode 100644 index 0000000..816a5fb --- /dev/null +++ b/makefile_conf/chain/ewc.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/246'" --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"EWC\" CHAINID_COINNAME=\"EWC\" CHAIN_KIND=CHAIN_KIND_EWC CHAIN_ID=246 +APPNAME = "EnergyWebChain" \ No newline at end of file diff --git a/makefile_conf/chain/expanse.mk b/makefile_conf/chain/expanse.mk new file mode 100644 index 0000000..36226ef --- /dev/null +++ b/makefile_conf/chain/expanse.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/40'" +DEFINES += CHAINID_UPCASE=\"EXPANSE\" CHAINID_COINNAME=\"EXP\" CHAIN_KIND=CHAIN_KIND_EXPANSE CHAIN_ID=2 +APPNAME = "Expanse" \ No newline at end of file diff --git a/makefile_conf/chain/flare.mk b/makefile_conf/chain/flare.mk new file mode 100644 index 0000000..565b5bb --- /dev/null +++ b/makefile_conf/chain/flare.mk @@ -0,0 +1,8 @@ +APP_LOAD_PARAMS += --path "44'/554'" --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"FLARE\" CHAINID_COINNAME=\"FLR\" CHAIN_KIND=CHAIN_KIND_FLARE CHAIN_ID=14 + +# Pending review parameters +APP_LOAD_PARAMS += --tlvraw 9F:01 +DEFINES += HAVE_PENDING_REVIEW_SCREEN + +APPNAME = "Flare" \ No newline at end of file diff --git a/makefile_conf/chain/flare_coston.mk b/makefile_conf/chain/flare_coston.mk new file mode 100644 index 0000000..f546f00 --- /dev/null +++ b/makefile_conf/chain/flare_coston.mk @@ -0,0 +1,3 @@ +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" \ No newline at end of file diff --git a/makefile_conf/chain/gochain.mk b/makefile_conf/chain/gochain.mk new file mode 100644 index 0000000..eca804c --- /dev/null +++ b/makefile_conf/chain/gochain.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/6060'" +DEFINES += CHAINID_UPCASE=\"GOCHAIN\" CHAINID_COINNAME=\"GO\" CHAIN_KIND=CHAIN_KIND_GOCHAIN CHAIN_ID=60 +APPNAME = "GoChain" \ No newline at end of file diff --git a/makefile_conf/chain/goerli.mk b/makefile_conf/chain/goerli.mk new file mode 100644 index 0000000..fe6bd88 --- /dev/null +++ b/makefile_conf/chain/goerli.mk @@ -0,0 +1,14 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"ETHEREUM\" CHAINID_COINNAME=\"ETH\" CHAIN_KIND=CHAIN_KIND_ETHEREUM CHAIN_ID=5 +# Starkware integration +APP_LOAD_PARAMS += --path "2645'/579218131'" +DEFINES += HAVE_STARKWARE +# Keep for Starkware Goerli tests +DEFINES += HAVE_TOKENS_EXTRA_LIST +DEFINES += STARK_BIP32_PATH_0=0x80000A55 STARK_BIP32_PATH_1=0xA2862AD3 +# Allow to derive ETH 2 public keys +APP_LOAD_PARAMS += --path "12381/3600" --curve bls12381g1 +DEFINES += HAVE_ETH2 +APPNAME = "Eth Goerli" +DEFINES_LIB= +APP_LOAD_FLAGS=--appFlags 0xa40 \ No newline at end of file diff --git a/makefile_conf/chain/hpb.mk b/makefile_conf/chain/hpb.mk new file mode 100644 index 0000000..475abf2 --- /dev/null +++ b/makefile_conf/chain/hpb.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/269'" +DEFINES += CHAINID_UPCASE=\"HPB\" CHAINID_COINNAME=\"HPB\" CHAIN_KIND=CHAIN_KIND_HPB CHAIN_ID=269 +APPNAME = "HPB" \ No newline at end of file diff --git a/makefile_conf/chain/kusd.mk b/makefile_conf/chain/kusd.mk new file mode 100644 index 0000000..38cf6cd --- /dev/null +++ b/makefile_conf/chain/kusd.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/91927009'" +DEFINES += CHAINID_UPCASE=\"KUSD\" CHAINID_COINNAME=\"KUSD\" CHAIN_KIND=CHAIN_KIND_KUSD CHAIN_ID=1 +APPNAME = "kUSD" \ No newline at end of file diff --git a/makefile_conf/chain/mix.mk b/makefile_conf/chain/mix.mk new file mode 100644 index 0000000..0c9264a --- /dev/null +++ b/makefile_conf/chain/mix.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/76'" +DEFINES += CHAINID_UPCASE=\"MIX\" CHAINID_COINNAME=\"MIX\" CHAIN_KIND=CHAIN_KIND_MIX CHAIN_ID=76 +APPNAME = "Mix" \ No newline at end of file diff --git a/makefile_conf/chain/moonriver.mk b/makefile_conf/chain/moonriver.mk new file mode 100644 index 0000000..0234131 --- /dev/null +++ b/makefile_conf/chain/moonriver.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" --path "44'/1285'" +DEFINES += CHAINID_UPCASE=\"MOONRIVER\" CHAINID_COINNAME=\"MOVR\" CHAIN_KIND=CHAIN_KIND_MOONRIVER CHAIN_ID=1285 +APPNAME = "Moonriver" \ No newline at end of file diff --git a/makefile_conf/chain/musicoin.mk b/makefile_conf/chain/musicoin.mk new file mode 100644 index 0000000..46ede39 --- /dev/null +++ b/makefile_conf/chain/musicoin.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/184'" +DEFINES += CHAINID_UPCASE=\"MUSICOIN\" CHAINID_COINNAME=\"MUSIC\" CHAIN_KIND=CHAIN_KIND_MUSICOIN CHAIN_ID=7762959 +APPNAME = "Musicoin" \ No newline at end of file diff --git a/makefile_conf/chain/pirl.mk b/makefile_conf/chain/pirl.mk new file mode 100644 index 0000000..e4a73e4 --- /dev/null +++ b/makefile_conf/chain/pirl.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/164'" +DEFINES += CHAINID_UPCASE=\"PIRL\" CHAINID_COINNAME=\"PIRL\" CHAIN_KIND=CHAIN_KIND_PIRL CHAIN_ID=3125659152 +APPNAME = "Pirl" \ No newline at end of file diff --git a/makefile_conf/chain/poa.mk b/makefile_conf/chain/poa.mk new file mode 100644 index 0000000..6526b2b --- /dev/null +++ b/makefile_conf/chain/poa.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"POA\" CHAINID_COINNAME=\"POA\" CHAIN_KIND=CHAIN_KIND_POA CHAIN_ID=99 +APPNAME = "POA" \ No newline at end of file diff --git a/makefile_conf/chain/polygon.mk b/makefile_conf/chain/polygon.mk new file mode 100644 index 0000000..c6f6e0f --- /dev/null +++ b/makefile_conf/chain/polygon.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"POLYGON\" CHAINID_COINNAME=\"MATIC\" CHAIN_KIND=CHAIN_KIND_POLYGON CHAIN_ID=137 +APPNAME = "Polygon" \ No newline at end of file diff --git a/makefile_conf/chain/reosc.mk b/makefile_conf/chain/reosc.mk new file mode 100644 index 0000000..256d37f --- /dev/null +++ b/makefile_conf/chain/reosc.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/2894'" +DEFINES += CHAINID_UPCASE=\"REOSC\" CHAINID_COINNAME=\"REOSC\" CHAIN_KIND=CHAIN_KIND_REOSC CHAIN_ID=2894 +APPNAME = "REOSC" \ No newline at end of file diff --git a/makefile_conf/chain/ropsten.mk b/makefile_conf/chain/ropsten.mk new file mode 100644 index 0000000..384d18b --- /dev/null +++ b/makefile_conf/chain/ropsten.mk @@ -0,0 +1,14 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"ETHEREUM\" CHAINID_COINNAME=\"ETH\" CHAIN_KIND=CHAIN_KIND_ETHEREUM CHAIN_ID=3 +# Starkware integration +APP_LOAD_PARAMS += --path "2645'/579218131'" +DEFINES += HAVE_STARKWARE +# Keep for Starkware Ropsten tests +DEFINES += HAVE_TOKENS_EXTRA_LIST +DEFINES += STARK_BIP32_PATH_0=0x80000A55 STARK_BIP32_PATH_1=0xA2862AD3 +# Allow to derive ETH 2 public keys +APP_LOAD_PARAMS += --path "12381/3600" --curve bls12381g1 +DEFINES += HAVE_ETH2 +APPNAME = "Eth Ropsten" +DEFINES_LIB= +APP_LOAD_FLAGS=--appFlags 0xa40 \ No newline at end of file diff --git a/makefile_conf/chain/rsk.mk b/makefile_conf/chain/rsk.mk new file mode 100644 index 0000000..33df17b --- /dev/null +++ b/makefile_conf/chain/rsk.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/137'" --path "44'/00'" +DEFINES += CHAINID_UPCASE=\"RSK\" CHAINID_COINNAME=\"RBTC\" CHAIN_KIND=CHAIN_KIND_RSK CHAIN_ID=30 +APPNAME = "RSK" \ No newline at end of file diff --git a/makefile_conf/chain/rsk_testnet.mk b/makefile_conf/chain/rsk_testnet.mk new file mode 100644 index 0000000..76fe1ec --- /dev/null +++ b/makefile_conf/chain/rsk_testnet.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/37310'" +DEFINES += CHAINID_UPCASE=\"RSKTESTNET\" CHAINID_COINNAME=\"RBTC\" CHAIN_KIND=CHAIN_KIND_RSK CHAIN_ID=31 +APPNAME = "RSK Test" \ No newline at end of file diff --git a/makefile_conf/chain/shyft.mk b/makefile_conf/chain/shyft.mk new file mode 100644 index 0000000..c30ec7f --- /dev/null +++ b/makefile_conf/chain/shyft.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"SHYFT\" CHAINID_COINNAME=\"SHFT\" CHAIN_KIND=CHAIN_KIND_SHYFT CHAIN_ID=7341 +APPNAME = "Shyft" \ No newline at end of file diff --git a/makefile_conf/chain/songbird.mk b/makefile_conf/chain/songbird.mk new file mode 100644 index 0000000..c2c1e7b --- /dev/null +++ b/makefile_conf/chain/songbird.mk @@ -0,0 +1,3 @@ +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" \ No newline at end of file diff --git a/makefile_conf/chain/thundercore.mk b/makefile_conf/chain/thundercore.mk new file mode 100644 index 0000000..7676978 --- /dev/null +++ b/makefile_conf/chain/thundercore.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/1001'" +DEFINES += CHAINID_UPCASE=\"THUNDERCORE\" CHAINID_COINNAME=\"TT\" CHAIN_KIND=CHAIN_KIND_THUNDERCORE CHAIN_ID=108 +APPNAME = "ThunderCore" \ No newline at end of file diff --git a/makefile_conf/chain/tobalaba.mk b/makefile_conf/chain/tobalaba.mk new file mode 100644 index 0000000..92aa145 --- /dev/null +++ b/makefile_conf/chain/tobalaba.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/401697'" +DEFINES += CHAINID_UPCASE=\"TOBALABA\" CHAINID_COINNAME=\"TOBALABA\" CHAIN_KIND=CHAIN_KIND_TOBALABA CHAIN_ID=401697 +APPNAME = "Tobalaba" \ No newline at end of file diff --git a/makefile_conf/chain/tomochain.mk b/makefile_conf/chain/tomochain.mk new file mode 100644 index 0000000..b0cb90c --- /dev/null +++ b/makefile_conf/chain/tomochain.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/889'" +DEFINES += CHAINID_UPCASE=\"TOMOCHAIN\" CHAINID_COINNAME=\"TOMO\" CHAIN_KIND=CHAIN_KIND_TOMOCHAIN CHAIN_ID=88 +APPNAME = "TomoChain" \ No newline at end of file diff --git a/makefile_conf/chain/ubiq.mk b/makefile_conf/chain/ubiq.mk new file mode 100644 index 0000000..fe86d7f --- /dev/null +++ b/makefile_conf/chain/ubiq.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/108'" +DEFINES += CHAINID_UPCASE=\"UBIQ\" CHAINID_COINNAME=\"UBQ\" CHAIN_KIND=CHAIN_KIND_UBIQ CHAIN_ID=8 +APPNAME = "Ubiq" \ No newline at end of file diff --git a/makefile_conf/chain/volta.mk b/makefile_conf/chain/volta.mk new file mode 100644 index 0000000..e30ca2d --- /dev/null +++ b/makefile_conf/chain/volta.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/73799'" --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"VOLTA\" CHAINID_COINNAME=\"VOLTA\" CHAIN_KIND=CHAIN_KIND_VOLTA CHAIN_ID=73799 +APPNAME = "Volta" \ No newline at end of file diff --git a/makefile_conf/chain/wanchain.mk b/makefile_conf/chain/wanchain.mk new file mode 100644 index 0000000..4407e93 --- /dev/null +++ b/makefile_conf/chain/wanchain.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/5718350'" +DEFINES += CHAINID_UPCASE=\"WAN\" CHAINID_COINNAME=\"WAN\" CHAIN_KIND=CHAIN_KIND_WANCHAIN CHAIN_ID=1 +APPNAME = "Wanchain" \ No newline at end of file diff --git a/makefile_conf/chain/webchain.mk b/makefile_conf/chain/webchain.mk new file mode 100644 index 0000000..f81d5b8 --- /dev/null +++ b/makefile_conf/chain/webchain.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/227'" +DEFINES += CHAINID_UPCASE=\"WEBCHAIN\" CHAINID_COINNAME=\"WEB\" CHAIN_KIND=CHAIN_KIND_WEBCHAIN CHAIN_ID=24484 +APPNAME = "Webchain" \ No newline at end of file From db3eddcd3dcb337583b15a331e3752f442c6f522 Mon Sep 17 00:00:00 2001 From: Edouard Merle Date: Tue, 1 Feb 2022 16:44:23 +0100 Subject: [PATCH 19/87] fix: formatting in sdk --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 5ade2d7..8a16dbe 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 5ade2d77cb6f0f366210d014bc731212a22fc29c +Subproject commit 8a16dbefb7c59e5e0c8e63f7deb1e0f54fadf646 From 617b60483f84d442082498d0d3abf409940d9852 Mon Sep 17 00:00:00 2001 From: Edouard Merle Date: Tue, 1 Feb 2022 16:48:36 +0100 Subject: [PATCH 20/87] fix: build for lns+ --- Makefile | 24 +++++++++++++----------- src/ui_flow.c | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 4607051..0a1a209 100644 --- a/Makefile +++ b/Makefile @@ -248,10 +248,10 @@ APP_LOAD_PARAMS += $(APP_LOAD_FLAGS) --path "44'/1'" DEFINES += $(DEFINES_LIB) #prepare hsm generation -ifeq ($(TARGET_NAME), TARGET_NANOX) -ICONNAME=icons/nanox_app_$(CHAIN).gif -else +ifeq ($(TARGET_NAME),TARGET_NANOS) ICONNAME=icons/nanos_app_$(CHAIN).gif +else +ICONNAME=icons/nanox_app_$(CHAIN).gif endif ################ @@ -283,19 +283,21 @@ DEFINES += HAVE_UX_FLOW DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=0 WEBUSB_URL="" ifeq ($(TARGET_NAME),TARGET_NANOX) -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=300 DEFINES += HAVE_BLE BLE_COMMAND_TIMEOUT_MS=2000 DEFINES += HAVE_BLE_APDU # basic ledger apdu transport over BLE +endif +ifeq ($(TARGET_NAME),TARGET_NANOS) +DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=72 +DEFINES += HAVE_WALLET_ID_SDK +else +DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=300 DEFINES += HAVE_GLO096 DEFINES += HAVE_BAGL BAGL_WIDTH=128 BAGL_HEIGHT=64 DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX -else -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=72 -DEFINES += HAVE_WALLET_ID_SDK endif # Enables direct data signing without having to specify it in the settings. Useful when testing with speculos. @@ -311,7 +313,7 @@ DEFINES += HAVE_BYPASS_SIGNATURES endif # NFTs -ifeq ($(TARGET_NAME), TARGET_NANOX) +ifneq ($(TARGET_NAME),TARGET_NANOS) DEFINES += HAVE_NFT_SUPPORT # Enable the NFT testing key NFT_TESTING_KEY:=0 @@ -325,10 +327,10 @@ endif DEBUG:=0 ifneq ($(DEBUG),0) DEFINES += HAVE_STACK_OVERFLOW_CHECK -ifeq ($(TARGET_NAME),TARGET_NANOX) -DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf -else +ifeq ($(TARGET_NAME),TARGET_NANOS) DEFINES += HAVE_PRINTF PRINTF=screen_printf +else +DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf endif else DEFINES += PRINTF\(...\)= diff --git a/src/ui_flow.c b/src/ui_flow.c index b6b2fa3..d6c0a16 100644 --- a/src/ui_flow.c +++ b/src/ui_flow.c @@ -171,7 +171,7 @@ UX_STEP_CB( "Error", "Blind signing must be enabled in Settings", }); -#elif defined(TARGET_NANOX) +#elif defined(TARGET_NANOX) || defined(TARGET_NANOS2) UX_STEP_CB( ux_warning_contract_data_step, pnn, From 74fcac61aae9f8d831bfe8f12ace50545d9fbe24 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 8 Feb 2022 14:06:25 +0100 Subject: [PATCH 21/87] Updated to the latest Zemu framework version --- tests/package.json | 2 +- tests/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/package.json b/tests/package.json index 1dcfff4..7b08f38 100644 --- a/tests/package.json +++ b/tests/package.json @@ -15,7 +15,7 @@ "@ledgerhq/hw-app-eth": "^6.5.0", "@ledgerhq/hw-transport-http": "^4.74.2", "@ledgerhq/logs": "^5.50.0", - "@zondax/zemu": "^0.21.1", + "@zondax/zemu": "^0.22.1", "bignumber.js": "^9.0.0", "bip32-path": "^0.4.2", "core-js": "^3.7.0", diff --git a/tests/yarn.lock b/tests/yarn.lock index dd8530e..47070ec 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -2238,10 +2238,10 @@ dependencies: "@types/yargs-parser" "*" -"@zondax/zemu@^0.21.1": - version "0.21.1" - resolved "https://registry.yarnpkg.com/@zondax/zemu/-/zemu-0.21.1.tgz#528861c8c0908f88d9104406519b5468dd440d91" - integrity sha512-lWsh4ih/BMaEQYbsjXfia1sw2ouXu2nCSNV5QfeCVdvMfmFC9s95imA16P5QwKR1ISAZ55IndwPtmuxTT+xIcA== +"@zondax/zemu@^0.22.1": + version "0.22.1" + resolved "https://registry.yarnpkg.com/@zondax/zemu/-/zemu-0.22.1.tgz#378ea193ccc4836ee5407b01028e9030f70a696e" + integrity sha512-WxX65myug9tyQuoXENO4XujDpTY+guQpc+mzN8rggmIwNqleNDe/HmBc5aeTqNyORBCSJkYpUVv3O9q2xcqzrg== dependencies: "@grpc/grpc-js" "^1.3.4" "@grpc/proto-loader" "^0.6.4" From 1417120b4fcffa0f04af5128883039224c2b09bb Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 8 Feb 2022 17:27:03 +0100 Subject: [PATCH 22/87] Updated approve test Removed hacky workaround --- .../snapshots/nanos_approve_dai_tokens/00009.png | 1 + .../snapshots/nanos_approve_dai_tokens/00010.png | Bin 0 -> 349 bytes .../snapshots/nanox_approve_dai_tokens/00007.png | 1 + .../snapshots/nanox_approve_dai_tokens/00008.png | Bin 0 -> 382 bytes tests/src/approve.test.js | 11 +++-------- 5 files changed, 5 insertions(+), 8 deletions(-) create mode 120000 tests/snapshots/nanos_approve_dai_tokens/00009.png create mode 100644 tests/snapshots/nanos_approve_dai_tokens/00010.png create mode 120000 tests/snapshots/nanox_approve_dai_tokens/00007.png create mode 100644 tests/snapshots/nanox_approve_dai_tokens/00008.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00009.png b/tests/snapshots/nanos_approve_dai_tokens/00009.png new file mode 120000 index 0000000..10266b3 --- /dev/null +++ b/tests/snapshots/nanos_approve_dai_tokens/00009.png @@ -0,0 +1 @@ +00007.png \ No newline at end of file diff --git a/tests/snapshots/nanos_approve_dai_tokens/00010.png b/tests/snapshots/nanos_approve_dai_tokens/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_approve_dai_tokens/00007.png b/tests/snapshots/nanox_approve_dai_tokens/00007.png new file mode 120000 index 0000000..7159a12 --- /dev/null +++ b/tests/snapshots/nanox_approve_dai_tokens/00007.png @@ -0,0 +1 @@ +00005.png \ No newline at end of file diff --git a/tests/snapshots/nanox_approve_dai_tokens/00008.png b/tests/snapshots/nanox_approve_dai_tokens/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 17:33:56 +0100 Subject: [PATCH 23/87] Updated blind compound deposit test Removed hacky workaround --- .../nanos_deposit_eth_compound_blind/00009.png | 1 + .../nanos_deposit_eth_compound_blind/00010.png | Bin 0 -> 349 bytes .../nanox_deposit_eth_compound_blind/00007.png | 1 + .../nanox_deposit_eth_compound_blind/00008.png | Bin 0 -> 382 bytes tests/src/blind_compound_deposit.test.js | 11 +++-------- 5 files changed, 5 insertions(+), 8 deletions(-) create mode 120000 tests/snapshots/nanos_deposit_eth_compound_blind/00009.png create mode 100644 tests/snapshots/nanos_deposit_eth_compound_blind/00010.png create mode 120000 tests/snapshots/nanox_deposit_eth_compound_blind/00007.png create mode 100644 tests/snapshots/nanox_deposit_eth_compound_blind/00008.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00009.png b/tests/snapshots/nanos_deposit_eth_compound_blind/00009.png new file mode 120000 index 0000000..10266b3 --- /dev/null +++ b/tests/snapshots/nanos_deposit_eth_compound_blind/00009.png @@ -0,0 +1 @@ +00007.png \ No newline at end of file diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00010.png b/tests/snapshots/nanos_deposit_eth_compound_blind/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00007.png b/tests/snapshots/nanox_deposit_eth_compound_blind/00007.png new file mode 120000 index 0000000..7159a12 --- /dev/null +++ b/tests/snapshots/nanox_deposit_eth_compound_blind/00007.png @@ -0,0 +1 @@ +00005.png \ No newline at end of file diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00008.png b/tests/snapshots/nanox_deposit_eth_compound_blind/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 17:47:12 +0100 Subject: [PATCH 24/87] Updated chainid test Removed hacky workaround --- .../00011.png | 1 + .../00012.png | Bin 0 -> 349 bytes .../nanos_transfer_palm_network/00011.png | 1 + .../nanos_transfer_palm_network/00012.png | Bin 0 -> 349 bytes .../00007.png | 1 + .../00008.png | Bin 0 -> 382 bytes .../nanox_transfer_palm_network/00007.png | 1 + .../nanox_transfer_palm_network/00008.png | Bin 0 -> 382 bytes tests/src/chainid.test.js | 22 +++++------------- 9 files changed, 10 insertions(+), 16 deletions(-) create mode 120000 tests/snapshots/nanos_transfer_112233445566_network/00011.png create mode 100644 tests/snapshots/nanos_transfer_112233445566_network/00012.png create mode 120000 tests/snapshots/nanos_transfer_palm_network/00011.png create mode 100644 tests/snapshots/nanos_transfer_palm_network/00012.png create mode 120000 tests/snapshots/nanox_transfer_112233445566_network/00007.png create mode 100644 tests/snapshots/nanox_transfer_112233445566_network/00008.png create mode 120000 tests/snapshots/nanox_transfer_palm_network/00007.png create mode 100644 tests/snapshots/nanox_transfer_palm_network/00008.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00011.png b/tests/snapshots/nanos_transfer_112233445566_network/00011.png new file mode 120000 index 0000000..489390a --- /dev/null +++ b/tests/snapshots/nanos_transfer_112233445566_network/00011.png @@ -0,0 +1 @@ +00009.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00012.png b/tests/snapshots/nanos_transfer_112233445566_network/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos_transfer_palm_network/00011.png b/tests/snapshots/nanos_transfer_palm_network/00011.png new file mode 120000 index 0000000..489390a --- /dev/null +++ b/tests/snapshots/nanos_transfer_palm_network/00011.png @@ -0,0 +1 @@ +00009.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_palm_network/00012.png b/tests/snapshots/nanos_transfer_palm_network/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00007.png b/tests/snapshots/nanox_transfer_112233445566_network/00007.png new file mode 120000 index 0000000..7159a12 --- /dev/null +++ b/tests/snapshots/nanox_transfer_112233445566_network/00007.png @@ -0,0 +1 @@ +00005.png \ No newline at end of file diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00008.png b/tests/snapshots/nanox_transfer_112233445566_network/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~osAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 17:54:20 +0100 Subject: [PATCH 25/87] Updated EIP 1559 test Removed hacky workaround --- tests/snapshots/nanos_transfer_eip1559/00008.png | 1 + tests/snapshots/nanos_transfer_eip1559/00009.png | Bin 0 -> 349 bytes tests/snapshots/nanox_transfer_eip1559/00006.png | 1 + tests/snapshots/nanox_transfer_eip1559/00007.png | Bin 0 -> 382 bytes tests/src/eip1559.test.js | 11 +++-------- 5 files changed, 5 insertions(+), 8 deletions(-) create mode 120000 tests/snapshots/nanos_transfer_eip1559/00008.png create mode 100644 tests/snapshots/nanos_transfer_eip1559/00009.png create mode 120000 tests/snapshots/nanox_transfer_eip1559/00006.png create mode 100644 tests/snapshots/nanox_transfer_eip1559/00007.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00008.png b/tests/snapshots/nanos_transfer_eip1559/00008.png new file mode 120000 index 0000000..e4abcae --- /dev/null +++ b/tests/snapshots/nanos_transfer_eip1559/00008.png @@ -0,0 +1 @@ +00006.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_eip1559/00009.png b/tests/snapshots/nanos_transfer_eip1559/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_transfer_eip1559/00006.png b/tests/snapshots/nanox_transfer_eip1559/00006.png new file mode 120000 index 0000000..917964c --- /dev/null +++ b/tests/snapshots/nanox_transfer_eip1559/00006.png @@ -0,0 +1 @@ +00004.png \ No newline at end of file diff --git a/tests/snapshots/nanox_transfer_eip1559/00007.png b/tests/snapshots/nanox_transfer_eip1559/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 18:00:19 +0100 Subject: [PATCH 26/87] Updated ERC 1155 test Removed hacky workaround. Also now properly waits for the promise of the last APDU. --- .../nanox_erc1155_batch_transfer/00009.png | 1 + .../nanox_erc1155_batch_transfer/00010.png | Bin 0 -> 382 bytes .../nanox_erc1155_transfer/00011.png | 1 + .../nanox_erc1155_transfer/00012.png | Bin 0 -> 382 bytes tests/src/erc1155.test.js | 26 ++++++------------ 5 files changed, 10 insertions(+), 18 deletions(-) create mode 120000 tests/snapshots/nanox_erc1155_batch_transfer/00009.png create mode 100644 tests/snapshots/nanox_erc1155_batch_transfer/00010.png create mode 120000 tests/snapshots/nanox_erc1155_transfer/00011.png create mode 100644 tests/snapshots/nanox_erc1155_transfer/00012.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00009.png b/tests/snapshots/nanox_erc1155_batch_transfer/00009.png new file mode 120000 index 0000000..10266b3 --- /dev/null +++ b/tests/snapshots/nanox_erc1155_batch_transfer/00009.png @@ -0,0 +1 @@ +00007.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00010.png b/tests/snapshots/nanox_erc1155_batch_transfer/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~osAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o { @@ -44,15 +39,10 @@ test('[Nano ' + model.letter + '] Batch transfer ERC-1155', zemu(model, async (s await send_apdu(eth.transport, sign_first); await send_apdu(eth.transport, sign_more_1); await send_apdu(eth.transport, sign_more_2); - send_apdu(eth.transport, sign_more_3); + let sign_promise = send_apdu(eth.transport, sign_more_3); await waitForAppScreen(sim, current_screen); - // Go to the reject screen - await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8]); - // Accepting the transaction somehow takes too long for Zemu and takes the same screenshot - // twice, so accept it manually - await sim.clickLeft(); - await sim.clickBoth(); - // Sleep so it has time to send the response APDU - await Zemu.sleep(500); + await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8, -1, 0]); + + await sign_promise; })); From 399a95a464fa9fcc8e7326cd8600859f1f154319 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 8 Feb 2022 18:05:14 +0100 Subject: [PATCH 27/87] Updated ERC 721 test Removed hacky workaround. Also now properly waits for the promise of the last APDU. --- tests/snapshots/nanox_erc721_transfer/00009.png | 1 + tests/snapshots/nanox_erc721_transfer/00010.png | Bin 0 -> 382 bytes tests/src/erc721.test.js | 13 ++++--------- 3 files changed, 5 insertions(+), 9 deletions(-) create mode 120000 tests/snapshots/nanox_erc721_transfer/00009.png create mode 100644 tests/snapshots/nanox_erc721_transfer/00010.png diff --git a/tests/snapshots/nanox_erc721_transfer/00009.png b/tests/snapshots/nanox_erc721_transfer/00009.png new file mode 120000 index 0000000..10266b3 --- /dev/null +++ b/tests/snapshots/nanox_erc721_transfer/00009.png @@ -0,0 +1 @@ +00007.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc721_transfer/00010.png b/tests/snapshots/nanox_erc721_transfer/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 18:13:20 +0100 Subject: [PATCH 28/87] Updated send test Removed hacky workaround --- .../nanos_transfer_ethereum/00010.png | 1 + .../nanos_transfer_ethereum/00011.png | Bin 0 -> 349 bytes .../00011.png | 1 + .../00012.png | Bin 0 -> 349 bytes .../nanox_transfer_ethereum/00006.png | 1 + .../nanox_transfer_ethereum/00007.png | Bin 0 -> 382 bytes .../00007.png | 1 + .../00008.png | Bin 0 -> 382 bytes tests/src/send.test.js | 22 +++++------------- 9 files changed, 10 insertions(+), 16 deletions(-) create mode 120000 tests/snapshots/nanos_transfer_ethereum/00010.png create mode 100644 tests/snapshots/nanos_transfer_ethereum/00011.png create mode 120000 tests/snapshots/nanos_transfer_ethereum_5234_network/00011.png create mode 100644 tests/snapshots/nanos_transfer_ethereum_5234_network/00012.png create mode 120000 tests/snapshots/nanox_transfer_ethereum/00006.png create mode 100644 tests/snapshots/nanox_transfer_ethereum/00007.png create mode 120000 tests/snapshots/nanox_transfer_ethereum_5234_network/00007.png create mode 100644 tests/snapshots/nanox_transfer_ethereum_5234_network/00008.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00010.png b/tests/snapshots/nanos_transfer_ethereum/00010.png new file mode 120000 index 0000000..de12d01 --- /dev/null +++ b/tests/snapshots/nanos_transfer_ethereum/00010.png @@ -0,0 +1 @@ +00008.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_ethereum/00011.png b/tests/snapshots/nanos_transfer_ethereum/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00011.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00011.png new file mode 120000 index 0000000..489390a --- /dev/null +++ b/tests/snapshots/nanos_transfer_ethereum_5234_network/00011.png @@ -0,0 +1 @@ +00009.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00012.png b/tests/snapshots/nanos_transfer_ethereum_5234_network/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_transfer_ethereum/00006.png b/tests/snapshots/nanox_transfer_ethereum/00006.png new file mode 120000 index 0000000..917964c --- /dev/null +++ b/tests/snapshots/nanox_transfer_ethereum/00006.png @@ -0,0 +1 @@ +00004.png \ No newline at end of file diff --git a/tests/snapshots/nanox_transfer_ethereum/00007.png b/tests/snapshots/nanox_transfer_ethereum/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~osAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 18:17:32 +0100 Subject: [PATCH 29/87] Updated send BSC test Removed hacky workaround --- tests/snapshots/nanos_transfer_bsc/00011.png | 1 + tests/snapshots/nanos_transfer_bsc/00012.png | Bin 0 -> 349 bytes tests/snapshots/nanox_transfer_bsc/00007.png | 1 + tests/snapshots/nanox_transfer_bsc/00008.png | Bin 0 -> 382 bytes tests/src/send_bsc.test.js | 11 +++-------- 5 files changed, 5 insertions(+), 8 deletions(-) create mode 120000 tests/snapshots/nanos_transfer_bsc/00011.png create mode 100644 tests/snapshots/nanos_transfer_bsc/00012.png create mode 120000 tests/snapshots/nanox_transfer_bsc/00007.png create mode 100644 tests/snapshots/nanox_transfer_bsc/00008.png diff --git a/tests/snapshots/nanos_transfer_bsc/00011.png b/tests/snapshots/nanos_transfer_bsc/00011.png new file mode 120000 index 0000000..489390a --- /dev/null +++ b/tests/snapshots/nanos_transfer_bsc/00011.png @@ -0,0 +1 @@ +00009.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_bsc/00012.png b/tests/snapshots/nanos_transfer_bsc/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_transfer_bsc/00007.png b/tests/snapshots/nanox_transfer_bsc/00007.png new file mode 120000 index 0000000..7159a12 --- /dev/null +++ b/tests/snapshots/nanox_transfer_bsc/00007.png @@ -0,0 +1 @@ +00005.png \ No newline at end of file diff --git a/tests/snapshots/nanox_transfer_bsc/00008.png b/tests/snapshots/nanox_transfer_bsc/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 18:22:45 +0100 Subject: [PATCH 30/87] Updated send ECT test Removed hacky workaround --- .../nanos_transfer_ethereum_clone/00010.png | 1 + .../nanos_transfer_ethereum_clone/00011.png | Bin 0 -> 349 bytes .../nanox_transfer_ethereum_clone/00006.png | 1 + .../nanox_transfer_ethereum_clone/00007.png | Bin 0 -> 382 bytes tests/src/send_etc.test.js | 11 +++-------- 5 files changed, 5 insertions(+), 8 deletions(-) create mode 120000 tests/snapshots/nanos_transfer_ethereum_clone/00010.png create mode 100644 tests/snapshots/nanos_transfer_ethereum_clone/00011.png create mode 120000 tests/snapshots/nanox_transfer_ethereum_clone/00006.png create mode 100644 tests/snapshots/nanox_transfer_ethereum_clone/00007.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00010.png b/tests/snapshots/nanos_transfer_ethereum_clone/00010.png new file mode 120000 index 0000000..de12d01 --- /dev/null +++ b/tests/snapshots/nanos_transfer_ethereum_clone/00010.png @@ -0,0 +1 @@ +00008.png \ No newline at end of file diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00011.png b/tests/snapshots/nanos_transfer_ethereum_clone/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00006.png b/tests/snapshots/nanox_transfer_ethereum_clone/00006.png new file mode 120000 index 0000000..917964c --- /dev/null +++ b/tests/snapshots/nanox_transfer_ethereum_clone/00006.png @@ -0,0 +1 @@ +00004.png \ No newline at end of file diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00007.png b/tests/snapshots/nanox_transfer_ethereum_clone/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Tue, 8 Feb 2022 18:26:32 +0100 Subject: [PATCH 31/87] Updated Starkware test Removed hacky workaround --- .../nanos_starkware_usdt_deposit/00015.png | 1 + .../nanos_starkware_usdt_deposit/00016.png | Bin 0 -> 349 bytes .../nanox_starkware_usdt_deposit/00011.png | 1 + .../nanox_starkware_usdt_deposit/00012.png | Bin 0 -> 382 bytes tests/src/starkware.test.js | 11 +++-------- 5 files changed, 5 insertions(+), 8 deletions(-) create mode 120000 tests/snapshots/nanos_starkware_usdt_deposit/00015.png create mode 100644 tests/snapshots/nanos_starkware_usdt_deposit/00016.png create mode 120000 tests/snapshots/nanox_starkware_usdt_deposit/00011.png create mode 100644 tests/snapshots/nanox_starkware_usdt_deposit/00012.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00015.png b/tests/snapshots/nanos_starkware_usdt_deposit/00015.png new file mode 120000 index 0000000..79f379f --- /dev/null +++ b/tests/snapshots/nanos_starkware_usdt_deposit/00015.png @@ -0,0 +1 @@ +00013.png \ No newline at end of file diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00016.png b/tests/snapshots/nanos_starkware_usdt_deposit/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..ce795f34e8569e986af689fded3b59c9a8af2961 GIT binary patch literal 349 zcmV-j0iyniP)O41}p;-~WL<=z+0=1Om1tEU@3H#qtw22}5*_5JCvCo4!52c$FXo$VhXU?0M$^Bekqgf%Ka;M*^X|4 zEs9YCQ(xfJKmNC#+8dY%2&wT+>D^<3C%}_*k1^mvtO~`RE00000NkvXXu0mjf-kqOA literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00011.png b/tests/snapshots/nanox_starkware_usdt_deposit/00011.png new file mode 120000 index 0000000..489390a --- /dev/null +++ b/tests/snapshots/nanox_starkware_usdt_deposit/00011.png @@ -0,0 +1 @@ +00009.png \ No newline at end of file diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00012.png b/tests/snapshots/nanox_starkware_usdt_deposit/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..a58590b988714545e7960f7f400f360ffc5de41f GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9hba4!+nDh2#bl+hG9*4k? zQuR0Wo;SViCn%lTo!KM1sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~o Date: Thu, 10 Feb 2022 12:05:01 +0100 Subject: [PATCH 32/87] Re-generated the test reference screenshots An issue was introduced in 2.0 SDK for LNX, making text that should be bold not bold. --- .../nanox_approve_dai_tokens/00001.png | Bin 350 -> 374 bytes .../nanox_approve_dai_tokens/00002.png | Bin 377 -> 416 bytes .../nanox_approve_dai_tokens/00003.png | Bin 759 -> 776 bytes .../nanox_approve_dai_tokens/00004.png | Bin 415 -> 454 bytes .../nanox_deposit_eth_compound_blind/00002.png | Bin 327 -> 364 bytes .../nanox_deposit_eth_compound_blind/00003.png | Bin 748 -> 766 bytes .../nanox_deposit_eth_compound_blind/00004.png | Bin 439 -> 477 bytes .../nanox_erc1155_batch_transfer/00001.png | Bin 380 -> 372 bytes .../nanox_erc1155_batch_transfer/00002.png | Bin 697 -> 710 bytes .../nanox_erc1155_batch_transfer/00003.png | Bin 549 -> 592 bytes .../nanox_erc1155_batch_transfer/00004.png | Bin 828 -> 823 bytes .../nanox_erc1155_batch_transfer/00005.png | Bin 471 -> 500 bytes .../nanox_erc1155_batch_transfer/00006.png | Bin 422 -> 464 bytes .../snapshots/nanox_erc1155_transfer/00001.png | Bin 338 -> 328 bytes .../snapshots/nanox_erc1155_transfer/00002.png | Bin 697 -> 710 bytes .../snapshots/nanox_erc1155_transfer/00003.png | Bin 457 -> 528 bytes .../snapshots/nanox_erc1155_transfer/00004.png | Bin 828 -> 823 bytes .../snapshots/nanox_erc1155_transfer/00005.png | Bin 783 -> 792 bytes .../snapshots/nanox_erc1155_transfer/00006.png | Bin 527 -> 558 bytes .../snapshots/nanox_erc1155_transfer/00007.png | Bin 294 -> 312 bytes .../snapshots/nanox_erc1155_transfer/00008.png | Bin 427 -> 464 bytes tests/snapshots/nanox_erc721_transfer/00001.png | Bin 338 -> 328 bytes tests/snapshots/nanox_erc721_transfer/00002.png | Bin 697 -> 710 bytes tests/snapshots/nanox_erc721_transfer/00003.png | Bin 402 -> 442 bytes tests/snapshots/nanox_erc721_transfer/00004.png | Bin 770 -> 770 bytes tests/snapshots/nanox_erc721_transfer/00005.png | Bin 363 -> 352 bytes tests/snapshots/nanox_erc721_transfer/00006.png | Bin 421 -> 463 bytes .../nanox_starkware_usdt_deposit/00001.png | Bin 388 -> 405 bytes .../nanox_starkware_usdt_deposit/00002.png | Bin 693 -> 735 bytes .../nanox_starkware_usdt_deposit/00003.png | Bin 571 -> 621 bytes .../nanox_starkware_usdt_deposit/00004.png | Bin 432 -> 479 bytes .../nanox_starkware_usdt_deposit/00005.png | Bin 333 -> 364 bytes .../nanox_starkware_usdt_deposit/00006.png | Bin 345 -> 379 bytes .../nanox_starkware_usdt_deposit/00007.png | Bin 294 -> 321 bytes .../nanox_starkware_usdt_deposit/00008.png | Bin 395 -> 433 bytes .../00001.png | Bin 526 -> 566 bytes .../00002.png | Bin 761 -> 773 bytes .../00003.png | Bin 400 -> 424 bytes .../00004.png | Bin 396 -> 436 bytes tests/snapshots/nanox_transfer_bsc/00001.png | Bin 549 -> 585 bytes tests/snapshots/nanox_transfer_bsc/00002.png | Bin 761 -> 773 bytes tests/snapshots/nanox_transfer_bsc/00003.png | Bin 348 -> 373 bytes tests/snapshots/nanox_transfer_bsc/00004.png | Bin 404 -> 440 bytes .../snapshots/nanox_transfer_eip1559/00001.png | Bin 314 -> 353 bytes .../snapshots/nanox_transfer_eip1559/00002.png | Bin 550 -> 558 bytes .../snapshots/nanox_transfer_eip1559/00003.png | Bin 374 -> 413 bytes .../snapshots/nanox_transfer_ethereum/00001.png | Bin 526 -> 566 bytes .../snapshots/nanox_transfer_ethereum/00002.png | Bin 761 -> 773 bytes .../snapshots/nanox_transfer_ethereum/00003.png | Bin 396 -> 436 bytes .../00001.png | Bin 526 -> 566 bytes .../00002.png | Bin 761 -> 773 bytes .../00003.png | Bin 359 -> 390 bytes .../00004.png | Bin 396 -> 436 bytes .../nanox_transfer_ethereum_clone/00001.png | Bin 537 -> 572 bytes .../nanox_transfer_ethereum_clone/00002.png | Bin 761 -> 773 bytes .../nanox_transfer_ethereum_clone/00003.png | Bin 403 -> 441 bytes .../nanox_transfer_palm_network/00001.png | Bin 547 -> 585 bytes .../nanox_transfer_palm_network/00002.png | Bin 761 -> 773 bytes .../nanox_transfer_palm_network/00003.png | Bin 381 -> 435 bytes .../nanox_transfer_palm_network/00004.png | Bin 425 -> 460 bytes 60 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/snapshots/nanox_approve_dai_tokens/00001.png b/tests/snapshots/nanox_approve_dai_tokens/00001.png index 6816e9932215482705acb4f99823db0361a6a07b..3add5243424de046036f4d663357330fa03b0aa4 100644 GIT binary patch delta 347 zcmV-h0i^!k0`>xsB!4|gL_t(|obA|A4uc>JfMK@mCf@%@++`1D4Jn8kWwiDGo+e=v z+EJ900001hzkAIdz^0tDYFU)`48A45<#P(VF+{0i3V~ zaSf|VMyf(A9m;PRi3gYI=bakeU;*Hn-RbNG@^^n2#zH)lQJf t!BB)30000000000000000000O<_q%rhjemYo0XTKXk7u zWNZZtQ6Bola{^3M9(xHmi@u5YcG*inRk`2ho3oEpDRQ+fTYvOiJ%HUAD?y&BKLFsv z^plKvDf)ZnKH`NgR zpri!d9}7K|M@0gvRsN4ZuKE30CP3_3vx(cKU^Vv1_U8HJ3FyLu(oT4ll*Mo{5+@%X7WEnyxz)t$#Ds9P7 zyO_ic0RR91_**HZl#=yT82DIUKnNj}&@an@pL~C4L2j_|^bWAn*b>W_ck zt?IP|+&s&vk^Kf#^PNeSwj$&=sh^c(>rD<*T~FEFY_{Z%KT&(Ix)&s)(|KO4hpA}h z9CU`MPe*=-p?+MnB8C{!S14(dGjA#{-O&3+_2U*#m-i%Kl*NThC*VjcahICE^LoW) z5w6$j-5OF~Vg1M1kZ7or_73QIv3iZoAQSy%8lfioi;)9MR3S?{K_&-N5nccQ00000 j00000000000AQLQN*ox_K9}5o00000NkvXXu0mjfQ3A8p delta 350 zcmV-k0iph&1Nj1wB!56jL_t(|obA~`5`!QNKvAaCn{fXld6zCaWiUYy#6ac0l~t-V zQIOO*0001BW!tum?!v;p(KpM%Jjs5K?!ciqM&A4I(R(i%#C!C%IFH*WJG5V&egcx) zdgJ=ev0kG);9PXK#&`N6W*LH3i+eCj0`$nfi17)CXHNGUg@1~3V{%${HTh!_1^@tf z8u2cee>JQv4>T+k^jEgMeEa`fnzSY0;#I0zW_p;fN_A(t5YvT8aWq-K6br6zGhNZl zluKu3y%J8Aj?Xj`(G&}2-Ao+q`5U^Lq8i#oax`x^iE&+ad@ZP#UR53A$K^Q*=*4*8 zk_k9di7XP&?^k^l$1n-&xw<%pB>$>xsLR%NICsLCC#%Oe3^LI-lL$4@H%1OdViX#w w5M*+2E5Zu^000000000000000007+P0|D$7d!UEGa{vGU07*qoM6N<$f`<;8(*OVf diff --git a/tests/snapshots/nanox_approve_dai_tokens/00003.png b/tests/snapshots/nanox_approve_dai_tokens/00003.png index 0f60a977678b6c8469e69ded03e896c85acd7e41..d1a0cdc26347e1e22ba7a4f6fc12bf7776387033 100644 GIT binary patch delta 752 zcmVfEcbSE2C`uAigR$kG-*1&7 zLdXIHZYQM>LI@#*5b~YWT5GNNuN?c2<4<+~rKR%Mh zo;{fp(4M?61!qmy#>hH#Y~ERaN+~~yWBWD1JSRuT>1aj2{}3jG5JCv~PJ(M__^#;R z=h~&dzw$dBM`mUK+Idm8OyBd!?SdKJae^tG64%b~Q9yCR3GcekS+iMjcTNlH7ah1Q zwzJW>-WFHP)_*$g5####5I^G`i;7t2%#QP^+SLHdg*MZHE&HFF0C3hfe@AsfUvFbHk7D;*#Y4+k@!|0~jGoP#@@8!5K|Ycp~ZH zoEG1?ITms^H6Ix<13L!mAotV6moQ8+v;P=Is+s+V;eQ-t!YY(WkYvumt?2YZYUs)6 z{^Z{;N8*7aojRj9mpt)oq5tsB01;ySmQf@ttO=sER#UMt`y!$yBAt!~(gsr_I-zQB zcp;e<JOMhy(6y+E;X@*pdkOQR*NPMB zmGyMXUq|DYjXT78goWHWpu8l;^Q0&xZ{!0e0iKPHCXKC0TdM@fE)^YnhulPUVi)>cjpXK8x zU|CFk3HcLncM%w=mFdOjBzXevNQd)v@YZqH$ln1E@Sb#QlCPo8S1qtzI}vrp{CfV; i=QbgP5JCtcSNR8+miB0000fEcj>|nN$uL~4^Ux2TZiqpDF^;6s=YLI@#bbAn~)xngscYt?09d9=0i^VgTErRspQ zRCR_cTUurZy5T2w(9%-;&VHlQ(sc-Q@4C(2Ze2l>UMZrSbl`0vwJQUb3){^)Hf+By0pP$b!m_9;IC#TV{b@-QQ{)HSv5*O3 z9O#52_&mcV@~5IN0p~Rg=!nZNez^lJbO|aQ9VE^dE*fSP84pN`fFW2e)Fw3xBDhC$069zrJjV2aa^=jDoy* z2knPD14M}RTUwrsFeZqml&XqN^;|^MM5NQ!K(<5Ih>ok)8eT}c#W>`i$UVV5bG7HJ z8HC3I844~4r1zq^BzN@%^{*3AUj)JngvJ1X9GBaF5Ll{Ud?jK4Dx@u z70zOL>3;{|v(2Yvt@>oL#0ju2hNe|b3@;MtIhQalcCI+CUYSp~{5Th1Y}_H%BMijO zarH_jMiMamw8VRs54utS2i3=_o!m#oE*XtoefF=&x3;GSP6#1{5VD;0e^FA)wU($E zik-HbzscY-Q3Q}V!}id!m`$u>_IWn?o9Zx=m00&@dHVzmi>aHiJ^^ApALPa~ef8J#*V%}9wzie~!5e4gfDe$xg2&3}a_mZ18X2Q8uJ3Cc@N z(tJ^mLsralT-+S=eF*~q0DPti-OzD&B_Aw4i|XHegU`|W)aA&yr=-6|Gqb1OXVLh# z{GbP?In_HDw0{}QBbtSoJ+T>QQ9Ni!j{cRedCiTPZvQZ2TKuN03`qb000000000000000V3{An WQd7bjoEbF$0000_FKE`M}libkK9Og##Lt9k$_rBp+|Y!2eg_f0*3O=gyJE@7&T(ykW_-|@Yg`!u)m zm#OGiK=UN}mnC+-(OgzPefbr>du`{Owb4%zCZPBz7JbBnYA@S>aqMC?F<4 ztepVuinfO%H%cjgI{M>joHX@fByk4%$2NmZ^p_cgn&>aa94L{6l-P%r2rmEt00000 j00000000000Pr<;2r$Dx1dyus00000NkvXXu0mjf0Kb;s delta 300 zcmV+{0n`5M0>=W7B!3P`L_t(|obA~`Zo?oD06<#hC;b0O{!0&0TnffXo0LUi=7f=D zt#&bBoDu*4tZdu1=nxim&Hk_&%v0=3bO2ptj&jcXWzM;}q3mhf)pOF%V(<5_u6+Xz z+im0d&RCz(0i;xn)^emTVwNdrwY=|UDL^~3FCxAG<;t0EvwzUtwefISPQR(2MHm1e z&_{Ft-+G5OZD+ObY`2mpTTHvpuHF{D>Oa3srw2ZR&s-ld#aYlW6At|NFX7VR$L+~& zZ(yzhJUBxCcJ?r*wWgp6DL}Bg0I_fMcJs_bt_P*n@5xt0_X2k!nJ3UU)=jeP4|9-e y*&j>|BAJCEStW-fNiP5Z0000000000{F^Vo@xbc*?!w#v0000eq?&UsMMN#?VfGG6z`QAoj zzyN_9r$q=Mgb+dq`A*LBJkJxqmDqnA|5kTEN+|zKOuP79-GLByJlxfA9LIJ2I1Xil zUs=WC6`%sDR)Y$Sdr>(lHg2HRv-ZmSY_S4Vu)w)L=An*wG=HLRvVISc2R7BCLRvvz zyZ5Xdfb!;bD!6jGHAd!XVzX!d5s{yTZRa_`-6x~%G@8--Z^DESLI@$>N&6Ujzg$E- zC>vEA4V)e8dZI2k694v=YBy;#Kj|VJZulK87ZDHE#>zXcec~|JGZGC7=_hgvj99l8 zRAyE(#qudLw|@w7XLr#@2SB*{6KY2PWjF>aVHR3RBghiWbhL}i&b z(TrFJiIACGacgl&5JCtcU&6|tC@DYuUVYqe$ z>*w8~FS`vumj;=C^ZFFNB?T2JRB58i*=q$n$DUHCeDpE2>*Kg;XrBQfgb+dqA!Gsn Y0ZHH;=cH|FjsO4v07*qoM6N<$f+F!`ga7~l delta 724 zcmV;_0xSLg1?&ZoB!9C>L_t(|ob8)Yc7z}dMbn<{#QiUcz4XJDasq@GM9FmC{i=uo z6O8295g~*SLI@$`%}FV_P8t1Qh0om+_#>rs9LGQKsf(}O6Bqz4{M>RJhxd^DaQdZm zZu9SnMisD74_TBHbmkusS(1fPO19JE#2`=#TIdv&TXN>fF@G)(_Y&m^5Rv1T`|Ou7 z4)VhP*gXM})?&;p%4PYiYE%~Z5+;NYLI?@YcpG|d+OF)_5DTi0+Myd;Qo~?v&9+~k z!ndu)Rp5jNcBg9=#DcBf7}A?z&{pw!%0%zN;kXl%JaJ1AWr@^VV)l}8Eo5Xq%G5|Pv)%5Q-%L9-huPa1k^(S!OzN);O`@#mRG{|A+P~SWP{Yvry0>C45JCtc8~6t9fD(`k)y2L50000F1DKvCMsPT2pF*h@b=VN?)8#u(h@p0A7_ zm`Fsnl@I^`0D$Gb)?YHEbbN?0wzdq9d2yWeUb`nS(;td^wle`Kr5Izec*F1Ie8g1# zMEpOOdK`Oj&zRGFFTS2fd<*aB)NxTGl~T&l%qPlm)Q$3@H-CJajwhC&`Zp2YYrmC` zd`vNd97^3->|LLOZ3!rfNxgDIBT{Ftl0UafzNmst#{c6pX&VBEu*>_<(b1e zt#=~(LEdP&i?TA#!hz{M)?X=^(YRm zi)3-uO$BE{0-SSFzuw){n}PpC^@cG#rs{FMpfR%DA9}T@yZk+7rQx3>p!5$1GfW^B!7NML_t(|obB0Lj>8}fKv8BiJ7NDzVlVT7gb)v72*gQy&sR%{ zLrp>gI0pa#0Nn1!@Z2E;=bZOmD47bCEJU#KXWf8pUX=9Qb2}ivsAFbf2uFp&@=7bRPLSZH`)do#t*1TyZJY>GGvtYwa zSUI0OJ>BnRzkfG+6qV~ivN-C{fU}_klx=GMz0;Zx1O0)*p2R}Trbn*@>D5~c!eueM z{55uU!-sUh@D=N^$_`j){gySwdRHK|r2a|XnYrG!W@CytYmo=(eZm&q$Ll7U?BAx5 zYO;Sb`oI#SkflMA>4T$4F8}}l000000000000000a2CuzCgMtZ%aLz>00000NkvXX Hu0mjf6$QlY diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00001.png b/tests/snapshots/nanox_erc1155_batch_transfer/00001.png index 0fe25a9d46ca6074d55aba8529bc7f82ec486e08..ba1dfa0e33a5efe5e9453364b3e23ac47f2b6a47 100644 GIT binary patch delta 345 zcmeyv^o41HO1-tGi(^Q|oVPclg_;$390G5@^xO1bHC6v_LR+GMvIhUC}%%4apM0T7u#sI{O?`abViFstNfB5 zYcd>LqOYWPu;s30RZ%eBlo~@4!?cM$EdH(Y^|ALis z6_RV8-CDZL#5YV=)iuJ~`9QrQ0G$cOk^5L`zmDWkd%7MXQKE)!mN%! z-}Cd6U_$>XuWvnb{tA5y3i@UDXx6>OU8-g4gLJN(I{R|nJpJ}wpV$7u8Cg;FMoAll pHec{k@ActnTU5yiaytSvB<`!a^FZy1;nbZVK~Gmdmvv4FO#sxAnHB&5 delta 353 zcmV-n0iOQ!0{jAyB!5FmL_t(|obB0d4#FS|fMGP=r1w8k@8XXogiyp12UzkxzubmE z%Ez`YB>(^bV7bTc4!EeQh}c6_EsKeWJ+r2Vhf~!uviWxvZd>60J$HA&%g*jIgc*QS zy>@qCz_kdfZM|F;5qJDZ1JD#P=%rv=(0O-)U;~iiPk8_U0Dq(z+0ftfk@j`>-unAB zhkwj%rY-x${FjEx4B7R5wnHX%|n0v)vL1oY>+Fof2mf$k6qeE3(c$5 zk7Q<_XAO1!;%uv5gDo~`iA-4m2G|LJ3piT*N;P!s*d7=xYI zg?9Q9WX51B!V3TZ00000000000000008H}+6QJ$u76EPZ00000NkvXXu0mjfoeixz diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00002.png b/tests/snapshots/nanox_erc1155_batch_transfer/00002.png index f8ac2d140a0138245861a74a6a8a1173df87aa2e..7d01fe80c981e4dacb153b84d86a76d1e5bf7ea3 100644 GIT binary patch delta 686 zcmV;f0#W_B1;z!CB!7)bL_t(|ob8)ka_b-rh3TE{#QR?od$|vudMNtg$iV?M=X-K6 z2w4IFa$E`_gb+dqA#dkvwE{6}tzF4+97{C$Xlkv}6G{1At-u^Ef25lb|5ht7fz$e@ z>C?@O^bU{~&*g*k4#-Y=2gsnGYZ*xIfbu)~=dwN_gb+f=$A2=&h9Y~r_T<^+1KNgC zR9E82QA>u3sS>)oAq|}pu!|U%Xyl{BVSg)?7Y*9Q@h4_OsEe2bE?KQmb=Ge??)-Rl11TibMel&N0TOV|I%=G4 zOJoHwnhn>0OU`-S{X`^$^if;kFGL6a$n`EMDW;KW{kNf*n$~|a^ubCPg;p{!GJWtU z(!9`rLqmzo((M1DyKFG8Fg$jESxi4^;q0xua#eG++J7DJG@(`hMqhp}(P~l?{}C*$ z{6|(L42^In6@j}{J)sOo)?8ZaYjnSt0$z5 zx1mC|m5l02B1 zs{9bZL?f72cr^DHW&KH5jz?!`mlPqM9? zRa>#%0R{dX1C(>4;X?kxhuTrLa?kp0D6$BH%O|oL?wyTk*>zzcgb+dqA>>*913aAu U#YLiblK=n!07*qoM6N<$f+R#qZ~y=R delta 673 zcmV;S0$%;b1-S)~B!7TOL_t(|ob8)ka)lrag=wcdasNwVFMV+8Fyx05MT5QPd-5WL zm_UGdErk$52qA=!$N9=uAV#gV{kd&hmL?xf=Z07FldZrU4wrCFJV7@D+MlnR9N*ar zd^&VMGIT&P|6vi{wvCH0A%qY@$h#P1L-*~Szqe~o|9ee!Q-3H$btR4*wPdK6Dxtd@ z($FaZyNGd!b`mVLR{t)3f%F?q_28OYipe@%$!X*4#7@GhY0}R=^$+!@)nur)te`fr zRI8?FIeDpY1h z!9-~&x^}JbThQ|&ti|HpVoV|5du4=AUI|H63wCbPe%kL#xO@C_QKZ2!||H!I@p%KocB5;?g zCzRpHnoDb)1<&WxazU!CWxArh=x&vfC$1b;!R(<_yNpJUFK~j(YlEt;b!`=P(n4*o zSHoLHwemZ%7|(#|fdU*9V0Y)Vnj7@2=>N(WG6#5ELaI$^b%(U^Hq?rGPVBZ`sapcO zn(79zm49h%bJc26RlJp>C!*?tYd#@_5JJczyyHuGbxWsibCKl1%v9xv045s2yuz)y zzbN@9VL2Y1pmep|YY)s3l3j-m95E?=VA@}kNSnU8@qr82%00000NkvXX Hu0mjf$c0FG diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00003.png b/tests/snapshots/nanox_erc1155_batch_transfer/00003.png index f663b0b3b8e7cd0675af32c56c570463ad3cc163..950fd72aaea19c12ebe953827e63d1da749c1441 100644 GIT binary patch delta 568 zcmV-80>}NO1kePKBYy%HNklzI1bzFG$^k}l7=JXnrGEB&R@*!w$eqSy`8m!-~hA` zQ_N{x+Lw*O@;DAL9(B5uQZ_TnIL$o8lu6ZewO1Fv0iPE2Zhzx3F73<4{8ee@NmqBS zhccrYtu* zh(p+{Gjf-*bbsj{lPK)?j}Qk{RbWNfLHFrL^(g_@N)auwQ2p&zn;8Ln9aVQVLMw%> z*Y3oaYpT{}T!_Y&UgnwIw%j&evl=A89x={Sx~eqzB}}JK;grqSv1b7M&#v-s5Y^F^ zFonBOj1j?EYK)nG$Up$O0s=>?dX^c_TVe0n9Bjwd%zyPCVeNfP#PKXCJC{|@GY@Jn zquD1bI*S2NQMzSOPcZ;3?i&NBxpfx;!9^!C21}{Cca9nwV^HjD1$=};`Fy6Ul~0gh z18iFX;wQdr zTLJ1BG%@c;mx`%VQVke$mIVL+000000000000000cnALsF(B(E^GVnM0000L!BYy$xNklQ@-BUFY8?_n3{hO?`<`|g z64(GC{%a`!00000pUZl{?pA#`J4$47n(c_IM7~qJY(HlCBgJRsd}Gl0LxO(fC(Dr< zn*9gcfs@_T-MTExx~{U1YNd`?d1zTxEyh6UyDf;ivyP22^M80gc>Hu5s}>^%I-L(@ z(TcPaFv6XgK^}s@=!p}4!~#q|$TIVI`lpa{371FSZ!L~#eL6WOVEakc)udiuEnC}g zzl05|z=Zd&r`BU|XaE2J04Sw=rFf~zxUAxAu-cQgY;M(WLG$#7uMg0I zTJog&oF%&%4u8)Ys^+SP)(|bFc0ReX;<2$Mi+XmqVV*K))k%OkVw`8{stDo#SF5FA zoSn(l`+d#=`0uVtw2_9kkm=Fgx*nWUjgh8?LX7$Z1WGHp%Z&TBxYb0bVQc65OISOP z8A@${PI#YLsJ)D4Os)tP3!tKe<)TQj04?rY1CZRBg@2%;6J*xlQe=2@)X*5|e{FZ4 zd*PpSwekrPY=CJez<52aD?`c-gQ8|kTm5YOYGpvD9QSq`(_T$^Zfa9 zy_*H$)F{+v>E#@5!HMU|y!#L)gb+dq`I|)D(5@m-*SqSPyT>!zu>hi_o{mQ7n)d^hUeefsAI5pc z$HY>nQ#+uZB=x1}EaJ1(DxUGniZyb_9KYToGt(K^J%1ew&~7oag}e5!#*MFX-8G$6 zPUQl$!R<;zg^~NhO92s;NsofH(=q$0qEl-+O_pu)6eb96kQx2QFhb4fKMdF4O?V2u zNfKnP!B%v5JH8v5R`xpOiUmxwVw6a))by2(9B;cKZBfMU6kdbSy8|{RMe(T}1-jli z!I7tufqzPHky;Z#-B6?~#9gM~-M!Q!{vKRg$>Y}YR)lA(-Jxc8Gc5~ox=Tu5#vI05 z(Z6QC8JB)*ObFb=YU_2~_VCcUfml3j&{UVr8Im2~H3(O+FzGU%w8+Q<$$|OyMl4x? zt^Ll+N}0wSX%&3rp5)kkH%3h7IcZ)LsKlv`et*Dv*4pQPn#OphOv$ccq}B)_gb+eV z%f?^IXfYE6p$6?Dz1t4;Gd_)}0< z2i5rV9I*rN!(^556GDG;!~zU6-0eE&1KIqy2D}E4BYy(}NklvV*Mef&v9r1o}-`Fer@TCrSqn_4Sxz>pV_#6AFy$wxA^k2 zJBdBYqj}9#HHtPGpFYHgSHS2~w$Ul(^WM*KIr0KOw*tzJC-?ecSC_PYu_-;h4oDVSXZbhvZ@0un@6=PSRq2p1FsECY zM&se6&9&HYIDebgEQN4f?+i*~h~#Lw4N)7nN{0iwC6yV-guTH`G?J*tmzgsFaa%nN4hAU0&{ncn~akB&io9A zE1wffjV`T#wv)8ezLXdnHal9>MyHh*%h$*iv;TUDtbYt=V)YD6K)=L9&&t~3HNlnd zGCee$T}I^u^v)d$Lxqz2zzYG9CW{sYdxvvt6W4WxRU1vFZE+VS2(FXq{bLxeruPrS zIrt>pg+58*WX{2(X!j2MHZ;xbb;uP9m}*5Yky@!~EA2U6c16mfh}|W;0-<*WEKG{z zQyU7}dVl={d!9-LO@f0|n*geYB55IRG6k>hr55pLaBn7$Ys*U!p00j{n$^uTEyNj4 zDSa8U8=vxiS@~t$?RQ+Ds^3xRvWJIm8;Hf-22~B|Tp?KjUV(5I8-p(MO^ftAkenFr zsK=5Cc(mSGtdMEWkZywa+>@Le?}HxGaZVZ+1%FNAP)EODJ#GE_KMi9%Ri@-nH&Shc z5JCtcr02vx2uMV>D^SojO;G4-V0q|CA@1cZH$eM}IGrtkyRGA(krN kF&_d#2qAgagCm{ zKPFWEGtV;l^@b;%il+LKkyA>tQ+aHIs8cr7OwQT&}@W)J5L+$He;~m+f z%BX5h>Xb^X_bj-&% Q)c^nh07*qoM6N<$f*u&?od5s; delta 445 zcmV;u0Yd)t1J?tPB!8YsL_t(|obB0Ba)clZfMMF{O}PJ&xJw_Lp$x=`0U~by@1e8m zZomklX$SxS0D!x%=@C;(hVQgTd-fQJL8e6R@#E7>C{F1Z zV#nt3H^x|=uwe|ABR79;W1j6PyOBFnb+~P4Yt;xUH}hwG=zras0b=~lui19a;x_|y zE6&aBHZtP-=??sfF;1V|D`L*I%M93AUKLhcOQ#D^F0<8|7NiyOGRRq|O6Ofj%epsF~AX5_X5xhh*KBVF&IL-Eqqx6I>BSWHA) zJ+40M<>hRL_tlZsH!8;29ObsN8-jQ!6{hrIB+h><#?75Bd3M^uzJ3N=Qs&1Ft<*DM zWYw~jZOvdI;o1&L^X00000NkvXXu0mjfn;h6L diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00006.png b/tests/snapshots/nanox_erc1155_batch_transfer/00006.png index 4211264b4f4d4f2c32b6a2a4390c415ed81ba2ab..690bb3d26a7917ad9bfac6437e05310dc0f09696 100644 GIT binary patch delta 438 zcmV;n0ZIO*1JDDIB!8DlL_t(|obA|cl7k=&fML4Rn{fXlahLt!$WRC|^675h=a+*v z*r0%M4gdfESnjpH%MikG;JvT4G{@|Wv)+664UF`M@*eFRfDnTBK6`lG=i_|jG<`+v zuS*$64{nJ$+|T0vEd0rx*(viPW-5dbvl)Mw#t|FSPAB}E3x7|Xg35QoozH%4JmNK3 zgfx`cn4Mie2HOT8n@q|l*Htogx0iTao4c~!7mvZ_DafAUTLU8|QOWGC`NutQ3QDJ% zNL;A(lx1;_i^ayhi!cBHz;|k|hU!I?v@!b{Dz|#dS7>=EYtaiw<=rYJ*jkHTwe2tE zHmZFM>05ZE^nYeKr5q@CqSyO|+*q?G7URB3*O##I?dyL``fsCc3L4eBqH6$*U5Yd2 zDB@z^ip8c@bKXGG4oq4qv%MMQnyY1xLR z*VwnA%Er_ZXJBN-MS5qimT*dv$^J4zs>%LhjKNOKLN7aAB$+Xoiu3{i0000000000 g00000007hc0&=@~8%mo%?EnA(07*qoM6N<$g8skPNB{r; delta 396 zcmV;70dxM)1EvFzB!6v5L_t(|obB0Lj>8}fKvAZeov{BUv6p@zMG+Wd2#+Ma=c`4; zFs6jZI0pa#04(>nvF#9obIyCOlr)7pbVS(Ye|HClc~H{N?mGbIA9YM_2qF1kjBr#= zO7aT7CI0KL$5h6il2e+DS7vB_5{ONrRqYUC!jz6@UU`?8IAWr%I9;gQ-X_ q0000000000000000000m%@+}-V9^a(|FZx9002ovP6b4+LSTYs>9%hG diff --git a/tests/snapshots/nanox_erc1155_transfer/00001.png b/tests/snapshots/nanox_erc1155_transfer/00001.png index 43b9232f5d052e15f82f2d76103e4428c9cb7ab7..2b0fd141fdd7ed38389b9aa6e0dfed78e90a69ce 100644 GIT binary patch delta 301 zcmV+|0n+}`0>}c8B!3S{L_t(|obB0B4uc>J08qE=Cfxr>++`mohM=NLoKW-LmpYcX zwxBE11ONcHd-cA7Q*zGpK}u;kEsq=KVZ-|LzJY60Q7$tyxOeXx_|0LxhZ8ITdveY} za}y~6jYU7D6k@?yij4Gr3k zE;j(mP_ElSOM$PyQq6$PO@+x6nNKV|U#l4(~Y5SpCCZ^*LJP2>B+6ihm$fAFnjZlmJ z&E%jbt58n|K_-@izY<;m00000000000Qj3P+lQ4+Z>yZ400000NkvXXu0mjfbf}8m delta 311 zcmV-70m%Ny0@4DIB!3x6L_t(|obB0LZo?oD1yHxjPT2pF*h@bmSqS`~RSX{YoUb?{ z5xE06hGhW&fZ@Jocc4qoIi=KI=A6rBDW&$EF+F^^oO7A%`nrm{ZE%0zvpdkM9o^3m zrT|a%n%#k4cu#_ASudwW#1%hM0X9Vpy%cN-dfuHNSOJ#!Lw_CsfaMOmq1WwSzQ5Vu z)-E4^yo&O?cGInhHNNW6w><_}2YCCDY6g@I+ROj08nBz=ck>uv?`&Z2^7JfWu$#_+ zQh!qIUg_VyXQTiHShiN4gEo6LxaU$6Z!_*#xb4z<1{}}gS$Z-(zNwalnfL=w;*B+S zg4zvP`onBQEinDT)L@002ov JPDHLkV1oPXlXw6C diff --git a/tests/snapshots/nanox_erc1155_transfer/00002.png b/tests/snapshots/nanox_erc1155_transfer/00002.png index f8ac2d140a0138245861a74a6a8a1173df87aa2e..7d01fe80c981e4dacb153b84d86a76d1e5bf7ea3 100644 GIT binary patch delta 686 zcmV;f0#W_B1;z!CB!7)bL_t(|ob8)ka_b-rh3TE{#QR?od$|vudMNtg$iV?M=X-K6 z2w4IFa$E`_gb+dqA#dkvwE{6}tzF4+97{C$Xlkv}6G{1At-u^Ef25lb|5ht7fz$e@ z>C?@O^bU{~&*g*k4#-Y=2gsnGYZ*xIfbu)~=dwN_gb+f=$A2=&h9Y~r_T<^+1KNgC zR9E82QA>u3sS>)oAq|}pu!|U%Xyl{BVSg)?7Y*9Q@h4_OsEe2bE?KQmb=Ge??)-Rl11TibMel&N0TOV|I%=G4 zOJoHwnhn>0OU`-S{X`^$^if;kFGL6a$n`EMDW;KW{kNf*n$~|a^ubCPg;p{!GJWtU z(!9`rLqmzo((M1DyKFG8Fg$jESxi4^;q0xua#eG++J7DJG@(`hMqhp}(P~l?{}C*$ z{6|(L42^In6@j}{J)sOo)?8ZaYjnSt0$z5 zx1mC|m5l02B1 zs{9bZL?f72cr^DHW&KH5jz?!`mlPqM9? zRa>#%0R{dX1C(>4;X?kxhuTrLa?kp0D6$BH%O|oL?wyTk*>zzcgb+dqA>>*913aAu U#YLiblK=n!07*qoM6N<$f+R#qZ~y=R delta 673 zcmV;S0$%;b1-S)~B!7TOL_t(|ob8)ka)lrag=wcdasNwVFMV+8Fyx05MT5QPd-5WL zm_UGdErk$52qA=!$N9=uAV#gV{kd&hmL?xf=Z07FldZrU4wrCFJV7@D+MlnR9N*ar zd^&VMGIT&P|6vi{wvCH0A%qY@$h#P1L-*~Szqe~o|9ee!Q-3H$btR4*wPdK6Dxtd@ z($FaZyNGd!b`mVLR{t)3f%F?q_28OYipe@%$!X*4#7@GhY0}R=^$+!@)nur)te`fr zRI8?FIeDpY1h z!9-~&x^}JbThQ|&ti|HpVoV|5du4=AUI|H63wCbPe%kL#xO@C_QKZ2!||H!I@p%KocB5;?g zCzRpHnoDb)1<&WxazU!CWxArh=x&vfC$1b;!R(<_yNpJUFK~j(YlEt;b!`=P(n4*o zSHoLHwemZ%7|(#|fdU*9V0Y)Vnj7@2=>N(WG6#5ELaI$^b%(U^Hq?rGPVBZ`sapcO zn(79zm49h%bJc26RlJp>C!*?tYd#@_5JJczyyHuGbxWsibCKl1%v9xv045s2yuz)y zzbN@9VL2Y1pmep|YY)s3l3j-m95E?=VA@}kNSnU8@qr82%00000NkvXX Hu0mjf$c0FG diff --git a/tests/snapshots/nanox_erc1155_transfer/00003.png b/tests/snapshots/nanox_erc1155_transfer/00003.png index 1df68f783a947688702ad5948eccc8384f44a00c..a5790c197388350f3a1b1c943a17c6dd5b80c8a0 100644 GIT binary patch delta 502 zcmVQP^ zLKW(D0RR910KCr6u;zW=`8uWKi#-DJddBIng&gy$c;@+xsl67ua&$IXI~bgR8fu9J zg{8b4RFWwrH6NwB`@XZ76UHMJ2}U|K-IZEh{0`{UDBm^_VSgzv2lFi{7I9Z5H-hwN zTC2^OsTF5g1(fccL}X$0sGHm=p0%tj^rp{zgaH=6f_jlDn|zWPx@uQ3`B_@_3M%7p zA~SDwJxQ0lNne{RJPb}iUM#YfyY_azg*+%nY8E2y;=zn*9V}k}004k*q^}#QHe0Lq z!d)FCN8PvJG=CL>UJkbc&C~x5v%Ts;3j@uA7k2k+S`oE1Xr9qZF~?v;(KHpTD!;*b ziG!Z3fE{hoHckbYJvHY-4c7W%k(zVb*YS929(_B_!3cYsagk8Wj>2TCGS2Z9!rlpp z7o+^$VJgn_+M#LfAW>w_|2>^L z5R{vkrUU>00IX}z=*7g3-d09#u2$C*D$q|zl;dHxe<3kN@Pjk>OFBLG8x^S9HRl8C z9ak2s&em<)_I)qQRBKgR6cJjr#1*BX@Yyz~I<^C=?l5sc`W5a#Jq&lE8lM|`L;e?%nCRjNxYh>udh~Jz2f;2 zR%#90@cC!gcsQE|002Nr>C;tO9M_@_Va`*XFBIe%FFo+^te0WB4mNW=z+O&{hLTj@{Bnp+|ftGG8AXStPXvf;7+UQJI5 z-8%sG#VC?9t$ilEzosX1!m^gBZ(u@`6A;i diff --git a/tests/snapshots/nanox_erc1155_transfer/00004.png b/tests/snapshots/nanox_erc1155_transfer/00004.png index 5262c83b9d39c0bf1560ba947748c8c5e32a1b07..5906d19670483bbdca21b03b527ea852b494fe6e 100644 GIT binary patch delta 801 zcmV++1K#|+2Db)~BYy(^Nkl^Zfa9 zy_*H$)F{+v>E#@5!HMU|y!#L)gb+dq`I|)D(5@m-*SqSPyT>!zu>hi_o{mQ7n)d^hUeefsAI5pc z$HY>nQ#+uZB=x1}EaJ1(DxUGniZyb_9KYToGt(K^J%1ew&~7oag}e5!#*MFX-8G$6 zPUQl$!R<;zg^~NhO92s;NsofH(=q$0qEl-+O_pu)6eb96kQx2QFhb4fKMdF4O?V2u zNfKnP!B%v5JH8v5R`xpOiUmxwVw6a))by2(9B;cKZBfMU6kdbSy8|{RMe(T}1-jli z!I7tufqzPHky;Z#-B6?~#9gM~-M!Q!{vKRg$>Y}YR)lA(-Jxc8Gc5~ox=Tu5#vI05 z(Z6QC8JB)*ObFb=YU_2~_VCcUfml3j&{UVr8Im2~H3(O+FzGU%w8+Q<$$|OyMl4x? zt^Ll+N}0wSX%&3rp5)kkH%3h7IcZ)LsKlv`et*Dv*4pQPn#OphOv$ccq}B)_gb+eV z%f?^IXfYE6p$6?Dz1t4;Gd_)}0< z2i5rV9I*rN!(^556GDG;!~zU6-0eE&1KIqy2D}E4BYy(}NklvV*Mef&v9r1o}-`Fer@TCrSqn_4Sxz>pV_#6AFy$wxA^k2 zJBdBYqj}9#HHtPGpFYHgSHS2~w$Ul(^WM*KIr0KOw*tzJC-?ecSC_PYu_-;h4oDVSXZbhvZ@0un@6=PSRq2p1FsECY zM&se6&9&HYIDebgEQN4f?+i*~h~#Lw4N)7nN{0iwC6yV-guTH`G?J*tmzgsFaa%nN4hAU0&{ncn~akB&io9A zE1wffjV`T#wv)8ezLXdnHal9>MyHh*%h$*iv;TUDtbYt=V)YD6K)=L9&&t~3HNlnd zGCee$T}I^u^v)d$Lxqz2zzYG9CW{sYdxvvt6W4WxRU1vFZE+VS2(FXq{bLxeruPrS zIrt>pg+58*WX{2(X!j2MHZ;xbb;uP9m}*5Yky@!~EA2U6c16mfh}|W;0-<*WEKG{z zQyU7}dVl={d!9-LO@f0|n*geYB55IRG6k>hr55pLaBn7$Ys*U!p00j{n$^uTEyNj4 zDSa8U8=vxiS@~t$?RQ+Ds^3xRvWJIm8;Hf-22~B|Tp?KjUV(5I8-p(MO^ftAkenFr zsK=5Cc(mSGtdMEWkZywa+>@Le?}HxGaZVZ+1%FNAP)EODJ#GE_KMi9%Ri@-nH&Shc z5JCtcr02vx2uMV>D^SojO;G4-V0q|CA@1cZH$eM}IGrtkyRGA(krN kF&_d#2qA}5V8MOV3M3?S z!PhY#fGkf4A%qYGM-6QRldz?TQ=L>Fn|`HiIn*Rmza z%i>CGt`B%&)qfwOjNwni>n>u53cvGmg!DDz&ks^aPD;!Y=;*dz4@QGXqKLH|1H4E> z0aynZBt#j$%hW2g-G#atWa0LH;isT=ufMv}-W$M|TtpvR0Wv~OFup_uYXh)o+Yvqq0IcPf0mbLdI^b{sdP{Yk-zl^ITAToYf@PraP$Njrb$dq? z(^xI(&yHPz5JCtcCvceyLnW+SpYB3h*%4{hj_K`%ea{jG2I}^ z4>4sgO_>>gK%`fah#Km?{^fV}w3U{CfSM(IBL2t%1s)wj{t5{Hb)%9cXlIc-x?%?) ySJDd~%iMEk?5K+PGcyAz+Atx65JCtcOZW%oV8u#kNX+B_000029E}iB!AXPL_t(|ob8%XlH4E+L`iCI;`<+oyX0f4h=YXG2rOnM{l0c7 zAqf~{XuA|b2qAHU6=f~)_OO)u1mJ4er&TY;>%cd)%@IzrMHi#)_R|^ z_IEdr(qPoy8A$uia@IbF-)WJG_UlfIn;#S;bpbM2DI=Lblz*R`FpbyPWG%iMB&4C{ zaAc!oFM!JN5^?aUd!PiJdJ>E{d*(T_19q)}QM=Sy*Lsa=U_0O*-<01#c#XgI7)l5s zgpj{DYN$Nt#afEcBc%q}#qFfiS#PTUQ7^-Dti>K(1VcMSS`494ZBcd8u0=g8PUV0b z+dA%4J{@m&41Yx~L7BHCB-Tnk&`lVTuC~Zq#@+Sxhv5(@6fw^+km%*O7zZwr`U-4h z(;T|Gg8DGn1*mHHCFr@Izxt$Y4}iB4?4IM;4v;IPzA^rK`UQAsa{f0p4SbN16vrkb;#4A z2z7Je!wbkn?hP5ai{k0YSgJ@>#uaa4K7OJlx;>{_WFwM*?YZ8-V{kO$g08p?D7*9DtYOWg{QA}gKWIh>B1wsfR zgpf}LQbT72&U^P=(&MhrKo`Z@(ddwf)2vGlvohzd7F;g1^RfNN(SaJqou|GH{oJc5 zf*f6Vu#pe5T!m*e`-t>tbhlF~-YkHZXGE+8({Mww%KI{IrP%GD>H&k`IW? zN)k~+-JgH?w|d%2OF%%~C43_JNP_~84q^We2*0{f*(GT2V(;jRy#RY9z3{QjJ$J^A psz^R7Gq6P)CWH_|2qEMV{s3eu$DjML?*sq<002ovPDHLkV1kB`c{Kn4 diff --git a/tests/snapshots/nanox_erc1155_transfer/00006.png b/tests/snapshots/nanox_erc1155_transfer/00006.png index 40a868db1523fc7cb83d985967d1425255b91210..061c754c7733618beab803330ab526c04a16a484 100644 GIT binary patch delta 533 zcmV+w0_y#b1g->-B!BfuL_t(|ob8%ja>O7AfYVNI;{A{0UHXuj3{^zpZ?gTqC)ZVE zL6ML>4gdfE0D$Fu&0ZkJcs4=^*GJhlIEP6&>O?tAj=%a79c-C$mMVEH-?JB}68<7P zJrfVjk+R2jxxFo_Tcn?#*$Z5(*-$y9MWu1KD0Z^{1jHD}ZhthnoqKS`$xaqI!1ytq zXwy&P71c?jJa>!zCtv}dUA!RNtE_Xt#yG1gpz5<;$rqo1>+(=7d+li1INL_nBrl{b z5$Qu1a$f>(q&pi9peF>`V?47w(@V2T1MHDeQ0g)COj!3qCTHb&udbEc3dubz=Nfl=;wR6q z+vb2rS^vmVnq|7B4oKF{ojmXksK#!OWRHgGux5;nUw;)|ajhq2K_^8cWBp|)rpEe< z!3R4b3hks~WPC7{+`QBO8`?%*O>`!IQxnjCgmDmW)i|GjpkMsAl$O)4n|bIR;7K|?!M*wI7ytkO000000000000000yq#a2 X12!fLa1QnK00000NkvXXu0mjf|9bdT delta 501 zcmVO7AKy9Zt@%~5hF8#<%>YySq5#98?udHFg zg@^<<1ONa4004Ks+$^P(VvOa-lu|AhV=PCidUUa>WK~spS4{OKq?B@(o!7#Tr9f+3 z2$b^rh;p}OdIsNamO}062G;<1awm;=J}5svW=@XZR_5YdV1JV7+-`LaOY**V0IE3r za^1fRcijak$bTo;*85@A3V138O70T5F0VC}9C((kFDyg-8IJL5%TNFS0QjTR4XySO zkHMQGPid}JqGPu5TbJ}3XLXCRQ`o&Q_CBA|JYcI@Zi=q$*gTc#38s{x^WI{f(%jPH z{|eTB6Bdi>e1C~mMoKI)!`~7aX3SPly+0P1C&M|g04*sg)< z9{jHIPG~JT3vSYMGTwKi;%dC_3^7;HO&%K`uZ-Tfr4T}p|M>$;w|%1OZ|R!WHlXdVxY{NYfRd-fODQ1@)yyfJZgJC{=G zwD^(DAkENgs3qf|+&ZuKwe@NFo59~2#A$JU6Jak@Vw)QA1b=KAt#uq_juTLK=&_r0 zgg5gX1vpjiH7TtCwFTFkNt1%u+~eebMgDx~(h@V0UW_4H(CgiXOGw}T0DMmq&lLa0 zA-4) j000000001h(-u4cQXjL>1)+G+W$j%C=KYI6TpA}OacLl6U&#Sp>_5|J*5og*l27g-tt<0xFdM}e3Fb7dr z=Id|%%&g{nkkAjR^ZtImS(ST$ckW2%T zEgLZUnRak5;+1{}n;}cTo0X`g-}S58)f2eVi{hTGT!55Pj8WXY;qUFd#k71x z{EtiBkKMVa&&z#J9?v80!XBMEE^4GwN;#VOhh;x%V>##ze}7HK6H`$AOoaX3Z>>kZ zM)Xj2r8bJQ^VeY60*GW%-?^a?snJpLaVvL;(I>CL;uPc$@zBDkK{O(}D*uEBrl2y_ zWa^9B4w>j@yI5^p`w|8K0QjGdS3~WhO4%rOL-nVgu?wwFwOZ6^h`q5<5i+jvw6x}b zqt3w`JVSU4eTF)F?u7U5wPSjj{a>i{ke-$IKe}#a=3qWYl|*V~qO^V1y3*%q2(?X!AsL^vnUc zk$eeKT^CcbiRA*FPVnq2Nr~hX5~{~gVatQ?Uf~tp<28d!^iNX>HPJsAV_=C@$kHIl vjKNZb7XSbN000000000000000SmqD4sZ4{woa>hW015yANkvXXu0mjf6V<*R diff --git a/tests/snapshots/nanox_erc721_transfer/00001.png b/tests/snapshots/nanox_erc721_transfer/00001.png index 43b9232f5d052e15f82f2d76103e4428c9cb7ab7..2b0fd141fdd7ed38389b9aa6e0dfed78e90a69ce 100644 GIT binary patch delta 301 zcmV+|0n+}`0>}c8B!3S{L_t(|obB0B4uc>J08qE=Cfxr>++`mohM=NLoKW-LmpYcX zwxBE11ONcHd-cA7Q*zGpK}u;kEsq=KVZ-|LzJY60Q7$tyxOeXx_|0LxhZ8ITdveY} za}y~6jYU7D6k@?yij4Gr3k zE;j(mP_ElSOM$PyQq6$PO@+x6nNKV|U#l4(~Y5SpCCZ^*LJP2>B+6ihm$fAFnjZlmJ z&E%jbt58n|K_-@izY<;m00000000000Qj3P+lQ4+Z>yZ400000NkvXXu0mjfbf}8m delta 311 zcmV-70m%Ny0@4DIB!3x6L_t(|obB0LZo?oD1yHxjPT2pF*h@bmSqS`~RSX{YoUb?{ z5xE06hGhW&fZ@Jocc4qoIi=KI=A6rBDW&$EF+F^^oO7A%`nrm{ZE%0zvpdkM9o^3m zrT|a%n%#k4cu#_ASudwW#1%hM0X9Vpy%cN-dfuHNSOJ#!Lw_CsfaMOmq1WwSzQ5Vu z)-E4^yo&O?cGInhHNNW6w><_}2YCCDY6g@I+ROj08nBz=ck>uv?`&Z2^7JfWu$#_+ zQh!qIUg_VyXQTiHShiN4gEo6LxaU$6Z!_*#xb4z<1{}}gS$Z-(zNwalnfL=w;*B+S zg4zvP`onBQEinDT)L@002ov JPDHLkV1oPXlXw6C diff --git a/tests/snapshots/nanox_erc721_transfer/00002.png b/tests/snapshots/nanox_erc721_transfer/00002.png index f8ac2d140a0138245861a74a6a8a1173df87aa2e..7d01fe80c981e4dacb153b84d86a76d1e5bf7ea3 100644 GIT binary patch delta 686 zcmV;f0#W_B1;z!CB!7)bL_t(|ob8)ka_b-rh3TE{#QR?od$|vudMNtg$iV?M=X-K6 z2w4IFa$E`_gb+dqA#dkvwE{6}tzF4+97{C$Xlkv}6G{1At-u^Ef25lb|5ht7fz$e@ z>C?@O^bU{~&*g*k4#-Y=2gsnGYZ*xIfbu)~=dwN_gb+f=$A2=&h9Y~r_T<^+1KNgC zR9E82QA>u3sS>)oAq|}pu!|U%Xyl{BVSg)?7Y*9Q@h4_OsEe2bE?KQmb=Ge??)-Rl11TibMel&N0TOV|I%=G4 zOJoHwnhn>0OU`-S{X`^$^if;kFGL6a$n`EMDW;KW{kNf*n$~|a^ubCPg;p{!GJWtU z(!9`rLqmzo((M1DyKFG8Fg$jESxi4^;q0xua#eG++J7DJG@(`hMqhp}(P~l?{}C*$ z{6|(L42^In6@j}{J)sOo)?8ZaYjnSt0$z5 zx1mC|m5l02B1 zs{9bZL?f72cr^DHW&KH5jz?!`mlPqM9? zRa>#%0R{dX1C(>4;X?kxhuTrLa?kp0D6$BH%O|oL?wyTk*>zzcgb+dqA>>*913aAu U#YLiblK=n!07*qoM6N<$f+R#qZ~y=R delta 673 zcmV;S0$%;b1-S)~B!7TOL_t(|ob8)ka)lrag=wcdasNwVFMV+8Fyx05MT5QPd-5WL zm_UGdErk$52qA=!$N9=uAV#gV{kd&hmL?xf=Z07FldZrU4wrCFJV7@D+MlnR9N*ar zd^&VMGIT&P|6vi{wvCH0A%qY@$h#P1L-*~Szqe~o|9ee!Q-3H$btR4*wPdK6Dxtd@ z($FaZyNGd!b`mVLR{t)3f%F?q_28OYipe@%$!X*4#7@GhY0}R=^$+!@)nur)te`fr zRI8?FIeDpY1h z!9-~&x^}JbThQ|&ti|HpVoV|5du4=AUI|H63wCbPe%kL#xO@C_QKZ2!||H!I@p%KocB5;?g zCzRpHnoDb)1<&WxazU!CWxArh=x&vfC$1b;!R(<_yNpJUFK~j(YlEt;b!`=P(n4*o zSHoLHwemZ%7|(#|fdU*9V0Y)Vnj7@2=>N(WG6#5ELaI$^b%(U^Hq?rGPVBZ`sapcO zn(79zm49h%bJc26RlJp>C!*?tYd#@_5JJczyyHuGbxWsibCKl1%v9xv045s2yuz)y zzbN@9VL2Y1pmep|YY)s3l3j-m95E?=VA@}kNSnU8@qr82%00000NkvXX Hu0mjf$c0FG diff --git a/tests/snapshots/nanox_erc721_transfer/00003.png b/tests/snapshots/nanox_erc721_transfer/00003.png index f1fd70426c9c3d1736d56e05f920c3b6fc19da93..9e8c446ebafe3ddbebf6ef6a978ee29a2ba4b852 100644 GIT binary patch delta 416 zcmV;R0bl--1G)o{B!7WPL_t(|obB0LZp0uAK+$P6J7NDzVlVxOge>zIW1emA`HB*Q zi6NPmyj}nR0Kj%%?v^pebR0rxhdlxEcqFO2hcxC{;~Dq%HQP3HmFR4-R&Y*0jap*H zU>Pq@s>l$6nvXnPj4_2ZhVg`11|yRe)8(zYd^_6ImE2x(&+2Eaw=z4aQ!JnmRub_M! zjgb{Eb=^rO>Np5Pc8mP;46VTps zpVISHuA6}3I-Rn3uX^(&Ge5{oBtJj>ZTboDeNI}p+e^1sz zP_8{W+Xest0Q|1~#4aW-uC_Ara9Z7&P>x6=UdHrTVKv+1sty=jwbc^s@1hC=0n)1 zHSoasL=Ph*X5l$W}Jti&#~Qlpa@gIm$P0000000000000000002MZ9Y4L VEVz04uoVCR002ovPDHLkV1ncPxFY}n diff --git a/tests/snapshots/nanox_erc721_transfer/00004.png b/tests/snapshots/nanox_erc721_transfer/00004.png index 64b5924d5cfc7b1c5d1feb91def7ab2b1265077c..23f2a45049fefdbf9ab903d8934d9b600a527185 100644 GIT binary patch delta 736 zcmV<60w4W?27(5VE`M_DAPhuFDm(H1m&9K3;R+$>)nKsky?wqWj3i_M0_03egb+dq zA%xt{$2!wF=kvpH9OcjYv%@JSt;u%lD@T4Sz8>rw4_O(oob&!M?c$CBSQj;QCCSFq z0c#23Ei3q3WEUal9Oj}V0$Q(z1TUl7NRd$k-RR1exh!7+=YP~w1KsstO|ZbZKW3qJ zZ1rC9f@&yo4{XkJQcIo`Rm)+E?8woQeT9liyJ7exLbc|hIx}*R^>6Lg zS5m7>rupEP9Dk&Ye+lr7tJbVXu%1g*cj&tbBSSKa;cM;1`*2A9LADQ=op2K#SY=Id z_y%TmS4X*-?Eae!tLwf2Py>g&gf{?3-qPxl3DpM#9Jeoet6B~-%4_~HD^)lCSL8`>?gym^xd5%kF%P;{ z=-e`ybbmlCH6jnIrYX?RU;v~=E31ZGE}FKuSwC4PqtX?YGlwfkCv&QyGWtzRR}CGf z>)|KwkTxY%BE8IcA;bUNtLZ9^qI-aB=}MGHCY32Td~xPG<99dafNTMGL_!E5gb-4* z@R#z7Ku(!X$=1;#5Xhz1xxVbiUO&zz zLn6f-tsU5F0221AT}$hYyy=bDKgo70Ak0ECl^=h9KCg=Hxd9MD2qAg%lNQJMgonnqzcN8i`K7 zUnR}_^IXnjQ3uSU?$>&5(ZW=DlMRE7uh#^w?*(-n&=8-_=zrA2D2dB!tf?rpQvGrg z56^(;C>!V$cD&bpoR%!$>t;Y2F>>?Cs3uYSO;DOW4_42B?ni0{gJ15@@+h72pyt>{EbUiIZI2AqUDX4!QRU3ShK zRh^V)mAr2{C)NS1!~2UtA3O=7(34;teiG_lEgRZMOJ6e4(>9g43PUoU62+`u9%?}J zL2C8>V}W@BP~;`8kc_F`A)qw-W@}l?W<*)~UC>R+dE$RXoOF(TBNag>pj6n`g3t_| z@r7?~kbg}zdLEVyQ_gl89Y8HgQPr$+(y;ZL)q`~sGF@gmvpa)yFeV#Hz2B6Ca_D|S z4?lQ?l(|BsrJiAOKWvgfb7oJ0}a(vm1z5b}(J#ycB8d=(_1C-+>`*NbmohdSG$qww*0iMvI zcL^0!w02;x4oHp{pNiHSdD9!Qf5~<;z>GpPlxOm{cPh5$0ssI20002MGyDSW|7A>7 SM~FiJ0000fx+O;+1{*=Xq>@dVZzZnf&et5AQZ6`~3Li@ZBUNG?aI0^X_u? zS7opN8a1gUcxxrTkE;nj!eYW!E68cuP@|W`^v~-8OU#-x(rWdyS?8vy?Eo76K{UyH z%bj53^jnip)YR+7+ndk&{{B&He3z@-j!!*1Q_gL9zsBrl)xU~=+7CDJ{O10A=U&l@ zL-Q+C?{w_jDN-r<=0E?7@?X(jPi(Jb3I*uC`pTLRrk?ot#4@^K8Ap`r*EH!gC UJ+YY5wE-mT>FVdQ&MBb@04*PoI{*Lx delta 336 zcmV-W0k8hx0_y^hB!4nVL_t(|obB0d4uc>JfMK@mCcXcWdYAnmGlW*>%%nx%=a&*x zQogYi0001BxJPsWda5cS_EuHfY$9S)-1lr}Lr+!PkS*6;9BqcR^e)3%{wUAr0yu2z zzOalHa4WCq0{Chtu)}(rVR)fVk+cF_mkD|+?+|p8nILr!_P4#1SMfbyzhmvalp-PtLtjl(0dAvSCV*}VNgHl!jv>g#)ctQf zqrL|uSsPgT@k#50^++{IC4DJ>+UQ@&YLJQkFixn6{$SKWBu1e~%)^lgF8}}l00000 i0000000000aGE#Nb;Siwf2zCy0000uPjvl-v=5)WC`)lD(?#xb^7co;IgqY3v!8DH8n0C70*MD4iVhJjr33uN6weg78 zWD(L(VqPX1-8c z9O-ZL%1+$9Q-5iTvgOctQ2W&Q5$JX5RpM<2Ht*QLzP74_n{HQdV7H9SJ2&W{O>~ABan(S}J7+9hTSuVOrGGnk5=>-4)0000000000 f000000G9a&$Wwn@lYILz00000NkvXXu0mjf8}fKv8DYov{BUv6uNkLJ=gj(dw?Jx(O1uyRF(z z*}30SEXNL>b%fS$_N={s=(>fP*;-Kbmey)SV!>+Jn|8wE_Ei_u!)oq?2RD|x_x-Kx zXH!R6gX$OiPJd@O1+@;frl64-Z`tdopmJ4rmj&Q{rgqm#k1ocE%It_gv2Mm!mk+?5 zOR5wX%ZWJMQgx1=U3g~K0NskIklqviqWkxnNhbS`sid0hKa4T3#4Kb4 p000000000000000006f617|*G5}Y7!yZ`_I07*qoLz z$Tva@DFFZg0NXvhJCI5#@@vj{X+!Jo|Eo$VwFdI@wnlxuygSe%Gdljct>IFS+av1Q zoU^QV@*WdU$F}=wIyQP0nat5v$mUy*oSxk*=m=1M(&5k4L4P$4+*9rdT7c^7?9@~f zwgy3`pvk=A&oD!wUqcr?gj<(jEY9oWRf0}I_dx*w03OQ67ZxmdPx^)JpC6v0PrM&%;~YbVX(-pVrQrJu9nakJz)rTeVu>z-RY{+Z=`QeqYtbu$IsHZ}3dJ5Xs_0~f*H8wskY0FYo zysE`cPkOEV)9YPW&5%ido0F(Xe=};}iCM_gAY^K=6!8K8000000000000000007Ip Y0qqDBy6B%qZ~y=R07*qoM6N<$f)^&VCIA2c delta 361 zcmV-v0ha!i1B3&RB!5duL_t(|obA|K5`rKUfMILe$=Uys*h>$VG2A8KApYM&lc>NP zZo;+!0002PJ+v$EVT`daMWja&J+fVd(*Vw8*RpiIv@4Kz#B1-rcKGZb?K~EIQAGB{ z{g(mp6B_}EKc^BC>AIfU705HjREKP;SO;BT3aXwc?3t%&jelCYzzF!$G4Idm0-vF6 z7vbQOIAP}QTw(nwXmT_F06>HJs(7(SeeT5%VtH6sYJgdeBAi1?f43FfJsk&}_U6m^ zpUvu~`!av>3HIy6d1oxeznje}R{8*HBf#!`e%H%}qx^`iB&(8qI#J$;C4wj->AU5D z%Vw2+psNe-gktSBuvY?SRhXPR1r4iuY*F1pr=G3K@;R;8s>DQ1Ql+f)c{iXgbB!8w!L_t(|ob8)kmV+P+g`GLG6ZXF(_c9Nj(v(1Qfv9+Tzb8w> zB?kF1wA)4qA%qY@$mRS*3GMryuTx4v;GVqB40`AwgL!vLG=X(4u(y zj*^s;EYH_Dg3?ABY@hL!^95tpj6^sv=u)mmemH3GC}`etmZozW^m)b@QZD)#CW-5sM(|?846jRHlOK0}g0eSh>HpfMgU1{mGst?%MEk-qsRL7GR-7jK@^z}L6 z-bB+nJSi7s*nrWm&S?WSZlf}xZM)Rn0k|}R8@pCocmN~4T5WNrEhC{_aN>D@OGsGr zdZQPf^9Y>rx<>%sx1i1>#m3{IE5VzA-G#QPN@*RPQ-5sP7&-$j+G=2lZW{5^8KBpU z-!G>bWJdooDxqfdFNS?^C!B@ugzNB~=l(;&D6GlSO^+$e%>mWBWcJE{H zv0UuE=+fzuvJC=V${!IwwT)e(2~Nhz#-h>;h7>qq+Bz~!hXLX_^1~-YC%6N^gqIuH z4ah6#X@AEyYuTjN&w-7$&ZDmb+$RovBxT?(xbu~F79AaMWjZ&Ol{0jArlZMbi~xP` zq9^X^;f&s8x;9m_^!euq+W^;TxnvW23`Gbbgb+f){wW_wHBsU2iM36k$sJ@jM(VNG zW~n!G$ur)B$I_Dri$D9T|2EVBJa}0-`rFDQz(9?i%uhU*MLQtm$<3<*axz8UxTlgv tVOQN1Sac1*4W=)%pMc002ovPDHLkV1j%RTuuN0 delta 669 zcmV;O0%HB&1+@i`B!7HKL_t(|ob8%hZp0uAMQPQYWdBR*UiuMBWjJo(ExA9h z>ne*#<Gj_Y!#IH(wa?| z|AY`i2qDDf!_~0&b}b!OqVDPjbSgIxYf`8ll3O}mc4qgiNDicxFmY2ocJTonFrPE2 zgA~VeN8Kl3#DDbpql(OTzJ=(yAaDW%qmP_s!4t1tX+Al-j&*kcZW_UjUCuGgSJ%2l zXw^7VS9aL-d`mJ8WJy@_dLtK}eJq^ux<>%sx1gO#s*T4>SAt&#b{A4dH6`t2Tph#C zK#jIFP$H{F{B#EBneqG2X$G0mKZX)&M*lGEgD2rE^nWB=ho3}-*UE;<6E7lh?Nm+} z2}ReR@-N&D(vY#XkHyDwvG+@toi0;pIj)0eJ;E?bvE99rf+qWAt@^`^15dWEr>vEswmj=;(lx>D;wM z&d@!Xj(;Y}7ySSK>j+5|Mdh#atvmgE4Py_JdC35srJr5JCtc5f=FY?zKAcck0(-00000NkvXXu0mjf DQqM=# diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00003.png b/tests/snapshots/nanox_starkware_usdt_deposit/00003.png index 6f3683c12f5368ee957826388518bd15d054576c..85f3a2b4cdbc022a329dced99125aaa190dfae4a 100644 GIT binary patch delta 596 zcmV-a0;~PI1nmTnB!4tXL_t(|ob8)ia>F1DMQJBHVgF0=Uiv}GFnS>{uf+F!dDLqo z1PH9SApigX00026oF8twt}9){7&XfpQoD;AHMp*;bcVZETEsB&zWh#gH#^aHJGoec z<~A{EUX{@&BO%`PvR#QW@_R}PUnR*%!pB|7mMnJ8bnzjYg@3q5+9Dm)+_rr%9P`k# z0^&d1m2A%*5GB8{X}XmU;g7Xvp9o0{+-=gX_*W;QOV$d|FnXm;96Q`vXR1Txv@F;~ z#EyGbwz>kuc@fw|HZ2*ig0g<~<;% z1)ip}vD^lTv450#8Vb@{bW;HOPqmGJk|nBl?TM80-XDXeZc*cf!Lf zd>cxn#`j6kbZDB<%6`yvXgDZEY^LYaM3C^5CaaqImvPnn^;nIkGFH`C18`Jt57Z1n z9e~q%dzxkx^=fJb;nQu0001hZ$v$YhV$x(lQg8uvz1;>t0S(_l*SoK4yvJV z{PT3IvQ4cTI;8%0re;g@L+c6{QvW+pvk|1A_Y%p;+8C-CO8g*04@gGdn4!cmly>=) iV<-Rs00000^Y{Y>Cz+;tq$?)?0000F1DMQNuy@&1>@Ui#sLVE}U`f`7)giNyBhhlwmdRrF0s zELB>+ZL=0rp|Yed(0Idm4~Pq;S);Km_U_89Hj-P_VW({XLOjWy%8)(ubx_xv^2y$|8j2A%n?$hR~o3tlHq2${7p=4XL72(=S^ee`nxau>* z=HH{+gU@;n0Dk}g01KLYrzT5EiR+-5s3~eH*&8%P4BJr6?KF=bPuAq{9IzQfDx#8! zgKqGE&Dhp}zPD~*AX&tlYkF~;rP+!-Q`4BcOzj1TolNg9qtMm#{$dz|oe+g~!aBT@ zynDZz(){gq@}3=yNn=Jz`=RO3yi6zy%OD}CRIX5BUv0002sKO$~J-FbP$Nt&d|vz1y-%OkGQ#Dz1I zIb=g$=;!HJr7aseB>#7&W=roos|O6p{~f5=2qEa@A|Y5;hH8eA7c%JvsS-D4DA|Ul kO+IBC3L5|b001zLU);oOIzLhBK>z>%07*qoM6N<$f-vI=C;$Ke diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00004.png b/tests/snapshots/nanox_starkware_usdt_deposit/00004.png index 0ea118342795c54d952ffcafad878322170b38d7..e56268e93dc8a16732654671f8f5b56f4b6d44eb 100644 GIT binary patch delta 453 zcmV;$0XqJ$1K$IXB!8w!L_t(|obA}#ZNwlDKv5E<6Z$WSUh-iDp?QIK0WZouUz-tz zVT{3XN&o-=z;<8a?^4S3Bj@Zz_PEB~JZPYl(yd9Gvsp|T>RL>OS=u4 zRj%5&Zll}(1gYel^#yH2uZSxs%BS+qtbzOcL8bYq=>8Sy$7J-3z8X^U~=-nz`J+$X>j%*snNE_b}pf@=pOi%tT`5p>Vd zdIRd06YmqsaVL#waz_-;8_kBzB=E vaSlI;@&W(=0000000000000000L%OW@E}}xs+1-B!72FL_t(|obB03j>I4gKv7icn{fXl`7XUE6+(c)A&k<0t1beu z!<3<&0{{R3jwK=@QZJblcXkM40`gO=kRKhK`O5+5%O+e~N89dj&BA&w#{*^w`u89~ zT^!7NAD4LV<9^JK=0ARX!hVv6(Kdu)LdGn&-+>eL{_UG3pLZ!W zgaPYr{xvYAZZmq{joN~oz8%L4*8TdldDl&@C+tE=+xkx}x8_xZw#n|7JXz%XPaOK3 zZS!v3E7;g@?tc~p001_re6X{B+B>S|P3qrR>|bNfsX4=j$58tl$}KhDSUmu@^y#wq zSYE_7TRH&Y`@Z(?gzIV^t#Wfq3U8^o!q|AXJX|h&3~ik4*0pvOwUg=nWeQzQ?=Qv} z?8Gj#6Zher=w1K-0000000000000000AQMbxmG-fxetq#ZvX%Q07*qoM6N<$f?UwV A>;M1& diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00005.png b/tests/snapshots/nanox_starkware_usdt_deposit/00005.png index 2750ace7b9495cae0e2d219683a4ee69b2efb6dd..d8befd4d0b7a55c3874a26651032767e0e94115c 100644 GIT binary patch delta 337 zcmV-X0j~bd0_*~iB!4qWL_t(|obA_94#FS|fMGS>r1w7(cky8fX<9%w3sv)fPs)~- zwFC5a0{{R3w!4Q!DW#YZ5gFXsyLv5eRJ0V2kSHQjtDrwGRlDxnzdCPV#%ENZraDpI z67%xvM>+;eDIzk6@HVLq)f+Jrs2O{6FkS!rRf|~xP3B4bC4YaXx%qhhL2&<7htkoS zBR)(l%9?NjfvK)7mZQlnXCZZtX&>S^>VAej#7pM)jtw zH}P@O`H`I#o&hseHrw&3T}W@oK4}d#81WMuoI1@ElT!r%0Ki}2w_v8D^fVyZuQy=f zKVi(E0m*1UGD;ed%r@ZH&$KW1ro2>tgKm+j{x*$LQ~k~8K_+&gOq|1+C@%m200000 j00000000000IKJ-CThl3= zbxUu!f0~~KsW!_2oLxFC_NTA8Y^J2m<99iEvr}hh%gBvx{eL65dT^BQ;Su|l+joqy z|0a*WhY+UiLc>kkf~xk!r8T&^wC|hu!^#z~y*zotpMgV~Y{m*mv)o8lXSZFsboL`z zkajbT)_E`YcnAXk@K%@JoEdELr%>wdUVz1)B2a+E6kst0SS&BV-JfY6?m>EGe}dB_ z%li_P%p%s4ii5amjiyz1MNx$2ynt1>T|Fn(i}R9W0FDp7Sp$duLfp@V1C4 zKO`Ug>-_emW3Fw%(N|X=>gIf{it*~~-IpTKa5#EnhVnd>`Smpl-dw-#bJS^8u-&+F zNA3H(vUM%#llqr>IGSnh4}Dr9nk(MZ{p$8P8wQ4ki0wCS?{;^qezmRY&gZ1}OBdEM zyv_ZwCEC;aRW1v!x%4{!_{@Tc@?H`BB*UC#D5?}a*_VqQY~CH9N1cXZD)vjk_Gxex07v wGV6u@F$otXZdWOmnT9jEJ}`j-0tsBUVcazRisy3wOYR_1Pgg&ebxsLQ0FWD@jsO4v delta 318 zcmV-E0m1(J0@(tPB!3`DL_t(|obB0d4#FS|fZ=Mq3HLt|ck#y}LCVLBfi~&;{K92U z(r%?P5dZ)HAhMjZ^%MfTqJJz0evNcDvYcn($5bYDQ;{&R;*;UHvvKRBWwMO6B_Snkr6CnGSNAu{5^8{?=A^M`*(DT#MuMDNvBhK5+$+Vj~HhEQfz#_as z);(LpAQSy#Iya#v`iGGNOH?6Ciy)JOtq3mw000000000000000006Mf8)|3K^x;I! Q=Kufz07*qoM6N<$f;s$`MgRZ+ diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00007.png b/tests/snapshots/nanox_starkware_usdt_deposit/00007.png index 3f5b15e834e8362b6d38a3783c2be242e5ea8ec1..814adcc25e89a194d544c0ac98845a5794a951b8 100644 GIT binary patch delta 295 zcmV+?0oeYg0>J{1BYy!1Nklyi!W7*(bS0FCdjt`fb=|opY|I zr}6Z-k^AG+?D1owe&fep3Rk=WY9cktnohn;kHtt6mFPb*9Di9XxBxFQn&~;iE8}&_ zwSN6FLd3VAXToofYs9ypQ_z#SpPEuT_^S;*>}D&)7ob-|X}eH6IR6c4x}xDX0{{TF z@u_d<_Aq=8v7Iaa5&KsZAeaIKQ-EL!a4~y5QEc}Z`ewCz{g_QX4O#lj45F6)Vrmdc t7mDOQ97((Y03ZMW00000008i3egMe@sDZk3VnzS}002ovPDHLkV1gE;gfsvE delta 268 zcmV+n0rURB0;U3xBYyzxNklUSHmq&>6!k#=QZZNT^+XQNk3ZA z!{+(!Y%FH29bwPha9!+xw6Y1_f3s&PrR1Dj9Qmkw^a8fD%YSI9cMmn_We247E5XL# zDZ%g3JaoEt`q}~WP!{c}G4*U`U7ZL30H z-BAp88~S0jV||%Ht%fZ9%T%J4{>9WFl7FE{uEUYU3jhEB000000002ZJOGN2yvIjU S#c%)s002ovP6b4+LSTYBp?%;0 diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00008.png b/tests/snapshots/nanox_starkware_usdt_deposit/00008.png index b6fab49513abe30bd1cae19761c4342807d6e3de..fcc883ef0cf6d0828f181c9b9bf892ffa91bbcf4 100644 GIT binary patch delta 407 zcmV;I0cie<1F-{;B!75GL_t(|obB0La>F1DKvA`mov{BUv6p^$%&0tMIdKF|?)mcI zM5F>_Lqz}p0Dy2m@m=Pew~Lh0sO9OHFUE=YnEeB;bfdf%GY25&oKmVLul%3RTTb;7 z@h_J)jvd?+^K!qz{duIF?AdAa(#=%Pxn#3^QOD^v>Q3MA*MA&Xu>`eiLiV{o8jtds zDuNExZLIFbkHNG7sESEDb7hdJv%Qq-QSGXF4<3WbCCH!RQv=gYqLJBI^+y&gLAulw z-3PUuvMSE@;cnyHhcEyDz<0XrG}Jz0(T&yS$awP`-ED(NZ_gFevWn5>$bO?Ywp8tI zpxdqwd8(KJ7k{r?@i0!@b6?h+jAvZA6LuaHA5I^C_CLUt1K`X~_kiqcEmwj{O|Odk zsQvC%Jd7*Xy5{)bo$l@FnUxhIp#Lq%xNH9xQ`ABUXgTHJyC1WzS2j#C*$>l6HQ5iw z7|cW!nu+J|Or#e8000000000000000004NKKTjuhV-Sv|)g1r;002ovPDHLkV1gje B$~FK1 delta 368 zcmV-$0gwK%1B(NYB!5y#L_t(|obB0Lu7n^AfML$$?1cRbjC$wBFgXa`|VrtGYKUFISL;R)H>VT({{=SlRa7o{e$D%$cxqV%cpz`t1LJnH8YS zPC2B$*>*!v8fnv8Ukh5F4IXN{#kkfxlK$Q4*-p2ta3BQKzXb_XNax(2 z>DN1JCYkKtrjly1e>3X95~GkMp2L<%F8}}l000000000000000u*?_k16>(dPrD`n O0000F1DKxwBp@%@j)UHajvM}t7fco8)3eK}?m zQV@zDDFFZg004X}Ip>^nv=jk+M+=ZrN{8xSv%x&}{)rZ#NzQrOwp~rf!~T3!sJ@Y{ zihhc&WVI;bS3vPilplB9$%mraQQ93sHb0)XZHv`@n!x}&r+;*zH9mU88>oVgPh#@$VSQFUz*UZZV@f&b00000NkvXXu0mjf9Hj(G delta 500 zcmV6_i z0000(eyjyhk&EZZ#>geb%N#?_yN}w-r*kqzENEx!|Adt!|9cDFR$&R>%_eVN2xlYNMfr6n1o} zkSovKUg#;~pnsR1Sh!0wPN5|^ov1V~*X=Tef-?Q3M_T~Dxfx=X!YHLxB7V^ZO zaPAe5@%ksj_hX;coO`$>7^f+@(M#O+E%)42HJ$@AKes3#nV;$z%GKxB?0{{R3z?(H{Lqmo;i_nNBLODOw1sStUX<~>b+6uR`VlnzxaW&Ko qgDE5+7vihjP{+mq00000py3arw9VJ;G~81F0000O7EM3q!-;`<-Tcge?8Ig~b9c!A0E`$`xY z3xSMiXCgufA%qY@$Y-+e`@Zk^M~VI0@jcrCIYRkwVp`&7wgVyVe7M=LZQHAT+csr` zx6ER42B?6lY*3+b8&xNVjT>lnt!;UpB{Dz-3tanSJ+u*zW`Fca=I;S=!=}15NH6Gf z_nw&(aE!ct6uh44))-l*iOrhN9})SQc<=m~;O>*rb{ehd^*3Qc2qA=!&m=2Dy9dRn zm{YZUTkl6L_I7!t7#$a?w@!-PZtZIwi|!tcA_EaAlM_EKrHx$`Sz2AF>#*yI`$O)V z9RhO3E}VpK)qjog)d8;kcj2rU7bT->HV`12)TQX-Pd~(ex#8Gcm;fcai#MucBrjuS z2}bim5Gexe#9r0<9}T>#d0a0?gJVOY@9t@KvZHp~;q$2}!N9vc7bc(`aIQNh4ymq6 zMA`FjRz-I~25!+4pi)WFIkY8RYkVYQQgr71pTvD;c7F$DZMyzP1Gk-b*2mme6CXkt zWJdonoKQ3R55qZ_37(Z`a4R;v{g?9YTW|LaQW85Ov&44Huh6@FI1X@Yt~X$ zLvJmUz;!KNmf#BTC60BY4^p0hG0pEnp4UDtS4CgCWvF@zM|V9_hUSH7zMS1n0_m_? zh9=T~_nptO`#&Ls5JJdAW`0EpAre8`U#%#VTxP fgb+dqA%FY=&*w%zyr@4#00000NkvXXu0mjf?9^k{ delta 737 zcmV<70v`Q^2Kfb$B!9q3L_t(|ob8)gcEcbHMb)0}#QR?od+A47LNy`bNon5wiZQ`L zVi3;>5dZ)H0001QPHQc7%c=h=eBN!qlh)d{ZU4ZhDZcJDU_x-<_mXYfvX|h8hhIkL zs-G7MS-?t7vMNi^WBnnbLsp^In(y>FF(|YI9q1Icw)B;!$A5Udyq797fQYtV&TD^+ zagh!G<8A|pw87X*n9KTIR>)ewCJX=o002-NFAaU9Yfi4F=7=;)3e^(%IID5>5zCKu z(p*35RSmPAZuP>$5>nJUvM?*6Wxr+Bw4@}*VAT@!gKwL!WmzOn!V!a(iI0xp*nbuF zYC*wM<#aW3zJKT}Zjo|kp0)Z#?57hB&xrtZ@uV9ed&NXeRx{|$1F;tR)Ff6n1Nv*f z)p36(qchadVBaF%SNAj-Y^ywO@cyYuM#rZuCju~b*lE`qFKSaMtl4w%tg@aG>9~Xk zK)x7>q@ikH`ebyHPQU$~sB7l5Q?ky~eyiiM@yYn8pns45drT+8`R!k+3ANftS`9rlO$v@{(q>6q z0Y1dAsrQ4V1F)v~9mw_Cr{pN_(=-ibtFZOdJ!z<)nEJz6-6SFnX46nd`k%h@DZBpz z00000+(?PPC^=Xn=y)kbA?GVd3UjE(y*-jcwOSV*h5n}6ks{rAx!ev2!A5BI#e-i` zZTM5o84w{N1~4MpR#B!6#7L_t(|obB0dZo?o9fMKuNO}PJ&xJ!RTMTAc$3pVQB=U0k0 zKsGp=D*^xj0GRvnS~$jdJcJO^$K%;@1C}c`y?mF~i!r90eUo4B4M>c!K8AU$LkQ_( zF)rtWTt7>8#*c;SgYSD4cDw;8A}N$9I^jdk$q+>*>R)M&7=Lq4z#vANn$x@)<0z;6 z)!T64UxIqvUynBYOHdJLW!#IRln-7y;LU1g$v*+L6qLLQ<%9YeM4eIhmjM6(z`wGj z8#?W`G#fQHMv6tJ{7ZoQ!Tgx;ta>FrXyW_sfr@+m=&L|^)~ zNK>OWQ6|7_yVE+mq7ZB5tiQHwevx^51EWcHzN%lN8)TwyrV(nQZ;Tvxq6&GM1eqKx sMR)-K0000000000000000DxuQOk8j6_7yvS00000Ne4wvM6N<$g8qHDdjJ3c delta 373 zcmV-*0gC>p1CRrdB!5>)L_t(|obB0Lj>8}fg<;RAJ7NDzVlVT6S|Q9`I9Q$kdrGZ@ zM2AaLDgpoi0Q^HS#?HqF?s(Vl?FSH;&^b9J zxR>VA?d#W5>Jk#c9GqqFM zHi*~rRQ(#wkV*eBm8ePoVf4XGtU@;pLZ%N)5ibA$0000000000000000AS`14d;Y2 T5V&6#00000NkvXXu0mjfVQaXP diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00004.png b/tests/snapshots/nanox_transfer_112233445566_network/00004.png index 4213f7912e6e0f6d884484413295b90e438e4614..70c1b9a68f5fb1ee090966199cb58a891b0a5ad4 100644 GIT binary patch delta 410 zcmV;L0cHM-1GEE>B!7EJL_t(|obA|Al7k=&fML4Rn{fXlahH8?WLOd)Z3)=*|DGJQ zK!Zk12mk;8z;ciEL#C9DgBWA0}S2_?g`BFMRCt|E^k7p52;f#)qiyEnvQjTW+VcCz`SPts&Z+`}^n1bXp5zc$RwI2DJ zs)w>GwXr(8ehs!QK$T47of{gFdUce1+{#_m=!@52a|*JD_@#wWgV>4euKW`&n1aew zlc_K2e#okRj*HdCy)R(^0Dyb)t%mjsFJ)u(#U!_boi9~+YS_}L$jYgH@!quc#nj*C zcgk~?Q&akt|BC2V|k^lez delta 369 zcmV-%0gnE(1B?TZB!5#$L_t(|obB0B4uc>JfMK@mCfxr>++`0W!~hm>l*;_SCuI(? z2ugJh00013?qzuH5Q1~gdoPp>Rh3+*!OF+F0n=<0^rQQB!11Pz!3`l~8=WWFF9**Tc>*nf9`5Z1Fep4Bs2GBlwn zd0Uo-RvlscST;6qJ_GT#OGn7PXUd0qUt%U!Q`bxNSAm1S|>1vaqQ=WpOv5e6)@nU>3M#{Dk`{ev2bg~bNb)IYddsG~%$45^Qaj6^dP;g4rtuou2=7gv zg#Ya{$V7jcN~nqcV)TI}W+6+BAkzn`2rmEt0000000000000000HEdz-gFb}(8B4) P00000NkvXXu0mjfwCkv% diff --git a/tests/snapshots/nanox_transfer_bsc/00001.png b/tests/snapshots/nanox_transfer_bsc/00001.png index 999e48e92043f3349bc248fd67514280fea9c41f..4f1699aa19a5c2b8bc55eddbf63c17684a9e751b 100644 GIT binary patch delta 561 zcmV-10?z%V1jz)DBYy%ANkl1cR*ncW!Hdxsn9rdm(`fF$^8QOmgMb*&$!@vfSzzapvQ8H|BD^k7QXsD4y z#;VjvfZg3_NhOvUaNRc=y*%R>Pt@tqxy+1+7`dDNDs^qKyad_u${Xz}TdJ`q&e14O z+=N>{0eLHV@(wunUBegHTcV+!q*uShV{7?JudefKeSZ!b;1&b4GHQp1DvmIxnt^*Z zL?I==IG1k6nC}5HhI}?Bt_bDYBTW2Erk)zqxp?LkV}M!fch(43XwAhbmCFF^Umob_ zYL%317|+pAJ{*(E`K~L%0{{R30DzqYxuJ~dhea@mCqlVC>GOiJlOs2j;fc0_+hGnT zqyNcGmMUzx*J6BtOvI~>p#>WQ000000017oZxH1!W_{Mg00000NkvXXu0mjfFa!;n delta 525 zcmV+o0`mRI1f>L!BYy$xNklQ@-BVYX~qg7Q6m!n??7Gw&6OLy#C>ylq*ZhAtQ`k+ z@Q4A}L#vUlf+EdHFL-HMv7gJk8XQZrq0M;!%^~ZDcYo`2Om5W&>ou@r(TvN+0JG-r ztR66iU zUXXWu+zlO7EM3q!-;`<-Tcge?8Ig~b9c!A0E`$`xY z3xSMiXCgufA%qY@$Y-+e`@Zk^M~VI0@jcrCIYRkwVp`&7wgVyVe7M=LZQHAT+csr` zx6ER42B?6lY*3+b8&xNVjT>lnt!;UpB{Dz-3tanSJ+u*zW`Fca=I;S=!=}15NH6Gf z_nw&(aE!ct6uh44))-l*iOrhN9})SQc<=m~;O>*rb{ehd^*3Qc2qA=!&m=2Dy9dRn zm{YZUTkl6L_I7!t7#$a?w@!-PZtZIwi|!tcA_EaAlM_EKrHx$`Sz2AF>#*yI`$O)V z9RhO3E}VpK)qjog)d8;kcj2rU7bT->HV`12)TQX-Pd~(ex#8Gcm;fcai#MucBrjuS z2}bim5Gexe#9r0<9}T>#d0a0?gJVOY@9t@KvZHp~;q$2}!N9vc7bc(`aIQNh4ymq6 zMA`FjRz-I~25!+4pi)WFIkY8RYkVYQQgr71pTvD;c7F$DZMyzP1Gk-b*2mme6CXkt zWJdonoKQ3R55qZ_37(Z`a4R;v{g?9YTW|LaQW85Ov&44Huh6@FI1X@Yt~X$ zLvJmUz;!KNmf#BTC60BY4^p0hG0pEnp4UDtS4CgCWvF@zM|V9_hUSH7zMS1n0_m_? zh9=T~_nptO`#&Ls5JJdAW`0EpAre8`U#%#VTxP fgb+dqA%FY=&*w%zyr@4#00000NkvXXu0mjf?9^k{ delta 737 zcmV<70v`Q^2Kfb$B!9q3L_t(|ob8)gcEcbHMb)0}#QR?od+A47LNy`bNon5wiZQ`L zVi3;>5dZ)H0001QPHQc7%c=h=eBN!qlh)d{ZU4ZhDZcJDU_x-<_mXYfvX|h8hhIkL zs-G7MS-?t7vMNi^WBnnbLsp^In(y>FF(|YI9q1Icw)B;!$A5Udyq797fQYtV&TD^+ zagh!G<8A|pw87X*n9KTIR>)ewCJX=o002-NFAaU9Yfi4F=7=;)3e^(%IID5>5zCKu z(p*35RSmPAZuP>$5>nJUvM?*6Wxr+Bw4@}*VAT@!gKwL!WmzOn!V!a(iI0xp*nbuF zYC*wM<#aW3zJKT}Zjo|kp0)Z#?57hB&xrtZ@uV9ed&NXeRx{|$1F;tR)Ff6n1Nv*f z)p36(qchadVBaF%SNAj-Y^ywO@cyYuM#rZuCju~b*lE`qFKSaMtl4w%tg@aG>9~Xk zK)x7>q@ikH`ebyHPQU$~sB7l5Q?ky~eyiiM@yYn8pns45drT+8`R!k+3ANftS`9rlO$v@{(q>6q z0Y1dAsrQ4V1F)v~9mw_Cr{pN_(=-ibtFZOdJ!z<)nEJz6-6SFnX46nd`k%h@DZBpz z00000+(?PPC^=Xn=y)kbA?GVd3UjE(y*-jcwOSV*h5n}6ks{rAx!ev2!A5BI#e-i` zZTM5o84w{N1~4Mp*^3X1nbIGqqb4oh^MoB0 z=1Uu(A^-pYfV*4NiB)wwNGaLJ?b!1IJkQv4k3Ic3RkfO3$s_s#L{;l)m}i|*vX8~M z>?d-4EZH32PE=3)*rhPz3a~^hN=qlb$i5gdP>K2{%@Jq81%EimXr$*fSH^M5R=@f( zLd3VAp77hFkN6f;1U;C0(UkJRwaK+QtQyHGwj{tq%-(eRrA006*W3EK^Q zOYw}DZ}0R*aQ*LI6vcy*e8~o_4Dop73yvyovmzq-@#^Q-gcJjKXQQ< zwE7BIz5s>g7E?j_7&>QHZ9azf?h3`%rg9SRa?@u;-H=J&O(Sa3cSa2&(S;(NgiH;7 sig*D40000000000000000Dzx)0;g`z8v7$-UjP6A07*qoM6N<$g0}~uMgRZ+ delta 321 zcmV-H0lxnA0^9Dx{iv*4YCA007|1!}a`c9xreLXzJ4p5dG1bP|jb5_kRLrZT3)y$QX zc$a&8R#Xg`^g1t-iJJ5;Mju#W7P52_GJP-=@d5w<0000000000000000MonyX!+w{ TdQImY00000NkvXXu0mjfpy`gS diff --git a/tests/snapshots/nanox_transfer_bsc/00004.png b/tests/snapshots/nanox_transfer_bsc/00004.png index 38606912e4a4b225847ab1af9284cd752fda867b..3448ce1580cb7b143513a46a4bcb65ed08db8197 100644 GIT binary patch delta 414 zcmV;P0b%}>1Goc_B!7QNL_t(|obB0da)clZfMK@Nn{fXlahLvZ%&-tXtdO{~@AJ!o z1x+-r7yWtAM5;Py;ONmi~*omxH{Rs~&L3ybW z>Vvu;vSOTLXSLDyAq)Tj@SQfUhN>%+#m`6ibGV$@c~h;smb85Q&(qd2z;Jn>vphG` zHNVk6lKb!BGk+Z3gw+*L`(yAu0I~N?_|lh_`=4c&GdQHZ3CQbdeh$Y?P%nz9J9|+d z2FpG1d%#z5OTZJJ1W!JfMK@mCfxr>++`0Wgixs9fa?6eCx?hw z1XJc500026-OKRaAq3}~_g*O(YAQL=f|ZYT2d24E&~w)vfc&M7!3`l42c0dX%0-E+ z@GSB9QxuAyMYZaItkZLq($0SOm;sUZUinB=XUt)nos(%D`+osY!rF>stDVu3p#^P` zx7CeLh>=PIHp}z|huF^m#V>Km!x~?3S@QIcFaQ96orSxh)g8(r>&drwWM$c!k^}3z zswYZhYJD^L1LWH;t@7%HO10Lh{sX-yd$KcwOxQN_OntEJK(aOy9!fPYn3rzo(%J#Y z*VFtN;v}eUjdID#R;nL^>F%@{_m|8D;0j-YD=3$sxzk?{aWMu;W%-{$>Zd%_Q_^{h zbV_^35eMPrmE52iWTL-KCDcTJGseIYtB|FGATtI_5nccQ0000000000000000AQIf Xr^O_(hobG(00000NkvXXu0mjfOOLaM diff --git a/tests/snapshots/nanox_transfer_eip1559/00001.png b/tests/snapshots/nanox_transfer_eip1559/00001.png index 25b43ccedf0c4a683d1d4a8d33eedfd7d009443a..cdcc19d0524cb46d4a31a09ac011df7e8ba5c882 100644 GIT binary patch delta 326 zcmV-M0lEIV0^tIXB!4JLL_t(|obB0L62c%1Kv8tu3Hx7C_TmR4lY!9Zl%)2aFI1=) zB-EG^0002+SRx`K-m`G<_MSjWDb>(VTZ1_3{qdf_kci}*OPFe-v}*_R89l1GPID>U z&5QpIXugU1VTqk?G~Mc}t8bx)*LKd?H~J~U0u;Mq(MLQ;K7TnNN(#Df1W$6_0XjAJ z$$g~XEAE-(un;LoC*@s3%u}>KFcyYCcIN>A0Qh=&Pr#<{4$XRlS)wp+KqC}qjRi$oIg0x|6{`-6a8t7P!s*hSOZUFAy1sco(L}h000000000000000003~A YFD5;>5e*Ys8UO$Q07*qoM6N<$g3gMPMgRZ+ delta 287 zcmV+)0pR}O0=fc_B!2-(L_t(|obA|2j>8}j06;RzPx$|n{FgaIu?S06#mx*=CybDV zyKTUo5&!_KY}>ZzDJ<*~{ljuFPqNR^6BsIElylxMbI#R(vZrlV_erDCLVpkU#_qP9Udf+L7yuy9 zDS85ZqXJIbS)D=KW2NKfJ4VO(s{j6FnzHy)nW7f7viLvYk?xP~one2}ya{-6)qbxI zF%L^nFbN1&Ct#khc)R-KCYPe=Gv(D|Jb0XWqW_N#gDm=o>4aMJ4<-kZtU{6O!;yp+ l000000000002lzi<`>=mwY-Q;-4Xx*002ovPDHLkV1i!{jnn`D diff --git a/tests/snapshots/nanox_transfer_eip1559/00002.png b/tests/snapshots/nanox_transfer_eip1559/00002.png index 0616792db10c76a2c9037ee1bef32eeeffabbca3..5b65b54dc173b086a88acaaaae42fcd7e007db2f 100644 GIT binary patch delta 533 zcmV+w0_y#y1g->-B!BfuL_t(|ob8)il7t`(MVYDD3Hx7?dzlZbEQe>ngfQ(nf6_5P zBCo3*0ssI20Khvrj^j8E`A-e|f5*3X1Hu)`kBR9JKi&zZK&j|DB02p z_mmHj*D~E6U2h#EI;G?gyGBx$*D~E6U2i92TF`Y&y`NW$>AjzFYc`S_hc4x{Ot;0)X+CGmVk3eUgO{@l-wvRe1g1|>GtS)3;8xQ zpJ&70tyR7Vw>M!!(q`kvp-Xu!)9sn|)|$P2UroG(YLJQkG76z4`imh4o-hk}(g`v- zFeMLf|E2r_HF3g5%dKfg6j-1pPS|Ls+7?Wc(nHF3g5 z%dH%vMh3(YCc4U1$; zD55A^8nMOygmY9rPHD)N&?0$e6)!ggG0qth;LPVIVDnjM(`~5YBFr`v00000AmtbJ X_nRIQWDZ&u00000NkvXXu0mjfrcLsc delta 525 zcmZ3-vW#VdO8r|;7srr_Id5k>mK|2$Va<%sKlHc%NbIhHSHBXOoTfVXriC4x$T}@Y z;J&990|?~%X{Nqf-S@ZtVexl{I?bg|=EN&33$A%9cYxtxZ@t_}%kyRr4+>7tE|@)E zlznweYt@NGK90x#Ob#-d+3KbFcfs+KjtewT7-(F*Q*_QIy}ob#*}X26OhH~h+3o*d zmtl|mU|+_su=Lv53b~a|Wp&ZAYiu@fFazynNe^g~6OG;|o_(XMJ|M6?L z8`7h^QjPDNGs#s^_fvfDYAY9=&t4pKq_n;yZR^Z?S(`6!nK;Md>Xh$`59?mT4(M2stpUechr>p7#~Z&+dzYFK z9JXg#*mu_*@h!fcv*rpfp9PW%tbTp=p5T{{)1PNf==^6SwNUL>w<5cBqS&pI3MZZ% zm|9(NT>q)~icT(R?d|KtlMXPM1|}vyz4q0qrDy8`)~rQ`j-6Wjx;3Q!tlGZ)J(D5o zisrD*6nMPNnaRx951~P2$Ml84FbyC6aRI|(fzpxqDKU{M(N4n7H!pQM)CccP`t*28 zUk<13s_JVSBn6J_I6I-??4CNNrt?mYrvnbV&M*=IMc#sE(zBNJAAkHfXd{U0>B{Ek Jvd$@?2>`+;`B(q| diff --git a/tests/snapshots/nanox_transfer_eip1559/00003.png b/tests/snapshots/nanox_transfer_eip1559/00003.png index e483bc5604ee6237abb69de27fd4e9e5ab23c95c..1a7a3f353ef9df5e6c50b15c6d3936a1fd6d3874 100644 GIT binary patch delta 386 zcmV-|0e$}V0-XbpB!6T{L_t(|obA|Al7k=&fML4Rn{fXlBI1rU)KW3hR|>vrC9nm;1r zk4qh=AABU{>Hdu88xeP5&rY2eHB%yzvYCD{kE0IelTP?=4u7mzg6d}??0dhp9_gMU zLLN#TEPiUg25t*b6q9=AhDN5|oh4njYF9D4@ftXnpz##HwJ>TDJDK&WKViWVl$V-B zeNp#QR>awERtJ4w!TLQ^Icfq9JG_y_ak@EIy&{g_d5r!;;c}& z8P2+xZN+BXA$$9V!8~>+;lVcY;nurT_JidD3}#JjpWWESN>FO+=l%UlTdo<`H~x)u zRg?CVWIEH0e+8*GPZ~MVLF5}e(d%m_ne3ZUQcd=au?C)~LY{aJdm_C60000000000 g00000006)=|6G7RPZXlBQUCw|07*qoM6N<$f)<;$9smFU delta 347 zcmV-h0i^z&1NH)tB!4|gL_t(|obB0L4#FT1Kv6XAg#9mxz4$>w2yZGdfcJb=ic=jP zEmSE0003aQm*BOHF-j?|b)lpyl=C2hl#lce80Mg)`}S=Bzf;@f8e@Wk#t5!*P!d=8 zFZTbtECe5eYRQARPRq9nan?Iy1Xx<@!c8JMVyZD42h%+A4S!HbYc7wuIK3rZ6WSzi zsS7_~Gvyj=l;Hup$d7=6U-IIo)pqc>imTDgSKO&d*lcL?^9;9q|pEf!3{r8<(Bcu6I-R)yf8F%vwAh-|es|$h|Yj zy*xP1)|+v$_Ecx2Q%&kq##6Xl`%_S|@}!c1Dv>W3(fi9Lnd~oF1DKxwBp@%@j)UHajvM}t7fco8)3eK}?m zQV@zDDFFZg004X}Ip>^nv=jk+M+=ZrN{8xSv%x&}{)rZ#NzQrOwp~rf!~T3!sJ@Y{ zihhc&WVI;bS3vPilplB9$%mraQQ93sHb0)XZHv`@n!x}&r+;*zH9mU88>oVgPh#@$VSQFUz*UZZV@f&b00000NkvXXu0mjf9Hj(G delta 500 zcmV6_i z0000(eyjyhk&EZZ#>geb%N#?_yN}w-r*kqzENEx!|Adt!|9cDFR$&R>%_eVN2xlYNMfr6n1o} zkSovKUg#;~pnsR1Sh!0wPN5|^ov1V~*X=Tef-?Q3M_T~Dxfx=X!YHLxB7V^ZO zaPAe5@%ksj_hX;coO`$>7^f+@(M#O+E%)42HJ$@AKes3#nV;$z%GKxB?0{{R3z?(H{Lqmo;i_nNBLODOw1sStUX<~>b+6uR`VlnzxaW&Ko qgDE5+7vihjP{+mq00000py3arw9VJ;G~81F0000O7EM3q!-;`<-Tcge?8Ig~b9c!A0E`$`xY z3xSMiXCgufA%qY@$Y-+e`@Zk^M~VI0@jcrCIYRkwVp`&7wgVyVe7M=LZQHAT+csr` zx6ER42B?6lY*3+b8&xNVjT>lnt!;UpB{Dz-3tanSJ+u*zW`Fca=I;S=!=}15NH6Gf z_nw&(aE!ct6uh44))-l*iOrhN9})SQc<=m~;O>*rb{ehd^*3Qc2qA=!&m=2Dy9dRn zm{YZUTkl6L_I7!t7#$a?w@!-PZtZIwi|!tcA_EaAlM_EKrHx$`Sz2AF>#*yI`$O)V z9RhO3E}VpK)qjog)d8;kcj2rU7bT->HV`12)TQX-Pd~(ex#8Gcm;fcai#MucBrjuS z2}bim5Gexe#9r0<9}T>#d0a0?gJVOY@9t@KvZHp~;q$2}!N9vc7bc(`aIQNh4ymq6 zMA`FjRz-I~25!+4pi)WFIkY8RYkVYQQgr71pTvD;c7F$DZMyzP1Gk-b*2mme6CXkt zWJdonoKQ3R55qZ_37(Z`a4R;v{g?9YTW|LaQW85Ov&44Huh6@FI1X@Yt~X$ zLvJmUz;!KNmf#BTC60BY4^p0hG0pEnp4UDtS4CgCWvF@zM|V9_hUSH7zMS1n0_m_? zh9=T~_nptO`#&Ls5JJdAW`0EpAre8`U#%#VTxP fgb+dqA%FY=&*w%zyr@4#00000NkvXXu0mjf?9^k{ delta 737 zcmV<70v`Q^2Kfb$B!9q3L_t(|ob8)gcEcbHMb)0}#QR?od+A47LNy`bNon5wiZQ`L zVi3;>5dZ)H0001QPHQc7%c=h=eBN!qlh)d{ZU4ZhDZcJDU_x-<_mXYfvX|h8hhIkL zs-G7MS-?t7vMNi^WBnnbLsp^In(y>FF(|YI9q1Icw)B;!$A5Udyq797fQYtV&TD^+ zagh!G<8A|pw87X*n9KTIR>)ewCJX=o002-NFAaU9Yfi4F=7=;)3e^(%IID5>5zCKu z(p*35RSmPAZuP>$5>nJUvM?*6Wxr+Bw4@}*VAT@!gKwL!WmzOn!V!a(iI0xp*nbuF zYC*wM<#aW3zJKT}Zjo|kp0)Z#?57hB&xrtZ@uV9ed&NXeRx{|$1F;tR)Ff6n1Nv*f z)p36(qchadVBaF%SNAj-Y^ywO@cyYuM#rZuCju~b*lE`qFKSaMtl4w%tg@aG>9~Xk zK)x7>q@ikH`ebyHPQU$~sB7l5Q?ky~eyiiM@yYn8pns45drT+8`R!k+3ANftS`9rlO$v@{(q>6q z0Y1dAsrQ4V1F)v~9mw_Cr{pN_(=-ibtFZOdJ!z<)nEJz6-6SFnX46nd`k%h@DZBpz z00000+(?PPC^=Xn=y)kbA?GVd3UjE(y*-jcwOSV*h5n}6ks{rAx!ev2!A5BI#e-i` zZTM5o84w{N1~4MpB!7EJL_t(|obA|Al7k=&fML4Rn{fXlahH8?WLOd)Z3)=*|DGJQ zK!Zk12mk;8z;ciEL#C9DgBWA0}S2_?g`BFMRCt|E^k7p52;f#)qiyEnvQjTW+VcCz`SPts&Z+`}^n1bXp5zc$RwI2DJ zs)w>GwXr(8ehs!QK$T47of{gFdUce1+{#_m=!@52a|*JD_@#wWgV>4euKW`&n1aew zlc_K2e#okRj*HdCy)R(^0Dyb)t%mjsFJ)u(#U!_boi9~+YS_}L$jYgH@!quc#nj*C zcgk~?Q&akt|BC2V|k^lez delta 369 zcmV-%0gnE(1B?TZB!5#$L_t(|obB0B4uc>JfMK@mCfxr>++`0W!~hm>l*;_SCuI(? z2ugJh00013?qzuH5Q1~gdoPp>Rh3+*!OF+F0n=<0^rQQB!11Pz!3`l~8=WWFF9**Tc>*nf9`5Z1Fep4Bs2GBlwn zd0Uo-RvlscST;6qJ_GT#OGn7PXUd0qUt%U!Q`bxNSAm1S|>1vaqQ=WpOv5e6)@nU>3M#{Dk`{ev2bg~bNb)IYddsG~%$45^Qaj6^dP;g4rtuou2=7gv zg#Ya{$V7jcN~nqcV)TI}W+6+BAkzn`2rmEt0000000000000000HEdz-gFb}(8B4) P00000NkvXXu0mjfwCkv% diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00001.png b/tests/snapshots/nanox_transfer_ethereum_5234_network/00001.png index 7aea2c0b9e764c728de17d734c50bee74381c7cf..0976a317a1afc0f126d48520ceebe95d1fe87db8 100644 GIT binary patch delta 541 zcmV+&0^F1DKxwBp@%@j)UHajvM}t7fco8)3eK}?m zQV@zDDFFZg004X}Ip>^nv=jk+M+=ZrN{8xSv%x&}{)rZ#NzQrOwp~rf!~T3!sJ@Y{ zihhc&WVI;bS3vPilplB9$%mraQQ93sHb0)XZHv`@n!x}&r+;*zH9mU88>oVgPh#@$VSQFUz*UZZV@f&b00000NkvXXu0mjf9Hj(G delta 500 zcmV6_i z0000(eyjyhk&EZZ#>geb%N#?_yN}w-r*kqzENEx!|Adt!|9cDFR$&R>%_eVN2xlYNMfr6n1o} zkSovKUg#;~pnsR1Sh!0wPN5|^ov1V~*X=Tef-?Q3M_T~Dxfx=X!YHLxB7V^ZO zaPAe5@%ksj_hX;coO`$>7^f+@(M#O+E%)42HJ$@AKes3#nV;$z%GKxB?0{{R3z?(H{Lqmo;i_nNBLODOw1sStUX<~>b+6uR`VlnzxaW&Ko qgDE5+7vihjP{+mq00000py3arw9VJ;G~81F0000O7EM3q!-;`<-Tcge?8Ig~b9c!A0E`$`xY z3xSMiXCgufA%qY@$Y-+e`@Zk^M~VI0@jcrCIYRkwVp`&7wgVyVe7M=LZQHAT+csr` zx6ER42B?6lY*3+b8&xNVjT>lnt!;UpB{Dz-3tanSJ+u*zW`Fca=I;S=!=}15NH6Gf z_nw&(aE!ct6uh44))-l*iOrhN9})SQc<=m~;O>*rb{ehd^*3Qc2qA=!&m=2Dy9dRn zm{YZUTkl6L_I7!t7#$a?w@!-PZtZIwi|!tcA_EaAlM_EKrHx$`Sz2AF>#*yI`$O)V z9RhO3E}VpK)qjog)d8;kcj2rU7bT->HV`12)TQX-Pd~(ex#8Gcm;fcai#MucBrjuS z2}bim5Gexe#9r0<9}T>#d0a0?gJVOY@9t@KvZHp~;q$2}!N9vc7bc(`aIQNh4ymq6 zMA`FjRz-I~25!+4pi)WFIkY8RYkVYQQgr71pTvD;c7F$DZMyzP1Gk-b*2mme6CXkt zWJdonoKQ3R55qZ_37(Z`a4R;v{g?9YTW|LaQW85Ov&44Huh6@FI1X@Yt~X$ zLvJmUz;!KNmf#BTC60BY4^p0hG0pEnp4UDtS4CgCWvF@zM|V9_hUSH7zMS1n0_m_? zh9=T~_nptO`#&Ls5JJdAW`0EpAre8`U#%#VTxP fgb+dqA%FY=&*w%zyr@4#00000NkvXXu0mjf?9^k{ delta 737 zcmV<70v`Q^2Kfb$B!9q3L_t(|ob8)gcEcbHMb)0}#QR?od+A47LNy`bNon5wiZQ`L zVi3;>5dZ)H0001QPHQc7%c=h=eBN!qlh)d{ZU4ZhDZcJDU_x-<_mXYfvX|h8hhIkL zs-G7MS-?t7vMNi^WBnnbLsp^In(y>FF(|YI9q1Icw)B;!$A5Udyq797fQYtV&TD^+ zagh!G<8A|pw87X*n9KTIR>)ewCJX=o002-NFAaU9Yfi4F=7=;)3e^(%IID5>5zCKu z(p*35RSmPAZuP>$5>nJUvM?*6Wxr+Bw4@}*VAT@!gKwL!WmzOn!V!a(iI0xp*nbuF zYC*wM<#aW3zJKT}Zjo|kp0)Z#?57hB&xrtZ@uV9ed&NXeRx{|$1F;tR)Ff6n1Nv*f z)p36(qchadVBaF%SNAj-Y^ywO@cyYuM#rZuCju~b*lE`qFKSaMtl4w%tg@aG>9~Xk zK)x7>q@ikH`ebyHPQU$~sB7l5Q?ky~eyiiM@yYn8pns45drT+8`R!k+3ANftS`9rlO$v@{(q>6q z0Y1dAsrQ4V1F)v~9mw_Cr{pN_(=-ibtFZOdJ!z<)nEJz6-6SFnX46nd`k%h@DZBpz z00000+(?PPC^=Xn=y)kbA?GVd3UjE(y*-jcwOSV*h5n}6ks{rAx!ev2!A5BI#e-i` zZTM5o84w{N1~4Mp8}fKvB=AH{t$A@?BHwl_nU{|5hn# zo5*%d_)2uY#@Ffp)w;233_e^!R7@)5BAoeeIsr_|lLD{&&)bD8~%v(f%8|LJB z@E&tYx~BbF&}3zG=b)DjVEr6yz*Etex5b*;Jz%NsX>I`KzxlGs{|6W0UB6x);55iY ze;OmyM1L}J5Q#1n=_1JF;8uhe0000000000000000002E%^w9~>}orr0)GGi002ov JPDHLkV1gxVsvH0S delta 332 zcmV-S0ki&w1Lp#eB!4bRL_t(|obB0L4#FT1h2hb-6ZXHP*^3XPhH$SbWk&z+2}y4` zKno}W0002|Ayw`Cyy1>}J$FBV$aEs6g1d@|1_&Wk!_|Wv>8CZHW6E;%u&hRYv_(%# z^PMbYXSJ>{bMAH~Mu0R1LD^@oqN*W;6<0p%wfg~j)@2mi+kZkESQ!D*{t|Q!jtPF3 z=BeAQV`~JYp=9M)h&BDJt0w{g0Kk;T?g!{e=jm}m*_xP2W5#J@wdGZ3p;Xh=;5%iDgOqT zdV5ws09mE4jYZEvy!QLc4`_x=`nRb>P5L*Z4R+!!w9_DD+F&W-1poj50000000000 e00000mU#ol-T=Qdt{6N30000B!7EJL_t(|obA|Al7k=&fML4Rn{fXlahH8?WLOd)Z3)=*|DGJQ zK!Zk12mk;8z;ciEL#C9DgBWA0}S2_?g`BFMRCt|E^k7p52;f#)qiyEnvQjTW+VcCz`SPts&Z+`}^n1bXp5zc$RwI2DJ zs)w>GwXr(8ehs!QK$T47of{gFdUce1+{#_m=!@52a|*JD_@#wWgV>4euKW`&n1aew zlc_K2e#okRj*HdCy)R(^0Dyb)t%mjsFJ)u(#U!_boi9~+YS_}L$jYgH@!quc#nj*C zcgk~?Q&akt|BC2V|k^lez delta 369 zcmV-%0gnE(1B?TZB!5#$L_t(|obB0B4uc>JfMK@mCfxr>++`0W!~hm>l*;_SCuI(? z2ugJh00013?qzuH5Q1~gdoPp>Rh3+*!OF+F0n=<0^rQQB!11Pz!3`l~8=WWFF9**Tc>*nf9`5Z1Fep4Bs2GBlwn zd0Uo-RvlscST;6qJ_GT#OGn7PXUd0qUt%U!Q`bxNSAm1S|>1vaqQ=WpOv5e6)@nU>3M#{Dk`{ev2bg~bNb)IYddsG~%$45^Qaj6^dP;g4rtuou2=7gv zg#Ya{$V7jcN~nqcV)TI}W+6+BAkzn`2rmEt0000000000000000HEdz-gFb}(8B4) P00000NkvXXu0mjfwCkv% diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00001.png b/tests/snapshots/nanox_transfer_ethereum_clone/00001.png index 169fe0de33d8dddb7d3dd1d9f8fae4f8634a3faa..43332d41f683f6d05555dd0bbf66b397eb7347f5 100644 GIT binary patch delta 548 zcmV+<0^9wW1iS>0BYy$|Nkl5`qyl*kG=n_1*noziZNbl$`{vlt{~o_ zt%`n%u4pwY>{meXB+{Rk?&w8PEthtOpw07jjL}y6VFv?T+<(#q*Z3y>WPn{ zV!Q&VYv#_q245@Yo@AIUTo852x0;B%DBmy|&A)c#0RR910NCH)@K}P5p?C zR+@eqcf{$?xvY$xG;%lfMdI2j4(z<<%!uuxwp3$xl)X{jcoVKY0z7}@&4AC^u{60b zB98>)G)b>|iO1IROslT*W%*$d45Eop?$2p?LGEyqnn=+^TfyTL4#%Va@y*>(GgwUH1EeF4 mI)(;p3>^Rf00000X!r+wYtqA}tXs$c0000TGa*e`1Vio`lPjw9S2$B|TsOY-ZaANSwbq5kgV zD?q%?FWL)j`L!0nxoEb=Gkp_AaY4K3Jur#^a?idA_6CS|PJj3DLZ^G9xGlRY_G1$U z0000m2`dr5dlz6D11zTZz-lgN zI#x5l^qcUo1MnXzb;1dC*yGTNRAUOg7)2$c{l^egjrJb~8(4xDvV?uul3cyoXlUgZ zcJiq5ue{W}Qh!s7ZtCAyX{G6>QX&o~NzE%&yG$jaO#et+TgidFo*&mym{Y0ll_-0Q zdE!gBGzIeXlP3c{ecz=?r4ji`Fiw+lqnG&JT5f4|>O6C|dE1;{F+d0jw9hip`Ic6C zlHjFjCB821s&Oo*4Q;~FiT}Mcypl=kJ#HrF>V5@Bjb+0Ptpx+|Zcrhef!FCPFzrtK|hv$26&lF`8&A ze4WJM%;O7EM3q!-;`<-Tcge?8Ig~b9c!A0E`$`xY z3xSMiXCgufA%qY@$Y-+e`@Zk^M~VI0@jcrCIYRkwVp`&7wgVyVe7M=LZQHAT+csr` zx6ER42B?6lY*3+b8&xNVjT>lnt!;UpB{Dz-3tanSJ+u*zW`Fca=I;S=!=}15NH6Gf z_nw&(aE!ct6uh44))-l*iOrhN9})SQc<=m~;O>*rb{ehd^*3Qc2qA=!&m=2Dy9dRn zm{YZUTkl6L_I7!t7#$a?w@!-PZtZIwi|!tcA_EaAlM_EKrHx$`Sz2AF>#*yI`$O)V z9RhO3E}VpK)qjog)d8;kcj2rU7bT->HV`12)TQX-Pd~(ex#8Gcm;fcai#MucBrjuS z2}bim5Gexe#9r0<9}T>#d0a0?gJVOY@9t@KvZHp~;q$2}!N9vc7bc(`aIQNh4ymq6 zMA`FjRz-I~25!+4pi)WFIkY8RYkVYQQgr71pTvD;c7F$DZMyzP1Gk-b*2mme6CXkt zWJdonoKQ3R55qZ_37(Z`a4R;v{g?9YTW|LaQW85Ov&44Huh6@FI1X@Yt~X$ zLvJmUz;!KNmf#BTC60BY4^p0hG0pEnp4UDtS4CgCWvF@zM|V9_hUSH7zMS1n0_m_? zh9=T~_nptO`#&Ls5JJdAW`0EpAre8`U#%#VTxP fgb+dqA%FY=&*w%zyr@4#00000NkvXXu0mjf?9^k{ delta 737 zcmV<70v`Q^2Kfb$B!9q3L_t(|ob8)gcEcbHMb)0}#QR?od+A47LNy`bNon5wiZQ`L zVi3;>5dZ)H0001QPHQc7%c=h=eBN!qlh)d{ZU4ZhDZcJDU_x-<_mXYfvX|h8hhIkL zs-G7MS-?t7vMNi^WBnnbLsp^In(y>FF(|YI9q1Icw)B;!$A5Udyq797fQYtV&TD^+ zagh!G<8A|pw87X*n9KTIR>)ewCJX=o002-NFAaU9Yfi4F=7=;)3e^(%IID5>5zCKu z(p*35RSmPAZuP>$5>nJUvM?*6Wxr+Bw4@}*VAT@!gKwL!WmzOn!V!a(iI0xp*nbuF zYC*wM<#aW3zJKT}Zjo|kp0)Z#?57hB&xrtZ@uV9ed&NXeRx{|$1F;tR)Ff6n1Nv*f z)p36(qchadVBaF%SNAj-Y^ywO@cyYuM#rZuCju~b*lE`qFKSaMtl4w%tg@aG>9~Xk zK)x7>q@ikH`ebyHPQU$~sB7l5Q?ky~eyiiM@yYn8pns45drT+8`R!k+3ANftS`9rlO$v@{(q>6q z0Y1dAsrQ4V1F)v~9mw_Cr{pN_(=-ibtFZOdJ!z<)nEJz6-6SFnX46nd`k%h@DZBpz z00000+(?PPC^=Xn=y)kbA?GVd3UjE(y*-jcwOSV*h5n}6ks{rAx!ev2!A5BI#e-i` zZTM5o84w{N1~4MpRRT`$`Et+( z8y*580001hyN7?3F~;p8gwQJaIp)bY{$8_R;7T{jdor^DVvHdK)p_N!J8wD7he-c$ zDdX6|dtzSh>0Doru#-JIWnQY8iZP~arXS{Us)c!_1OCl{6@RCoa!knH_gn3eo>39< zP}M?p*S`&>HGrB-%APBYOnqBRx^B%~s&?l#m^=mbr}(ResV33L?5z1m7Mz0esV1p@ zsO^-gINQV3!nq$|004mhH1;&qK6nxHh^CCwI)0GahRY~1j$_OBy!XPiwPPxm`NrPL zI6^3I^;{UQ*MC!TtyK==?%mN&7`_v}(O6cyYoFt};SI2C-g^!+dLBDzl_|(snO6UE z(9J3hF#21k>RM-9>SgG)FV|XJRy$zz$^34&S-;~n1yCKNHT3O6zK&300000000000000002ly_^JE%^B~w#Wbg002ov JPDHLkV1ky_$_4-c delta 376 zcmV-;0f+v%1Cs-gB!5~-L_t(|obB0L5`!QNKvCN1PT2pFvX_1^<1jo0fk1oDm!%YK z5RK6o0001BxtHR;MZ_3mtu3@P4Rz@lLCZ(`0ERgz=)Qd?z(1*7a7858xH-brIcSMH z{1^BCuP6i`gKo)Z|HrRjn; z$y;m39bBZY2^(ejfKBvQK*5u^_+fP?c-->uH(>w(06lZ7q1C6;xJqMENn!N?xLi^V zS_(Cy_&CqbP;-fV&@Li{l>bf%sIT(V*D}^FPr_%PXb(((5)Pr$Zu zuh!t!lyR ze-ILhObGx00001h*HTI;rFcu>z^}IeDW!C%{x%!LvG4qURf9=Wx0000001TypJ`yey7hFaTH$!{} zu;dRkI}}!%2I3mvB|OsrUCudjq9RH%j>4w%{sbPtP|48#Z7`~a_HPC@@C07S6YRsDQ1$+tYAJji z2?y4u&4rq+#PkH*bVQ+*rXS%BJDqketW-vXvzz)y?Aq#rcUp60MEQ{{mFo8qnFsWmRDL$ohNmhW`A>j#Q>udwdStU%rDX5=($}@ zd_g5&oXfPKPcp9azo(`*GKt*7g;_i{YGCK0nU{|Nu3EoW^{~QdE=s9X2B5k1?%zn7 z1%+lbp&`9#lS(<(itqpc0001>qRocJ;qqV+7|~=XChFxUek;I!nyp;Ho&>)ZH?dbL$DHpPMi0D6$jABehBj&5P$ES?i+=Qdn3CoyBhyt z69xbP0000fR|LH!{0w#F5<8fXB3S&FM9kStuCVKXL)g;+@hZ`LS5IWV6p=%a`;~IV z64-SBJHPtq9~OaeKiPEv%YLG1x(ApY7%Q5FTe&l8mSV*@Vq6k`tA>|ziGSR}KoyTYHLzpRjBAbqMy=mb zE%cBZi_$8U1E{usk%aO`j$gW?AuVjPO4(PB@c;k-007`dtA^TP_+b$=qERUAvuA4J zLM)b;b+bgu+x{d0XT|ulHnmbS7>w`-O7EM3q!-;`<-Tcge?8Ig~b9c!A0E`$`xY z3xSMiXCgufA%qY@$Y-+e`@Zk^M~VI0@jcrCIYRkwVp`&7wgVyVe7M=LZQHAT+csr` zx6ER42B?6lY*3+b8&xNVjT>lnt!;UpB{Dz-3tanSJ+u*zW`Fca=I;S=!=}15NH6Gf z_nw&(aE!ct6uh44))-l*iOrhN9})SQc<=m~;O>*rb{ehd^*3Qc2qA=!&m=2Dy9dRn zm{YZUTkl6L_I7!t7#$a?w@!-PZtZIwi|!tcA_EaAlM_EKrHx$`Sz2AF>#*yI`$O)V z9RhO3E}VpK)qjog)d8;kcj2rU7bT->HV`12)TQX-Pd~(ex#8Gcm;fcai#MucBrjuS z2}bim5Gexe#9r0<9}T>#d0a0?gJVOY@9t@KvZHp~;q$2}!N9vc7bc(`aIQNh4ymq6 zMA`FjRz-I~25!+4pi)WFIkY8RYkVYQQgr71pTvD;c7F$DZMyzP1Gk-b*2mme6CXkt zWJdonoKQ3R55qZ_37(Z`a4R;v{g?9YTW|LaQW85Ov&44Huh6@FI1X@Yt~X$ zLvJmUz;!KNmf#BTC60BY4^p0hG0pEnp4UDtS4CgCWvF@zM|V9_hUSH7zMS1n0_m_? zh9=T~_nptO`#&Ls5JJdAW`0EpAre8`U#%#VTxP fgb+dqA%FY=&*w%zyr@4#00000NkvXXu0mjf?9^k{ delta 737 zcmV<70v`Q^2Kfb$B!9q3L_t(|ob8)gcEcbHMb)0}#QR?od+A47LNy`bNon5wiZQ`L zVi3;>5dZ)H0001QPHQc7%c=h=eBN!qlh)d{ZU4ZhDZcJDU_x-<_mXYfvX|h8hhIkL zs-G7MS-?t7vMNi^WBnnbLsp^In(y>FF(|YI9q1Icw)B;!$A5Udyq797fQYtV&TD^+ zagh!G<8A|pw87X*n9KTIR>)ewCJX=o002-NFAaU9Yfi4F=7=;)3e^(%IID5>5zCKu z(p*35RSmPAZuP>$5>nJUvM?*6Wxr+Bw4@}*VAT@!gKwL!WmzOn!V!a(iI0xp*nbuF zYC*wM<#aW3zJKT}Zjo|kp0)Z#?57hB&xrtZ@uV9ed&NXeRx{|$1F;tR)Ff6n1Nv*f z)p36(qchadVBaF%SNAj-Y^ywO@cyYuM#rZuCju~b*lE`qFKSaMtl4w%tg@aG>9~Xk zK)x7>q@ikH`ebyHPQU$~sB7l5Q?ky~eyiiM@yYn8pns45drT+8`R!k+3ANftS`9rlO$v@{(q>6q z0Y1dAsrQ4V1F)v~9mw_Cr{pN_(=-ibtFZOdJ!z<)nEJz6-6SFnX46nd`k%h@DZBpz z00000+(?PPC^=Xn=y)kbA?GVd3UjE(y*-jcwOSV*h5n}6ks{rAx!ev2!A5BI#e-i` zZTM5o84w{N1~4MpCet4A~5{BhRMN!gpCd_|G%%va1hFl(kashF#FG>~k zAhlo&0002+Le9Cu#{oUg^_hJE##AS=RB*j4F#y)uWVr5Nj`YKt|1ohnd6=j%n~rF+ zFyG38I4jpe&AHPpF#}9y62#AJFU~n@twzhOzOyf&L@y&h-hV5M!74MrYC6!zE#w)nwIxa5fmV2W2MYb+#<#vokP5l;TShLgCsp1SMJXtp-CxKo@s?WaS z03r~DF?N?35+j!#E=}Ej#`Rn#**^o(pm_*d1KNw>$ z6Td<;orKI7s3Kkf000000000000000002PE4=?jt=YZPk!TGfuq6>H*C3hw@&noPbhF&RN{N>G$n?-!E>;<1o=~ZX=2PI4l=u{{-g~{P+Mv$ z^F=*QnTT^-Y&Nca2?GECe5T2}p@SuzSUBo+r2ZD|eVq=zT0KET%V2jlsio@f>s0g8 zzaIC_))u||AAfAsc}{r_#zQ)7dDD)YaUW%`30S)=Bj}oW$B^c4MVKYE-3i#UjC%Gq zJeOTHe*y;YM(5AtcZSUsLCgSxHsj0%#wON2lyU;5k46M+tI%uPkopl3C9XZ?X-QVu z)c@k@ID2tM5jMO%|DSG>$$l6k)nq>ybFdOsXr+@RGb;zTBE0|r000000000000000 c0Kjd20FN03m!ezspzPE0E+x)>&sYJG_g?vtsIHi1%+AHMj(`0GC~3XQ<5ir|mZ1%8 zk(bp6-w-pECTy1J0f*SH0L3SH$M=w4BQOXIJJ{l1) z--VQWRzS=McZL|CqqvO1aqeVFI^87xRNhbT-R8md$H)9Sgu?tyhB$+u_ tiu3{i000000000000000007Ip0WKUovlyKGJOBUy00>D%PDHLkV1lwEyP^O9 From 7a92b65bf785c7a7cc362e1dc0e29f2c18d9acf8 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Feb 2022 14:34:01 +0100 Subject: [PATCH 33/87] Fix typo in setPlugin --- src_features/setPlugin/cmd_setPlugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index 7615812..58ad8bf 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -227,7 +227,7 @@ void handleSetPlugin(uint8_t p1, } uint8_t signatureLen = workBuffer[offset]; - PRINTF("Sigature len: %d\n", signatureLen); + PRINTF("Signature len: %d\n", signatureLen); if (signatureLen < MIN_DER_SIG_SIZE || signatureLen > MAX_DER_SIG_SIZE) { PRINTF("SignatureLen too big or too small. Must be between %d and %d, got %d\n", MIN_DER_SIG_SIZE, From 4232a8925b822d8b84f3f8a76d60fb330926ad3b Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Feb 2022 14:35:37 +0100 Subject: [PATCH 34/87] Fix crash when signing NFT transactions with no NFT information APDU received --- src_plugins/erc1155/erc1155_ui.c | 20 +++++++++++++++++--- src_plugins/erc721/erc721_ui.c | 21 ++++++++++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src_plugins/erc1155/erc1155_ui.c b/src_plugins/erc1155/erc1155_ui.c index 5b4e941..57d6014 100644 --- a/src_plugins/erc1155/erc1155_ui.c +++ b/src_plugins/erc1155/erc1155_ui.c @@ -3,6 +3,8 @@ #include "erc1155_plugin.h" static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { + uint8_t *nft_addr; + switch (msg->screenIndex) { case 0: if (context->approved) { @@ -26,7 +28,10 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(msg->pluginSharedRO->txContent->destination, + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); + getEthDisplayableAddress(nft_addr, msg->msg, msg->msgLength, &global_sha3, @@ -40,6 +45,8 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t } static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { + uint8_t *nft_addr; + switch (msg->screenIndex) { case 0: strlcpy(msg->title, "To", msg->titleLength); @@ -59,7 +66,10 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress((uint8_t *) msg->item1->nft.contractAddress, + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); + getEthDisplayableAddress(nft_addr, msg->msg, msg->msgLength, &global_sha3, @@ -85,6 +95,7 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { char quantity_str[48]; + uint8_t *nft_addr; switch (msg->screenIndex) { case 0: @@ -105,7 +116,10 @@ static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t * break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress((uint8_t *) msg->item1->nft.contractAddress, + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); + getEthDisplayableAddress(nft_addr, msg->msg, msg->msgLength, &global_sha3, diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index e312932..b9f3a62 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -3,6 +3,8 @@ #include "erc721_plugin.h" static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { + uint8_t *nft_addr; + switch (msg->screenIndex) { case 0: strlcpy(msg->title, "Allow", msg->titleLength); @@ -22,7 +24,10 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(msg->pluginSharedRO->txContent->destination, + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); + getEthDisplayableAddress(nft_addr, msg->msg, msg->msgLength, &global_sha3, @@ -51,6 +56,8 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context } static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { + uint8_t *nft_addr; + switch (msg->screenIndex) { case 0: if (context->approved) { @@ -74,7 +81,10 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(msg->pluginSharedRO->txContent->destination, + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); + getEthDisplayableAddress(nft_addr, msg->msg, msg->msgLength, &global_sha3, @@ -96,6 +106,8 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t } static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { + uint8_t *nft_addr; + switch (msg->screenIndex) { case 0: strlcpy(msg->title, "To", msg->titleLength); @@ -115,7 +127,10 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress((uint8_t *) msg->item1->nft.contractAddress, + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); + getEthDisplayableAddress(nft_addr, msg->msg, msg->msgLength, &global_sha3, From 6bc99e8b98723b40a0002b83b9c33f592acdd179 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 10 Feb 2022 09:40:28 +0100 Subject: [PATCH 35/87] Removed NFT transactions unused screens & fixed ERC-1155 setApproveForAll number of screens --- src_plugins/erc1155/erc1155_plugin.c | 4 +++- src_plugins/erc721/erc721_ui.c | 24 ------------------------ 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src_plugins/erc1155/erc1155_plugin.c b/src_plugins/erc1155/erc1155_plugin.c index dbc1b8e..ea65515 100644 --- a/src_plugins/erc1155/erc1155_plugin.c +++ b/src_plugins/erc1155/erc1155_plugin.c @@ -63,10 +63,12 @@ static void handle_finalize(void *parameters) { case SAFE_TRANSFER: msg->numScreens = 5; break; - case SET_APPROVAL_FOR_ALL: case SAFE_BATCH_TRANSFER: msg->numScreens = 4; break; + case SET_APPROVAL_FOR_ALL: + msg->numScreens = 3; + break; default: msg->result = ETH_PLUGIN_RESULT_ERROR; return; diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index b9f3a62..565defa 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -40,14 +40,6 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context msg->msg, msg->msgLength); break; - case 4: - strlcpy(msg->title, "And send", msg->titleLength); - amountToString((uint8_t *) &msg->pluginSharedRO->txContent->value, - sizeof(msg->pluginSharedRO->txContent->value), - WEI_TO_ETHER, - msg->network_ticker, - msg->msg, - msg->msgLength); default: PRINTF("Unsupported screen index %d\n", msg->screenIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; @@ -90,14 +82,6 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t &global_sha3, chainConfig->chainId); break; - case 3: - strlcpy(msg->title, "And send", msg->titleLength); - amountToString((uint8_t *) &msg->pluginSharedRO->txContent->value, - sizeof(msg->pluginSharedRO->txContent->value), - WEI_TO_ETHER, - msg->network_ticker, - msg->msg, - msg->msgLength); default: PRINTF("Unsupported screen index %d\n", msg->screenIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; @@ -143,14 +127,6 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context msg->msg, msg->msgLength); break; - case 4: - strlcpy(msg->title, "And send", msg->titleLength); - amountToString((uint8_t *) &msg->pluginSharedRO->txContent->value, - sizeof(msg->pluginSharedRO->txContent->value), - WEI_TO_ETHER, - msg->network_ticker, - msg->msg, - msg->msgLength); default: PRINTF("Unsupported screen index %d\n", msg->screenIndex); msg->result = ETH_PLUGIN_RESULT_ERROR; From 66ffbc42d4fbd450f2d9c68c195f95cb87a9e7cb Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 10 Feb 2022 09:53:13 +0100 Subject: [PATCH 36/87] Unify the terminology for approval screens between ERC-721 & 1155 --- src_plugins/erc721/erc721_ui.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index 565defa..fb8db17 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -15,11 +15,11 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context chainConfig->chainId); break; case 1: - strlcpy(msg->title, "To Spend Your", msg->titleLength); + strlcpy(msg->title, "To Manage Your", msg->titleLength); if (msg->item1) { strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); } else { - strlcpy(msg->msg, "Not found", msg->msgLength); + strlcpy(msg->msg, "Not Found", msg->msgLength); } break; case 2: From 9a4d193de2af6f54f050e5b661620defdc002b16 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 14 Feb 2022 18:24:21 +0100 Subject: [PATCH 37/87] Added new tests for ERC-721 --- .../nanox_erc721_transfer_wo_info/00000.png | 1 + .../nanox_erc721_transfer_wo_info/00001.png | 1 + .../nanox_erc721_transfer_wo_info/00002.png | 1 + .../nanox_erc721_transfer_wo_info/00003.png | Bin 0 -> 457 bytes .../nanox_erc721_transfer_wo_info/00004.png | 1 + .../nanox_erc721_transfer_wo_info/00005.png | 1 + .../nanox_erc721_transfer_wo_info/00006.png | 1 + .../nanox_erc721_transfer_wo_info/00007.png | 1 + .../nanox_erc721_transfer_wo_info/00008.png | 1 + .../nanox_erc721_transfer_wo_info/00009.png | 1 + .../nanox_erc721_transfer_wo_info/00010.png | 1 + tests/src/erc721.test.js | 49 +++++++++++++----- tests/src/test.fixture.js | 10 ++-- 13 files changed, 50 insertions(+), 19 deletions(-) create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00000.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00001.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00002.png create mode 100644 tests/snapshots/nanox_erc721_transfer_wo_info/00003.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00004.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00005.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00006.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00007.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00008.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00009.png create mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00010.png 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 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{2 { + 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. From 1b24fc2eca3180446e70ca5762e45ad017e557b7 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Fri, 14 Jan 2022 13:48:05 +0100 Subject: [PATCH 38/87] [fix] Get printable amount handle should not parse configuration for ticker and decimal if the amount is a fee --- src/handle_get_printable_amount.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/handle_get_printable_amount.c b/src/handle_get_printable_amount.c index 689b62e..13acc28 100644 --- a/src/handle_get_printable_amount.c +++ b/src/handle_get_printable_amount.c @@ -15,13 +15,6 @@ int handle_get_printable_amount(get_printable_amount_parameters_t* params, chain PRINTF("Amount is too big, 32 bytes max but buffer has %u bytes", params->amount_length); return 0; } - if (!parse_swap_config(params->coin_configuration, - params->coin_configuration_length, - ticker, - &decimals)) { - PRINTF("Error while parsing config\n"); - return 0; - } // If the amount is a fee, its value is nominated in ETH even if we're doing an ERC20 swap if (params->is_fee) { @@ -30,6 +23,15 @@ int handle_get_printable_amount(get_printable_amount_parameters_t* params, chain ticker[ticker_len] = ' '; ticker[ticker_len + 1] = '\0'; decimals = WEI_TO_ETHER; + } else { + // If the amount is *not* a fee, decimals and ticker are built from the given config + if (!parse_swap_config(params->coin_configuration, + params->coin_configuration_length, + ticker, + &decimals)) { + PRINTF("Error while parsing config\n"); + return 0; + } } amountToString(params->amount, From 1f1e472904b507b466f7b294cb1d4732fb2719b6 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Mon, 31 Jan 2022 10:24:00 +0100 Subject: [PATCH 39/87] [add] Bump version for test release --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0a1a209..62a7372 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ APP_LOAD_PARAMS += --path "1517992542'/1101353413'" APPVERSION_M=1 APPVERSION_N=9 APPVERSION_P=17 -APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) +APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)-exchangefix APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) ifeq ($(CHAIN),) From 1e988e09041547eeffec5630443a069230511ab2 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Tue, 15 Feb 2022 11:46:14 +0100 Subject: [PATCH 40/87] [revert] Removing temporary application name variant --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 62a7372..0a1a209 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ APP_LOAD_PARAMS += --path "1517992542'/1101353413'" APPVERSION_M=1 APPVERSION_N=9 APPVERSION_P=17 -APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)-exchangefix +APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) ifeq ($(CHAIN),) From b3a36f9b11e86e374f54c8e3d45a3f594c648b71 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 15 Feb 2022 10:26:30 +0100 Subject: [PATCH 41/87] Added new tests for ERC-1155 --- .../nanox_erc1155_transfer_wo_info/00000.png | 1 + .../nanox_erc1155_transfer_wo_info/00001.png | 1 + .../nanox_erc1155_transfer_wo_info/00002.png | 1 + .../nanox_erc1155_transfer_wo_info/00003.png | Bin 0 -> 457 bytes .../nanox_erc1155_transfer_wo_info/00004.png | 1 + .../nanox_erc1155_transfer_wo_info/00005.png | 1 + .../nanox_erc1155_transfer_wo_info/00006.png | 1 + .../nanox_erc1155_transfer_wo_info/00007.png | 1 + .../nanox_erc1155_transfer_wo_info/00008.png | 1 + .../nanox_erc1155_transfer_wo_info/00009.png | 1 + .../nanox_erc1155_transfer_wo_info/00010.png | 1 + .../nanox_erc1155_transfer_wo_info/00011.png | 1 + .../nanox_erc1155_transfer_wo_info/00012.png | 1 + tests/src/erc1155.test.js | 83 +++++++++++------- 14 files changed, 65 insertions(+), 30 deletions(-) create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png create mode 100644 tests/snapshots/nanox_erc1155_transfer_wo_info/00003.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00004.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00005.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00006.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00007.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00008.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00009.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00010.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00011.png create mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00012.png diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png new file mode 120000 index 0000000..a808e25 --- /dev/null +++ b/tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00000.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png new file mode 120000 index 0000000..18b62b5 --- /dev/null +++ b/tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00001.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png new file mode 120000 index 0000000..3ba3b50 --- /dev/null +++ b/tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00002.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00003.png b/tests/snapshots/nanox_erc1155_transfer_wo_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{2 { +{ + const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5ef242432a00000000000000010001473045022100ec4377d17e8d98d424bf16b29c691bc1a010825fb5b8a35de0268a9dc22eab2402206701b016fe6718bf519d18cc12e9838e9ef898cc4c143017839023c3260b2d74'); + const provide_nft_info = apdu_as_string('e01400007b0101124f70656e53656120436f6c6c656374696f6e495f947276749ce646f68ac8c248420045cb7b5e0000000000000001000147304502210083e357a828f13d574b1296214a3749c194ab1df1f8a243655c053b1c72f91e0c02201ed93cfac7e87759445c4da2e4bfd6e1cf0405ea37c7293bc965948f51bef5cc'); + const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f901090b8520b673dd0082bcb394495f947276749ce646f68ac8c248420045cb7b5e80b8e4f242432a0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596cabf06640f8ca8fc5e0ed471b10befcdf65a33e4300000000'); + const sign_more = apdu_as_string('e00480008b00006a0000000064000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); - const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5ef242432a00000000000000010001473045022100ec4377d17e8d98d424bf16b29c691bc1a010825fb5b8a35de0268a9dc22eab2402206701b016fe6718bf519d18cc12e9838e9ef898cc4c143017839023c3260b2d74'); - const provide_nft_info = apdu_as_string('e01400007b0101124f70656e53656120436f6c6c656374696f6e495f947276749ce646f68ac8c248420045cb7b5e0000000000000001000147304502210083e357a828f13d574b1296214a3749c194ab1df1f8a243655c053b1c72f91e0c02201ed93cfac7e87759445c4da2e4bfd6e1cf0405ea37c7293bc965948f51bef5cc'); - const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f901090b8520b673dd0082bcb394495f947276749ce646f68ac8c248420045cb7b5e80b8e4f242432a0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596cabf06640f8ca8fc5e0ed471b10befcdf65a33e4300000000'); - const sign_more = apdu_as_string('e00480008b00006a0000000064000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); + test('[Nano ' + model.letter + '] Transfer ERC-1155', 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 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 + '_erc1155_transfer', [10, -1, 0]); - await waitForAppScreen(sim, current_screen); - await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_transfer', [10, -1, 0]); + await sign_promise; + })); - await sign_promise; -})); + test('[Nano ' + model.letter + '] Transfer ERC-1155 w/o PROVIDE_NFT_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 + '_erc1155_transfer_wo_info', [10, -1, 0]); + + await sign_promise; + })); + + test('[Nano ' + model.letter + '] Transfer ERC-1155 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)); + })); +} test('[Nano ' + model.letter + '] Batch transfer ERC-1155', zemu(model, async (sim, eth) => { - const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5e2eb2c2d60000000000000001000147304502210087b35cefc53fd94e25404933eb0d5ff08f20ba655d181de3b24ff0099dc3317f02204a216aa9e0b84bef6e20fcb036bd49647bf0cab66732b99b49ec277ffb682aa1'); - const provide_nft_info = apdu_as_string('e0140000820101194f70656e536561205368617265642053746f726566726f6e74495f947276749ce646f68ac8c248420045cb7b5e00000000000000010001473045022100c74cd613a27a9f4887210f5a3a0e12745e1ba0ab3a0d284cb6485d89c3cce4e602205a13e62a91164985cf58a838f8f531c0b91b980d206a5ba8df28270023ef93a3'); - const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f9020b0e850d8cfd86008301617d94495f947276749ce646f68ac8c248420045cb7b5e80b901e42eb2c2d60000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c00000000000000000000000000000000000000000000'); - const sign_more_1 = apdu_as_string('e004800096000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000003abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a0000000064def9d99ff495856496c028c0'); - const sign_more_2 = apdu_as_string('e00480009689732473fcd0bbbe000000000000a30000000001abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a00000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000'); - const sign_more_3 = apdu_as_string('e00480006100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); + const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5e2eb2c2d60000000000000001000147304502210087b35cefc53fd94e25404933eb0d5ff08f20ba655d181de3b24ff0099dc3317f02204a216aa9e0b84bef6e20fcb036bd49647bf0cab66732b99b49ec277ffb682aa1'); + const provide_nft_info = apdu_as_string('e0140000820101194f70656e536561205368617265642053746f726566726f6e74495f947276749ce646f68ac8c248420045cb7b5e00000000000000010001473045022100c74cd613a27a9f4887210f5a3a0e12745e1ba0ab3a0d284cb6485d89c3cce4e602205a13e62a91164985cf58a838f8f531c0b91b980d206a5ba8df28270023ef93a3'); + const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f9020b0e850d8cfd86008301617d94495f947276749ce646f68ac8c248420045cb7b5e80b901e42eb2c2d60000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c00000000000000000000000000000000000000000000'); + const sign_more_1 = apdu_as_string('e004800096000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000003abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a0000000064def9d99ff495856496c028c0'); + const sign_more_2 = apdu_as_string('e00480009689732473fcd0bbbe000000000000a30000000001abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a00000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000'); + const sign_more_3 = apdu_as_string('e00480006100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); - 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); - await send_apdu(eth.transport, sign_more_1); - await send_apdu(eth.transport, sign_more_2); - let sign_promise = send_apdu(eth.transport, sign_more_3); + 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); + await send_apdu(eth.transport, sign_more_1); + await send_apdu(eth.transport, sign_more_2); + let sign_promise = send_apdu(eth.transport, sign_more_3); - await waitForAppScreen(sim, current_screen); - await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8, -1, 0]); + await waitForAppScreen(sim, current_screen); + await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8, -1, 0]); - await sign_promise; + await sign_promise; })); From 2e63a428b21a64d99c0210a7e4d1d14f95a0a450 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 15 Feb 2022 14:09:43 +0100 Subject: [PATCH 42/87] Removed useless header include in shared_context.h Could easily create a circular header dependency --- src/eth_plugin_handler.c | 1 + src/shared_context.h | 1 - src/stark_crypto.c | 7 ++++--- src_features/getPublicKey/cmd_getPublicKey.c | 1 + .../stark_provideQuantum/cmd_stark_provideQuantum.c | 1 + src_features/stark_sign/cmd_stark_sign.c | 1 + src_features/stark_sign/ui_flow_stark_sign.c | 1 + src_plugins/compound/compound_plugin.c | 1 + src_plugins/starkware/starkware_plugin.c | 1 + 9 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index b82c6a5..accc232 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -3,6 +3,7 @@ #include "eth_plugin_internal.h" #include "shared_context.h" #include "network.h" +#include "ethUtils.h" void eth_plugin_prepare_init(ethPluginInitContract_t *init, uint8_t *selector, uint32_t dataSize) { memset((uint8_t *) init, 0, sizeof(ethPluginInitContract_t)); diff --git a/src/shared_context.h b/src/shared_context.h index 035f7c2..43dc533 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -10,7 +10,6 @@ #include "cx.h" #include "os_io_seproxyhal.h" #include "ethUstream.h" -#include "ethUtils.h" #include "uint256.h" #include "tokens.h" #include "chainConfig.h" diff --git a/src/stark_crypto.c b/src/stark_crypto.c index 990216a..8f33a01 100644 --- a/src/stark_crypto.c +++ b/src/stark_crypto.c @@ -4,6 +4,7 @@ #include "stark_utils.h" #include "ui_callbacks.h" #include "utils.h" +#include "ethUtils.h" static unsigned char const C_cx_Stark256_n[] = { // n: 0x0800000000000010ffffffffffffffffb781126dcae7b2321e66a241adc64d2f @@ -16,13 +17,13 @@ static unsigned char const STARK_DERIVE_BIAS[] = { 0x38, 0xa1, 0x3b, 0x4b, 0x92, 0x0e, 0x94, 0x11, 0xae, 0x6d, 0xa5, 0xf4, 0x0b, 0x03, 0x58, 0xb1}; void starkDerivePrivateKey(uint32_t *bip32Path, uint32_t bip32PathLength, uint8_t *privateKeyData) { -#if 0 - // Sanity check +#if 0 + // Sanity check if (bip32Path[0] != STARK_BIP32_PATH_0) { PRINTF("Invalid Stark derivation path %d\n", bip32Path[0]); THROW(0x6a80); } - os_perso_derive_node_bip32(CX_CURVE_256K1, bip32Path, bip32PathLength, privateKeyData, NULL); + os_perso_derive_node_bip32(CX_CURVE_256K1, bip32Path, bip32PathLength, privateKeyData, NULL); PRINTF("Private key before processing %.*H\n", 32, privateKeyData); // TODO - support additional schemes cx_math_modm(privateKeyData, 32, C_cx_Stark256_n, 32); diff --git a/src_features/getPublicKey/cmd_getPublicKey.c b/src_features/getPublicKey/cmd_getPublicKey.c index ef521c4..59c9fb8 100644 --- a/src_features/getPublicKey/cmd_getPublicKey.c +++ b/src_features/getPublicKey/cmd_getPublicKey.c @@ -3,6 +3,7 @@ #include "ui_flow.h" #include "feature_getPublicKey.h" +#include "ethUtils.h" void handleGetPublicKey(uint8_t p1, uint8_t p2, diff --git a/src_features/stark_provideQuantum/cmd_stark_provideQuantum.c b/src_features/stark_provideQuantum/cmd_stark_provideQuantum.c index 4d390dd..1796fe5 100644 --- a/src_features/stark_provideQuantum/cmd_stark_provideQuantum.c +++ b/src_features/stark_provideQuantum/cmd_stark_provideQuantum.c @@ -3,6 +3,7 @@ #include "shared_context.h" #include "apdu_constants.h" #include "ui_flow.h" +#include "ethUtils.h" void handleStarkwareProvideQuantum(uint8_t p1, __attribute__((unused)) uint8_t p2, diff --git a/src_features/stark_sign/cmd_stark_sign.c b/src_features/stark_sign/cmd_stark_sign.c index 9329838..58ca944 100644 --- a/src_features/stark_sign/cmd_stark_sign.c +++ b/src_features/stark_sign/cmd_stark_sign.c @@ -6,6 +6,7 @@ #include "ui_flow.h" #include "poorstream.h" #include "ui_callbacks.h" +#include "ethUtils.h" #define U8BE(buf, off) \ (uint64_t)((((uint64_t) U4BE(buf, off)) << 32) | (((uint64_t) U4BE(buf, off + 4)) & 0xFFFFFFFF)) diff --git a/src_features/stark_sign/ui_flow_stark_sign.c b/src_features/stark_sign/ui_flow_stark_sign.c index 4ef5ddc..23c9319 100644 --- a/src_features/stark_sign/ui_flow_stark_sign.c +++ b/src_features/stark_sign/ui_flow_stark_sign.c @@ -2,6 +2,7 @@ #include "shared_context.h" #include "ui_callbacks.h" +#include "ethUtils.h" unsigned int io_seproxyhal_touch_stark_ok(const bagl_element_t *e); diff --git a/src_plugins/compound/compound_plugin.c b/src_plugins/compound/compound_plugin.c index a933d89..cbb68dd 100644 --- a/src_plugins/compound/compound_plugin.c +++ b/src_plugins/compound/compound_plugin.c @@ -3,6 +3,7 @@ #include "shared_context.h" // TODO : rewrite as independant code #include "eth_plugin_internal.h" // TODO : rewrite as independant code #include "utils.h" +#include "ethUtils.h" typedef enum { COMPOUND_REDEEM_UNDERLYING = 0, diff --git a/src_plugins/starkware/starkware_plugin.c b/src_plugins/starkware/starkware_plugin.c index f4ba5f1..104675b 100644 --- a/src_plugins/starkware/starkware_plugin.c +++ b/src_plugins/starkware/starkware_plugin.c @@ -4,6 +4,7 @@ #include "eth_plugin_internal.h" // TODO : rewrite as independant code #include "stark_utils.h" #include "utils.h" +#include "ethUtils.h" #ifdef HAVE_STARKWARE From ce2df92741a0789ee90ad58e50d21332c2e86b3e Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 15 Feb 2022 14:11:22 +0100 Subject: [PATCH 43/87] New common function to get the NFT contract address --- src_common/ethUtils.c | 6 ++++++ src_common/ethUtils.h | 4 ++++ src_plugins/erc1155/erc1155_ui.c | 20 +++----------------- src_plugins/erc721/erc721_ui.c | 21 +++------------------ 4 files changed, 16 insertions(+), 35 deletions(-) diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index eb9ddf6..d3c71b0 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -237,6 +237,12 @@ void getEthDisplayableAddress(uint8_t *in, getEthAddressStringFromBinary(in, out + 2, sha3, chainId); } +uint8_t *getNftContractAddress(const ethQueryContractUI_t *const msg) { + // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN + return ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) + : msg->pluginSharedRO->txContent->destination); +} + bool adjustDecimals(char *src, uint32_t srcLength, char *target, diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index 2f66b29..af88517 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -22,6 +22,8 @@ #include "cx.h" #include "chainConfig.h" +#include "eth_plugin_interface.h" + /** * @brief Decode an RLP encoded field - see * https://github.com/ethereum/wiki/wiki/RLP @@ -57,6 +59,8 @@ void getEthDisplayableAddress(uint8_t *in, cx_sha3_t *sha3, uint64_t chainId); +uint8_t *getNftContractAddress(const ethQueryContractUI_t *const msg); + bool adjustDecimals(char *src, uint32_t srcLength, char *target, diff --git a/src_plugins/erc1155/erc1155_ui.c b/src_plugins/erc1155/erc1155_ui.c index 57d6014..e2679d4 100644 --- a/src_plugins/erc1155/erc1155_ui.c +++ b/src_plugins/erc1155/erc1155_ui.c @@ -3,8 +3,6 @@ #include "erc1155_plugin.h" static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { - uint8_t *nft_addr; - switch (msg->screenIndex) { case 0: if (context->approved) { @@ -28,10 +26,7 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); - getEthDisplayableAddress(nft_addr, + getEthDisplayableAddress(getNftContractAddress(msg), msg->msg, msg->msgLength, &global_sha3, @@ -45,8 +40,6 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t } static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { - uint8_t *nft_addr; - switch (msg->screenIndex) { case 0: strlcpy(msg->title, "To", msg->titleLength); @@ -66,10 +59,7 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); - getEthDisplayableAddress(nft_addr, + getEthDisplayableAddress(getNftContractAddress(msg), msg->msg, msg->msgLength, &global_sha3, @@ -95,7 +85,6 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { char quantity_str[48]; - uint8_t *nft_addr; switch (msg->screenIndex) { case 0: @@ -116,10 +105,7 @@ static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t * break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); - getEthDisplayableAddress(nft_addr, + getEthDisplayableAddress(getNftContractAddress(msg), msg->msg, msg->msgLength, &global_sha3, diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index fb8db17..ce0c4f5 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -3,8 +3,6 @@ #include "erc721_plugin.h" static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { - uint8_t *nft_addr; - switch (msg->screenIndex) { case 0: strlcpy(msg->title, "Allow", msg->titleLength); @@ -24,10 +22,7 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); - getEthDisplayableAddress(nft_addr, + getEthDisplayableAddress(getNftContractAddress(msg), msg->msg, msg->msgLength, &global_sha3, @@ -48,8 +43,6 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context } static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { - uint8_t *nft_addr; - switch (msg->screenIndex) { case 0: if (context->approved) { @@ -73,10 +66,7 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); - getEthDisplayableAddress(nft_addr, + getEthDisplayableAddress(getNftContractAddress(msg), msg->msg, msg->msgLength, &global_sha3, @@ -90,8 +80,6 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t } static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { - uint8_t *nft_addr; - switch (msg->screenIndex) { case 0: strlcpy(msg->title, "To", msg->titleLength); @@ -111,10 +99,7 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - nft_addr = ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); - getEthDisplayableAddress(nft_addr, + getEthDisplayableAddress(getNftContractAddress(msg), msg->msg, msg->msgLength, &global_sha3, From 0864a4f2827c1c2a18b42e41a556093b8d7e6729 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Fri, 11 Feb 2022 18:35:58 +0100 Subject: [PATCH 44/87] [add] Job to generate a new SDK and creating a commit in SDK repository --- .github/actions/commit-changes/action.yml | 67 ++++++++ .github/workflows/sdk-generation.yml | 43 ++++++ Makefile | 2 +- tools/build_sdk.py | 180 ++++++++++++++++++++++ 4 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 .github/actions/commit-changes/action.yml create mode 100644 .github/workflows/sdk-generation.yml create mode 100755 tools/build_sdk.py diff --git a/.github/actions/commit-changes/action.yml b/.github/actions/commit-changes/action.yml new file mode 100644 index 0000000..0d8ac4f --- /dev/null +++ b/.github/actions/commit-changes/action.yml @@ -0,0 +1,67 @@ +name: 'Commit and push if the version file has changed' + +inputs: + name: + description: 'The name of the commiter' + required: true + default: 'github-actions[bot]' + email: + description: 'The email of the commiter' + required: true + default: 'github-actions[bot]@users.noreply.github.com' + message: + description: 'The commit message' + required: true + default: 'New release version(s)' + files: + description: 'The file(s) to add in the commit' + required: true + default: '*' + directory: + description: 'The directory in which the action will be performed' + required: true + default: '.' + branch: + description: 'Checkout (or create) on a specific branch before commit/push' + required: true + default: 'master' + secret: + description: 'A token allowing to push the commit on the repository' + required: true + default: '.' + repository: + description: 'The repository where to push' + required: true + default: '' + +runs: + using: 'composite' + steps: + - name: Commit the changes + run: | + git config --global user.name ${{ inputs.name }} + ORIGIN="$(pwd)" + cd ${{ inputs.directory }} + git switch ${{ inputs.branch }} 2>/dev/null || git switch -c ${{ inputs.branch }} + git status + CHANGES="$(git status --porcelain ${{ inputs.files }})" + if [ -z "${CHANGES}" ]; \ + then \ + echo "No changes, stopping now"; \ + cd ${origin} \ + exit 0; \ + fi + echo -e "Changes:\n${CHANGES}" + git add ${{ inputs.files }} + git commit -am "${{ inputs.message }}" + git log -n 2 + cd ${ORIGIN} + shell: bash + + - name: Push commit + uses: ad-m/github-push-action@master + with: + github_token: ${{ inputs.secret }} + branch: ${{ inputs.branch }} + directory: ${{ inputs.directory }} + repository: ${{ inputs.repository }} diff --git a/.github/workflows/sdk-generation.yml b/.github/workflows/sdk-generation.yml new file mode 100644 index 0000000..162371e --- /dev/null +++ b/.github/workflows/sdk-generation.yml @@ -0,0 +1,43 @@ +name: Updating the SDK + +on: + workflow_dispatch: + push: + branches: + - master + - develop + +jobs: + updating_SDK: + name: Updating the SDK + runs-on: ubuntu-latest + + steps: + - name: Clone + uses: actions/checkout@v2 + with: + # by default the action uses fetch-depth = 1, which creates + # shallow repositories from which we can't push + fetch-depth: 0 + submodules: recursive + # needed, else the push inside the action will use default credentials + # instead of provided ones + persist-credentials: false + + - name: Build new SDK + run: python tools/build_sdk.py + + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + + - name: Commit & push changes in the SDK if any + uses: ./.github/actions/commit-changes + with: + name: 'ldg-github-ci' + directory: ethereum-plugin-sdk + branch: ${{ steps.extract_branch.outputs.branch }} + message: "[update] Branch ${{ steps.extract_branch.outputs.branch }} | Commit ${GITHUB_SHA}" + secret: ${{ secrets.CI_BOT_TOKEN }} + repository: LedgerHQ/ethereum-plugin-sdk diff --git a/Makefile b/Makefile index 0a1a209..0ddf3e8 100644 --- a/Makefile +++ b/Makefile @@ -389,7 +389,7 @@ $(shell git submodule update --init) endif # rebuild -$(shell python3 ethereum-plugin-sdk/build_sdk.py) +$(shell python3 tools/build_sdk.py) $(shell find ./ethereum-plugin-sdk -iname '*.h' -o -iname '*.c' | xargs clang-format-10 -i) # check if a difference is noticed (fail if it happens in CI build) diff --git a/tools/build_sdk.py b/tools/build_sdk.py new file mode 100755 index 0000000..aab3a6e --- /dev/null +++ b/tools/build_sdk.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 + +''' +This script extract a few specific definitions from app-ethereum that are +required to exchange information with ethereum external plugins. +It should always be launched from app-ethereum: + +python3 ethereum-plugin-sdk/build_sdk.py + +''' + +import os + + +def extract_from_headers(sources, nodes_to_extract): + cat_sources = [] + for source in sources: + with open(source, 'r') as f: + cat_sources += f.readlines() + + sdk_body = [] + for key, values in nodes_to_extract.items(): + for value in values: + node = [] + unclosed_curvy_brackets = False + unclosed_parantheses = False + for line in cat_sources: + if key in line and value in line: + node += [line] + unclosed_curvy_brackets = line.count('{') - line.count('}') + if unclosed_curvy_brackets == False: + break + elif (key == "fn" and value in line) or unclosed_parantheses: + node += [line] + unclosed_parantheses = line.find(")") == -1 + if unclosed_parantheses == False: + break + elif unclosed_curvy_brackets: + node += [line] + unclosed_curvy_brackets += line.count( + '{') - line.count('}') + if unclosed_curvy_brackets: + continue + else: + break + + sdk_body += [''.join(node)] + + return '\n'.join(sdk_body) + + +def extract_from_c_files(sources, nodes_to_extract): + cat_sources = [] + for source in sources: + with open(source, 'r') as f: + cat_sources += f.readlines() + + sdk_body = [] + for node_name in nodes_to_extract: + node = [] + copying = False + wait_curvy_bracket = True + for line in cat_sources: + if node_name in line: + copying = True + node += [line] + unclosed_curvy_brackets = line.count('{') - line.count('}') + elif copying: + node += [line] + unclosed_curvy_brackets += line.count('{') - line.count('}') + if wait_curvy_bracket: + wait_curvy_bracket = line.count('}') == 0 + if unclosed_curvy_brackets != 0 or wait_curvy_bracket: + continue + else: + break + + sdk_body += [''.join(node)] + + return '\n'.join(sdk_body) + + +def merge_headers(sources, nodes_to_extract): + includes = [ + '#include "os.h"', + '#include "cx.h"', + '#include ', + '#include ' + ] + + body = extract_from_headers(sources, nodes_to_extract) + + eth_internals_h = '\n\n'.join([ + "/* This file is auto-generated, don't edit it */", + "#pragma once", + '\n'.join(includes), + body + ]) + + with open("ethereum-plugin-sdk/include/eth_internals.h", 'w') as f: + f.write(eth_internals_h) + + +def copy_header(header_to_copy, merged_headers): + + merged_headers = [os.path.basename(path) for path in merged_headers] + + with open(header_to_copy, 'r') as f: + source = f.readlines() + + eth_plugin_interface_h = [ + "/* This file is auto-generated, don't edit it */\n"] + for line in source: + eth_plugin_interface_h += [line] + for header in merged_headers: + if header in line: + del eth_plugin_interface_h[-1] + break + + # add '#include "eth_internals.h"' + include_index = eth_plugin_interface_h.index('#include "cx.h"\n') + eth_plugin_interface_h.insert( + include_index+1, '#include "eth_internals.h"\n') + + # dump to file + with open("ethereum-plugin-sdk/include/eth_plugin_interface.h", 'w') as f: + f.writelines(eth_plugin_interface_h) + + +def merge_c_files(sources, nodes_to_extract): + includes = [ + '#include "eth_internals.h"' + ] + + body = extract_from_c_files(sources, nodes_to_extract) + + eth_internals_h = '\n\n'.join([ + "/* This file is auto-generated, don't edit it */", + '\n'.join(includes), + body + ]) + + with open("ethereum-plugin-sdk/include/eth_internals.c", 'w') as f: + f.write(eth_internals_h) + + +if __name__ == "__main__": + + # some nodes will be extracted from these headers and merged into a new one, copied to sdk + headers_to_merge = [ + "src/tokens.h", + "src/chainConfig.h", + "src/utils.h", + "src_common/ethUstream.h", + "src_common/ethUtils.h", + "src/shared_context.h", + "src/eth_plugin_internal.h", + "src/nft.h", + ] + nodes_to_extract = { + "#define": ["MAX_TICKER_LEN", "ADDRESS_LENGTH", "INT256_LENGTH", "WEI_TO_ETHER", "SELECTOR_SIZE", "PARAMETER_LENGTH", "RUN_APPLICATION", "COLLECTION_NAME_MAX_LEN"], + "typedef enum": [], + "typedef struct": ["tokenDefinition_t", "txInt256_t", "txContent_t", "nftInfo_t"], + "typedef union": ["extraInfo_t"], + "__attribute__((no_instrument_function)) inline": ["int allzeroes"], + "const": ["HEXDIGITS"], + "fn": ["void getEthAddressStringFromBinary", "void getEthAddressFromKey", "void getEthDisplayableAddress", "bool adjustDecimals", "bool uint256_to_decimal", "void amountToString", "void u64_to_string", "void copy_address", "void copy_parameter"] + } + merge_headers(headers_to_merge, nodes_to_extract) + + # this header will be stripped from all #include related to previously merged headers, then copied to sdk + copy_header("src/eth_plugin_interface.h", headers_to_merge) + + # extract and merge function bodies + c_files_to_merge = [ + "src/utils.c", + "src_common/ethUtils.c", + "src/eth_plugin_internal.c" + ] + merge_c_files(c_files_to_merge, nodes_to_extract["fn"]) From b6167cae8acdcd24296361d5d748db20a648deb5 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Thu, 17 Feb 2022 08:58:02 +0100 Subject: [PATCH 45/87] [fix] Review fixes --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0ddf3e8..803e243 100644 --- a/Makefile +++ b/Makefile @@ -388,9 +388,8 @@ $(info INFO: Need to reinitialize git submodules) $(shell git submodule update --init) endif -# rebuild +# rebuild SDK $(shell python3 tools/build_sdk.py) -$(shell find ./ethereum-plugin-sdk -iname '*.h' -o -iname '*.c' | xargs clang-format-10 -i) # check if a difference is noticed (fail if it happens in CI build) ifneq ($(shell git status | grep 'ethereum-plugin-sdk'),) From 458ef9af520486f57029d6e07afa353e3b9ef36c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Baptiste=20B=C3=A9drune?= Date: Thu, 3 Feb 2022 14:01:34 +0100 Subject: [PATCH 46/87] Define better prototype for "network" functions --- src_common/network.c | 16 ++++++++-------- src_common/network.h | 6 +++--- src_features/signTx/logic_signTx.c | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src_common/network.c b/src_common/network.c index f568855..392b7d5 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -45,27 +45,27 @@ uint64_t get_chain_id(void) { return chain_id; } -network_info_t *get_network(void) { +const network_info_t *get_network(void) { uint64_t chain_id = get_chain_id(); - for (uint8_t i = 0; i < sizeof(NETWORK_MAPPING) / sizeof(*NETWORK_MAPPING); i++) { + for (size_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]); + return (const network_info_t *) PIC(&NETWORK_MAPPING[i]); } } return NULL; } -char *get_network_name(void) { - network_info_t *network = get_network(); +const char *get_network_name(void) { + const network_info_t *network = get_network(); if (network == NULL) { return NULL; } else { - return (char *) PIC(network->name); + return (const char *) PIC(network->name); } } -char *get_network_ticker(void) { - network_info_t *network = get_network(); +const char *get_network_ticker(void) { + const network_info_t *network = get_network(); if (network == NULL) { return chainConfig->coinName; } else { diff --git a/src_common/network.h b/src_common/network.h index 23bffc1..7a6d2fc 100644 --- a/src_common/network.h +++ b/src_common/network.h @@ -13,8 +13,8 @@ typedef struct network_info_s { // Returns the current chain id. Defaults to 0 if txType was not found. 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); +const network_info_t *get_network(void); // Returns a pointer to the network name, or NULL if there is none. -char *get_network_name(void); +const char *get_network_name(void); // Returns a pointer to the network ticker, or chainConfig->coinName if there is none. -char *get_network_ticker(void); \ No newline at end of file +const char *get_network_ticker(void); \ No newline at end of file diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 6c65cff..eb8e10f 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -214,7 +214,7 @@ static void computeFees(txInt256_t *BEgasPrice, txInt256_t *BEgasLimit, uint256_ } static void feesToString(uint256_t *rawFee, char *displayBuffer, uint32_t displayBufferSize) { - char *feeTicker = get_network_ticker(); + const char *feeTicker = get_network_ticker(); uint8_t tickerOffset = 0; uint32_t i; @@ -261,7 +261,7 @@ void prepareFeeDisplay() { } void prepareNetworkDisplay() { - char *name = get_network_name(); + const char *name = get_network_name(); if (name == NULL) { // No network name found so simply copy the chain ID as the network name. uint64_t chain_id = get_chain_id(); @@ -296,7 +296,7 @@ static void get_public_key(uint8_t *out, uint8_t outLength) { void finalizeParsing(bool direct) { char displayBuffer[50]; uint8_t decimals = WEI_TO_ETHER; - char *ticker = get_network_ticker(); + const char *ticker = get_network_ticker(); ethPluginFinalize_t pluginFinalize; bool genericUI = true; From 89fddf3ef8e7286b8c4ea2e7a89f70e4d769714b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Baptiste=20B=C3=A9drune?= Date: Thu, 3 Feb 2022 14:19:53 +0100 Subject: [PATCH 47/87] Set const qualifiers in few fields used by the plugin interface --- src/eth_plugin_interface.h | 10 +++++----- src_plugins/starkware/starkware_plugin.c | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/eth_plugin_interface.h b/src/eth_plugin_interface.h index 512716e..31cbbde 100644 --- a/src/eth_plugin_interface.h +++ b/src/eth_plugin_interface.h @@ -76,7 +76,7 @@ typedef struct ethPluginInitContract_t { ethPluginSharedRO_t *pluginSharedRO; uint8_t *pluginContext; size_t pluginContextLength; - uint8_t *selector; // 4 bytes selector + const uint8_t *selector; // 4 bytes selector size_t dataSize; char *alias; // 29 bytes alias if ETH_PLUGIN_RESULT_OK_ALIAS set @@ -89,7 +89,7 @@ typedef struct ethPluginProvideParameter_t { ethPluginSharedRW_t *pluginSharedRW; ethPluginSharedRO_t *pluginSharedRO; uint8_t *pluginContext; - uint8_t *parameter; // 32 bytes parameter + const uint8_t *parameter; // 32 bytes parameter uint32_t parameterOffset; uint8_t result; @@ -106,9 +106,9 @@ typedef struct ethPluginFinalize_t { uint8_t *tokenLookup1; // set by the plugin if a token should be looked up uint8_t *tokenLookup2; - uint8_t *amount; // set an uint256 pointer if uiType is UI_AMOUNT_ADDRESS - uint8_t *address; // set to the destination address if uiType is UI_AMOUNT_ADDRESS. Set to the - // user's address if uiType is UI_TYPE_GENERIC + const uint8_t *amount; // set an uint256 pointer if uiType is UI_AMOUNT_ADDRESS + const uint8_t *address; // set to the destination address if uiType is UI_AMOUNT_ADDRESS. Set + // to the user's address if uiType is UI_TYPE_GENERIC uint8_t uiType; uint8_t numScreens; // ignored if uiType is UI_AMOUNT_ADDRESS diff --git a/src_plugins/starkware/starkware_plugin.c b/src_plugins/starkware/starkware_plugin.c index 104675b..11f7d8e 100644 --- a/src_plugins/starkware/starkware_plugin.c +++ b/src_plugins/starkware/starkware_plugin.c @@ -185,7 +185,7 @@ bool is_deversify_contract(const uint8_t *address) { } // TODO : rewrite as independant code -bool starkware_verify_asset_id(uint8_t *tmp32, uint8_t *tokenId, bool assetTypeOnly) { +bool starkware_verify_asset_id(uint8_t *tmp32, const uint8_t *tokenId, bool assetTypeOnly) { if (quantumSet) { cx_sha3_t sha3; tokenDefinition_t *currentToken = NULL; @@ -214,7 +214,7 @@ bool starkware_verify_asset_id(uint8_t *tmp32, uint8_t *tokenId, bool assetTypeO return true; } -bool starkware_verify_token(uint8_t *token) { +bool starkware_verify_token(const uint8_t *token) { if (quantumSet) { if (dataContext.tokenContext.quantumIndex != MAX_ITEMS) { tokenDefinition_t *currentToken = @@ -235,7 +235,7 @@ bool starkware_verify_token(uint8_t *token) { return true; } -bool starkware_verify_quantum(uint8_t *quantum) { +bool starkware_verify_quantum(const uint8_t *quantum) { if (quantumSet) { if (dataContext.tokenContext.quantumIndex != MAX_ITEMS) { if (memcmp(quantum, dataContext.tokenContext.quantum, 32) != 0) { @@ -254,7 +254,7 @@ bool starkware_verify_quantum(uint8_t *quantum) { return true; } -bool starkware_verify_nft_token_id(uint8_t *tokenId) { +bool starkware_verify_nft_token_id(const uint8_t *tokenId) { if (!quantumSet) { PRINTF("Quantum not set\n"); return false; From ed4e10628a6c24450899b630dcd550e539d8c310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Baptiste=20B=C3=A9drune?= Date: Fri, 4 Feb 2022 17:52:52 +0100 Subject: [PATCH 48/87] Change type of output length in amountToString Defining out_buffer_size as uint8_t triggers warnings with static analysers when sizeof() is used on the output buffer. There is no reason to use uint8_t here. --- src/utils.c | 2 +- src/utils.h | 2 +- src_common/ethUtils.c | 6 +++--- src_common/ethUtils.h | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/utils.c b/src/utils.c index 63d9230..fdda1c0 100644 --- a/src/utils.c +++ b/src/utils.c @@ -115,7 +115,7 @@ void amountToString(const uint8_t *amount, uint8_t decimals, const char *ticker, char *out_buffer, - uint8_t out_buffer_size) { + size_t out_buffer_size) { char tmp_buffer[100] = {0}; if (uint256_to_decimal(amount, amount_size, tmp_buffer, sizeof(tmp_buffer)) == false) { diff --git a/src/utils.h b/src/utils.h index 6ee5d45..be5ba3e 100644 --- a/src/utils.h +++ b/src/utils.h @@ -37,7 +37,7 @@ void amountToString(const uint8_t* amount, uint8_t decimals, const char* ticker, char* out_buffer, - uint8_t out_buffer_size); + size_t out_buffer_size); bool parse_swap_config(uint8_t* config, uint8_t config_len, char* ticker, uint8_t* decimals); diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index d3c71b0..4239136 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -243,10 +243,10 @@ uint8_t *getNftContractAddress(const ethQueryContractUI_t *const msg) { : msg->pluginSharedRO->txContent->destination); } -bool adjustDecimals(char *src, - uint32_t srcLength, +bool adjustDecimals(const char *src, + size_t srcLength, char *target, - uint32_t targetLength, + size_t targetLength, uint8_t decimals) { uint32_t startOffset; uint32_t lastZeroOffset = 0; diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index af88517..1099080 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -61,10 +61,10 @@ void getEthDisplayableAddress(uint8_t *in, uint8_t *getNftContractAddress(const ethQueryContractUI_t *const msg); -bool adjustDecimals(char *src, - uint32_t srcLength, +bool adjustDecimals(const char *src, + size_t srcLength, char *target, - uint32_t targetLength, + size_t targetLength, uint8_t decimals); static __attribute__((no_instrument_function)) inline int allzeroes(void *buf, size_t n) { From e6c501749e3d81790380ec89f6a2ae91658157b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Baptiste=20B=C3=A9drune?= Date: Mon, 21 Feb 2022 23:44:26 +0100 Subject: [PATCH 49/87] Update Ethereum SDK --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 8a16dbe..6ed3435 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 8a16dbefb7c59e5e0c8e63f7deb1e0f54fadf646 +Subproject commit 6ed3435cedb441cd90faeb239e5a26d005ff6ae6 From 0d9c868a7773674612c22e60e51f5fbca6fb14be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Baptiste=20B=C3=A9drune?= Date: Tue, 22 Feb 2022 00:08:49 +0100 Subject: [PATCH 50/87] Set const qualifier for input buffers for copy functions --- ethereum-plugin-sdk | 2 +- src/eth_plugin_internal.c | 4 ++-- src/eth_plugin_internal.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 6ed3435..3a79796 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 6ed3435cedb441cd90faeb239e5a26d005ff6ae6 +Subproject commit 3a797967f43ec1a055c3b44f03a2b86829f72c77 diff --git a/src/eth_plugin_internal.c b/src/eth_plugin_internal.c index a4789f1..c9858a8 100644 --- a/src/eth_plugin_internal.c +++ b/src/eth_plugin_internal.c @@ -5,12 +5,12 @@ bool erc20_plugin_available_check(void); void erc20_plugin_call(int message, void* parameters); void compound_plugin_call(int message, void* parameters); -void copy_address(uint8_t* dst, uint8_t* parameter, uint8_t dst_size) { +void copy_address(uint8_t* dst, const uint8_t* parameter, uint8_t dst_size) { uint8_t copy_size = MIN(dst_size, ADDRESS_LENGTH); memmove(dst, parameter + PARAMETER_LENGTH - copy_size, copy_size); } -void copy_parameter(uint8_t* dst, uint8_t* parameter, uint8_t dst_size) { +void copy_parameter(uint8_t* dst, const uint8_t* parameter, uint8_t dst_size) { uint8_t copy_size = MIN(dst_size, PARAMETER_LENGTH); memmove(dst, parameter, copy_size); } diff --git a/src/eth_plugin_internal.h b/src/eth_plugin_internal.h index 4f10ec5..3285d73 100644 --- a/src/eth_plugin_internal.h +++ b/src/eth_plugin_internal.h @@ -6,9 +6,9 @@ #define PARAMETER_LENGTH 32 #define RUN_APPLICATION 1 -void copy_address(uint8_t* dst, uint8_t* parameter, uint8_t dst_size); +void copy_address(uint8_t* dst, const uint8_t* parameter, uint8_t dst_size); -void copy_parameter(uint8_t* dst, uint8_t* parameter, uint8_t dst_size); +void copy_parameter(uint8_t* dst, const uint8_t* parameter, uint8_t dst_size); void erc721_plugin_call(int message, void* parameters); void erc1155_plugin_call(int message, void* parameters); From ab1270dbd935a1764063c926b8e82dd79f06e2b6 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 24 Feb 2022 18:26:25 +0100 Subject: [PATCH 51/87] Makefile now gets the lists of supported chains automatically --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7e2856d..631c5b9 100644 --- a/Makefile +++ b/Makefile @@ -46,11 +46,13 @@ ifeq ($(CHAIN),) CHAIN=ethereum endif +SUPPORTED_CHAINS=$(shell find makefile_conf/chain/ -type f -name '*.mk'| sed 's/.*\/\(.*\).mk/\1/g' | sort) + # Check if chain is available ifeq ($(shell test -s ./makefile_conf/chain/$(CHAIN).mk && echo -n yes), yes) include ./makefile_conf/chain/$(CHAIN).mk else -$(error Unsupported CHAIN - use ethereum, ropsten, goerli, moonriver, 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, bsc, songbird, polygon, shyft) +$(error Unsupported CHAIN - use $(SUPPORTED_CHAINS)) endif ######### @@ -233,4 +235,4 @@ include $(BOLOS_SDK)/Makefile.rules dep/%.d: %.c Makefile listvariants: - @echo VARIANTS CHAIN ethereum ropsten goerli moonriver 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 songbird polygon shyft + @echo VARIANTS CHAIN $(SUPPORTED_CHAINS) From 647aabb39c599fc4869a19a331fd679f9c017cd3 Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 28 Jan 2022 14:59:37 +0100 Subject: [PATCH 52/87] docs(README): refactor --- README.md | 150 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 119 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 5fd6b9a..03e6438 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,118 @@ -# app-ethereum -Ethereum wallet application framework for Nano S and Nano X. -Ledger Blue is not maintained anymore, but the app can still be compiled for this target using the branch `blue-final-release`. +
+

+ + + + +

app-ethereum

+ +

+ Ethereum wallet application for Ledger Blue, Nano S and Nano X +
+ « Explore the docs » +
+
+ Report Bug + · Request Feature +

+
+
+ +
+ Table of Contents + +- [About the project](#about-the-project) +- [Documentation](#documentation) + - [Plugins](#plugins) +- [Testing](#testing) + - [Requirement](#requirement) + - [Build the applications required by the test suite](#build-the-applications-required-by-the-test-suite) + - [Running all tests](#running-all-tests) + - [With Makefile](#with-makefile) + - [With yarn](#with-yarn) + - [Running a specific tests](#running-a-specific-tests) + - [Adding tests](#adding-tests) + - [Zemu](#zemu) + - [Update binaries](#update-binaries) +- [Contributing](#contributing) + + +
+ +## About the project + +Ethereum wallet application framework for Nano S and Nano X. +Ledger Blue is not maintained anymore, but the app can still be compiled for this target using the branch [`blue-final-release`](https://github.com/LedgerHQ/app-ethereum/tree/blue-final-release). + +## Documentation This app follows the specification available in the `doc/` folder. To compile it and load it on a device, please check out our [developer portal](https://developers.ledger.com/docs/nano-app/introduction/). -# Plugins +### Plugins -This app support external plugins. More info in [doc/ethapp_plugin.asc](https://github.com/LedgerHQ/app-ethereum/blob/master/doc/ethapp_plugins.asc). If you wish to have a look at an existing plugin, feel free to check out the [Boilerplate plugin](https://github.com/LedgerHQ/app-plugin-boilerplate). +We have the concept of plugins in the ETH app. +Find the documentations here: +- [Blog Ethereum plugins](https://blog.ledger.com/ethereum-plugins/) +- [Ethereum application Plugins : Technical Specifications](https://github.com/LedgerHQ/app-ethereum/blob/master/doc/ethapp_plugins.asc) +- [Plugin guide](https://hackmd.io/300Ukv5gSbCbVcp3cZuwRQ) +- [Boilerplate plugin](https://github.com/LedgerHQ/app-plugin-boilerplate) -# Testing +## Testing Testing is done via the open-source framework [zemu](https://github.com/Zondax/zemu). -## Running tests +### Requirement -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 tests -./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` +- [nodeJS](https://github.com/nvm-sh/nvm) +- [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#debian-stable) +- [build environnement](https://github.com/LedgerHQ/ledger-app-builder/blob/master/Dockerfile) -To run a specific tests (here the send test): -``` -cd tests -jest --runInBand --detectOpenHandles src/send.test.js -``` +#### Build the applications required by the test suite -Make sure you're in the `tests` folder before running `jest` or `yarn test`. +1. Add your BOLOS SDKs path to: + - `NANOS_SDK` and `NANOX_SDK` + +2. Go to the `tests` folder and run `./build_local_test_elfs.sh` + - ```sh + cd tests + # This helper script will build the applications required by the test suite and move them at the right place. + yarn install + ./build_local_test_elfs.sh + ``` + +### Running all tests +#### With Makefile + +1. Then you can install the project by simply running on the `root` of the repo: + - ```sh + make test + ``` + - This will run `make install_tests` and `make run_tests` + +#### With yarn + +1. Go to the `tests` folder and run: + - ```sh + yarn test + ``` + +### Running a specific tests + +1. Go to the `tests` folder and run: + - ```sh + yarn jest --runInBand --detectOpenHandles {YourTestFile} + ``` +2. For example with the `send test`: + - ```sh + yarn jest --runInBand --detectOpenHandles src/send.test.js + ``` -## Adding tests +### Adding tests -### Zemu +#### Zemu To add tests, copy one of the already existing test files in `tests/src/`. You then need to adapt the `buffer` and `tx` variables to adapt to the APDU you wish to send. @@ -54,16 +125,33 @@ You then need to adapt the `buffer` and `tx` variables to adapt to the APDU you Finally make sure you adapt the expected signature! -### Update binaries +#### Update binaries Don't forget to update the binaries in the test folder. To do so, compile with those environement variables: -``` + +```sh make DEBUG=1 ALLOW_DATA=1 ``` Then copy the binary to the `tests/elfs` folder (in this case, compiled with SDK for nanoS): -``` + +```sh cp bin/app.elf tests/elfs/ethereum_nanos.elf ``` Repeat the operation for a binary compiled with nanoX SDK and change for `ethereum_nanox.elf`. + + +## Contributing + +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. + +If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag `enhancement`. + +1. Fork the Project +2. Create your Feature Branch (`git checkout -b feature/my-feature`) +3. Commit your Changes (`git commit -m 'feat: my new feature`) +4. Push to the Branch (`git push origin feature/my-feature`) +5. Open a Pull Request + +Please try to follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). From c1f9093010bf4568237ed5b82b22a90be8f781f9 Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 28 Jan 2022 15:05:12 +0100 Subject: [PATCH 53/87] docs: template for issue and pr --- .github/ISSUE_TEMPLATE/bug_report.md | 40 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ .github/pull_request_template.md | 24 ++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..f679681 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,40 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '[BUG] [Subject of the issue]' +labels: 'bug' +assignees: '' + +--- + +## Description + +Describe your issue in as much detail as possible here. + +## Your environment + +* OS and version +* branch that causes this issue +* Device (Nano S, Nano X, Ledger Blue) + +## Steps to reproduce + +* Tell us how to reproduce this issue
+* Where the issue is, if you know
+* Which commands triggered the issue, if any + +## Expected behaviour + +Tell us what should happen + +## Actual behaviour + +Tell us what happens instead + +## Logs + +Please paste any logs here that demonstrate the issue, if they exist + +## Proposed solution + +If you have an idea of how to fix this issue, please write it down here, so we can begin discussing it \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..15a495c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature report +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +## [FEATURES] [Subject of the issue] + +### Description + +Describe your issue in as much detail as possible here. + +### Your environment + +* OS and version +* branch that causes this issue +* Device (Nano S, Nano X, Ledger Blue) \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..0b78643 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,24 @@ +# Description + +Please provide a detailed description of what was done in this PR. + +# Changes include + +- [ ] Bugfix (non-breaking change that solves an issue) +- [ ] New feature (non-breaking change that adds functionality) +- [ ] Breaking change (change that is not backwards-compatible and/or changes current functionality) + +# Breaking changes + +Please complete this section if any breaking changes have been made, otherwise delete it. + +# Checklist + +- [ ] I have assigned this PR to myself +- [ ] I have added at least 1 reviewer +- [ ] I have tested this code +- [ ] I have added sufficient documentation in the code + +# Additional comments + +Please post additional comments in this section if you have them, otherwise delete it. \ No newline at end of file From 7c66c255ab1c4672d632ebfe62baa94612f8ec7d Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 28 Jan 2022 15:08:13 +0100 Subject: [PATCH 54/87] fix: feature's template --- .github/ISSUE_TEMPLATE/feature_request.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 15a495c..e3b05cf 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,19 +1,17 @@ --- name: Feature report about: Suggest an idea for this project -title: '' -labels: '' +title: '[FEATURES] [Subject of the issue]' +labels: 'enhancement' assignees: '' --- -## [FEATURES] [Subject of the issue] - -### Description +## Description Describe your issue in as much detail as possible here. -### Your environment +## Your environment * OS and version * branch that causes this issue From c89f9db92e81ef2ee2d1cec0c617a74b2ad6c64e Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 28 Jan 2022 15:18:33 +0100 Subject: [PATCH 55/87] fix: PR template --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0b78643..dd45178 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -18,6 +18,7 @@ Please complete this section if any breaking changes have been made, otherwise d - [ ] I have added at least 1 reviewer - [ ] I have tested this code - [ ] I have added sufficient documentation in the code +- [ ] I have added labels to this PR # Additional comments From 36671d91f6641c4f3e37b80e981cf38501e3976c Mon Sep 17 00:00:00 2001 From: Coline Seguret <98530682+cseguret-ledger@users.noreply.github.com> Date: Thu, 3 Feb 2022 13:38:45 +0100 Subject: [PATCH 56/87] fix: typo requirement -> requirements --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 03e6438..670d09f 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Find the documentations here: Testing is done via the open-source framework [zemu](https://github.com/Zondax/zemu). -### Requirement +### Requirements - [nodeJS](https://github.com/nvm-sh/nvm) - [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#debian-stable) From 0313732d0221b1f309ce7bfaf3f00e1e48d9fb82 Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 4 Feb 2022 10:03:28 +0100 Subject: [PATCH 57/87] fix: typo not install project by tests --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 670d09f..9656d26 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ - [Documentation](#documentation) - [Plugins](#plugins) - [Testing](#testing) - - [Requirement](#requirement) + - [Requirements](#requirements) - [Build the applications required by the test suite](#build-the-applications-required-by-the-test-suite) - [Running all tests](#running-all-tests) - [With Makefile](#with-makefile) @@ -85,7 +85,7 @@ Testing is done via the open-source framework [zemu](https://github.com/Zondax/z ### Running all tests #### With Makefile -1. Then you can install the project by simply running on the `root` of the repo: +1. Then you can install and run tests by simply running on the `root` of the repo: - ```sh make test ``` From 3463deacc9e104f6784bcc3d7472811502658f52 Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 4 Feb 2022 12:09:07 +0100 Subject: [PATCH 58/87] fix: pr template --- .github/pull_request_template.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index dd45178..85f6ad9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,6 +1,7 @@ # Description -Please provide a detailed description of what was done in this PR. +Please provide a detailed description of what was done in this PR. +(And mentioned if linked to an issue [docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)) # Changes include From d749f3dc325ed37653e7c5149132bca2f6c9146d Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 11 Feb 2022 11:10:59 +0100 Subject: [PATCH 59/87] fix: pr and issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/ISSUE_TEMPLATE/network_request.md | 19 +++++++++++++++++++ .github/pull_request_template.md | 10 +++++----- 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/network_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index f679681..711779d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,7 +1,7 @@ --- name: Bug report about: Create a report to help us improve -title: '[BUG] [Subject of the issue]' +title: 'Fix [Subject of the issue]' labels: 'bug' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e3b05cf..f8abc52 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,7 +1,7 @@ --- name: Feature report about: Suggest an idea for this project -title: '[FEATURES] [Subject of the issue]' +title: 'Add [Subject of the issue]' labels: 'enhancement' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/network_request.md b/.github/ISSUE_TEMPLATE/network_request.md new file mode 100644 index 0000000..369f21e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/network_request.md @@ -0,0 +1,19 @@ +--- +name: Network request +about: Request of new chain or network +title: 'Add {NameChain} network ({SYMBOL})' +labels: 'enhancement, chain/network' +assignees: '' + +--- + +## Description +- [ ] Symbol: +- [ ] ChainId: +- [ ] Website: +- [ ] Block-Explorer: +- [ ] [slip-0044](https://github.com/satoshilabs/slips/blob/master/slip-0044.md) type: + +## Additional comments + +Please post additional comments in this section if you have them, otherwise delete it. \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 85f6ad9..e8e90eb 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,19 +1,19 @@ -# Description +## Description Please provide a detailed description of what was done in this PR. (And mentioned if linked to an issue [docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)) -# Changes include +## Changes include - [ ] Bugfix (non-breaking change that solves an issue) - [ ] New feature (non-breaking change that adds functionality) - [ ] Breaking change (change that is not backwards-compatible and/or changes current functionality) -# Breaking changes +## Breaking changes Please complete this section if any breaking changes have been made, otherwise delete it. -# Checklist +## Checklist - [ ] I have assigned this PR to myself - [ ] I have added at least 1 reviewer @@ -21,6 +21,6 @@ Please complete this section if any breaking changes have been made, otherwise d - [ ] I have added sufficient documentation in the code - [ ] I have added labels to this PR -# Additional comments +## Additional comments Please post additional comments in this section if you have them, otherwise delete it. \ No newline at end of file From ddff3db06e61e5a8b3dd1b8ed62cc392fad33a27 Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 11 Feb 2022 11:11:51 +0100 Subject: [PATCH 60/87] fix: add new link in readme Signed-off-by: Coline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9656d26..77d737c 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@
Report Bug · Request Feature + · Request New Network


From 45a82881a3b4bcf4924a3ba3005ef4d87373090a Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 25 Feb 2022 14:52:57 +0100 Subject: [PATCH 61/87] feat: add auto author assign for pr - remove checklist in pr template --- .github/pull_request_template.md | 8 -------- .github/workflows/auto-author-assign.yml | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/auto-author-assign.yml diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e8e90eb..35ec761 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -13,14 +13,6 @@ Please provide a detailed description of what was done in this PR. Please complete this section if any breaking changes have been made, otherwise delete it. -## Checklist - -- [ ] I have assigned this PR to myself -- [ ] I have added at least 1 reviewer -- [ ] I have tested this code -- [ ] I have added sufficient documentation in the code -- [ ] I have added labels to this PR - ## Additional comments Please post additional comments in this section if you have them, otherwise delete it. \ No newline at end of file diff --git a/.github/workflows/auto-author-assign.yml b/.github/workflows/auto-author-assign.yml new file mode 100644 index 0000000..a19fb99 --- /dev/null +++ b/.github/workflows/auto-author-assign.yml @@ -0,0 +1,14 @@ +name: 'Auto Author Assign' + +on: + pull_request_target: + types: [opened, reopened] + +permissions: + pull-requests: write + +jobs: + assign-author: + runs-on: ubuntu-latest + steps: + - uses: toshimaru/auto-author-assign@v1.4.0 \ No newline at end of file From 38e88b11c7dc0eb7e0ee41310b0edc31fcd97460 Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 4 Mar 2022 15:28:04 +0100 Subject: [PATCH 62/87] fix: PR template - Add another changes includes --- .github/pull_request_template.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 35ec761..4024641 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,6 +8,9 @@ Please provide a detailed description of what was done in this PR. - [ ] Bugfix (non-breaking change that solves an issue) - [ ] New feature (non-breaking change that adds functionality) - [ ] Breaking change (change that is not backwards-compatible and/or changes current functionality) +- [ ] Tests +- [ ] Documentation +- [ ] Other (for changes that might not fit in any category) ## Breaking changes From 14fb8c87a4d1fa3755a42d817d09e3b7f61c38ca Mon Sep 17 00:00:00 2001 From: Coline Date: Fri, 4 Mar 2022 15:29:19 +0100 Subject: [PATCH 63/87] fix: Readme nodeJS version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77d737c..789a604 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Testing is done via the open-source framework [zemu](https://github.com/Zondax/z ### Requirements -- [nodeJS](https://github.com/nvm-sh/nvm) +- [nodeJS == 16](https://github.com/nvm-sh/nvm) - [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#debian-stable) - [build environnement](https://github.com/LedgerHQ/ledger-app-builder/blob/master/Dockerfile) From 76c7f9dbd8a8ccf99eef8951d44300920e20e95e Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 7 Mar 2022 10:07:17 +0100 Subject: [PATCH 64/87] Fixes the location in memory of the address between nftInfo_t & tokenDefinition_t Both used as members of the same union, also unifies the type (array of uint8_t) --- src/nft.h | 14 +++------ src/tokens.h | 31 ++++++++----------- .../cmd_provideNFTInfo.c | 7 ++--- 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/src/nft.h b/src/nft.h index 419f2c1..0ddda84 100644 --- a/src/nft.h +++ b/src/nft.h @@ -1,14 +1,8 @@ #include "tokens.h" -// An `nftInfo_t` must be the same size as a `tokenDefinition_t`. This is because both will be held -// in a `extraInfo_t` which is a union of a `nftInfo_t` and a `tokenDefinition_t`. By having both -// struct the same size, we know they will be aligned, which facilitates accessing the items. - -// We defined the collection name max length to be the size of a `tokenDefinition_t` and remove the -// `ADDRESS_LENGTH` which corresponds to `sizeof(contractAddress`). -#define COLLECTION_NAME_MAX_LEN (sizeof(tokenDefinition_t) - ADDRESS_LENGTH) +#define COLLECTION_NAME_MAX_LEN 70 typedef struct nftInfo_t { - char collectionName[COLLECTION_NAME_MAX_LEN]; - char contractAddress[ADDRESS_LENGTH]; -} nftInfo_t; \ No newline at end of file + uint8_t contractAddress[ADDRESS_LENGTH]; // must be first item + char collectionName[COLLECTION_NAME_MAX_LEN + 1]; +} nftInfo_t; diff --git a/src/tokens.h b/src/tokens.h index 4391d67..53a354e 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -25,14 +25,11 @@ #define MAX_ITEMS 2 typedef struct tokenDefinition_t { + uint8_t address[ADDRESS_LENGTH]; // must be first item #ifdef HAVE_CONTRACT_NAME_IN_DESCRIPTOR uint8_t contractName[ADDRESS_LENGTH]; #endif - uint8_t address[ADDRESS_LENGTH]; char ticker[MAX_TICKER_LEN]; - char nft_pad[20]; // Adding some padding because the `nftInfo_t` is based on the size of a - // `tokenDefinition_t`. By adding some padding here we give more space to the - // collection name in the `nftInfo_t`. See `nftInfo_t` for more information. uint8_t decimals; } tokenDefinition_t; @@ -46,25 +43,23 @@ extern tokenDefinition_t const TOKENS_EXTRA[NUM_TOKENS_EXTRA]; #ifndef HAVE_TOKENS_LIST +static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { #ifndef LEDGER_TEST_PUBLIC_KEY -static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { // production key 2019-01-11 03:07PM (erc20signer) - 0x04, 0x5e, 0x6c, 0x10, 0x20, 0xc1, 0x4d, 0xc4, 0x64, 0x42, 0xfe, 0x89, 0xf9, - 0x7c, 0x0b, 0x68, 0xcd, 0xb1, 0x59, 0x76, 0xdc, 0x24, 0xf2, 0x4c, 0x31, 0x6e, - 0x7b, 0x30, 0xfe, 0x4e, 0x8c, 0xc7, 0x6b, 0x14, 0x89, 0x15, 0x0c, 0x21, 0x51, - 0x4e, 0xbf, 0x44, 0x0f, 0xf5, 0xde, 0xa5, 0x39, 0x3d, 0x83, 0xde, 0x53, 0x58, - 0xcd, 0x09, 0x8f, 0xce, 0x8f, 0xd0, 0xf8, 0x1d, 0xaa, 0x94, 0x97, 0x91, 0x83}; - + 0x04, 0x5e, 0x6c, 0x10, 0x20, 0xc1, 0x4d, 0xc4, 0x64, 0x42, 0xfe, 0x89, 0xf9, 0x7c, + 0x0b, 0x68, 0xcd, 0xb1, 0x59, 0x76, 0xdc, 0x24, 0xf2, 0x4c, 0x31, 0x6e, 0x7b, 0x30, + 0xfe, 0x4e, 0x8c, 0xc7, 0x6b, 0x14, 0x89, 0x15, 0x0c, 0x21, 0x51, 0x4e, 0xbf, 0x44, + 0x0f, 0xf5, 0xde, 0xa5, 0x39, 0x3d, 0x83, 0xde, 0x53, 0x58, 0xcd, 0x09, 0x8f, 0xce, + 0x8f, 0xd0, 0xf8, 0x1d, 0xaa, 0x94, 0x97, 0x91, 0x83 #else -static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { // test key 2019-01-11 03:07PM (erc20signer) - 0x04, 0x20, 0xda, 0x62, 0x00, 0x3c, 0x0c, 0xe0, 0x97, 0xe3, 0x36, 0x44, 0xa1, - 0x0f, 0xe4, 0xc3, 0x04, 0x54, 0x06, 0x9a, 0x44, 0x54, 0xf0, 0xfa, 0x9d, 0x4e, - 0x84, 0xf4, 0x50, 0x91, 0x42, 0x9b, 0x52, 0x20, 0xaf, 0x9e, 0x35, 0xc0, 0xb2, - 0xd9, 0x28, 0x93, 0x80, 0x13, 0x73, 0x07, 0xde, 0x4d, 0xd1, 0xd4, 0x18, 0x42, - 0x8c, 0xf2, 0x1a, 0x93, 0xb3, 0x35, 0x61, 0xbb, 0x09, 0xd8, 0x8f, 0xe5, 0x79, -}; + 0x04, 0x20, 0xda, 0x62, 0x00, 0x3c, 0x0c, 0xe0, 0x97, 0xe3, 0x36, 0x44, 0xa1, 0x0f, + 0xe4, 0xc3, 0x04, 0x54, 0x06, 0x9a, 0x44, 0x54, 0xf0, 0xfa, 0x9d, 0x4e, 0x84, 0xf4, + 0x50, 0x91, 0x42, 0x9b, 0x52, 0x20, 0xaf, 0x9e, 0x35, 0xc0, 0xb2, 0xd9, 0x28, 0x93, + 0x80, 0x13, 0x73, 0x07, 0xde, 0x4d, 0xd1, 0xd4, 0x18, 0x42, 0x8c, 0xf2, 0x1a, 0x93, + 0xb3, 0x35, 0x61, 0xbb, 0x09, 0xd8, 0x8f, 0xe5, 0x79 #endif +}; #else diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index fefdd88..4a6161c 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -34,7 +34,6 @@ static const uint8_t LEDGER_NFT_METADATA_PUBLIC_KEY[] = { 0x7d, 0x0b, 0x46, 0x9a, 0x53, 0x11, 0xee, 0x6a, 0x1a, 0xcd, 0x1d, 0xa5, 0xaa, 0xb0, 0xf5, 0xc6, 0xdf, 0x13, 0x15, 0x8d, 0x28, 0xcc, 0x12, 0xd1, 0xdd, 0xa6, 0xec, 0xe9, 0x46, 0xb8, 0x9d, 0x5c, 0x05, 0x49, 0x92, 0x59, 0xc4 - #else 0x04, 0x98, 0x8d, 0xa6, 0xb2, 0x46, 0xf2, 0x8e, 0x77, 0xc1, 0xba, 0xb6, 0x75, 0xcb, 0x2a, 0x27, 0x44, 0xf7, 0xf5, 0xce, 0xc5, 0x6a, 0xe6, 0xe0, 0x32, 0x23, 0x33, 0x7b, @@ -117,10 +116,10 @@ void handleProvideNFTInformation(uint8_t p1, THROW(0x6A80); } - if (collectionNameLength + 1 > sizeof(nft->collectionName)) { + if (collectionNameLength > COLLECTION_NAME_MAX_LEN) { PRINTF("CollectionName too big: expected max %d, got %d\n", - sizeof(nft->collectionName), - collectionNameLength + 1); + COLLECTION_NAME_MAX_LEN, + collectionNameLength); THROW(0x6A80); } From 89070cd2bee4f50ec57001f1f7d6948d22c3d045 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Mar 2022 11:47:38 +0100 Subject: [PATCH 65/87] Now only loops through tokens once to match it --- src/main.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main.c b/src/main.c index a06bac0..2b5c878 100644 --- a/src/main.c +++ b/src/main.c @@ -386,7 +386,8 @@ extraInfo_t *getKnownToken(uint8_t *contractAddress) { } } #endif - // + // Works for ERC-20 & NFT tokens since both structs in the union have the + // contract address aligned for (uint8_t i = 0; i < MAX_ITEMS; i++) { currentItem = (union extraInfo_t *) &tmpCtx.transactionContext.extraInfo[i].token; if (tmpCtx.transactionContext.tokenSet[i] && @@ -396,15 +397,6 @@ extraInfo_t *getKnownToken(uint8_t *contractAddress) { } } - for (uint8_t i = 0; i < MAX_ITEMS; i++) { - currentItem = (union extraInfo_t *) &tmpCtx.transactionContext.extraInfo[i].token; - if (tmpCtx.transactionContext.tokenSet[i] && - (memcmp(currentItem->nft.contractAddress, contractAddress, ADDRESS_LENGTH) == 0)) { - PRINTF("Token found at index %d\n", i); - return currentItem; - } - } - return NULL; } From c548aba364fd199d8eeaab3cc2fa9f1474d897e4 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 7 Mar 2022 14:21:32 +0100 Subject: [PATCH 66/87] Unify the include guards accross all header files --- src/apdu_constants.h | 5 +++++ src/chainConfig.h | 2 +- src/eth_plugin_handler.h | 5 +++-- src/eth_plugin_interface.h | 7 +++---- src/eth_plugin_internal.h | 5 +++-- src/nft.h | 5 +++++ src/poorstream.h | 6 +++--- src/shared_context.h | 7 +++---- src/stark_crypto.h | 6 +++--- src/stark_utils.h | 6 +++--- src/swap_lib_calls.h | 6 +++--- src/tokens.h | 2 +- src/ui_callbacks.h | 5 +++++ src/ui_flow.h | 5 +++++ src/utils.h | 2 +- src_common/ethUstream.h | 2 +- src_common/ethUtils.h | 2 +- src_common/network.h | 7 ++++++- src_common/uint256.h | 2 +- src_features/getEth2PublicKey/feature_getEth2PublicKey.h | 5 +++++ src_features/getPublicKey/feature_getPublicKey.h | 5 +++++ src_features/setEth2WithdrawalIndex/withdrawal_index.h | 7 ++++++- src_features/signTx/feature_signTx.h | 5 +++++ src_features/signTx/ui_plugin.h | 7 +++++-- .../stark_getPublicKey/feature_stark_getPublicKey.h | 5 +++++ src_plugins/erc1155/erc1155_plugin.h | 7 +++++-- src_plugins/erc721/erc721_plugin.h | 7 +++++-- 27 files changed, 97 insertions(+), 38 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index f0c149b..474b29d 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -1,3 +1,6 @@ +#ifndef _APDU_CONSTANTS_H_ +#define _APDU_CONSTANTS_H_ + #include "shared_context.h" #define APP_FLAG_DATA_ALLOWED 0x01 @@ -156,3 +159,5 @@ void handleStarkwareUnsafeSign(uint8_t p1, unsigned int *tx); #endif + +#endif // _APDU_CONSTANTS_H_ diff --git a/src/chainConfig.h b/src/chainConfig.h index 733a1a6..0fe3834 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -69,4 +69,4 @@ typedef struct chain_config_s { #define ETHEREUM_MAINNET_CHAINID 1 -#endif /* _CHAIN_CONFIG_H_ */ +#endif // _CHAIN_CONFIG_H_ diff --git a/src/eth_plugin_handler.h b/src/eth_plugin_handler.h index 864c15c..76a7f1e 100644 --- a/src/eth_plugin_handler.h +++ b/src/eth_plugin_handler.h @@ -1,4 +1,5 @@ -#ifndef __ETH_PLUGIN_HANDLER_H__ +#ifndef _ETH_PLUGIN_HANDLER_H_ +#define _ETH_PLUGIN_HANDLER_H_ #include "eth_plugin_interface.h" @@ -27,4 +28,4 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter); void plugin_ui_start(void); -#endif +#endif // _ETH_PLUGIN_HANDLER_H_ diff --git a/src/eth_plugin_interface.h b/src/eth_plugin_interface.h index 31cbbde..f8b301c 100644 --- a/src/eth_plugin_interface.h +++ b/src/eth_plugin_interface.h @@ -1,6 +1,5 @@ -#ifndef __ETH_PLUGIN_INTERFACE_H__ - -#define __ETH_PLUGIN_INTERFACE_H__ +#ifndef _ETH_PLUGIN_INTERFACE_H_ +#define _ETH_PLUGIN_INTERFACE_H_ #include "os.h" #include "cx.h" @@ -179,4 +178,4 @@ typedef struct ethQueryContractUI_t { } ethQueryContractUI_t; -#endif +#endif // _ETH_PLUGIN_INTERFACE_H_ diff --git a/src/eth_plugin_internal.h b/src/eth_plugin_internal.h index 3285d73..f475797 100644 --- a/src/eth_plugin_internal.h +++ b/src/eth_plugin_internal.h @@ -1,4 +1,5 @@ -#ifndef __ETH_PLUGIN_INTERNAL_H__ +#ifndef _ETH_PLUGIN_INTERNAL_H_ +#define _ETH_PLUGIN_INTERNAL_H_ #include "eth_plugin_interface.h" @@ -45,4 +46,4 @@ extern const uint8_t* const STARKWARE_SELECTORS[NUM_STARKWARE_SELECTORS]; extern internalEthPlugin_t const INTERNAL_ETH_PLUGINS[]; -#endif +#endif // _ETH_PLUGIN_INTERNAL_H_ diff --git a/src/nft.h b/src/nft.h index 0ddda84..7c8b836 100644 --- a/src/nft.h +++ b/src/nft.h @@ -1,3 +1,6 @@ +#ifndef _NFT_H_ +#define _NFT_H_ + #include "tokens.h" #define COLLECTION_NAME_MAX_LEN 70 @@ -6,3 +9,5 @@ typedef struct nftInfo_t { uint8_t contractAddress[ADDRESS_LENGTH]; // must be first item char collectionName[COLLECTION_NAME_MAX_LEN + 1]; } nftInfo_t; + +#endif // _NFT_H_ diff --git a/src/poorstream.h b/src/poorstream.h index 7890687..6ac17a5 100644 --- a/src/poorstream.h +++ b/src/poorstream.h @@ -1,5 +1,5 @@ -#ifndef __POORSTREAM_H__ -#define __POORSTREAM_H__ +#ifndef _POORSTREAM_H_ +#define _POORSTREAM_H_ #include #include @@ -18,4 +18,4 @@ void poorstream_init(poorstream_t *stream, uint8_t *buffer); void poorstream_flush(poorstream_t *stream); void poorstream_write_bits(poorstream_t *stream, uint64_t bits, uint32_t num_bits); -#endif +#endif // _POORSTREAM_H_ diff --git a/src/shared_context.h b/src/shared_context.h index 43dc533..b8ea64b 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -1,6 +1,5 @@ -#ifndef __SHARED_CONTEXT_H__ - -#define __SHARED_CONTEXT_H__ +#ifndef _SHARED_CONTEXT_H_ +#define _SHARED_CONTEXT_H_ #include #include @@ -221,4 +220,4 @@ extern uint32_t eth2WithdrawalIndex; void reset_app_context(void); -#endif // __SHARED_CONTEXT_H__ +#endif // _SHARED_CONTEXT_H_ diff --git a/src/stark_crypto.h b/src/stark_crypto.h index 635cb79..5ce1be3 100644 --- a/src/stark_crypto.h +++ b/src/stark_crypto.h @@ -1,5 +1,5 @@ -#ifndef __STARK_CRYPTO_H__ -#define __STARK_CRYPTO_H__ +#ifndef _STARK_CRYPTO_H_ +#define _STARK_CRYPTO_H_ #include #include @@ -18,4 +18,4 @@ void pedersen(FieldElement res, /* out */ FieldElement a, FieldElement b); -#endif +#endif // _STARK_CRYPTO_H_ diff --git a/src/stark_utils.h b/src/stark_utils.h index aaf9d17..9ba69a2 100644 --- a/src/stark_utils.h +++ b/src/stark_utils.h @@ -1,5 +1,5 @@ -#ifndef __STARK_UTILS_H__ -#define __STARK_UTILS_H__ +#ifndef _STARK_UTILS_H_ +#define _STARK_UTILS_H_ #include #include @@ -32,4 +32,4 @@ int stark_sign(uint8_t *signature, /* out */ FieldElement msg, FieldElement condition); -#endif +#endif // _STARK_UTILS_H_ diff --git a/src/swap_lib_calls.h b/src/swap_lib_calls.h index c041964..937d610 100644 --- a/src/swap_lib_calls.h +++ b/src/swap_lib_calls.h @@ -1,5 +1,5 @@ -#ifndef SWAP_LIB_CALLS -#define SWAP_LIB_CALLS +#ifndef _SWAP_LIB_CALLS_H_ +#define _SWAP_LIB_CALLS_H_ #include "stdbool.h" @@ -50,4 +50,4 @@ typedef struct create_transaction_parameters_s { char* destination_address_extra_id; } create_transaction_parameters_t; -#endif +#endif // _SWAP_LIB_CALLS_H_ diff --git a/src/tokens.h b/src/tokens.h index 53a354e..ea69628 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -141,4 +141,4 @@ extern tokenDefinition_t const TOKENS_SHYFT[NUM_TOKENS_SHYFT]; #endif /* HAVE_TOKENS_LIST */ -#endif /* _TOKENS_H_ */ +#endif // _TOKENS_H_ diff --git a/src/ui_callbacks.h b/src/ui_callbacks.h index e7e78ab..a1a74cd 100644 --- a/src/ui_callbacks.h +++ b/src/ui_callbacks.h @@ -1,3 +1,6 @@ +#ifndef _UI_CALLBACKS_H_ +#define _UI_CALLBACKS_H_ + #include "shared_context.h" #include "ux.h" @@ -22,3 +25,5 @@ void io_seproxyhal_send_status(uint32_t sw); void format_signature_out(const uint8_t *signature); void finalizeParsing(bool direct); extraInfo_t *getKnownToken(uint8_t *contractAddress); + +#endif // _UI_CALLBACKS_H_ diff --git a/src/ui_flow.h b/src/ui_flow.h index 8797b95..aadc40d 100644 --- a/src/ui_flow.h +++ b/src/ui_flow.h @@ -1,3 +1,6 @@ +#ifndef _UI_FLOW_H_ +#define _UI_FLOW_H_ + #include "shared_context.h" #include "os_io_seproxyhal.h" @@ -52,3 +55,5 @@ extern const ux_flow_step_t* const ux_approval_starkware_verify_escape_flow[]; extern const ux_flow_step_t* const ux_stark_unsafe_sign_flow[]; #endif + +#endif // _UI_FLOW_H_ diff --git a/src/utils.h b/src/utils.h index be5ba3e..988ce08 100644 --- a/src/utils.h +++ b/src/utils.h @@ -41,4 +41,4 @@ void amountToString(const uint8_t* amount, bool parse_swap_config(uint8_t* config, uint8_t config_len, char* ticker, uint8_t* decimals); -#endif /* _UTILS_H_ */ \ No newline at end of file +#endif // _UTILS_H_ diff --git a/src_common/ethUstream.h b/src_common/ethUstream.h index e73cc95..f63dd65 100644 --- a/src_common/ethUstream.h +++ b/src_common/ethUstream.h @@ -164,4 +164,4 @@ parserStatus_e continueTx(txContext_t *context); void copyTxData(txContext_t *context, uint8_t *out, uint32_t length); uint8_t readTxByte(txContext_t *context); -#endif /* _ETHUSTREAM_H_ */ \ No newline at end of file +#endif // _ETHUSTREAM_H_ diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index 1099080..eadd639 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -87,4 +87,4 @@ static __attribute__((no_instrument_function)) inline int ismaxint(uint8_t *buf, static const char HEXDIGITS[] = "0123456789abcdef"; -#endif /* _ETHUTILS_H_ */ +#endif // _ETHUTILS_H_ diff --git a/src_common/network.h b/src_common/network.h index 7a6d2fc..8a4513a 100644 --- a/src_common/network.h +++ b/src_common/network.h @@ -1,3 +1,6 @@ +#ifndef _NETWORK_H_ +#define _NETWORK_H_ + #include #include "tokens.h" #include "shared_context.h" @@ -17,4 +20,6 @@ const network_info_t *get_network(void); // Returns a pointer to the network name, or NULL if there is none. const char *get_network_name(void); // Returns a pointer to the network ticker, or chainConfig->coinName if there is none. -const char *get_network_ticker(void); \ No newline at end of file +const char *get_network_ticker(void); + +#endif // _NETWORK_H_ diff --git a/src_common/uint256.h b/src_common/uint256.h index c55cd0c..5683c3e 100644 --- a/src_common/uint256.h +++ b/src_common/uint256.h @@ -73,4 +73,4 @@ void divmod256(uint256_t *l, uint256_t *r, uint256_t *div, uint256_t *mod); bool tostring128(uint128_t *number, uint32_t base, char *out, uint32_t outLength); bool tostring256(uint256_t *number, uint32_t base, char *out, uint32_t outLength); -#endif /* _UINT256_H_ */ \ No newline at end of file +#endif // _UINT256_H_ diff --git a/src_features/getEth2PublicKey/feature_getEth2PublicKey.h b/src_features/getEth2PublicKey/feature_getEth2PublicKey.h index 3b6dbe2..3d302f4 100644 --- a/src_features/getEth2PublicKey/feature_getEth2PublicKey.h +++ b/src_features/getEth2PublicKey/feature_getEth2PublicKey.h @@ -1,3 +1,8 @@ +#ifndef _GET_ETH2_PUB_KEY_H_ +#define _GET_ETH2_PUB_KEY_H_ + #include "shared_context.h" uint32_t set_result_get_eth2_publicKey(void); + +#endif // _GET_ETH2_PUB_KEY_H_ diff --git a/src_features/getPublicKey/feature_getPublicKey.h b/src_features/getPublicKey/feature_getPublicKey.h index e8e041a..8f819ba 100644 --- a/src_features/getPublicKey/feature_getPublicKey.h +++ b/src_features/getPublicKey/feature_getPublicKey.h @@ -1,3 +1,8 @@ +#ifndef _GET_PUB_KEY_H_ +#define _GET_PUB_KEY_H_ + #include "shared_context.h" uint32_t set_result_get_publicKey(void); + +#endif // _GET_PUB_KEY_H_ diff --git a/src_features/setEth2WithdrawalIndex/withdrawal_index.h b/src_features/setEth2WithdrawalIndex/withdrawal_index.h index 497b489..bf9d6a3 100644 --- a/src_features/setEth2WithdrawalIndex/withdrawal_index.h +++ b/src_features/setEth2WithdrawalIndex/withdrawal_index.h @@ -1,3 +1,6 @@ +#ifndef _SET_WITHDRAWAL_INDEX_H_ +#define _SET_WITHDRAWAL_INDEX_H_ + #include "stdint.h" void handleSetEth2WithdrawalIndex(uint8_t p1, @@ -5,4 +8,6 @@ void handleSetEth2WithdrawalIndex(uint8_t p1, uint8_t *dataBuffer, uint16_t dataLength, unsigned int *flags, - unsigned int *tx); \ No newline at end of file + unsigned int *tx); + +#endif // _SET_WITHDRAWAL_INDEX_H_ diff --git a/src_features/signTx/feature_signTx.h b/src_features/signTx/feature_signTx.h index 24400da..84d2cd5 100644 --- a/src_features/signTx/feature_signTx.h +++ b/src_features/signTx/feature_signTx.h @@ -1,3 +1,6 @@ +#ifndef _SIGN_TX_H_ +#define _SIGN_TX_H_ + #include "shared_context.h" typedef enum { @@ -12,3 +15,5 @@ void finalizeParsing(bool direct); void prepareFeeDisplay(); void prepareNetworkDisplay(); void ux_approve_tx(bool fromPlugin); + +#endif // _SIGN_TX_H_ diff --git a/src_features/signTx/ui_plugin.h b/src_features/signTx/ui_plugin.h index 28179b2..ae86b6a 100644 --- a/src_features/signTx/ui_plugin.h +++ b/src_features/signTx/ui_plugin.h @@ -1,5 +1,8 @@ -#pragma once +#ifndef _UI_PLUGIN_H_ +#define _UI_PLUGIN_H_ void plugin_ui_get_id(); void plugin_ui_get_item(); -void display_next_plugin_item(bool entering); \ No newline at end of file +void display_next_plugin_item(bool entering); + +#endif // _UI_PLUGIN_H_ diff --git a/src_features/stark_getPublicKey/feature_stark_getPublicKey.h b/src_features/stark_getPublicKey/feature_stark_getPublicKey.h index bb50747..4859722 100644 --- a/src_features/stark_getPublicKey/feature_stark_getPublicKey.h +++ b/src_features/stark_getPublicKey/feature_stark_getPublicKey.h @@ -1,3 +1,8 @@ +#ifndef _STARK_GET_PUB_KEY_H_ +#define _STARK_GET_PUB_KEY_H_ + #include "shared_context.h" uint32_t set_result_get_stark_publicKey(void); + +#endif // _STARK_GET_PUB_KEY_H_ diff --git a/src_plugins/erc1155/erc1155_plugin.h b/src_plugins/erc1155/erc1155_plugin.h index 0702fdf..691ebdf 100644 --- a/src_plugins/erc1155/erc1155_plugin.h +++ b/src_plugins/erc1155/erc1155_plugin.h @@ -1,6 +1,7 @@ -#ifdef HAVE_NFT_SUPPORT +#ifndef _ERC1155_PLUGIN_H_ +#define _ERC1155_PLUGIN_H_ -#pragma once +#ifdef HAVE_NFT_SUPPORT #include #include "eth_plugin_handler.h" @@ -53,3 +54,5 @@ void handle_provide_parameter_1155(void *parameters); void handle_query_contract_ui_1155(void *parameters); #endif // HAVE_NFT_SUPPORT + +#endif // _ERC1155_PLUGIN_H_ diff --git a/src_plugins/erc721/erc721_plugin.h b/src_plugins/erc721/erc721_plugin.h index 1846609..9c0f5c3 100644 --- a/src_plugins/erc721/erc721_plugin.h +++ b/src_plugins/erc721/erc721_plugin.h @@ -1,6 +1,7 @@ -#ifdef HAVE_NFT_SUPPORT +#ifndef _ERC721_PLUGIN_H_ +#define _ERC721_PLUGIN_H_ -#pragma once +#ifdef HAVE_NFT_SUPPORT #include #include "eth_plugin_handler.h" @@ -44,3 +45,5 @@ void handle_provide_parameter_721(void *parameters); void handle_query_contract_ui_721(void *parameters); #endif // HAVE_NFT_SUPPORT + +#endif // _ERC721_PLUGIN_H_ From 23202f6a6388c0516d685b5743663b7f306c0284 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 8 Mar 2022 17:59:36 +0100 Subject: [PATCH 67/87] Minimize includes in header files to what they depend on --- src/eth_plugin_internal.c | 1 + src/eth_plugin_internal.h | 2 ++ src/handle_swap_sign_transaction.c | 6 +++--- src/nft.h | 2 -- src/shared_context.h | 6 ------ src_features/getEth2PublicKey/logic_getEth2PublicKey.c | 3 ++- src_features/getPublicKey/logic_getPublicKey.c | 1 + src_features/signMessage/ui_common_signMessage.c | 1 + .../signMessageEIP712/ui_common_signMessage712.c | 1 + src_features/signTx/ui_common_signTx.c | 1 + .../stark_getPublicKey/logic_stark_getPublicKey.c | 3 ++- src_features/stark_sign/ui_common_stark_sign.c | 3 ++- .../stark_unsafe_sign/ui_common_stark_unsafe_sign.c | 3 ++- src_plugins/erc1155/erc1155_plugin.c | 2 ++ src_plugins/erc1155/erc1155_plugin.h | 9 ++++----- src_plugins/erc1155/erc1155_provide_parameters.c | 3 +++ src_plugins/erc1155/erc1155_ui.c | 4 ++++ src_plugins/erc721/erc721_plugin.c | 3 +++ src_plugins/erc721/erc721_plugin.h | 9 ++++----- src_plugins/erc721/erc721_ui.c | 4 ++++ src_plugins/starkware/starkware_plugin.c | 1 + 21 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/eth_plugin_internal.c b/src/eth_plugin_internal.c index c9858a8..0e28ca6 100644 --- a/src/eth_plugin_internal.c +++ b/src/eth_plugin_internal.c @@ -1,3 +1,4 @@ +#include #include "eth_plugin_internal.h" bool erc20_plugin_available_check(void); diff --git a/src/eth_plugin_internal.h b/src/eth_plugin_internal.h index f475797..4d26130 100644 --- a/src/eth_plugin_internal.h +++ b/src/eth_plugin_internal.h @@ -1,6 +1,8 @@ #ifndef _ETH_PLUGIN_INTERNAL_H_ #define _ETH_PLUGIN_INTERNAL_H_ +#include +#include #include "eth_plugin_interface.h" #define SELECTOR_SIZE 4 diff --git a/src/handle_swap_sign_transaction.c b/src/handle_swap_sign_transaction.c index d610e9e..75e4d3a 100644 --- a/src/handle_swap_sign_transaction.c +++ b/src/handle_swap_sign_transaction.c @@ -1,6 +1,6 @@ -#include "handle_swap_sign_transaction.h" -#include "usbd_core.h" +#include "os_io_seproxyhal.h" #include "ux.h" +#include "handle_swap_sign_transaction.h" #include "shared_context.h" #include "utils.h" @@ -79,4 +79,4 @@ void handle_swap_sign_transaction(chain_config_t* config) { BLE_power(1, "Nano X"); #endif // HAVE_BLE app_main(); -} \ No newline at end of file +} diff --git a/src/nft.h b/src/nft.h index 7c8b836..b8b9435 100644 --- a/src/nft.h +++ b/src/nft.h @@ -1,8 +1,6 @@ #ifndef _NFT_H_ #define _NFT_H_ -#include "tokens.h" - #define COLLECTION_NAME_MAX_LEN 70 typedef struct nftInfo_t { diff --git a/src/shared_context.h b/src/shared_context.h index b8ea64b..12b21f5 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -3,13 +3,7 @@ #include #include -#include - -#include "os.h" -#include "cx.h" -#include "os_io_seproxyhal.h" #include "ethUstream.h" -#include "uint256.h" #include "tokens.h" #include "chainConfig.h" #include "nft.h" diff --git a/src_features/getEth2PublicKey/logic_getEth2PublicKey.c b/src_features/getEth2PublicKey/logic_getEth2PublicKey.c index 9b112e2..6a0fc92 100644 --- a/src_features/getEth2PublicKey/logic_getEth2PublicKey.c +++ b/src_features/getEth2PublicKey/logic_getEth2PublicKey.c @@ -1,5 +1,6 @@ #ifdef HAVE_ETH2 +#include #include "shared_context.h" uint32_t set_result_get_eth2_publicKey() { @@ -9,4 +10,4 @@ uint32_t set_result_get_eth2_publicKey() { return tx; } -#endif +#endif // HAVE_ETH2 diff --git a/src_features/getPublicKey/logic_getPublicKey.c b/src_features/getPublicKey/logic_getPublicKey.c index d80896c..bc58e92 100644 --- a/src_features/getPublicKey/logic_getPublicKey.c +++ b/src_features/getPublicKey/logic_getPublicKey.c @@ -1,3 +1,4 @@ +#include #include "shared_context.h" uint32_t set_result_get_publicKey() { diff --git a/src_features/signMessage/ui_common_signMessage.c b/src_features/signMessage/ui_common_signMessage.c index 02b15c3..e2a901b 100644 --- a/src_features/signMessage/ui_common_signMessage.c +++ b/src_features/signMessage/ui_common_signMessage.c @@ -1,3 +1,4 @@ +#include "os_io_seproxyhal.h" #include "shared_context.h" #include "ui_callbacks.h" diff --git a/src_features/signMessageEIP712/ui_common_signMessage712.c b/src_features/signMessageEIP712/ui_common_signMessage712.c index db97137..e67cc4e 100644 --- a/src_features/signMessageEIP712/ui_common_signMessage712.c +++ b/src_features/signMessageEIP712/ui_common_signMessage712.c @@ -1,3 +1,4 @@ +#include "os_io_seproxyhal.h" #include "shared_context.h" #include "ui_callbacks.h" diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index 36a0bd9..3d27197 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -1,3 +1,4 @@ +#include "os_io_seproxyhal.h" #include "shared_context.h" #include "utils.h" #include "ui_callbacks.h" diff --git a/src_features/stark_getPublicKey/logic_stark_getPublicKey.c b/src_features/stark_getPublicKey/logic_stark_getPublicKey.c index 8c99cfd..9338cc4 100644 --- a/src_features/stark_getPublicKey/logic_stark_getPublicKey.c +++ b/src_features/stark_getPublicKey/logic_stark_getPublicKey.c @@ -1,5 +1,6 @@ #ifdef HAVE_STARKWARE +#include #include "shared_context.h" #include "feature_stark_getPublicKey.h" @@ -10,4 +11,4 @@ uint32_t set_result_get_stark_publicKey() { return tx; } -#endif +#endif // HAVE_STARKWARE diff --git a/src_features/stark_sign/ui_common_stark_sign.c b/src_features/stark_sign/ui_common_stark_sign.c index b5feede..533f67f 100644 --- a/src_features/stark_sign/ui_common_stark_sign.c +++ b/src_features/stark_sign/ui_common_stark_sign.c @@ -1,5 +1,6 @@ #ifdef HAVE_STARKWARE +#include "os_io_seproxyhal.h" #include "shared_context.h" #include "stark_utils.h" #include "ui_callbacks.h" @@ -32,4 +33,4 @@ unsigned int io_seproxyhal_touch_stark_ok(__attribute__((unused)) const bagl_ele return 0; // do not redraw the widget } -#endif +#endif // HAVE_STARKWARE diff --git a/src_features/stark_unsafe_sign/ui_common_stark_unsafe_sign.c b/src_features/stark_unsafe_sign/ui_common_stark_unsafe_sign.c index 2a75200..4c84e0b 100644 --- a/src_features/stark_unsafe_sign/ui_common_stark_unsafe_sign.c +++ b/src_features/stark_unsafe_sign/ui_common_stark_unsafe_sign.c @@ -1,5 +1,6 @@ #ifdef HAVE_STARKWARE +#include "os_io_seproxyhal.h" #include "shared_context.h" #include "stark_utils.h" #include "ui_callbacks.h" @@ -38,4 +39,4 @@ unsigned int io_seproxyhal_touch_stark_unsafe_sign_ok(__attribute__((unused)) return 0; // do not redraw the widget } -#endif +#endif // HAVE_STARKWARE diff --git a/src_plugins/erc1155/erc1155_plugin.c b/src_plugins/erc1155/erc1155_plugin.c index ea65515..9554497 100644 --- a/src_plugins/erc1155/erc1155_plugin.c +++ b/src_plugins/erc1155/erc1155_plugin.c @@ -1,7 +1,9 @@ #ifdef HAVE_NFT_SUPPORT +#include #include "erc1155_plugin.h" #include "eth_plugin_internal.h" +#include "ethUtils.h" static const uint8_t ERC1155_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65}; static const uint8_t ERC1155_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a}; diff --git a/src_plugins/erc1155/erc1155_plugin.h b/src_plugins/erc1155/erc1155_plugin.h index 691ebdf..cb100c7 100644 --- a/src_plugins/erc1155/erc1155_plugin.h +++ b/src_plugins/erc1155/erc1155_plugin.h @@ -3,12 +3,11 @@ #ifdef HAVE_NFT_SUPPORT -#include -#include "eth_plugin_handler.h" -#include "shared_context.h" -#include "ethUtils.h" -#include "utils.h" +#include +#include +#include "ethUstream.h" #include "uint256.h" +#include "nft.h" // Internal plugin for EIP 1155: https://eips.ethereum.org/EIPS/eip-1155 diff --git a/src_plugins/erc1155/erc1155_provide_parameters.c b/src_plugins/erc1155/erc1155_provide_parameters.c index 800aafb..8b5e1ca 100644 --- a/src_plugins/erc1155/erc1155_provide_parameters.c +++ b/src_plugins/erc1155/erc1155_provide_parameters.c @@ -1,7 +1,10 @@ #ifdef HAVE_NFT_SUPPORT +#include #include "erc1155_plugin.h" #include "eth_plugin_internal.h" +#include "utils.h" +#include "ethUtils.h" static void handle_safe_transfer(ethPluginProvideParameter_t *msg, erc1155_context_t *context) { uint8_t new_value[INT256_LENGTH]; diff --git a/src_plugins/erc1155/erc1155_ui.c b/src_plugins/erc1155/erc1155_ui.c index e2679d4..2386793 100644 --- a/src_plugins/erc1155/erc1155_ui.c +++ b/src_plugins/erc1155/erc1155_ui.c @@ -1,6 +1,10 @@ #ifdef HAVE_NFT_SUPPORT +#include #include "erc1155_plugin.h" +#include "eth_plugin_interface.h" +#include "ethUtils.h" +#include "utils.h" static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t *context) { switch (msg->screenIndex) { diff --git a/src_plugins/erc721/erc721_plugin.c b/src_plugins/erc721/erc721_plugin.c index badddb3..449aa96 100644 --- a/src_plugins/erc721/erc721_plugin.c +++ b/src_plugins/erc721/erc721_plugin.c @@ -1,7 +1,10 @@ #ifdef HAVE_NFT_SUPPORT +#include #include "erc721_plugin.h" #include "eth_plugin_internal.h" +#include "eth_plugin_interface.h" +#include "ethUtils.h" static const uint8_t ERC721_APPROVE_SELECTOR[SELECTOR_SIZE] = {0x09, 0x5e, 0xa7, 0xb3}; static const uint8_t ERC721_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65}; diff --git a/src_plugins/erc721/erc721_plugin.h b/src_plugins/erc721/erc721_plugin.h index 9c0f5c3..17515f3 100644 --- a/src_plugins/erc721/erc721_plugin.h +++ b/src_plugins/erc721/erc721_plugin.h @@ -3,11 +3,10 @@ #ifdef HAVE_NFT_SUPPORT -#include -#include "eth_plugin_handler.h" -#include "shared_context.h" -#include "ethUtils.h" -#include "utils.h" +#include +#include +#include "ethUstream.h" +#include "nft.h" // Internal plugin for EIP 721: https://eips.ethereum.org/EIPS/eip-721 diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index ce0c4f5..a968aa6 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -1,6 +1,10 @@ #ifdef HAVE_NFT_SUPPORT +#include #include "erc721_plugin.h" +#include "eth_plugin_interface.h" +#include "ethUtils.h" +#include "utils.h" static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context) { switch (msg->screenIndex) { diff --git a/src_plugins/starkware/starkware_plugin.c b/src_plugins/starkware/starkware_plugin.c index 11f7d8e..9800f7c 100644 --- a/src_plugins/starkware/starkware_plugin.c +++ b/src_plugins/starkware/starkware_plugin.c @@ -1,4 +1,5 @@ #include +#include "os_io_seproxyhal.h" #include "eth_plugin_interface.h" #include "shared_context.h" // TODO : rewrite as independant code #include "eth_plugin_internal.h" // TODO : rewrite as independant code From 7e1c8b14d43200d74c99fb667a15f7dd99525aef Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 8 Mar 2022 18:19:07 +0100 Subject: [PATCH 68/87] Small refactoring on number of NFT selectors --- src_plugins/erc1155/erc1155_plugin.c | 6 +++--- src_plugins/erc1155/erc1155_plugin.h | 3 +-- src_plugins/erc721/erc721_plugin.c | 6 +++--- src_plugins/erc721/erc721_plugin.h | 3 +-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src_plugins/erc1155/erc1155_plugin.c b/src_plugins/erc1155/erc1155_plugin.c index 9554497..9fa73f6 100644 --- a/src_plugins/erc1155/erc1155_plugin.c +++ b/src_plugins/erc1155/erc1155_plugin.c @@ -9,7 +9,7 @@ static const uint8_t ERC1155_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x static const uint8_t ERC1155_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a}; static const uint8_t ERC1155_SAFE_BATCH_TRANSFER[SELECTOR_SIZE] = {0x2e, 0xb2, 0xc2, 0xd6}; -const uint8_t *const ERC1155_SELECTORS[NUM_ERC1155_SELECTORS] = { +const uint8_t *const ERC1155_SELECTORS[SELECTORS_COUNT] = { ERC1155_APPROVE_FOR_ALL_SELECTOR, ERC1155_SAFE_TRANSFER_SELECTOR, ERC1155_SAFE_BATCH_TRANSFER, @@ -20,7 +20,7 @@ static void handle_init_contract(void *parameters) { erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; uint8_t i; - for (i = 0; i < NUM_ERC1155_SELECTORS; i++) { + for (i = 0; i < SELECTORS_COUNT; i++) { if (memcmp((uint8_t *) PIC(ERC1155_SELECTORS[i]), msg->selector, SELECTOR_SIZE) == 0) { context->selectorIndex = i; break; @@ -28,7 +28,7 @@ static void handle_init_contract(void *parameters) { } // No selector found. - if (i == NUM_ERC1155_SELECTORS) { + if (i == SELECTORS_COUNT) { PRINTF("Unknown erc1155 selector %.*H\n", SELECTOR_SIZE, msg->selector); msg->result = ETH_PLUGIN_RESULT_FALLBACK; return; diff --git a/src_plugins/erc1155/erc1155_plugin.h b/src_plugins/erc1155/erc1155_plugin.h index cb100c7..eb174bd 100644 --- a/src_plugins/erc1155/erc1155_plugin.h +++ b/src_plugins/erc1155/erc1155_plugin.h @@ -11,12 +11,11 @@ // Internal plugin for EIP 1155: https://eips.ethereum.org/EIPS/eip-1155 -#define NUM_ERC1155_SELECTORS 3 - typedef enum { SET_APPROVAL_FOR_ALL, SAFE_TRANSFER, SAFE_BATCH_TRANSFER, + SELECTORS_COUNT } erc1155_selector_t; typedef enum { diff --git a/src_plugins/erc721/erc721_plugin.c b/src_plugins/erc721/erc721_plugin.c index 449aa96..e802a54 100644 --- a/src_plugins/erc721/erc721_plugin.c +++ b/src_plugins/erc721/erc721_plugin.c @@ -12,7 +12,7 @@ static const uint8_t ERC721_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0x23, 0xb8, 0x72 static const uint8_t ERC721_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0x42, 0x84, 0x2e, 0x0e}; static const uint8_t ERC721_SAFE_TRANSFER_DATA_SELECTOR[SELECTOR_SIZE] = {0xb8, 0x8d, 0x4f, 0xde}; -const uint8_t *const ERC721_SELECTORS[NUM_ERC721_SELECTORS] = { +const uint8_t *const ERC721_SELECTORS[SELECTORS_COUNT] = { ERC721_APPROVE_SELECTOR, ERC721_APPROVE_FOR_ALL_SELECTOR, ERC721_TRANSFER_SELECTOR, @@ -25,7 +25,7 @@ static void handle_init_contract(void *parameters) { erc721_context_t *context = (erc721_context_t *) msg->pluginContext; uint8_t i; - for (i = 0; i < NUM_ERC721_SELECTORS; i++) { + for (i = 0; i < SELECTORS_COUNT; i++) { if (memcmp((uint8_t *) PIC(ERC721_SELECTORS[i]), msg->selector, SELECTOR_SIZE) == 0) { context->selectorIndex = i; break; @@ -33,7 +33,7 @@ static void handle_init_contract(void *parameters) { } // No selector found. - if (i == NUM_ERC721_SELECTORS) { + if (i == SELECTORS_COUNT) { PRINTF("Unknown erc721 selector %.*H\n", SELECTOR_SIZE, msg->selector); msg->result = ETH_PLUGIN_RESULT_FALLBACK; return; diff --git a/src_plugins/erc721/erc721_plugin.h b/src_plugins/erc721/erc721_plugin.h index 17515f3..62870fa 100644 --- a/src_plugins/erc721/erc721_plugin.h +++ b/src_plugins/erc721/erc721_plugin.h @@ -10,14 +10,13 @@ // Internal plugin for EIP 721: https://eips.ethereum.org/EIPS/eip-721 -#define NUM_ERC721_SELECTORS 5 - typedef enum { APPROVE, SET_APPROVAL_FOR_ALL, TRANSFER, SAFE_TRANSFER, SAFE_TRANSFER_DATA, + SELECTORS_COUNT } erc721_selector_t; typedef enum { From fed91e2261f37d1de07f6b5fe1bf882186339da6 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Mar 2022 10:15:51 +0100 Subject: [PATCH 69/87] Removed old os_strcmp function --- src/handle_check_address.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/handle_check_address.c b/src/handle_check_address.c index 48b6b94..274582a 100644 --- a/src/handle_check_address.c +++ b/src/handle_check_address.c @@ -6,11 +6,6 @@ #define ZERO(x) memset(&x, 0, sizeof(x)) -static int os_strcmp(const char* s1, const char* s2) { - size_t size = strlen(s1) + 1; - return memcmp(s1, s2, size); -} - int handle_check_address(check_address_parameters_t* params, chain_config_t* chain_config) { PRINTF("Params on the address %d\n", (unsigned int) params); PRINTF("Address to check %s\n", params->address_to_check); @@ -69,7 +64,7 @@ int handle_check_address(check_address_parameters_t* params, chain_config_t* cha offset_0x = 2; } - if (os_strcmp(locals_union1.address, params->address_to_check + offset_0x) != 0) { + if (strcmp(locals_union1.address, params->address_to_check + offset_0x) != 0) { PRINTF("Addresses don't match\n"); return 0; } From 853a85205d52d6bb5760fd05eb5bf41aa06ade6a Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Mar 2022 11:51:50 +0100 Subject: [PATCH 70/87] Now checks if a proper plugin is loaded when receiving NFT metadata --- src_features/provideNFTInformation/cmd_provideNFTInfo.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index 4a6161c..e7fea89 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -63,8 +63,12 @@ void handleProvideNFTInformation(uint8_t p1, UNUSED(flags); uint8_t hash[INT256_LENGTH]; cx_ecfp_public_key_t nftKey; - PRINTF("In handle provide NFTInformation"); + PRINTF("In handle provide NFTInformation\n"); + if ((pluginType != ERC721) && (pluginType != ERC1155)) { + PRINTF("NFT metadata provided without proper plugin loaded!\n"); + THROW(0x6985); + } tmpCtx.transactionContext.currentItemIndex = (tmpCtx.transactionContext.currentItemIndex + 1) % MAX_ITEMS; nftInfo_t *nft = From a26da165df6fbf9b3158545fd6aa591ceb2b47a6 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Mar 2022 15:03:38 +0100 Subject: [PATCH 71/87] Now prevents NFT signatures without NFT metadata --- src/eth_plugin_handler.c | 4 ++-- src/eth_plugin_handler.h | 3 +++ src/nft.h | 3 +++ src_plugins/erc1155/erc1155_plugin.c | 6 ++++++ src_plugins/erc721/erc721_plugin.c | 6 ++++++ 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index accc232..8058c11 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -48,14 +48,14 @@ void eth_plugin_prepare_query_contract_UI(ethQueryContractUI_t *queryContractUI, memset((uint8_t *) queryContractUI, 0, sizeof(ethQueryContractUI_t)); // If no extra information was found, set the pointer to NULL - if (allzeroes(&tmpCtx.transactionContext.extraInfo[1], sizeof(union extraInfo_t))) { + if (NO_EXTRA_INFO(tmpCtx, 1)) { queryContractUI->item1 = NULL; } else { queryContractUI->item1 = &tmpCtx.transactionContext.extraInfo[1]; } // If no extra information was found, set the pointer to NULL - if (allzeroes(&tmpCtx.transactionContext.extraInfo[0], sizeof(union extraInfo_t))) { + if (NO_EXTRA_INFO(tmpCtx, 0)) { queryContractUI->item2 = NULL; } else { queryContractUI->item2 = &tmpCtx.transactionContext.extraInfo[0]; diff --git a/src/eth_plugin_handler.h b/src/eth_plugin_handler.h index 76a7f1e..ba6ffee 100644 --- a/src/eth_plugin_handler.h +++ b/src/eth_plugin_handler.h @@ -3,6 +3,9 @@ #include "eth_plugin_interface.h" +#define NO_EXTRA_INFO(ctx, idx) \ + (allzeroes(&(ctx.transactionContext.extraInfo[idx]), sizeof(extraInfo_t))) + void eth_plugin_prepare_init(ethPluginInitContract_t *init, uint8_t *selector, uint32_t dataSize); void eth_plugin_prepare_provide_parameter(ethPluginProvideParameter_t *provideParameter, uint8_t *parameter, diff --git a/src/nft.h b/src/nft.h index b8b9435..43ee5d1 100644 --- a/src/nft.h +++ b/src/nft.h @@ -1,7 +1,10 @@ #ifndef _NFT_H_ #define _NFT_H_ +#include + #define COLLECTION_NAME_MAX_LEN 70 +#define NO_NFT_METADATA (NO_EXTRA_INFO(tmpCtx, 1)) typedef struct nftInfo_t { uint8_t contractAddress[ADDRESS_LENGTH]; // must be first item diff --git a/src_plugins/erc1155/erc1155_plugin.c b/src_plugins/erc1155/erc1155_plugin.c index 9fa73f6..4c530da 100644 --- a/src_plugins/erc1155/erc1155_plugin.c +++ b/src_plugins/erc1155/erc1155_plugin.c @@ -4,6 +4,7 @@ #include "erc1155_plugin.h" #include "eth_plugin_internal.h" #include "ethUtils.h" +#include "eth_plugin_handler.h" static const uint8_t ERC1155_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65}; static const uint8_t ERC1155_SAFE_TRANSFER_SELECTOR[SELECTOR_SIZE] = {0xf2, 0x42, 0x43, 0x2a}; @@ -19,6 +20,11 @@ static void handle_init_contract(void *parameters) { ethPluginInitContract_t *msg = (ethPluginInitContract_t *) parameters; erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; + if (NO_NFT_METADATA) { + PRINTF("No NFT metadata when trying to sign!\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } uint8_t i; for (i = 0; i < SELECTORS_COUNT; i++) { if (memcmp((uint8_t *) PIC(ERC1155_SELECTORS[i]), msg->selector, SELECTOR_SIZE) == 0) { diff --git a/src_plugins/erc721/erc721_plugin.c b/src_plugins/erc721/erc721_plugin.c index e802a54..12a0a92 100644 --- a/src_plugins/erc721/erc721_plugin.c +++ b/src_plugins/erc721/erc721_plugin.c @@ -5,6 +5,7 @@ #include "eth_plugin_internal.h" #include "eth_plugin_interface.h" #include "ethUtils.h" +#include "eth_plugin_handler.h" static const uint8_t ERC721_APPROVE_SELECTOR[SELECTOR_SIZE] = {0x09, 0x5e, 0xa7, 0xb3}; static const uint8_t ERC721_APPROVE_FOR_ALL_SELECTOR[SELECTOR_SIZE] = {0xa2, 0x2c, 0xb4, 0x65}; @@ -24,6 +25,11 @@ static void handle_init_contract(void *parameters) { ethPluginInitContract_t *msg = (ethPluginInitContract_t *) parameters; erc721_context_t *context = (erc721_context_t *) msg->pluginContext; + if (NO_NFT_METADATA) { + PRINTF("No NFT metadata when trying to sign!\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } uint8_t i; for (i = 0; i < SELECTORS_COUNT; i++) { if (memcmp((uint8_t *) PIC(ERC721_SELECTORS[i]), msg->selector, SELECTOR_SIZE) == 0) { From fb28efc012978312820814e502cb97429787c696 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Mar 2022 15:36:03 +0100 Subject: [PATCH 72/87] Removed the helper getNftContractAddress helper function and some NULL checks Useless since we don't allow NFT signing without the NFT metadata anymore --- src_common/ethUtils.c | 6 ------ src_common/ethUtils.h | 3 --- src_plugins/erc1155/erc1155_ui.c | 24 ++++++------------------ src_plugins/erc721/erc721_ui.c | 24 ++++++------------------ 4 files changed, 12 insertions(+), 45 deletions(-) diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index 4239136..804837c 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -237,12 +237,6 @@ void getEthDisplayableAddress(uint8_t *in, getEthAddressStringFromBinary(in, out + 2, sha3, chainId); } -uint8_t *getNftContractAddress(const ethQueryContractUI_t *const msg) { - // In case of no PROVIDE_NFT_INFO, we already have the address from the SET_PLUGIN - return ((msg->item1) ? ((uint8_t *) msg->item1->nft.contractAddress) - : msg->pluginSharedRO->txContent->destination); -} - bool adjustDecimals(const char *src, size_t srcLength, char *target, diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index eadd639..3c147cc 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -22,7 +22,6 @@ #include "cx.h" #include "chainConfig.h" -#include "eth_plugin_interface.h" /** * @brief Decode an RLP encoded field - see @@ -59,8 +58,6 @@ void getEthDisplayableAddress(uint8_t *in, cx_sha3_t *sha3, uint64_t chainId); -uint8_t *getNftContractAddress(const ethQueryContractUI_t *const msg); - bool adjustDecimals(const char *src, size_t srcLength, char *target, diff --git a/src_plugins/erc1155/erc1155_ui.c b/src_plugins/erc1155/erc1155_ui.c index 2386793..4306704 100644 --- a/src_plugins/erc1155/erc1155_ui.c +++ b/src_plugins/erc1155/erc1155_ui.c @@ -22,15 +22,11 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc1155_context_t break; case 1: strlcpy(msg->title, "To Manage ALL", msg->titleLength); - if (msg->item1) { - strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); - } else { - strlcpy(msg->msg, "Not found", msg->msgLength); - } + strlcpy(msg->msg, msg->item1->nft.collectionName, msg->msgLength); break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(getNftContractAddress(msg), + getEthDisplayableAddress(msg->item1->nft.contractAddress, msg->msg, msg->msgLength, &global_sha3, @@ -55,15 +51,11 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t *contex break; case 1: strlcpy(msg->title, "Collection Name", msg->titleLength); - if (msg->item1) { - strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); - } else { - strlcpy(msg->msg, "Not Found", msg->msgLength); - } + strlcpy(msg->msg, msg->item1->nft.collectionName, msg->msgLength); break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(getNftContractAddress(msg), + getEthDisplayableAddress(msg->item1->nft.contractAddress, msg->msg, msg->msgLength, &global_sha3, @@ -101,15 +93,11 @@ static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t * break; case 1: strlcpy(msg->title, "Collection Name", msg->titleLength); - if (msg->item1) { - strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); - } else { - strlcpy(msg->msg, "Not Found", msg->msgLength); - } + strlcpy(msg->msg, msg->item1->nft.collectionName, msg->msgLength); break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(getNftContractAddress(msg), + getEthDisplayableAddress(msg->item1->nft.contractAddress, msg->msg, msg->msgLength, &global_sha3, diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index a968aa6..8fc4c59 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -18,15 +18,11 @@ static void set_approval_ui(ethQueryContractUI_t *msg, erc721_context_t *context break; case 1: strlcpy(msg->title, "To Manage Your", msg->titleLength); - if (msg->item1) { - strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); - } else { - strlcpy(msg->msg, "Not Found", msg->msgLength); - } + strlcpy(msg->msg, msg->item1->nft.collectionName, msg->msgLength); break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(getNftContractAddress(msg), + getEthDisplayableAddress(msg->item1->nft.contractAddress, msg->msg, msg->msgLength, &global_sha3, @@ -62,15 +58,11 @@ static void set_approval_for_all_ui(ethQueryContractUI_t *msg, erc721_context_t break; case 1: strlcpy(msg->title, "To Manage ALL", msg->titleLength); - if (msg->item1) { - strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); - } else { - strlcpy(msg->msg, "Not found", msg->msgLength); - } + strlcpy(msg->msg, msg->item1->nft.collectionName, msg->msgLength); break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(getNftContractAddress(msg), + getEthDisplayableAddress(msg->item1->nft.contractAddress, msg->msg, msg->msgLength, &global_sha3, @@ -95,15 +87,11 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context break; case 1: strlcpy(msg->title, "Collection Name", msg->titleLength); - if (msg->item1) { - strlcpy(msg->msg, (const char *) &msg->item1->nft.collectionName, msg->msgLength); - } else { - strlcpy(msg->msg, "Not Found", msg->msgLength); - } + strlcpy(msg->msg, msg->item1->nft.collectionName, msg->msgLength); break; case 2: strlcpy(msg->title, "NFT Address", msg->titleLength); - getEthDisplayableAddress(getNftContractAddress(msg), + getEthDisplayableAddress(msg->item1->nft.contractAddress, msg->msg, msg->msgLength, &global_sha3, From 8739b29338e196b0a0f4d0959216eb7b39fa3a06 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 9 Mar 2022 16:12:25 +0100 Subject: [PATCH 73/87] Updated the NFT Zemu tests --- .../nanox_erc1155_transfer_wo_info/00000.png | 1 - .../nanox_erc1155_transfer_wo_info/00001.png | 1 - .../nanox_erc1155_transfer_wo_info/00002.png | 1 - .../nanox_erc1155_transfer_wo_info/00003.png | Bin 457 -> 0 bytes .../nanox_erc1155_transfer_wo_info/00004.png | 1 - .../nanox_erc1155_transfer_wo_info/00005.png | 1 - .../nanox_erc1155_transfer_wo_info/00006.png | 1 - .../nanox_erc1155_transfer_wo_info/00007.png | 1 - .../nanox_erc1155_transfer_wo_info/00008.png | 1 - .../nanox_erc1155_transfer_wo_info/00009.png | 1 - .../nanox_erc1155_transfer_wo_info/00010.png | 1 - .../nanox_erc1155_transfer_wo_info/00011.png | 1 - .../nanox_erc1155_transfer_wo_info/00012.png | 1 - .../nanox_erc721_transfer_wo_info/00000.png | 1 - .../nanox_erc721_transfer_wo_info/00001.png | 1 - .../nanox_erc721_transfer_wo_info/00002.png | 1 - .../nanox_erc721_transfer_wo_info/00003.png | Bin 457 -> 0 bytes .../nanox_erc721_transfer_wo_info/00004.png | 1 - .../nanox_erc721_transfer_wo_info/00005.png | 1 - .../nanox_erc721_transfer_wo_info/00006.png | 1 - .../nanox_erc721_transfer_wo_info/00007.png | 1 - .../nanox_erc721_transfer_wo_info/00008.png | 1 - .../nanox_erc721_transfer_wo_info/00009.png | 1 - .../nanox_erc721_transfer_wo_info/00010.png | 1 - tests/src/erc1155.test.js | 48 ++++++++---------- tests/src/erc721.test.js | 21 +++----- 26 files changed, 30 insertions(+), 61 deletions(-) delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png delete mode 100644 tests/snapshots/nanox_erc1155_transfer_wo_info/00003.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00004.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00005.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00006.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00007.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00008.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00009.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00010.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00011.png delete mode 120000 tests/snapshots/nanox_erc1155_transfer_wo_info/00012.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00000.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00001.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00002.png delete mode 100644 tests/snapshots/nanox_erc721_transfer_wo_info/00003.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00004.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00005.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00006.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00007.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00008.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00009.png delete mode 120000 tests/snapshots/nanox_erc721_transfer_wo_info/00010.png diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png deleted file mode 120000 index a808e25..0000000 --- a/tests/snapshots/nanox_erc1155_transfer_wo_info/00000.png +++ /dev/null @@ -1 +0,0 @@ -../nanox_erc1155_transfer/00000.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png deleted file mode 120000 index 18b62b5..0000000 --- a/tests/snapshots/nanox_erc1155_transfer_wo_info/00001.png +++ /dev/null @@ -1 +0,0 @@ -../nanox_erc1155_transfer/00001.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png deleted file mode 120000 index 3ba3b50..0000000 --- a/tests/snapshots/nanox_erc1155_transfer_wo_info/00002.png +++ /dev/null @@ -1 +0,0 @@ -../nanox_erc1155_transfer/00002.png \ No newline at end of file diff --git a/tests/snapshots/nanox_erc1155_transfer_wo_info/00003.png b/tests/snapshots/nanox_erc1155_transfer_wo_info/00003.png deleted file mode 100644 index b34af53fcd4c2abde410f077c7f6ee0d6d53ff3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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{2aH1MOvfRFde|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{2 { + test('[Nano ' + model.letter + '] Transfer ERC-1155 w/o NFT metadata', 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 + '_erc1155_transfer_wo_info', [10, -1, 0]); - - await sign_promise; - })); - - test('[Nano ' + model.letter + '] Transfer ERC-1155 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)); })); + + test('[Nano ' + model.letter + '] Transfer ERC-1155 w/o plugin loaded', zemu(model, async (sim, eth) => { + const current_screen = sim.getMainMenuSnapshot(); + let nft_info = send_apdu(eth.transport, provide_nft_info); + + await expect(nft_info).rejects.toEqual(new TransportStatusError(0x6985)); + })); } -test('[Nano ' + model.letter + '] Batch transfer ERC-1155', zemu(model, async (sim, eth) => { - +{ const set_plugin = apdu_as_string('e01600007401010745524331313535495f947276749ce646f68ac8c248420045cb7b5e2eb2c2d60000000000000001000147304502210087b35cefc53fd94e25404933eb0d5ff08f20ba655d181de3b24ff0099dc3317f02204a216aa9e0b84bef6e20fcb036bd49647bf0cab66732b99b49ec277ffb682aa1'); const provide_nft_info = apdu_as_string('e0140000820101194f70656e536561205368617265642053746f726566726f6e74495f947276749ce646f68ac8c248420045cb7b5e00000000000000010001473045022100c74cd613a27a9f4887210f5a3a0e12745e1ba0ab3a0d284cb6485d89c3cce4e602205a13e62a91164985cf58a838f8f531c0b91b980d206a5ba8df28270023ef93a3'); const sign_first = apdu_as_string('e004000096058000002c8000003c800000000000000000000000f9020b0e850d8cfd86008301617d94495f947276749ce646f68ac8c248420045cb7b5e80b901e42eb2c2d60000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c00000000000000000000000000000000000000000000'); @@ -56,16 +50,18 @@ test('[Nano ' + model.letter + '] Batch transfer ERC-1155', zemu(model, async (s const sign_more_2 = apdu_as_string('e00480009689732473fcd0bbbe000000000000a30000000001abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a00000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000'); const sign_more_3 = apdu_as_string('e00480006100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080'); - 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); - await send_apdu(eth.transport, sign_more_1); - await send_apdu(eth.transport, sign_more_2); - let sign_promise = send_apdu(eth.transport, sign_more_3); + test('[Nano ' + model.letter + '] Batch transfer ERC-1155', 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); + await send_apdu(eth.transport, sign_more_1); + await send_apdu(eth.transport, sign_more_2); + let sign_promise = send_apdu(eth.transport, sign_more_3); - await waitForAppScreen(sim, current_screen); - await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8, -1, 0]); + await waitForAppScreen(sim, current_screen); + await sim.navigateAndCompareSnapshots('.', model.name + '_erc1155_batch_transfer', [8, -1, 0]); - await sign_promise; -})); + await sign_promise; + })); +} diff --git a/tests/src/erc721.test.js b/tests/src/erc721.test.js index 9dca820..1d05853 100644 --- a/tests/src/erc721.test.js +++ b/tests/src/erc721.test.js @@ -25,22 +25,17 @@ test('[Nano ' + model.letter + '] Transfer ERC-721', zemu(model, async (sim, eth await sign_promise; })); -test('[Nano ' + model.letter + '] Transfer ERC-721 w/o NFT_PROVIDE_INFORMATION', zemu(model, async(sim, eth) => { +test('[Nano ' + model.letter + '] Transfer ERC-721 w/o NFT metadata', 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)); })); + +test('[Nano ' + model.letter + '] Transfer ERC-721 w/o plugin loaded', zemu(model, async (sim, eth) => { + const current_screen = sim.getMainMenuSnapshot(); + let nft_info = send_apdu(eth.transport, provide_nft_info); + + await expect(nft_info).rejects.toEqual(new TransportStatusError(0x6985)); +})); From 358fcbd4eebb649c12176aa21cb7c2b59a6a0bdb Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Mon, 14 Mar 2022 09:55:49 +0100 Subject: [PATCH 74/87] [add] SDK submodule updated to develop + will now be auto updated --- .github/workflows/sdk-generation.yml | 10 ++++++++++ ethereum-plugin-sdk | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sdk-generation.yml b/.github/workflows/sdk-generation.yml index 162371e..7636bf6 100644 --- a/.github/workflows/sdk-generation.yml +++ b/.github/workflows/sdk-generation.yml @@ -41,3 +41,13 @@ jobs: message: "[update] Branch ${{ steps.extract_branch.outputs.branch }} | Commit ${GITHUB_SHA}" secret: ${{ secrets.CI_BOT_TOKEN }} repository: LedgerHQ/ethereum-plugin-sdk + + - name: Update the SDK submodule in the Ethereum app + uses: ./.github/actions/commit-changes + with: + name: 'ldg-github-ci' + files: ethereum-plugin-sdk + branch: ${{ steps.extract_branch.outputs.branch }} + message: "[update][SDK] Branch ${{ steps.extract_branch.outputs.branch }} | Commit ${GITHUB_SHA}" + secret: ${{ secrets.CI_BOT_TOKEN }} + repository: LedgerHQ/ethereum-plugin-sdk diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 3a79796..372446f 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 3a797967f43ec1a055c3b44f03a2b86829f72c77 +Subproject commit 372446f671ccec7dbd563cff2ee81473ca44bea5 From 60656c1b56d312d95bda23d119b902d60819b20b Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Mon, 14 Mar 2022 10:20:48 +0100 Subject: [PATCH 75/87] [fix] Bad bash syntax in github action --- .github/actions/commit-changes/action.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/actions/commit-changes/action.yml b/.github/actions/commit-changes/action.yml index 0d8ac4f..a1515bd 100644 --- a/.github/actions/commit-changes/action.yml +++ b/.github/actions/commit-changes/action.yml @@ -38,6 +38,7 @@ runs: using: 'composite' steps: - name: Commit the changes + id: commit run: | git config --global user.name ${{ inputs.name }} ORIGIN="$(pwd)" @@ -48,17 +49,20 @@ runs: if [ -z "${CHANGES}" ]; \ then \ echo "No changes, stopping now"; \ - cd ${origin} \ + echo "::save-state name=COMMIT::NO"; \ + cd "${ORIGIN}"; \ exit 0; \ fi echo -e "Changes:\n${CHANGES}" git add ${{ inputs.files }} git commit -am "${{ inputs.message }}" + echo "::save-state name=COMMIT::YES" git log -n 2 - cd ${ORIGIN} + cd "${ORIGIN}" shell: bash - name: Push commit + if: ${{ steps.commit.state.COMMIT == 'YES' }} uses: ad-m/github-push-action@master with: github_token: ${{ inputs.secret }} From 55b6f9bc991090b6eb524bcc8fc0b5d86dfe3b4a Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Mon, 14 Mar 2022 14:54:17 +0100 Subject: [PATCH 76/87] [fix] Step condition variable was improperly defined --- .github/actions/commit-changes/action.yml | 15 ++++++++++++--- .github/workflows/sdk-generation.yml | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/actions/commit-changes/action.yml b/.github/actions/commit-changes/action.yml index a1515bd..147feb6 100644 --- a/.github/actions/commit-changes/action.yml +++ b/.github/actions/commit-changes/action.yml @@ -44,25 +44,34 @@ runs: ORIGIN="$(pwd)" cd ${{ inputs.directory }} git switch ${{ inputs.branch }} 2>/dev/null || git switch -c ${{ inputs.branch }} + echo "-----------------------------------------------------------" + echo "Initial repo status" git status CHANGES="$(git status --porcelain ${{ inputs.files }})" if [ -z "${CHANGES}" ]; \ then \ + echo "-----------------------------------------------------------"; \ echo "No changes, stopping now"; \ - echo "::save-state name=COMMIT::NO"; \ + echo "COMMIT=NO" > $GITHUB_ENV; \ cd "${ORIGIN}"; \ exit 0; \ fi echo -e "Changes:\n${CHANGES}" git add ${{ inputs.files }} + echo "-----------------------------------------------------------" + echo "Repo status before commit" + git status git commit -am "${{ inputs.message }}" - echo "::save-state name=COMMIT::YES" + echo "COMMIT=YES" > $GITHUB_ENV git log -n 2 cd "${ORIGIN}" shell: bash + - run: echo "${{ env.COMMIT }}" + shell: bash + - name: Push commit - if: ${{ steps.commit.state.COMMIT == 'YES' }} + if: ${{ env.COMMIT == 'YES' }} uses: ad-m/github-push-action@master with: github_token: ${{ inputs.secret }} diff --git a/.github/workflows/sdk-generation.yml b/.github/workflows/sdk-generation.yml index 7636bf6..bb11552 100644 --- a/.github/workflows/sdk-generation.yml +++ b/.github/workflows/sdk-generation.yml @@ -50,4 +50,4 @@ jobs: branch: ${{ steps.extract_branch.outputs.branch }} message: "[update][SDK] Branch ${{ steps.extract_branch.outputs.branch }} | Commit ${GITHUB_SHA}" secret: ${{ secrets.CI_BOT_TOKEN }} - repository: LedgerHQ/ethereum-plugin-sdk + repository: LedgerHQ/app-ethereum From faf2044108aa9bb62517a8d29151baa07f52ef70 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 15 Mar 2022 14:19:30 +0100 Subject: [PATCH 77/87] Bump plugin interface version --- src/eth_plugin_interface.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/eth_plugin_interface.h b/src/eth_plugin_interface.h index f8b301c..48c6e67 100644 --- a/src/eth_plugin_interface.h +++ b/src/eth_plugin_interface.h @@ -12,7 +12,8 @@ typedef enum { ETH_PLUGIN_INTERFACE_VERSION_1 = 1, ETH_PLUGIN_INTERFACE_VERSION_2 = 2, ETH_PLUGIN_INTERFACE_VERSION_3 = 3, - ETH_PLUGIN_INTERFACE_VERSION_LATEST = 4, + ETH_PLUGIN_INTERFACE_VERSION_4 = 4, + ETH_PLUGIN_INTERFACE_VERSION_LATEST = 5, } eth_plugin_interface_version_t; typedef enum { From 170f3eeb7b4f58c1edc894704be6be3f7c81e2d1 Mon Sep 17 00:00:00 2001 From: ldg-github-ci Date: Tue, 15 Mar 2022 14:00:43 +0000 Subject: [PATCH 78/87] [update][SDK] Branch develop | Commit 5203780b6a3e26589aa4a424f713593e6a66e740 --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 372446f..0de74c6 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 372446f671ccec7dbd563cff2ee81473ca44bea5 +Subproject commit 0de74c6382f876f89f82ef0eef90408fd94888a3 From 78f4642b6c5839304ced61c86de50cda1b68c308 Mon Sep 17 00:00:00 2001 From: BTChip github Date: Tue, 11 Jan 2022 08:56:57 +0100 Subject: [PATCH 79/87] Add EIP 1024 APDUs --- doc/ethapp.asc | 51 +++++++- src/apdu_constants.h | 8 ++ src/main.c | 9 ++ src/ui_callbacks.h | 2 + src/ui_flow.h | 4 + .../cmd_performPrivacyOperation.c | 122 ++++++++++++++++++ .../feature_performPrivacyOperation.h | 3 + .../logic_performPrivacyOperation.c | 10 ++ .../ui_common_performPrivacyOperation.c | 27 ++++ .../ui_flow_performPrivacyOperation.c | 67 ++++++++++ 10 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 src_features/performPrivacyOperation/cmd_performPrivacyOperation.c create mode 100644 src_features/performPrivacyOperation/feature_performPrivacyOperation.h create mode 100644 src_features/performPrivacyOperation/logic_performPrivacyOperation.c create mode 100644 src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c create mode 100644 src_features/performPrivacyOperation/ui_flow_performPrivacyOperation.c diff --git a/doc/ethapp.asc b/doc/ethapp.asc index 5b21fa8..8931fe6 100644 --- a/doc/ethapp.asc +++ b/doc/ethapp.asc @@ -1,7 +1,7 @@ Ethereum application : Common Technical Specifications ======================================================= Ledger Firmware Team -Application version 1.5.0 - 25th of September 2020 +Application version 1.9.16 - 10th of January 2022 ## 1.0 - Initial release @@ -26,6 +26,9 @@ Application version 1.5.0 - 25th of September 2020 ## 1.9.13 - Add SET PLUGIN +## 1.9.16 + - Add PERFORM PRIVACY OPERATION + ## About This application describes the APDU messages interface to communicate with the Ethereum application. @@ -379,6 +382,52 @@ type || version || len(pluginName) || pluginName || address || selector || chain None +### PERFORM PRIVACY OPERATION + +#### Description + +This command performs privacy operations as defined in EIP 1024 (https://ethereum-magicians.org/t/eip-1024-cross-client-encrypt-decrypt/505) + +It can return the public encryption key on Curve25519 for a given Ethereum account or the shared secret (generated by the scalar multiplication of the remote public key by the account private key on Curve25519) used to decrypt private data encrypted for a given Ethereum account + +All data can be optionally checked on the device before being returned. + +#### Coding + +'Command' + +[width="80%"] +|============================================================================================================================== +| *CLA* | *INS* | *P1* | *P2* | *Lc* | *Le* +| E0 | 18 | 00 : return data + + 01 : display data and confirm before returning + | 00 : return the public encryption key + + 01 : return the shared secret | variable | variable +|============================================================================================================================== + +'Input data' + +[width="80%"] +|============================================================================================================================== +| *Description* | *Length* +| Number of BIP 32 derivations to perform (max 10) | 1 +| First derivation index (big endian) | 4 +| ... | 4 +| Last derivation index (big endian) | 4 +| Third party public key on Curve25519, if returning the shared secret | 32 +|============================================================================================================================== + +'Output data' + +[width="80%"] +|============================================================================================================================== +| *Description* | *Length* +| Public encryption key or shared secret | 32 +|============================================================================================================================== + + ### GET APP CONFIGURATION #### Description diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 474b29d..590f561 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -20,6 +20,7 @@ #define INS_SET_EXTERNAL_PLUGIN 0x12 #define INS_PROVIDE_NFT_INFORMATION 0x14 #define INS_SET_PLUGIN 0x16 +#define INS_PERFORM_PRIVACY_OPERATION 0x18 #define P1_CONFIRM 0x01 #define P1_NON_CONFIRM 0x00 #define P2_NO_CHAINCODE 0x00 @@ -114,6 +115,13 @@ void handleSetPlugin(uint8_t p1, unsigned int *flags, unsigned int *tx); +void handlePerformPrivacyOperation(uint8_t p1, + uint8_t p2, + uint8_t *workBuffer, + uint16_t dataLength, + unsigned int *flags, + unsigned int *tx); + #ifdef HAVE_ETH2 void handleGetEth2PublicKey(uint8_t p1, diff --git a/src/main.c b/src/main.c index 2b5c878..fc7217c 100644 --- a/src/main.c +++ b/src/main.c @@ -540,6 +540,15 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { tx); break; + case INS_PERFORM_PRIVACY_OPERATION: + handlePerformPrivacyOperation(G_io_apdu_buffer[OFFSET_P1], + G_io_apdu_buffer[OFFSET_P2], + G_io_apdu_buffer + OFFSET_CDATA, + G_io_apdu_buffer[OFFSET_LC], + flags, + tx); + break; + case INS_SIGN: handleSign(G_io_apdu_buffer[OFFSET_P1], G_io_apdu_buffer[OFFSET_P2], diff --git a/src/ui_callbacks.h b/src/ui_callbacks.h index a1a74cd..2d7ff98 100644 --- a/src/ui_callbacks.h +++ b/src/ui_callbacks.h @@ -17,6 +17,8 @@ unsigned int io_seproxyhal_touch_data_cancel(const bagl_element_t *e); unsigned int io_seproxyhal_touch_signMessage712_v0_ok(const bagl_element_t *e); unsigned int io_seproxyhal_touch_signMessage712_v0_cancel(const bagl_element_t *e); unsigned int io_seproxyhal_touch_eth2_address_ok(const bagl_element_t *e); +unsigned int io_seproxyhal_touch_privacy_ok(const bagl_element_t *e); +unsigned int io_seproxyhal_touch_privacy_cancel(const bagl_element_t *e); void ui_idle(void); void ui_warning_contract_data(void); diff --git a/src/ui_flow.h b/src/ui_flow.h index aadc40d..796e4da 100644 --- a/src/ui_flow.h +++ b/src/ui_flow.h @@ -26,6 +26,10 @@ extern const ux_flow_step_t* const ux_sign_712_v0_flow[]; extern const ux_flow_step_t* const ux_display_public_eth2_flow[]; +extern const ux_flow_step_t* const ux_display_privacy_public_key_flow[]; + +extern const ux_flow_step_t* const ux_display_privacy_shared_secret_flow[]; + #ifdef HAVE_STARKWARE extern const ux_flow_step_t* const ux_display_stark_public_flow[]; diff --git a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c new file mode 100644 index 0000000..1706703 --- /dev/null +++ b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c @@ -0,0 +1,122 @@ +#include "shared_context.h" +#include "apdu_constants.h" + +#include "ui_flow.h" +#include "feature_performPrivacyOperation.h" + +#define P2_PUBLIC_ENCRYPTION_KEY 0x00 +#define P2_SHARED_SECRET 0x01 + +void decodeScalar(const uint8_t *scalarIn, uint8_t *scalarOut) { + uint8_t i; + for (i=0; i<32; i++) { + switch(i) { + case 0: + scalarOut[0] = (scalarIn[31] & 0x7f) | 0x40; + break; + case 31: + scalarOut[31] = scalarIn[0] & 0xf8; + break; + default: + scalarOut[i] = scalarIn[31 - i]; + } + } +} + +void handlePerformPrivacyOperation(uint8_t p1, + uint8_t p2, + uint8_t *dataBuffer, + uint16_t dataLength, + unsigned int *flags, + unsigned int *tx) { + UNUSED(dataLength); + uint8_t privateKeyData[INT256_LENGTH]; + uint8_t privateKeyDataSwapped[INT256_LENGTH]; + uint32_t bip32Path[MAX_BIP32_PATH]; + uint32_t i; + uint8_t bip32PathLength = *(dataBuffer++); + cx_err_t status = CX_OK; + if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { + if (dataLength < 1 + 4 * bip32PathLength) { + THROW(0x6700); + } + } + else + if (p2 == P2_SHARED_SECRET) { + if (dataLength < 1 + 4 * bip32PathLength + 32) { + THROW(0x6700); + } + } + else { + THROW(0x6B00); + } + cx_ecfp_private_key_t privateKey; + if ((bip32PathLength < 0x01) || (bip32PathLength > MAX_BIP32_PATH)) { + PRINTF("Invalid path\n"); + THROW(0x6a80); + } + if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { + THROW(0x6B00); + } + for (i = 0; i < bip32PathLength; i++) { + bip32Path[i] = U4BE(dataBuffer, 0); + dataBuffer += 4; + } + os_perso_derive_node_bip32( + CX_CURVE_256K1, + bip32Path, + bip32PathLength, + privateKeyData, + (tmpCtx.publicKeyContext.getChaincode ? tmpCtx.publicKeyContext.chainCode : NULL)); + cx_ecfp_init_private_key(CX_CURVE_256K1, privateKeyData, 32, &privateKey); + cx_ecfp_generate_pair(CX_CURVE_256K1, &tmpCtx.publicKeyContext.publicKey, &privateKey, 1); + getEthAddressStringFromKey(&tmpCtx.publicKeyContext.publicKey, + tmpCtx.publicKeyContext.address, + &global_sha3, + chainConfig->chainId); + if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { + decodeScalar(privateKeyData, privateKeyDataSwapped); + cx_ecfp_init_private_key(CX_CURVE_Curve25519, privateKeyDataSwapped, 32, &privateKey); + cx_ecfp_generate_pair(CX_CURVE_Curve25519, &tmpCtx.publicKeyContext.publicKey, &privateKey, 1); + explicit_bzero(privateKeyDataSwapped, sizeof(privateKeyDataSwapped)); + } + else { + memmove(tmpCtx.publicKeyContext.publicKey.W + 1, dataBuffer, 32); + status = cx_x25519(tmpCtx.publicKeyContext.publicKey.W + 1, privateKeyData, 32); + } + explicit_bzero(&privateKey, sizeof(privateKey)); + explicit_bzero(privateKeyData, sizeof(privateKeyData)); + + if (status != CX_OK) { + THROW(0x6A80); + } + +#ifndef NO_CONSENT + if (p1 == P1_NON_CONFIRM) +#endif // NO_CONSENT + { + *tx = set_result_perform_privacy_operation(); + THROW(0x9000); + } +#ifndef NO_CONSENT + else { + snprintf(strings.common.fullAddress, + sizeof(strings.common.fullAddress), + "0x%.*s", + 40, + tmpCtx.publicKeyContext.address); + for (i=0; i<32; i++) { + privateKeyData[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; + } + snprintf(strings.common.fullAmount, sizeof(strings.common.fullAmount) - 1, "%.*H", 32, privateKeyData); + if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { + ux_flow_init(0, ux_display_privacy_public_key_flow, NULL); + } + else { + ux_flow_init(0, ux_display_privacy_shared_secret_flow, NULL); + } + + *flags |= IO_ASYNCH_REPLY; + } +#endif // NO_CONSENT +} diff --git a/src_features/performPrivacyOperation/feature_performPrivacyOperation.h b/src_features/performPrivacyOperation/feature_performPrivacyOperation.h new file mode 100644 index 0000000..df80ffd --- /dev/null +++ b/src_features/performPrivacyOperation/feature_performPrivacyOperation.h @@ -0,0 +1,3 @@ +#include "shared_context.h" + +uint32_t set_result_perform_privacy_operation(void); diff --git a/src_features/performPrivacyOperation/logic_performPrivacyOperation.c b/src_features/performPrivacyOperation/logic_performPrivacyOperation.c new file mode 100644 index 0000000..6be9957 --- /dev/null +++ b/src_features/performPrivacyOperation/logic_performPrivacyOperation.c @@ -0,0 +1,10 @@ +#include "shared_context.h" + +uint32_t set_result_perform_privacy_operation() { + uint32_t tx = 0, i; + for (i=0; i<32; i++) { + G_io_apdu_buffer[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; + } + tx = 32; + return tx; +} diff --git a/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c b/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c new file mode 100644 index 0000000..0dcd822 --- /dev/null +++ b/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c @@ -0,0 +1,27 @@ +#include "shared_context.h" +#include "feature_getPublicKey.h" +#include "ui_callbacks.h" + +unsigned int io_seproxyhal_touch_privacy_ok(__attribute__((unused)) const bagl_element_t *e) { + uint32_t tx = set_result_perform_privacy_operation(); + G_io_apdu_buffer[tx++] = 0x90; + G_io_apdu_buffer[tx++] = 0x00; + reset_app_context(); + // Send back the response, do not restart the event loop + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); + // Display back the original UX + ui_idle(); + return 0; // do not redraw the widget +} + +unsigned int io_seproxyhal_touch_privacy_cancel(__attribute__((unused)) const bagl_element_t *e) { + G_io_apdu_buffer[0] = 0x69; + G_io_apdu_buffer[1] = 0x85; + reset_app_context(); + // Send back the response, do not restart the event loop + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); + // Display back the original UX + ui_idle(); + return 0; // do not redraw the widget +} + diff --git a/src_features/performPrivacyOperation/ui_flow_performPrivacyOperation.c b/src_features/performPrivacyOperation/ui_flow_performPrivacyOperation.c new file mode 100644 index 0000000..5c181ef --- /dev/null +++ b/src_features/performPrivacyOperation/ui_flow_performPrivacyOperation.c @@ -0,0 +1,67 @@ +#include "shared_context.h" +#include "ui_callbacks.h" + +// clang-format off +UX_STEP_NOCB( + ux_display_privacy_public_key_flow_1_step, + pnn, + { + &C_icon_eye, + "Provide public", + "privacy key", + }); +UX_STEP_NOCB( + ux_display_privacy_public_key_flow_2_step, + bnnn_paging, + { + .title = "Address", + .text = strings.common.fullAddress, + }); +UX_STEP_NOCB( + ux_display_privacy_public_key_flow_3_step, + bnnn_paging, + { + .title = "Key", + .text = strings.common.fullAmount, + }); +UX_STEP_CB( + ux_display_privacy_public_key_flow_4_step, + pb, + io_seproxyhal_touch_privacy_ok(NULL), + { + &C_icon_validate_14, + "Approve", + }); +UX_STEP_CB( + ux_display_privacy_public_key_flow_5_step, + pb, + io_seproxyhal_touch_privacy_cancel(NULL), + { + &C_icon_crossmark, + "Reject", + }); + +UX_STEP_NOCB( + ux_display_privacy_shared_secret_flow_1_step, + pnn, + { + &C_icon_eye, + "Provide privacy", + "secret key", + }); + +// clang-format on + +UX_FLOW(ux_display_privacy_public_key_flow, + &ux_display_privacy_public_key_flow_1_step, + &ux_display_privacy_public_key_flow_2_step, + &ux_display_privacy_public_key_flow_3_step, + &ux_display_privacy_public_key_flow_4_step, + &ux_display_privacy_public_key_flow_5_step); + +UX_FLOW(ux_display_privacy_shared_secret_flow, + &ux_display_privacy_shared_secret_flow_1_step, + &ux_display_privacy_public_key_flow_2_step, + &ux_display_privacy_public_key_flow_3_step, + &ux_display_privacy_public_key_flow_4_step, + &ux_display_privacy_public_key_flow_5_step); From 375eb1cae1606d07fa0737af2a2b4d09018e4d3b Mon Sep 17 00:00:00 2001 From: BTChip github Date: Sat, 29 Jan 2022 16:16:46 +0100 Subject: [PATCH 80/87] Bump versions after rebase --- Makefile | 2 +- doc/ethapp.asc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 8d6e68c..91a750f 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ APP_LOAD_PARAMS += --path "1517992542'/1101353413'" APPVERSION_M=1 APPVERSION_N=9 -APPVERSION_P=17 +APPVERSION_P=18 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) APP_LOAD_FLAGS= --appFlags 0x240 --dep Ethereum:$(APPVERSION) diff --git a/doc/ethapp.asc b/doc/ethapp.asc index 8931fe6..496ed0e 100644 --- a/doc/ethapp.asc +++ b/doc/ethapp.asc @@ -1,7 +1,7 @@ Ethereum application : Common Technical Specifications ======================================================= Ledger Firmware Team -Application version 1.9.16 - 10th of January 2022 +Application version 1.9.18 - 29th of January 2022 ## 1.0 - Initial release @@ -26,7 +26,7 @@ Application version 1.9.16 - 10th of January 2022 ## 1.9.13 - Add SET PLUGIN -## 1.9.16 +## 1.9.17 - Add PERFORM PRIVACY OPERATION ## About From d04ed9aef174dc22b75b5868d3700c4614255673 Mon Sep 17 00:00:00 2001 From: BTChip github Date: Tue, 22 Mar 2022 08:20:07 +0100 Subject: [PATCH 81/87] Minor changes related to code review --- .../performPrivacyOperation/cmd_performPrivacyOperation.c | 8 +++----- .../logic_performPrivacyOperation.c | 6 ++---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c index 1706703..96ac6ea 100644 --- a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c @@ -8,8 +8,7 @@ #define P2_SHARED_SECRET 0x01 void decodeScalar(const uint8_t *scalarIn, uint8_t *scalarOut) { - uint8_t i; - for (i=0; i<32; i++) { + for (uint8_t i=0; i<32; i++) { switch(i) { case 0: scalarOut[0] = (scalarIn[31] & 0x7f) | 0x40; @@ -33,7 +32,6 @@ void handlePerformPrivacyOperation(uint8_t p1, uint8_t privateKeyData[INT256_LENGTH]; uint8_t privateKeyDataSwapped[INT256_LENGTH]; uint32_t bip32Path[MAX_BIP32_PATH]; - uint32_t i; uint8_t bip32PathLength = *(dataBuffer++); cx_err_t status = CX_OK; if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { @@ -58,7 +56,7 @@ void handlePerformPrivacyOperation(uint8_t p1, if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { THROW(0x6B00); } - for (i = 0; i < bip32PathLength; i++) { + for (uint8_t i = 0; i < bip32PathLength; i++) { bip32Path[i] = U4BE(dataBuffer, 0); dataBuffer += 4; } @@ -105,7 +103,7 @@ void handlePerformPrivacyOperation(uint8_t p1, "0x%.*s", 40, tmpCtx.publicKeyContext.address); - for (i=0; i<32; i++) { + for (uint8_t i=0; i<32; i++) { privateKeyData[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; } snprintf(strings.common.fullAmount, sizeof(strings.common.fullAmount) - 1, "%.*H", 32, privateKeyData); diff --git a/src_features/performPrivacyOperation/logic_performPrivacyOperation.c b/src_features/performPrivacyOperation/logic_performPrivacyOperation.c index 6be9957..86c960e 100644 --- a/src_features/performPrivacyOperation/logic_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/logic_performPrivacyOperation.c @@ -1,10 +1,8 @@ #include "shared_context.h" uint32_t set_result_perform_privacy_operation() { - uint32_t tx = 0, i; - for (i=0; i<32; i++) { + for (uint8_t i=0; i<32; i++) { G_io_apdu_buffer[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; } - tx = 32; - return tx; + return 32; } From 52738e6bf5b95eb0db9a20235b1b1151bd464c0a Mon Sep 17 00:00:00 2001 From: BTChip github Date: Tue, 22 Mar 2022 08:40:36 +0100 Subject: [PATCH 82/87] Make lint happier --- src/apdu_constants.h | 10 ++-- src/main.c | 10 ++-- .../cmd_performPrivacyOperation.c | 56 ++++++++++--------- .../logic_performPrivacyOperation.c | 2 +- .../ui_common_performPrivacyOperation.c | 1 - 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 590f561..9ef49d9 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -116,11 +116,11 @@ void handleSetPlugin(uint8_t p1, unsigned int *tx); void handlePerformPrivacyOperation(uint8_t p1, - uint8_t p2, - uint8_t *workBuffer, - uint16_t dataLength, - unsigned int *flags, - unsigned int *tx); + uint8_t p2, + uint8_t *workBuffer, + uint16_t dataLength, + unsigned int *flags, + unsigned int *tx); #ifdef HAVE_ETH2 diff --git a/src/main.c b/src/main.c index fc7217c..dfb6ae2 100644 --- a/src/main.c +++ b/src/main.c @@ -542,11 +542,11 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { case INS_PERFORM_PRIVACY_OPERATION: handlePerformPrivacyOperation(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); + G_io_apdu_buffer[OFFSET_P2], + G_io_apdu_buffer + OFFSET_CDATA, + G_io_apdu_buffer[OFFSET_LC], + flags, + tx); break; case INS_SIGN: diff --git a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c index 96ac6ea..b396d33 100644 --- a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c @@ -5,11 +5,11 @@ #include "feature_performPrivacyOperation.h" #define P2_PUBLIC_ENCRYPTION_KEY 0x00 -#define P2_SHARED_SECRET 0x01 +#define P2_SHARED_SECRET 0x01 void decodeScalar(const uint8_t *scalarIn, uint8_t *scalarOut) { - for (uint8_t i=0; i<32; i++) { - switch(i) { + for (uint8_t i = 0; i < 32; i++) { + switch (i) { case 0: scalarOut[0] = (scalarIn[31] & 0x7f) | 0x40; break; @@ -18,16 +18,16 @@ void decodeScalar(const uint8_t *scalarIn, uint8_t *scalarOut) { break; default: scalarOut[i] = scalarIn[31 - i]; - } + } } } void handlePerformPrivacyOperation(uint8_t p1, - uint8_t p2, - uint8_t *dataBuffer, - uint16_t dataLength, - unsigned int *flags, - unsigned int *tx) { + uint8_t p2, + uint8_t *dataBuffer, + uint16_t dataLength, + unsigned int *flags, + unsigned int *tx) { UNUSED(dataLength); uint8_t privateKeyData[INT256_LENGTH]; uint8_t privateKeyDataSwapped[INT256_LENGTH]; @@ -38,14 +38,11 @@ void handlePerformPrivacyOperation(uint8_t p1, if (dataLength < 1 + 4 * bip32PathLength) { THROW(0x6700); } - } - else - if (p2 == P2_SHARED_SECRET) { + } else if (p2 == P2_SHARED_SECRET) { if (dataLength < 1 + 4 * bip32PathLength + 32) { THROW(0x6700); - } - } - else { + } + } else { THROW(0x6B00); } cx_ecfp_private_key_t privateKey; @@ -59,7 +56,7 @@ void handlePerformPrivacyOperation(uint8_t p1, for (uint8_t i = 0; i < bip32PathLength; i++) { bip32Path[i] = U4BE(dataBuffer, 0); dataBuffer += 4; - } + } os_perso_derive_node_bip32( CX_CURVE_256K1, bip32Path, @@ -71,19 +68,21 @@ void handlePerformPrivacyOperation(uint8_t p1, getEthAddressStringFromKey(&tmpCtx.publicKeyContext.publicKey, tmpCtx.publicKeyContext.address, &global_sha3, - chainConfig->chainId); + chainConfig->chainId); if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { decodeScalar(privateKeyData, privateKeyDataSwapped); cx_ecfp_init_private_key(CX_CURVE_Curve25519, privateKeyDataSwapped, 32, &privateKey); - cx_ecfp_generate_pair(CX_CURVE_Curve25519, &tmpCtx.publicKeyContext.publicKey, &privateKey, 1); + cx_ecfp_generate_pair(CX_CURVE_Curve25519, + &tmpCtx.publicKeyContext.publicKey, + &privateKey, + 1); explicit_bzero(privateKeyDataSwapped, sizeof(privateKeyDataSwapped)); - } - else { + } else { memmove(tmpCtx.publicKeyContext.publicKey.W + 1, dataBuffer, 32); status = cx_x25519(tmpCtx.publicKeyContext.publicKey.W + 1, privateKeyData, 32); } explicit_bzero(&privateKey, sizeof(privateKey)); - explicit_bzero(privateKeyData, sizeof(privateKeyData)); + explicit_bzero(privateKeyData, sizeof(privateKeyData)); if (status != CX_OK) { THROW(0x6A80); @@ -97,24 +96,27 @@ void handlePerformPrivacyOperation(uint8_t p1, THROW(0x9000); } #ifndef NO_CONSENT - else { + else { snprintf(strings.common.fullAddress, sizeof(strings.common.fullAddress), "0x%.*s", 40, tmpCtx.publicKeyContext.address); - for (uint8_t i=0; i<32; i++) { + for (uint8_t i = 0; i < 32; i++) { privateKeyData[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; } - snprintf(strings.common.fullAmount, sizeof(strings.common.fullAmount) - 1, "%.*H", 32, privateKeyData); + snprintf(strings.common.fullAmount, + sizeof(strings.common.fullAmount) - 1, + "%.*H", + 32, + privateKeyData); if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { ux_flow_init(0, ux_display_privacy_public_key_flow, NULL); - } - else { + } else { ux_flow_init(0, ux_display_privacy_shared_secret_flow, NULL); } - *flags |= IO_ASYNCH_REPLY; + *flags |= IO_ASYNCH_REPLY; } #endif // NO_CONSENT } diff --git a/src_features/performPrivacyOperation/logic_performPrivacyOperation.c b/src_features/performPrivacyOperation/logic_performPrivacyOperation.c index 86c960e..1042ac0 100644 --- a/src_features/performPrivacyOperation/logic_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/logic_performPrivacyOperation.c @@ -1,7 +1,7 @@ #include "shared_context.h" uint32_t set_result_perform_privacy_operation() { - for (uint8_t i=0; i<32; i++) { + for (uint8_t i = 0; i < 32; i++) { G_io_apdu_buffer[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; } return 32; diff --git a/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c b/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c index 0dcd822..6cc7182 100644 --- a/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c @@ -24,4 +24,3 @@ unsigned int io_seproxyhal_touch_privacy_cancel(__attribute__((unused)) const ba ui_idle(); return 0; // do not redraw the widget } - From 6b24a045ce2762369c21477725eb0cf4dc74a18a Mon Sep 17 00:00:00 2001 From: tjulien-ledger <84443769+tjulien-ledger@users.noreply.github.com> Date: Wed, 13 Apr 2022 15:37:30 +0200 Subject: [PATCH 83/87] Multiple ETH PRs (#289) * adding Conflux espace * adding Moonbeam * kardiachain and bttc * adding Wethio --- icons/nanos_app_bttc.gif | Bin 0 -> 76 bytes icons/nanos_app_conflux_espace.gif | Bin 0 -> 1135 bytes icons/nanos_app_kardiachain.gif | Bin 0 -> 3174 bytes icons/nanos_app_moonbeam.gif | Bin 0 -> 66 bytes icons/nanos_app_wethio.gif | Bin 0 -> 1212 bytes icons/nanox_app_bttc.gif | Bin 0 -> 71 bytes icons/nanox_app_conflux_espace.gif | Bin 0 -> 1122 bytes icons/nanox_app_kardiachain.gif | Bin 0 -> 3172 bytes icons/nanox_app_moonbeam.gif | Bin 0 -> 63 bytes icons/nanox_app_wethio.gif | Bin 0 -> 1200 bytes makefile_conf/chain/bttc.mk | 3 +++ makefile_conf/chain/conflux_espace.mk | 3 +++ makefile_conf/chain/kardiachain.mk | 3 +++ makefile_conf/chain/moonbeam.mk | 3 +++ makefile_conf/chain/wethio.mk | 3 +++ src/chainConfig.h | 7 +++++- src/main.c | 30 ++++++++++++++++++++++++++ src/tokens.c | 10 +++++++++ src/tokens.h | 10 +++++++++ 19 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 icons/nanos_app_bttc.gif create mode 100644 icons/nanos_app_conflux_espace.gif create mode 100644 icons/nanos_app_kardiachain.gif create mode 100644 icons/nanos_app_moonbeam.gif create mode 100644 icons/nanos_app_wethio.gif create mode 100644 icons/nanox_app_bttc.gif create mode 100644 icons/nanox_app_conflux_espace.gif create mode 100644 icons/nanox_app_kardiachain.gif create mode 100644 icons/nanox_app_moonbeam.gif create mode 100644 icons/nanox_app_wethio.gif create mode 100644 makefile_conf/chain/bttc.mk create mode 100644 makefile_conf/chain/conflux_espace.mk create mode 100644 makefile_conf/chain/kardiachain.mk create mode 100644 makefile_conf/chain/moonbeam.mk create mode 100644 makefile_conf/chain/wethio.mk diff --git a/icons/nanos_app_bttc.gif b/icons/nanos_app_bttc.gif new file mode 100644 index 0000000000000000000000000000000000000000..475509535ba195e6d84ea9750386c5294f72a43c GIT binary patch literal 76 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi`Br+?+?w+wR|HwG#=U!C#ww(8X# XH4Dw>s=C>}*;cg5=+L5-Vhq**B%>Ls literal 0 HcmV?d00001 diff --git a/icons/nanos_app_conflux_espace.gif b/icons/nanos_app_conflux_espace.gif new file mode 100644 index 0000000000000000000000000000000000000000..02e79313141d7ade1247b0ec523542ea288a0d76 GIT binary patch literal 1135 zcmZ?wbhEHb6krfwXkY+=|Ns9h{^ySH4N!1NEJ*~?Hue<-iOJciB??KY>6v-9O7C~? zS5nAKu~iB;^)>Jhm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83mzLNn z0UZnRMQ#Dy*t}vru#fbT^KIbD3=a&{GrvjBLgRCmBaxO|uEXgkl$VOA1WZ66COq*1Iq>A4ng>ktMZm<(`2XMEKfizd{PF$U z*Ds$xef;qL-P<>>U%h}$>=IY|?mo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH&FX#K^#) z_>%=(Sm=OAP}#x2q|(#B^7LE=W|mJEqSh~rI=w?tTsv4q}24xJX`hmyZ5UrWTx1vhnxBu_!c;)W@LI) z6{QAO`Gq7`WhYyvsN36d*;H6n?69D>BnU^7C^P42|>*&D4R06s4qD1-ZCEjR5j&)iX*;3as??%gf94%8m8% zi_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN*$CU7Z$&2ULAPAn4M}uoLxJU{Ck`#}ouF>EkDFjGTJes;j zgNvjPAW88sN?nL{ZE7B{F%#K*@}C@U!{ z$jiyfNJ~jdh>MAe2nz`c@bmHVaC32Tu(PqUFf#!=2|A$80jS5oz@*yKzw-260fwHS jt6tA13K!+n1hTcMrYA}@cbyMiHbwZ_m)_^@j11NQgf~t( literal 0 HcmV?d00001 diff --git a/icons/nanos_app_moonbeam.gif b/icons/nanos_app_moonbeam.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a254b24bd27e10c3691f3c7dcbd18d23c2bf93c GIT binary patch literal 66 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi`4r+?+?w+wR|zg*n4Zdy?CJ;p}% MqVUdTzKjgk05yFR#Q*>R literal 0 HcmV?d00001 diff --git a/icons/nanos_app_wethio.gif b/icons/nanos_app_wethio.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6765600b5fb4ce9b51e0a2155310bcfeb7e0293 GIT binary patch literal 1212 zcmZ?wbhEHb6krfwXkcJ?{ra_mfq~+G?g-xi1((Eh+i z#(Mch>H3D2mX`VkM*2oZxf(^ff>iyW z)Z+ZoqU2Pda%GriVA$ce2&53`8Y};zOkkuW=D6f1m*%GCm3X??DgkBmQZiGlER!tF zEle#8bd62ZjC3tbOw4sH%q=W+lP!!BEiF@05)+M+Vdh}d?`mXf>S*TX;%shWXlUr_ zXlZF~>FR1^>}uiYWZ-IP0@Lf6S6q^qmz)Z-I}>O(RIf8$y;jaesfi`|MIrh5Ij~d^ zkda@KU!0L&pkQREXQZGJo|%`DUtX*UiX(`ZT~doO%TiO^it=+6z=3R)iNyh?rp75| z<|fIyK#!*C8XK4->RMVPrRXME8k;1UrI{vLBw8pz^{0>4Q=VQp$k|0h1$$ z3C{;W4m>BN<^i)$5ip-H{{Q#)&+lJ9e|-P;^~>i^A3wZ*_x8=}S1(^YfA;jr<3|r4 z+`o7C&h1+_Z(P52^~&W-7cZPYclONbQzuUxKX&xU;X?-x?BBO{&+c72cWmFbb<5^W z8#k<9w|33yRV!C4U$%6~;zbJ=%%3-R&g@w;XH1_qb;{&P6DRcd_4agkb#}D3wYD@j zH8#}O)z(y3RaTUjm6jA26&B>@<>q8(WoD$OrKTh&B__nj#l}QOMMi{&g@yzN1qS&0 z`TBT!d3w0Jxw<$zIXc+e+1glJSz4HznVJ|I85-#8>FQ`}X=X%Qf#{U(l;t%soaUJs?xCmxz1<$L>R0A&Zw*4 literal 0 HcmV?d00001 diff --git a/icons/nanox_app_bttc.gif b/icons/nanox_app_bttc.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b0b8d4d8acade89dfbb2926c02ba68de6937b9d GIT binary patch literal 71 zcmZ?wbhEHb literal 0 HcmV?d00001 diff --git a/icons/nanox_app_conflux_espace.gif b/icons/nanox_app_conflux_espace.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b74623ee851cc15b3301f0220e9956f7fe2f52b GIT binary patch literal 1122 zcmZ?wbhEHbTBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFlEiTau_y zk(-lOY*k^al$esAlxhWJ=cbk<>MJRLRg`4gDmj8A6e4^B6rA&mQWebg40V$Y3=9;^ zE%j1U5{;6K(-M<)6pRdv4D}6x$XwUZ+{(z<%Ft2)0+fK(6{VzE1-ZCEZ3FUbl`=|7 z3as??%ggo3jrH=2()A53EiLs8jP#9+bb$(Vi!1Yh9@Nb%R)!hil3JWxlvz-cnV+Ws zGB7bIzqI7PtrF0!5KrV5z>Uo-)&qM;FF8L~zap_f-%!s0^k2 zg-mftP%6T;SQQtCR2HP_2c;J0mlh?b0+lO+EGn>aE=o--$uA1Y&(DE{Vn9ZINq%ug zeu09Kv7VuVhHqkWW*$gHQwgZU*VoE3uec;JFFDoI#TF!@mzkMjWo%^bXy#^YVQg$> zXz1!}>11T?=3-`UWa?(*Xz|~|2y7cruSMv>2~=+iT&sZzcD+EYprin{IJGFV zEH%ZgC_h&L>}9J=oGvji#9^EgRBH;VL-debVuY#{>ItAj^notX2gNE@{ z(ZdJ#@7=v~`_|1H*RNi=eCgta^XJZZ;0$^0LyB;-bQW{Jh+p?5xa;^t9BJ|cQ;oTXD3GodplbjYb#3&b2C#DVqwaWPR5VIe^Qem-6vZZ1wv4t6$H7G@?!1_m8a=>RG+7?>1#`d3On_l^mD=Epg zRR_Dp%F4AOGc6=PKS#mPNYBtr9cV~VN}5%WiyPDkAkS7kqokz3N?*Ucyj-u`STDaQ zUEk2s(o)~RNZ-gv7pOwFxH7LKu|hYmSQ%&nmjc)fm(=3qqRfJl%=|nBkeP`|`K2Yc z>grqyP@_vS(-3Co73+bWs+XLfs}GXVH`FuG2b!j!U<2Y>`4?rT0xbawR)Qi1 zv{fHu4U)A$&wz!1z5y}ep#w6M_F&W!lEQd2xJHAEq!1uU@o4HA4K9*GfF#AEscSU2 zND2Xx6c3}+g=p8N<^dbC<-k@e-^T+pZU%!0*^zp;{cW>Xke)aOj^Jh<= zJbv`>!To!8@7%t1^TzdSSFc>Ybn(LZb7#+-K6UcM@nc7i96ogL!2W%E_w3%abI0~= zTeoc9v~k1wb!*qGUbS+?@?}exEMBy5!Tfo1=ggipbH?;(Q>RRxG;umQ)5GYU2RQuRb@qaS!qdeQDH%TUT#iyR%S+eT53viQer}UTx?8qRAfYWSZGLa zP+)++pRbR%m#2rjo2!enlcR&Zovn?vm8FHbnW>4fk)eUUp019zmZpZfnyQMjlA?mV zoUDwrl%#~Xn5c-bke~oRA1@C#7bgch8!HPl6R?+{1L_@sx(p0VN-g~>s~I24xfGwO e=xvVqel{^Sxl(XhjdJKz&(j%2KG)qC8LR;V-AvB_ literal 0 HcmV?d00001 diff --git a/icons/nanox_app_moonbeam.gif b/icons/nanox_app_moonbeam.gif new file mode 100644 index 0000000000000000000000000000000000000000..0da2ed11b8cf475c072bef34c0dbb1de9c486924 GIT binary patch literal 63 zcmZ?wbhEHb5fI0flIR#Lt9p;sw&qHvhc4eHX7~cTu5i3@AP>(MA4Bt7Wwwy zJYgUzMxErD=!bybq@(v)&<@&@8i7tI!!%SSuSl{eGbAq-I8qh_iIgQ-A$6GtieUi2 z>-97ngQqxAj7QVSgd|j0mQBSKMN(2JE+xmuF)2l;W7};%0JaY6)Fz^?VG{@<gC= zA5b;nK@d1z&T)F{4bV|^0>>{pF3zzOhmYP&-V_f9=&*UViDt7lxi+`P{S5JiX$nC!cuyu}7Cbvh3l99$dQQ zfyMXVx9Hw`?!N2JJ8r-2)?04A>Bbwbzi#2R*Ia$ol~*jd{IW~uUvlw97hZ7wyt(Ji zIrp5i&ze2!%rj=5K6u)xr<^?Fq!Uj#eqegJ)ZZ8Q-f^yDTfIHUn#Jw{H1s?;=IEo2 zoHn)Vh$)?iAC}8a&K}w^X=3J(gAZz-Fg~41CdS1NY-`nGV^u|#qN2caEJIUd%K`h3 z8NJ`W`|KSdn(@6x?YYP9yY0Hm&O7bcw8Qq>Z9B4Yo2^G|wdEF@Z?@_1O&W$_SW9@( ugtrgY5E-0fE?>1G7vonhX;|C^S8Jmd&7C^fKW+X3a-lje(j{auZ0w&2cBqm7 literal 0 HcmV?d00001 diff --git a/makefile_conf/chain/bttc.mk b/makefile_conf/chain/bttc.mk new file mode 100644 index 0000000..af96c73 --- /dev/null +++ b/makefile_conf/chain/bttc.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"BTTC\" CHAINID_COINNAME=\"BTT\" CHAIN_KIND=CHAIN_KIND_BTTC CHAIN_ID=199 +APPNAME = "BTTC" \ No newline at end of file diff --git a/makefile_conf/chain/conflux_espace.mk b/makefile_conf/chain/conflux_espace.mk new file mode 100644 index 0000000..ba67289 --- /dev/null +++ b/makefile_conf/chain/conflux_espace.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"CONFLUX\" CHAINID_COINNAME=\"CFX\" CHAIN_KIND=CHAIN_KIND_CONFLUX_ESPACE CHAIN_ID=1030 +APPNAME = "Conflux eSpace" \ No newline at end of file diff --git a/makefile_conf/chain/kardiachain.mk b/makefile_conf/chain/kardiachain.mk new file mode 100644 index 0000000..bff1af8 --- /dev/null +++ b/makefile_conf/chain/kardiachain.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" +DEFINES += CHAINID_UPCASE=\"KARDIACHAIN\" CHAINID_COINNAME=\"KAI\" CHAIN_KIND=CHAIN_KIND_KARDIACHAIN CHAIN_ID=24 +APPNAME = "KardiaChain" \ No newline at end of file diff --git a/makefile_conf/chain/moonbeam.mk b/makefile_conf/chain/moonbeam.mk new file mode 100644 index 0000000..c243367 --- /dev/null +++ b/makefile_conf/chain/moonbeam.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/60'" --path "44'/1284'" +DEFINES += CHAINID_UPCASE=\"MOONBEAM\" CHAINID_COINNAME=\"GLMR\" CHAIN_KIND=CHAIN_KIND_MOONBEAM CHAIN_ID=1284 +APPNAME = "Moonbeam" \ No newline at end of file diff --git a/makefile_conf/chain/wethio.mk b/makefile_conf/chain/wethio.mk new file mode 100644 index 0000000..06fe6f9 --- /dev/null +++ b/makefile_conf/chain/wethio.mk @@ -0,0 +1,3 @@ +APP_LOAD_PARAMS += --path "44'/77777'" +DEFINES += CHAINID_UPCASE=\"WETHIO\" CHAINID_COINNAME=\"ZYN\" CHAIN_KIND=CHAIN_KIND_WETHIO CHAIN_ID=78 +APPNAME = "Wethio" \ No newline at end of file diff --git a/src/chainConfig.h b/src/chainConfig.h index 0fe3834..91aabe0 100644 --- a/src/chainConfig.h +++ b/src/chainConfig.h @@ -58,7 +58,12 @@ typedef enum chain_kind_e { CHAIN_KIND_BSC, CHAIN_KIND_SONGBIRD, CHAIN_KIND_POLYGON, - CHAIN_KIND_SHYFT + CHAIN_KIND_SHYFT, + CHAIN_KIND_CONFLUX_ESPACE, + CHAIN_KIND_MOONBEAM, + CHAIN_KIND_BTTC, + CHAIN_KIND_KARDIACHAIN, + CHAIN_KIND_WETHIO } chain_kind_t; typedef struct chain_config_s { diff --git a/src/main.c b/src/main.c index dfb6ae2..0cd2025 100644 --- a/src/main.c +++ b/src/main.c @@ -269,6 +269,21 @@ extraInfo_t *getKnownToken(uint8_t *contractAddress) { case CHAIN_KIND_SHYFT: numTokens = NUM_TOKENS_SHYFT; break; + case CHAIN_KIND_CONFLUX_ESPACE: + numTokens = NUM_TOKENS_CONFLUX_ESPACE; + break; + case CHAIN_KIND_MOONBEAM: + numTokens = NUM_TOKENS_MOONBEAM; + break; + case CHAIN_KIND_KARDIACHAIN: + numTokens = NUM_TOKENS_KARDIACHAIN; + break; + case CHAIN_KIND_BTTC: + numTokens = NUM_TOKENS_BTTC; + break; + case CHAIN_KIND_WETHIO: + numTokens = NUM_TOKENS_WETHIO; + break; } for (i = 0; i < numTokens; i++) { switch (chainConfig->kind) { @@ -380,6 +395,21 @@ extraInfo_t *getKnownToken(uint8_t *contractAddress) { case CHAIN_KIND_SHYFT: currentToken = (tokenDefinition_t *) PIC(&TOKENS_SHYFT[i]); break; + case CHAIN_KIND_CONFLUX_ESPACE: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_CONFLUX_ESPACE[i]); + break; + case CHAIN_KIND_MOONBEAM: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_MOONBEAM[i]); + break; + case CHAIN_KIND_BTTC: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_BTTC[i]); + break; + case CHAIN_KIND_KARDIACHAIN: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_KARDIACHAIN[i]); + break; + case CHAIN_KIND_WETHIO: + currentToken = (tokenDefinition_t *) PIC(&TOKENS_WETHIO[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 e1ddb5f..0347ec4 100644 --- a/src/tokens.c +++ b/src/tokens.c @@ -194,4 +194,14 @@ const tokenDefinition_t const TOKENS_POLYGON[NUM_TOKENS_POLYGON] = {}; const tokenDefinition_t const TOKENS_SHYFT[NUM_TOKENS_SHYFT] = {}; +const tokenDefinition_t const TOKENS_CONFLUX_ESPACE[NUM_TOKENS_CONFLUX_ESPACE] = {}; + +const tokenDefinition_t const TOKENS_MOONBEAM[NUM_TOKENS_MOONBEAM] = {}; + +const tokenDefinition_t const TOKENS_BTTC[NUM_TOKENS_BTTC] = {}; + +const tokenDefinition_t const TOKENS_KARDIACHAIN[NUM_TOKENS_KARDIACHAIN] = {}; + +const tokenDefinition_t const TOKENS_WETHIO[NUM_TOKENS_WETHIO] = {}; + #endif diff --git a/src/tokens.h b/src/tokens.h index ea69628..eb4a14e 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -101,6 +101,11 @@ static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { #define NUM_TOKENS_MOONRIVER 0 #define NUM_TOKENS_POLYGON 0 #define NUM_TOKENS_SHYFT 0 +#define NUM_TOKENS_CONFLUX_ESPACE 0 +#define NUM_TOKENS_MOONBEAM 0 +#define NUM_TOKENS_BTTC 0 +#define NUM_TOKENS_KARDIACHAIN 0 +#define NUM_TOKENS_WETHIO 0 extern tokenDefinition_t const TOKENS_AKROMA[NUM_TOKENS_AKROMA]; extern tokenDefinition_t const TOKENS_ELLAISM[NUM_TOKENS_ELLAISM]; @@ -138,6 +143,11 @@ extern tokenDefinition_t const TOKENS_SONGBIRD[NUM_TOKENS_SONGBIRD]; extern tokenDefinition_t const TOKENS_MOONRIVER[NUM_TOKENS_MOONRIVER]; extern tokenDefinition_t const TOKENS_POLYGON[NUM_TOKENS_POLYGON]; extern tokenDefinition_t const TOKENS_SHYFT[NUM_TOKENS_SHYFT]; +extern tokenDefinition_t const TOKENS_CONFLUX_ESPACE[NUM_TOKENS_CONFLUX_ESPACE]; +extern tokenDefinition_t const TOKENS_MOONBEAM[NUM_TOKENS_MOONBEAM]; +extern tokenDefinition_t const TOKENS_BTTC[NUM_TOKENS_BTTC]; +extern tokenDefinition_t const TOKENS_KARDIACHAIN[NUM_TOKENS_KARDIACHAIN]; +extern tokenDefinition_t const TOKENS_WETHIO[NUM_TOKENS_WETHIO]; #endif /* HAVE_TOKENS_LIST */ From 286994baaf19d45bfedb549977c585f19ad70470 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 13 Apr 2022 14:18:50 +0200 Subject: [PATCH 84/87] Update GH action to use clang-format-12 --- .github/workflows/lint-workflow.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint-workflow.yml b/.github/workflows/lint-workflow.yml index 8a349d1..b9ea676 100644 --- a/.github/workflows/lint-workflow.yml +++ b/.github/workflows/lint-workflow.yml @@ -19,8 +19,8 @@ jobs: uses: actions/checkout@v2 - name: Lint - uses: DoozyX/clang-format-lint-action@v0.11 + uses: DoozyX/clang-format-lint-action@v0.13 with: source: "./" extensions: "h,c" - clangFormatVersion: 10 + clangFormatVersion: 12.0.0 From 78d159761dffe8d3a44eb43f41a9eac6fb95eaf5 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 13 Apr 2022 14:20:20 +0200 Subject: [PATCH 85/87] Linting pass following the clang-format update --- src/eth_plugin_handler.c | 2 +- src_features/stark_sign/cmd_stark_sign.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index 8058c11..f1944ef 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -111,7 +111,7 @@ static bool eth_plugin_perform_init_old_internal(uint8_t *contractAddress, j++) { if (memcmp(init->selector, (const void *) PIC(selectors[j]), SELECTOR_SIZE) == 0) { if ((INTERNAL_ETH_PLUGINS[i].availableCheck == NULL) || - ((PluginAvailableCheck) PIC(INTERNAL_ETH_PLUGINS[i].availableCheck))()) { + ((PluginAvailableCheck) PIC(INTERNAL_ETH_PLUGINS[i].availableCheck)) ()) { strlcpy(dataContext.tokenContext.pluginName, INTERNAL_ETH_PLUGINS[i].alias, PLUGIN_ID_LENGTH); diff --git a/src_features/stark_sign/cmd_stark_sign.c b/src_features/stark_sign/cmd_stark_sign.c index 58ca944..12f7da7 100644 --- a/src_features/stark_sign/cmd_stark_sign.c +++ b/src_features/stark_sign/cmd_stark_sign.c @@ -140,11 +140,11 @@ void handleStarkwareSignMessage(uint8_t p1, poorstream_init(&bitstream, dataContext.starkContext.w3); poorstream_write_bits(&bitstream, 0, 11); // padding - poorstream_write_bits( - &bitstream, - (p1 == P1_STARK_CONDITIONAL_TRANSFER ? STARK_CONDITIONAL_TRANSFER_TYPE - : order ? STARK_ORDER_TYPE : STARK_TRANSFER_TYPE), - 4); + poorstream_write_bits(&bitstream, + (p1 == P1_STARK_CONDITIONAL_TRANSFER ? STARK_CONDITIONAL_TRANSFER_TYPE + : order ? STARK_ORDER_TYPE + : STARK_TRANSFER_TYPE), + 4); poorstream_write_bits(&bitstream, U4BE(dataBuffer, offset), 31); poorstream_write_bits(&bitstream, U4BE(dataBuffer, offset + 4), 31); poorstream_write_bits(&bitstream, U8BE(dataBuffer, offset + 4 + 4), 63); From 8d448cbff308f82a662ad3d346a4641db5964439 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Apr 2022 16:01:19 +0000 Subject: [PATCH 86/87] Bump ansi-regex from 4.1.0 to 4.1.1 in /tests Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/chalk/ansi-regex/releases) - [Commits](https://github.com/chalk/ansi-regex/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: ansi-regex dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index 47070ec..238895c 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -2341,9 +2341,9 @@ ansi-escapes@^4.2.1: type-fest "^0.21.3" ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.0: version "5.0.0" From b96140247ef253fc099a8ccbbe6ebbc9468ebe08 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 27 Apr 2022 10:14:53 +0200 Subject: [PATCH 87/87] Update changelog --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b72ae0..d01c246 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,28 @@ 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.18](https://github.com/ledgerhq/app-ethereum/compare/1.9.17...1.9.18) - 2022-04-25 + +### Added + +- Easier way of adding a chain into the Makefile +- EIP 1024 support +- Conflux chain +- Moonbeam chain +- KardiaChain +- BitTorrent Chain +- Wethio chain + +### Changed + +- More uniform naming between the ERC-721 & ERC-1155 screens + +### Fixed + +- CI (mostly Zemu tests) +- App crashing when trying to approve an NFT transaction without having received the NFT information beforehand +- App refusing to approve an NFT transaction with a long collection name + ## [1.9.17](https://github.com/ledgerhq/app-ethereum/compare/1.9.16...1.9.17) - 2022-01-14 ### Added