diff --git a/.github/workflows/build-workflow.yml b/.github/workflows/build-workflow.yml new file mode 100644 index 0000000..0c9ef5f --- /dev/null +++ b/.github/workflows/build-workflow.yml @@ -0,0 +1,56 @@ +name: Compilation + +on: + workflow_dispatch: + push: + branches: + - master + pull_request: + branches: + - master + - develop + +jobs: + nano_debug_build: + name: Build debug application for NanoS, X and S+ + strategy: + matrix: + include: + - SDK: "$NANOS_SDK" + artifact: nanos + - SDK: "$NANOX_SDK" + artifact: nanox + - SDK: "$NANOSP_SDK" + artifact: nanosp + runs-on: ubuntu-latest + container: + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + + steps: + - name: Clone + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build an altcoin + run: | + make BOLOS_SDK=${{ matrix.SDK }} DEBUG=1 ALLOW_DATA=1 CHAIN=ethereum_classic + mv bin/app.elf ethereum_classic_${{ matrix.artifact }}.elf + + - name: Upload altcoin binary + uses: actions/upload-artifact@v2 + with: + name: ethereum_classic_${{ matrix.artifact }} + path: ./ethereum_classic_${{ matrix.artifact }}.elf + + - name: Build Ethereum + run: | + make clean + make BOLOS_SDK=${{ matrix.SDK }} DEBUG=1 ALLOW_DATA=1 + mv bin/app.elf ethereum_${{ matrix.artifact }}.elf + + - name: Upload app binary + uses: actions/upload-artifact@v2 + with: + name: ethereum_${{ matrix.artifact }} + path: ./ethereum_${{ matrix.artifact }}.elf \ No newline at end of file diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index e0b419b..85efce8 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -1,4 +1,4 @@ -name: Compilation & tests +name: Tests on: workflow_dispatch: @@ -11,79 +11,6 @@ on: - develop jobs: - job_build_debug_nano_s: - name: Build debug Nano S - runs-on: ubuntu-latest - - container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest - - steps: - - name: Clone - uses: actions/checkout@v2 - with: - submodules: recursive - - - name: Build an altcoin - run: | - make DEBUG=1 ALLOW_DATA=1 CHAIN=ethereum_classic - mv bin/app.elf ethereum_classic_nanos.elf - - - name: Upload altcoin binary - uses: actions/upload-artifact@v2 - with: - name: ethereum_classic_nanos - path: ./ethereum_classic_nanos.elf - - - name: Build Ethereum - run: | - make clean - make DEBUG=1 ALLOW_DATA=1 - mv bin/app.elf ethereum_nanos.elf - - - name: Upload app binary - uses: actions/upload-artifact@v2 - with: - name: ethereum_nanos - path: ./ethereum_nanos.elf - - job_build_debug_nano_x: - name: Build debug Nano X - runs-on: ubuntu-latest - - container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest - - steps: - - name: Clone - uses: actions/checkout@v2 - with: - submodules: recursive - - - name: Build an altcoin Nano X - run: | - make clean - make BOLOS_SDK=$NANOX_SDK DEBUG=1 ALLOW_DATA=1 CHAIN=ethereum_classic - mv bin/app.elf ethereum_classic_nanox.elf - - - name: Upload altcoin binary - uses: actions/upload-artifact@v2 - with: - name: ethereum_classic_nanox - path: ./ethereum_classic_nanox.elf - - - name: Build Ethereum Nano X - run: | - make clean - make BOLOS_SDK=$NANOX_SDK DEBUG=1 ALLOW_DATA=1 - mv bin/app.elf ethereum_nanox.elf - - - name: Upload app binary - uses: actions/upload-artifact@v2 - with: - name: ethereum_nanox - path: ./ethereum_nanox.elf - scan-build: name: Clang Static Analyzer runs-on: ubuntu-latest @@ -104,8 +31,12 @@ jobs: name: scan-build path: scan-build - building_for_e2e_tests: - name: Building binaries for E2E tests +# ===================================================== +# ZEMU TESTS +# ===================================================== + + building_for_e2e_zemu_tests: + name: Building binaries for E2E Zemu tests runs-on: ubuntu-latest container: image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest @@ -116,17 +47,17 @@ jobs: - name: Build testing binaries run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" - cd tests && ./build_local_test_elfs.sh + cd tests/zemu/ && ./build_local_test_elfs.sh - name: Upload app binaries uses: actions/upload-artifact@v2 with: name: e2e_elfs - path: ./tests/elfs/ + path: ./tests/zemu/elfs/ - jobs-e2e-tests: - name: E2E tests - needs: [building_for_e2e_tests] + jobs-e2e-zemu-tests: + name: E2E Zemu tests + needs: [building_for_e2e_zemu_tests] runs-on: ubuntu-latest steps: - name: Test @@ -148,10 +79,10 @@ jobs: run: npm install -g yarn - name: Build/Install build js deps - run: cd tests && yarn install + run: cd tests/zemu/ && yarn install - name: Create tmp folder for artifacts - run: mkdir tests/elfs + run: mkdir tests/zemu/elfs - name: Download app binaries uses: actions/download-artifact@v2 @@ -159,7 +90,70 @@ jobs: path: tmp/ - name: Gather elfs - run: cp `find tmp/e2e_elfs/ -name "*.elf"` tests/elfs/ + run: cp `find tmp/e2e_elfs/ -name "*.elf"` tests/zemu/elfs/ - name: Run zemu tests - run: cd tests && yarn test + run: cd tests/zemu/ && yarn test + +# ===================================================== +# SPECULOS TESTS +# ===================================================== + + + building_for_e2e_speculos_tests: + name: Building binaries for E2E Speculos 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: | + mkdir tests/speculos/elfs + make clean && make DEBUG=1 NFT_TESTING_KEY=1 BOLOS_SDK=$NANOS_SDK && mv bin/app.elf tests/speculos/elfs/nanos.elf + make clean && make DEBUG=1 NFT_TESTING_KEY=1 BOLOS_SDK=$NANOX_SDK && mv bin/app.elf tests/speculos/elfs/nanox.elf + make clean && make DEBUG=1 NFT_TESTING_KEY=1 BOLOS_SDK=$NANOSP_SDK && mv bin/app.elf tests/speculos/elfs/nanosp.elf + + - name: Upload app binaries + uses: actions/upload-artifact@v2 + with: + name: e2e_elfs + path: ./tests/speculos/elfs + + + jobs-e2e-speculos-tests: + name: Speculos tests + strategy: + matrix: + model: ["nanosp", "nanos", "nanox"] + + needs: [building_for_e2e_speculos_tests] + runs-on: ubuntu-latest + + steps: + - name: Clone + uses: actions/checkout@v2 + + - name: Create tmp folder for artifacts + run: mkdir tests/speculos/elfs + + - name: Download app binaries + uses: actions/download-artifact@v2 + with: + path: tmp/ + + - name: Gather elfs + run: cp `find tmp/e2e_elfs/ -name "*.elf"` tests/speculos/elfs/ + + - name: Install dependencies + run: | + cd tests/speculos + sudo apt-get update && sudo apt-get install -y qemu-user-static + pip install --extra-index-url https://test.pypi.org/simple/ -r requirements.txt + + - name: Run speculos tests + run: | + cd tests/speculos + pytest --model ${{ matrix.model }} --path ./elfs/${{ matrix.model }}.elf --display headless \ No newline at end of file diff --git a/.gitignore b/.gitignore index 16c938c..9443644 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ tests/elfs/* tests/snapshots-tmp .vscode +.idea \ No newline at end of file diff --git a/Makefile b/Makefile index 0fb0289..05646f3 100644 --- a/Makefile +++ b/Makefile @@ -222,13 +222,16 @@ delete: python3 -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) install_tests: - cd tests && (yarn install || sudo yarn install) + cd tests/zemu/ && (yarn install || sudo yarn install) run_tests: - cd tests && (yarn test || sudo yarn test) + cd tests/zemu/ && (yarn test || sudo yarn test) test: install_tests run_tests +unit-test: + make -C tests/unit + # import generic rules from the sdk include $(BOLOS_SDK)/Makefile.rules diff --git a/doc/ethapp.asc b/doc/ethapp.asc index 496ed0e..839e70b 100644 --- a/doc/ethapp.asc +++ b/doc/ethapp.asc @@ -94,6 +94,8 @@ The address can be optionally checked on the device before being returned. #### Description +https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md + This command signs an Ethereum transaction after having the user validate the following parameters - Gas price diff --git a/tests/speculos/.gitignore b/tests/speculos/.gitignore new file mode 100644 index 0000000..94026aa --- /dev/null +++ b/tests/speculos/.gitignore @@ -0,0 +1,25 @@ +__pycache__/ +*.py[cod] +*$py.class + + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# generated by pip +pip-wheel-metadata/ + +# pytest debug logs generated via --debug +pytestdebug.log +.cache +.pytest_cache +.mypy_cache +.coverage +.coverage.* +coverage.xml \ No newline at end of file diff --git a/tests/speculos/README.md b/tests/speculos/README.md new file mode 100644 index 0000000..c3bb346 --- /dev/null +++ b/tests/speculos/README.md @@ -0,0 +1,50 @@ +# Speculos functional tests + +These tests are implemented in Python with the `SpeculosClient` interface which allows easy execution on the [Speculos](https://github.com/LedgerHQ/speculos) emulator. + +## Requirements + +- [python >= 3.8](https://www.python.org/downloads/) +- [pip](https://pip.pypa.io/en/stable/installation/) + +### Dependencies +Python dependencies are listed in [requirements.txt](requirements.txt) + +```shell +python3 -m pip install --extra-index-url https://test.pypi.org/simple/ -r requirements.txt +``` +> The extra index allows to fetch the latest version of Speculos. + +## Usage + +### Compilation app + +Go to the root of the repository: +```sh +make DEBUG=1 NFT_TESTING_KEY=1 BOLOS_SDK=$NANOX_SDK +mv bin/app.elf tests/speculos/.elf +``` + +Given the requirements are installed, just do (by default command): + +``` +cd tests/speculos/ +pytest +``` + +### Custom options +- **--model:** "nanos", "nanox", "nanosp" | default: "nanos" +- **--display:** "qt", "headless" | default: "qt" +- **--path:** the path of the binary app | default: path of makefile compilation + +## Example + +With `nanox` binary app: +```sh +# the --path is variable to where you put your binary + +pytest --model nanox --path ./elfs/nanox.elf + +# Execute specific test: +pytest --model nanox --path ./elfs/nanox.elf test_pubkey_cmd.py +``` \ No newline at end of file diff --git a/tests/speculos/conftest.py b/tests/speculos/conftest.py new file mode 100644 index 0000000..b10f7a6 --- /dev/null +++ b/tests/speculos/conftest.py @@ -0,0 +1,41 @@ +from pathlib import Path +import pytest + +from speculos.client import SpeculosClient + +from ethereum_client.ethereum_cmd import EthereumCommand + + +SCRIPT_DIR = Path(__file__).absolute().parent +API_URL = "http://127.0.0.1:5000" + +VERSION = {"nanos": "2.1", "nanox": "2.0.2", "nanosp": "1.0.3"} + + +def pytest_addoption(parser): + # nanos, nanox, nanosp + parser.addoption("--model", action="store", default="nanos") + # qt: default, requires a X server + # headless: nothing is displayed + parser.addoption("--display", action="store", default="qt") + + path: str = SCRIPT_DIR.parent.parent / "bin" / "app.elf" + parser.addoption("--path", action="store", default=path) + +@pytest.fixture() +def client(pytestconfig): + file_path = pytestconfig.getoption("path") + model = pytestconfig.getoption("model") + + args = ['--log-level', 'speculos:DEBUG','--model', model, '--display', pytestconfig.getoption("display"), '--sdk', VERSION[model]] + with SpeculosClient(app=str(file_path), args=args) as client: + yield client + + +@pytest.fixture() +def cmd(client, pytestconfig): + yield EthereumCommand( + client=client, + debug=True, + model=pytestconfig.getoption("model"), + ) diff --git a/tests/speculos/docs/README.md b/tests/speculos/docs/README.md new file mode 100644 index 0000000..eb6df71 --- /dev/null +++ b/tests/speculos/docs/README.md @@ -0,0 +1,133 @@ +# Documentation of Ethereum's client test + +```sh +. +├── conftest.py # Configuration for pytest +├── ethereum_client # All utils of client test +│ ├── ethereum_cmd_builder.py # Creation of apdu to send +│ ├── ethereum_cmd.py # Send Apdu and parsing of response +│ ├── exception +│ │ ├── device_exception.py +│ │ └── errors.py +│ ├── plugin.py # Creation of content apdu which manage plugin, erc20Information, provide nft information +│ ├── transaction.py # Creation of content apdu which manage personal tx, transaction, eip712 +│ └── utils.py +├── requirements.txt +├── screenshots # All screenshot of nanoS,X,SP for compare in tests +├── setup.cfg + +# ========= All Tests ========= +├── test_configuration_cmd.py +├── test_eip1559.py +├── test_eip191.py +├── test_eip2930.py +├── test_eip712.py +├── test_erc1155.py +├── test_erc20information.py +├── test_erc721.py +├── test_pubkey_cmd.py +└── test_sign_cmd.py +``` + +## Ethereum_client + +### Ethereum_cmd_builder +```py +def chunked(size, source) + +class EthereumCommandBuilder: + # Creation of the apdu + def get_configuration(self) -> bytes: + def set_plugin(self, plugin: Plugin) -> bytes: + def provide_nft_information(self, plugin: Plugin) -> bytes: + def provide_erc20_token_information(self, info: ERC20Information): + def get_public_key(self, bip32_path: str, display: bool = False) -> bytes: + def perform_privacy_operation(self, bip32_path: str, display: bool, shared_secret: bool) -> bytes: + def simple_sign_tx(self, bip32_path: str, transaction: Transaction) -> bytes: + def sign_eip712(self, bip32_path: str, transaction: EIP712) -> bytes: + def personal_sign_tx(self, bip32_path: str, transaction: PersonalTransaction) -> Tuple[bool,bytes]: +``` + +### Ethereum_cmd +```py +class EthereumCommand: + # Sending apdu and parsing the response in the right form + def get_configuration(self) -> Tuple[int, int, int, int]: + def set_plugin(self, plugin: Plugin): + def provide_nft_information(self, plugin: Plugin): + def provide_erc20_token_information(self, info: ERC20Information): + def get_public_key(self, bip32_path: str, result: List, display: bool = False) -> Tuple[bytes, bytes, bytes]: + def perform_privacy_operation(self, bip32_path: str, result: List, display: bool = False, shared_secret: bool = False) -> Tuple[bytes, bytes, bytes]: + def simple_sign_tx(self, bip32_path: str, transaction: Transaction, result: List = list()) -> None: + def sign_eip712(self, bip32_path: str, transaction: EIP712, result: List = list()) -> None: + def personal_sign_tx(self, bip32_path: str, transaction: PersonalTransaction, result: List = list()) -> None: + + + # Allows to send an apdu without return of speculos + def send_apdu(self, apdu: bytes) -> bytes: + # Allows to send an apdu with return of speculos + def send_apdu_context(self, apdu: bytes, result: List = list()) -> bytes: + +``` + +### Utils +```py +def save_screenshot(cmd, path: str): +def compare_screenshot(cmd, path: str): +def parse_sign_response(response : bytes) -> Tuple[bytes, bytes, bytes]: +def bip32_path_from_string(path: str) -> List[bytes]: +def packed_bip32_path_from_string(path: str) -> bytes: +def write_varint(n: int) -> bytes: +def read_varint(buf: BytesIO, prefix: Optional[bytes] = None) -> int: +def read(buf: BytesIO, size: int) -> bytes: +def read_uint(buf: BytesIO, +``` + +## Tests new apdu + +If a new instruction is programmed it will be necessary to create 2 new functions. +one in `ethereum_cmd_builder` : +- Creation of the raw apdu you can find some examples in this same file + +and one in `ethereum_cmd`: +- Send the apdu to speculos and parse the answer in a `list` named result you can find some examples in this same file + +## Example for write new tests + +To send several apdu and get the return + +```py +FIRST = bytes.fromhex("{YourAPDU}") +SECOND = bytes.fromhex("{YourAPDU}") + +def test_multiple_raw_apdu(cmd): + result: list = [] + + cmd.send_apdu(FIRST) + with cmd.send_apdu_context(SECOND, result) as ex: + sleep(0.5) + # Here your code for press button and compare screen if you want + + response: bytes = result[0] # response returning + # Here you function to parse response of some code + v, r, s = parse_sign_response(response) + + # And here assertion of your tests + assert v == 0x25 # 37 + assert r.hex() == "68ba082523584adbfc31d36d68b51d6f209ce0838215026bf1802a8f17dcdff4" + assert s.hex() == "7c92908fa05c8bc86507a3d6a1c8b3c2722ee01c836d89a61df60c1ab0b43fff" +``` + +To test an error + +```py +def test_some_error(cmd): + result: list = [] + + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + # With an function in ethereum_cmd + with cmd.send_apdu_context(bytes.fromhex("{YourAPDU}"), result) as ex: + pass + assert error.args[0] == '0x6a80' +``` + diff --git a/tests/speculos/ethereum_client/__init__.py b/tests/speculos/ethereum_client/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/speculos/ethereum_client/ethereum_cmd.py b/tests/speculos/ethereum_client/ethereum_cmd.py new file mode 100644 index 0000000..a13a817 --- /dev/null +++ b/tests/speculos/ethereum_client/ethereum_cmd.py @@ -0,0 +1,226 @@ +from ast import List +from contextlib import contextmanager +import struct +from time import sleep +from typing import Tuple + +from speculos.client import SpeculosClient, ApduException + +from ethereum_client.ethereum_cmd_builder import EthereumCommandBuilder, InsType +from ethereum_client.exception import DeviceException +from ethereum_client.transaction import EIP712, PersonalTransaction, Transaction +from ethereum_client.plugin import ERC20Information, Plugin +from ethereum_client.utils import parse_sign_response + + +class EthereumCommand: + def __init__(self, + client: SpeculosClient, + debug: bool = False, + model: str = "nanos") -> None: + self.client = client + self.builder = EthereumCommandBuilder(debug=debug) + self.debug = debug + self.model = model + + def get_configuration(self) -> Tuple[int, int, int, int]: + try: + response = self.client._apdu_exchange( + self.builder.get_configuration() + ) # type: int, bytes + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_GET_VERSION) + + # response = FLAG (1) || MAJOR (1) || MINOR (1) || PATCH (1) + assert len(response) == 4 + + info, major, minor, patch = struct.unpack( + "BBBB", + response + ) # type: int, int, int + + return info, major, minor, patch + + def set_plugin(self, plugin: Plugin): + try: + self.client._apdu_exchange( + self.builder.set_plugin(plugin=plugin) + ) + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SET_PLUGIN) + + def provide_nft_information(self, plugin: Plugin): + try: + self.client._apdu_exchange( + self.builder.provide_nft_information(plugin=plugin) + ) + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_PROVIDE_NFT_INFORMATION) + + def provide_erc20_token_information(self, info: ERC20Information): + try: + self.client._apdu_exchange( + self.builder.provide_erc20_token_information(info=info) + ) + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_PROVIDE_ERC20) + + + @contextmanager + def get_public_key(self, bip32_path: str, result: List, display: bool = False) -> Tuple[bytes, bytes, bytes]: + try: + chunk: bytes = self.builder.get_public_key(bip32_path=bip32_path, display=display) + + with self.client.apdu_exchange_nowait(cla=chunk[0], ins=chunk[1], + p1=chunk[2], p2=chunk[3], + data=chunk[5:]) as exchange: + yield exchange + response: bytes = exchange.receive() + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_GET_PUBLIC_KEY) + + # response = pub_key_len (1) || + # pub_key (var) || + # chain_code_len (1) || + # chain_code (var) + offset: int = 0 + + pub_key_len: int = response[offset] + offset += 1 + + uncompressed_addr_len: bytes = response[offset:offset + pub_key_len] + offset += pub_key_len + + eth_addr_len: int = response[offset] + offset += 1 + + eth_addr: bytes = response[offset:offset + eth_addr_len] + offset += eth_addr_len + + chain_code: bytes = response[offset:] + + assert len(response) == 1 + pub_key_len + 1 + eth_addr_len + 32 # 32 -> chain_code_len + + result.append(uncompressed_addr_len) + result.append(eth_addr) + result.append(chain_code) + + + @contextmanager + def perform_privacy_operation(self, bip32_path: str, result: List, display: bool = False, shared_secret: bool = False) -> Tuple[bytes, bytes, bytes]: + try: + chunk: bytes = self.builder.perform_privacy_operation(bip32_path=bip32_path, display=display, shared_secret=shared_secret) + + with self.client.apdu_exchange_nowait(cla=chunk[0], ins=chunk[1], + p1=chunk[2], p2=chunk[3], + data=chunk[5:]) as exchange: + yield exchange + response: bytes = exchange.receive() + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_PERFORM_PRIVACY_OPERATION) + + # response = Public encryption key or shared secret (32) + assert len(response) == 32 + + result.append(response) + + def send_apdu(self, apdu: bytes) -> bytes: + try: + self.client.apdu_exchange(cla=apdu[0], ins=apdu[1], + p1=apdu[2], p2=apdu[3], + data=apdu[5:]) + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) + + @contextmanager + def send_apdu_context(self, apdu: bytes, result: List = list()) -> bytes: + try: + + with self.client.apdu_exchange_nowait(cla=apdu[0], ins=apdu[1], + p1=apdu[2], p2=apdu[3], + data=apdu[5:]) as exchange: + yield exchange + result.append(exchange.receive()) + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) + + + + @contextmanager + def simple_sign_tx(self, bip32_path: str, transaction: Transaction, result: List = list()) -> None: + try: + chunk: bytes = self.builder.simple_sign_tx(bip32_path=bip32_path, transaction=transaction) + + with self.client.apdu_exchange_nowait(cla=chunk[0], ins=chunk[1], + p1=chunk[2], p2=chunk[3], + data=chunk[5:]) as exchange: + yield exchange + response: bytes = exchange.receive() + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) + + # response = V (1) || R (32) || S (32) + assert len(response) == 65 + v, r, s = parse_sign_response(response) + + result.append(v) + result.append(r) + result.append(s) + + + @contextmanager + def sign_eip712(self, bip32_path: str, transaction: EIP712, result: List = list()) -> None: + try: + chunk: bytes = self.builder.sign_eip712(bip32_path=bip32_path, transaction=transaction) + + with self.client.apdu_exchange_nowait(cla=chunk[0], ins=chunk[1], + p1=chunk[2], p2=chunk[3], + data=chunk[5:]) as exchange: + yield exchange + response: bytes = exchange.receive() + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_EIP712) + + # response = V (1) || R (32) || S (32) + assert len(response) == 65 + v, r, s = parse_sign_response(response) + + result.append(v) + result.append(r) + result.append(s) + + + @contextmanager + def personal_sign_tx(self, bip32_path: str, transaction: PersonalTransaction, result: List = list()) -> None: + try: + for islast_apdu, apdu in self.builder.personal_sign_tx(bip32_path=bip32_path, transaction=transaction): + if islast_apdu: + with self.client.apdu_exchange_nowait(cla=apdu[0], ins=apdu[1], + p1=apdu[2], p2=apdu[3], + data=apdu[5:]) as exchange: + # the "yield" here allows to wait for a button interaction (click right, left, both) + yield exchange + response: bytes = exchange.receive() + else: + self.send_apdu(apdu) + + except ApduException as error: + raise DeviceException(error_code=error.sw, ins=InsType.INS_SIGN_TX) + + # response = V (1) || R (32) || S (32) + v, r, s = parse_sign_response(response) + + result.append(v) + result.append(r) + result.append(s) + + + diff --git a/tests/speculos/ethereum_client/ethereum_cmd_builder.py b/tests/speculos/ethereum_client/ethereum_cmd_builder.py new file mode 100644 index 0000000..f2f721e --- /dev/null +++ b/tests/speculos/ethereum_client/ethereum_cmd_builder.py @@ -0,0 +1,293 @@ +import enum +import logging +import struct +from typing import List, Tuple, Union, Iterator, cast + +from ethereum_client.transaction import EIP712, PersonalTransaction, Transaction +from ethereum_client.plugin import ERC20Information, Plugin +from ethereum_client.utils import packed_bip32_path_from_string + +MAX_APDU_LEN: int = 255 + +def chunked(size, source): + for i in range(0, len(source), size): + yield source[i:i+size] + +def chunkify(data: bytes, chunk_len: int) -> Iterator[Tuple[bool, bytes]]: + size: int = len(data) + + if size <= chunk_len: + yield True, data + return + + chunk: int = size // chunk_len + remaining: int = size % chunk_len + offset: int = 0 + + for i in range(chunk): + yield False, data[offset:offset + chunk_len] + offset += chunk_len + + if remaining: + yield True, data[offset:] + +class InsType(enum.IntEnum): + INS_GET_PUBLIC_KEY = 0x02 + INS_SIGN_TX = 0x04 + INS_GET_CONFIGURATION = 0x06 + INS_SIGN_PERSONAL_TX = 0x08 + INS_PROVIDE_ERC20 = 0x0A + INS_SIGN_EIP712 = 0x0c + INS_ETH2_GET_PUBLIC_KEY = 0x0E + INS_SET_ETH2_WITHDRAWAL = 0x10 + INS_SET_EXTERNAL_PLUGIN = 0x12 + INS_PROVIDE_NFT_INFORMATION = 0x14 + INS_SET_PLUGIN = 0x16 + INS_PERFORM_PRIVACY_OPERATION = 0x18 + + +class EthereumCommandBuilder: + """APDU command builder for the Boilerplate application. + + Parameters + ---------- + debug: bool + Whether you want to see logging or not. + + Attributes + ---------- + debug: bool + Whether you want to see logging or not. + + """ + CLA: int = 0xE0 + + def __init__(self, debug: bool = False): + """Init constructor.""" + self.debug = debug + + def serialize(self, + cla: int, + ins: Union[int, enum.IntEnum], + p1: int = 0, + p2: int = 0, + cdata: bytes = b"") -> bytes: + """Serialize the whole APDU command (header + data). + + Parameters + ---------- + cla : int + Instruction class: CLA (1 byte) + ins : Union[int, IntEnum] + Instruction code: INS (1 byte) + p1 : int + Instruction parameter 1: P1 (1 byte). + p2 : int + Instruction parameter 2: P2 (1 byte). + cdata : bytes + Bytes of command data. + + Returns + ------- + bytes + Bytes of a complete APDU command. + + """ + ins = cast(int, ins.value) if isinstance(ins, enum.IntEnum) else cast(int, ins) + + header: bytes = struct.pack("BBBBB", + cla, + ins, + p1, + p2, + len(cdata)) # add Lc to APDU header + + if self.debug: + logging.info("header: %s", header.hex()) + logging.info("cdata: %s", cdata.hex()) + + return header + cdata + + def get_configuration(self) -> bytes: + """Command builder for GET_CONFIGURATON + + Returns + ------- + bytes + APDU command for GET_CONFIGURATON + + """ + return self.serialize(cla=self.CLA, + ins=InsType.INS_GET_CONFIGURATION, + p1=0x00, + p2=0x00, + cdata=b"") + + def _same_header_builder(self, data: Union[Plugin, ERC20Information], ins: int) -> bytes: + return self.serialize(cla=self.CLA, + ins=ins, + p1=0x00, + p2=0x00, + cdata=data.serialize()) + + def set_plugin(self, plugin: Plugin) -> bytes: + return self._same_header_builder(plugin, InsType.INS_SET_PLUGIN) + + def provide_nft_information(self, plugin: Plugin) -> bytes: + return self._same_header_builder(plugin, InsType.INS_PROVIDE_NFT_INFORMATION) + + def provide_erc20_token_information(self, info: ERC20Information): + return self._same_header_builder(info, InsType.INS_PROVIDE_ERC20) + + def get_public_key(self, bip32_path: str, display: bool = False) -> bytes: + """Command builder for GET_PUBLIC_KEY. + + Parameters + ---------- + bip32_path: str + String representation of BIP32 path. + display : bool + Whether you want to display the address on the device. + + Returns + ------- + bytes + APDU command for GET_PUBLIC_KEY. + + """ + cdata = packed_bip32_path_from_string(bip32_path) + + return self.serialize(cla=self.CLA, + ins=InsType.INS_GET_PUBLIC_KEY, + p1=0x01 if display else 0x00, + p2=0x01, + cdata=cdata) + + def perform_privacy_operation(self, bip32_path: str, display: bool, shared_secret: bool) -> bytes: + """Command builder for INS_PERFORM_PRIVACY_OPERATION. + + Parameters + ---------- + bip32_path : str + String representation of BIP32 path. + Third party public key on Curve25519 : 32 bytes + Optionnal if returning the shared secret + + """ + cdata = packed_bip32_path_from_string(bip32_path) + + return self.serialize(cla=self.CLA, + ins=InsType.INS_PERFORM_PRIVACY_OPERATION, + p1=0x01 if display else 0x00, + p2=0x01 if shared_secret else 0x00, + cdata=cdata) + + + def simple_sign_tx(self, bip32_path: str, transaction: Transaction) -> bytes: + """Command builder for INS_SIGN_TX. + + Parameters + ---------- + bip32_path : str + String representation of BIP32 path. + transaction : Transaction + Representation of the transaction to be signed. + + Yields + ------- + bytes + APDU command chunk for INS_SIGN_TX. + + """ + cdata = packed_bip32_path_from_string(bip32_path) + + tx: bytes = transaction.serialize() + + cdata = cdata + tx + + return self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_TX, + p1=0x00, + p2=0x00, + cdata=cdata) + + def sign_eip712(self, bip32_path: str, transaction: EIP712) -> bytes: + """Command builder for INS_SIGN_EIP712. + + Parameters + ---------- + bip32_path : str + String representation of BIP32 path. + transaction : EIP712 + Domain hash -> 32 bytes + Message hash -> 32 bytes + + Yields + ------- + bytes + APDU command chunk for INS_SIGN_EIP712. + + """ + cdata = packed_bip32_path_from_string(bip32_path) + + + tx: bytes = transaction.serialize() + + cdata = cdata + tx + + return self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_EIP712, + p1=0x00, + p2=0x00, + cdata=cdata) + + def personal_sign_tx(self, bip32_path: str, transaction: PersonalTransaction) -> Tuple[bool,bytes]: + """Command builder for INS_SIGN_PERSONAL_TX. + + Parameters + ---------- + bip32_path : str + String representation of BIP32 path. + transaction : Transaction + Representation of the transaction to be signed. + + Yields + ------- + bytes + APDU command chunk for INS_SIGN_PERSONAL_TX. + + """ + + cdata = packed_bip32_path_from_string(bip32_path) + + tx: bytes = transaction.serialize() + + cdata = cdata + tx + last_chunk = len(cdata) // MAX_APDU_LEN + + # The generator allows to send apdu frames because we can't send an apdu > 255 + for i, (chunk) in enumerate(chunked(MAX_APDU_LEN, cdata)): + if i == 0 and i == last_chunk: + yield True, self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_PERSONAL_TX, + p1=0x00, + p2=0x00, + cdata=chunk) + elif i == 0: + yield False, self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_PERSONAL_TX, + p1=0x00, + p2=0x00, + cdata=chunk) + elif i == last_chunk: + yield True, self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_PERSONAL_TX, + p1=0x80, + p2=0x00, + cdata=chunk) + else: + yield False, self.serialize(cla=self.CLA, + ins=InsType.INS_SIGN_PERSONAL_TX, + p1=0x80, + p2=0x00, + cdata=chunk) \ No newline at end of file diff --git a/tests/speculos/ethereum_client/exception/__init__.py b/tests/speculos/ethereum_client/exception/__init__.py new file mode 100644 index 0000000..acb2bb8 --- /dev/null +++ b/tests/speculos/ethereum_client/exception/__init__.py @@ -0,0 +1,35 @@ +from .device_exception import DeviceException +from .errors import (UnknownDeviceError, + DenyError, + WrongP1P2Error, + WrongDataLengthError, + InsNotSupportedError, + ClaNotSupportedError, + WrongResponseLengthError, + DisplayBip32PathFailError, + DisplayAddressFailError, + DisplayAmountFailError, + WrongTxLengthError, + TxParsingFailError, + TxHashFail, + BadStateError, + SignatureFailError) + +__all__ = [ + "DeviceException", + "DenyError", + "UnknownDeviceError", + "WrongP1P2Error", + "WrongDataLengthError", + "InsNotSupportedError", + "ClaNotSupportedError", + "WrongResponseLengthError", + "DisplayBip32PathFailError", + "DisplayAddressFailError", + "DisplayAmountFailError", + "WrongTxLengthError", + "TxParsingFailError", + "TxHashFail", + "BadStateError", + "SignatureFailError" +] diff --git a/tests/speculos/ethereum_client/exception/device_exception.py b/tests/speculos/ethereum_client/exception/device_exception.py new file mode 100644 index 0000000..7cd26f2 --- /dev/null +++ b/tests/speculos/ethereum_client/exception/device_exception.py @@ -0,0 +1,38 @@ +import enum +from typing import Dict, Any, Union + +from .errors import * + + +class DeviceException(Exception): # pylint: disable=too-few-public-methods + exc: Dict[int, Any] = { + 0x6985: DenyError, + 0x6A86: WrongP1P2Error, + 0x6A87: WrongDataLengthError, + 0x6D00: InsNotSupportedError, + 0x6E00: ClaNotSupportedError, + 0xB000: WrongResponseLengthError, + 0xB001: DisplayBip32PathFailError, + 0xB002: DisplayAddressFailError, + 0xB003: DisplayAmountFailError, + 0xB004: WrongTxLengthError, + 0xB005: TxParsingFailError, + 0xB006: TxHashFail, + 0xB007: BadStateError, + 0xB008: SignatureFailError + } + + def __new__(cls, + error_code: int, + ins: Union[int, enum.IntEnum, None] = None, + message: str = "" + ) -> Any: + error_message: str = (f"Error in {ins!r} command" + if ins else "Error in command") + + if error_code in DeviceException.exc: + return DeviceException.exc[error_code](hex(error_code), + error_message, + message) + + return UnknownDeviceError(hex(error_code), error_message, message) diff --git a/tests/speculos/ethereum_client/exception/errors.py b/tests/speculos/ethereum_client/exception/errors.py new file mode 100644 index 0000000..a9a853d --- /dev/null +++ b/tests/speculos/ethereum_client/exception/errors.py @@ -0,0 +1,58 @@ +class UnknownDeviceError(Exception): + pass + + +class DenyError(Exception): + pass + + +class WrongP1P2Error(Exception): + pass + + +class WrongDataLengthError(Exception): + pass + + +class InsNotSupportedError(Exception): + pass + + +class ClaNotSupportedError(Exception): + pass + + +class WrongResponseLengthError(Exception): + pass + + +class DisplayBip32PathFailError(Exception): + pass + + +class DisplayAddressFailError(Exception): + pass + + +class DisplayAmountFailError(Exception): + pass + + +class WrongTxLengthError(Exception): + pass + + +class TxParsingFailError(Exception): + pass + + +class TxHashFail(Exception): + pass + + +class BadStateError(Exception): + pass + + +class SignatureFailError(Exception): + pass diff --git a/tests/speculos/ethereum_client/plugin.py b/tests/speculos/ethereum_client/plugin.py new file mode 100644 index 0000000..9274fde --- /dev/null +++ b/tests/speculos/ethereum_client/plugin.py @@ -0,0 +1,70 @@ +import string +from typing import Union + +from ethereum_client.utils import write_varint + +class ERC20Information: + def __init__(self, erc20_ticker: string , addr: Union[str, bytes], nb_decimals: int, chainID: int, sign: str) -> None: + self.erc20_ticker: bytes = bytes.fromhex(erc20_ticker) + self.addr: bytes = bytes.fromhex(addr[2:]) if isinstance(addr, str) else addr + self.nb_decimals: int = nb_decimals + self.chainID: int = chainID + self.sign: bytes = bytes.fromhex(sign) + + def serialize(self) -> bytes: + return b"".join([ + write_varint(len(self.erc20_ticker)), + self.erc20_ticker, + + self.addr, + + self.nb_decimals.to_bytes(4, byteorder="big"), + + self.chainID.to_bytes(4, byteorder="big"), + + self.sign, + ]) + +class Plugin: + """Plugin class + Allows to generate an apdu of the SET_PLUGIN command or PROVIDE_NFT_INFORMATION + + PROVIDE_NFT_INFORMATION + ---- + do not define a selector + + """ + def __init__(self, type: int, version: int, name: str, addr: Union[str, bytes], selector: int = -1, chainID: int = 1, keyID: int = 0, algorithm: int = 1, sign: str = "") -> None: + self.type: int = type + self.version: int = version + self.name: bytes = bytes(name, 'UTF-8') + self.addr: bytes = bytes.fromhex(addr[2:]) if isinstance(addr, str) else addr + self.selector: int = selector + self.chainID: int = chainID + self.keyID: int = keyID + self.algorithm: int = algorithm + self.sign: bytes = bytes.fromhex(sign) + + def serialize(self) -> bytes: + return b"".join([ + self.type.to_bytes(1, byteorder="big"), + + self.version.to_bytes(1, byteorder="big"), + + write_varint(len(self.name)), + self.name, + + self.addr, + + b'' if self.selector == -1 else self.selector.to_bytes(4, byteorder="big"), + + self.chainID.to_bytes(8, byteorder="big"), + + self.keyID.to_bytes(1, byteorder="big"), + + self.algorithm.to_bytes(1, byteorder="big"), + + write_varint(len(self.sign)), + self.sign, + + ]) \ No newline at end of file diff --git a/tests/speculos/ethereum_client/transaction.py b/tests/speculos/ethereum_client/transaction.py new file mode 100644 index 0000000..4c9fe23 --- /dev/null +++ b/tests/speculos/ethereum_client/transaction.py @@ -0,0 +1,96 @@ +from typing import Union + +from ethereum_client.utils import write_varint, UINT64_MAX + + +class TransactionError(Exception): + pass + +EIP2930 = 1 +EIP1559 = 2 + +class PersonalTransaction: + def __init__(self, msg: Union[str, bytes]) -> None: + # If you want to send bytes directly you have to put "0x" before the string + if msg[0:2] == "0x": + self.msg: bytes = bytes.fromhex(msg[2:]) + else: + self.msg: bytes = bytes(msg, "utf-8") + + def serialize(self) -> bytes: + return b"".join([ + len(self.msg).to_bytes(4, byteorder="big"), + self.msg, + ]) + +class Transaction: + def __init__(self, txType: int, nonce: int, gasPrice: int, gasLimit: int, to: Union[str, bytes], value: int, data: Union[str, bytes] = "", chainID: int = -1) -> None: + self.txType: int = txType + self.nonce: int = nonce + self.gasPrice: int = gasPrice + self.gasLimit: int = gasLimit + self.to: bytes = bytes.fromhex(to[2:]) if isinstance(to, str) else to + self.value: int = value + self.data: bytes = bytes(data, "utf-8") + self.chainID = b'' + + if not (0 <= self.nonce <= UINT64_MAX): + raise TransactionError(f"Bad nonce: '{self.nonce}'!") + + if not (0 <= self.value <= UINT64_MAX): + raise TransactionError(f"Bad value: '{self.value}'!") + + if len(self.to) != 20: + raise TransactionError(f"Bad address: '{self.to}'!") + + self.lenNonce = int((len(hex(self.nonce)) - 1) / 2) + self.lenGP = int((len(hex(self.gasPrice)) - 1) / 2) + self.lenGL = int((len(hex(self.gasLimit)) - 1) / 2) + self.lenValue = int((len(hex(self.value)) - 1) / 2) + + self.lenChainID = int((len(hex(chainID)) - 1) / 2) + + if chainID != -1: + self.chainID = b"".join([ + b'' if self.lenChainID == 1 else (self.lenChainID + 0x80).to_bytes(1, byteorder="big"), + chainID.to_bytes(self.lenChainID, byteorder="big"), + write_varint(0 + 0x80), + write_varint(0 + 0x80), + ]) + + def serialize(self) -> bytes: + return b"".join([ + self.txType.to_bytes(1, byteorder="big"), + + b'' if self.lenNonce == 1 else write_varint(self.lenNonce + 0x80), + self.nonce.to_bytes(self.lenNonce, byteorder="big"), + + write_varint(self.lenGP + 0x80), + self.gasPrice.to_bytes(self.lenGP, byteorder="big"), + + write_varint(self.lenGL + 0x80), + self.gasLimit.to_bytes(self.lenGL, byteorder="big"), + + write_varint(len(self.to) + 0x80), + self.to, + + write_varint(self.lenValue + 0x80), + self.value.to_bytes(self.lenValue, byteorder="big"), + + write_varint(len(self.data) + 0x80), + self.data, + + self.chainID, + + ]) + +class EIP712: + def __init__(self, domain_hash: str, msg_hash: str) -> None: + self.domain_hash = bytes.fromhex(domain_hash) + self.msg_hash = bytes.fromhex(msg_hash) + + def serialize(self) -> bytes: + return b"".join([ + self.domain_hash, + self.msg_hash + ]) \ No newline at end of file diff --git a/tests/speculos/ethereum_client/utils.py b/tests/speculos/ethereum_client/utils.py new file mode 100644 index 0000000..be3cdde --- /dev/null +++ b/tests/speculos/ethereum_client/utils.py @@ -0,0 +1,115 @@ +from io import BytesIO +from typing import List, Optional, Literal, Tuple +import PIL.Image as Image + +import speculos.client + +UINT64_MAX: int = 18446744073709551615 +UINT32_MAX: int = 4294967295 +UINT16_MAX: int = 65535 + +# Association tableau si écran nanos ou nanox +PATH_IMG = {"nanos": "nanos", "nanox": "nanox", "nanosp": "nanox"} + +def save_screenshot(cmd, path: str): + screenshot = cmd.client.get_screenshot() + img = Image.open(BytesIO(screenshot)) + img.save(path) + + +def compare_screenshot(cmd, path: str): + screenshot = cmd.client.get_screenshot() + assert speculos.client.screenshot_equal(path, BytesIO(screenshot)) + + +def parse_sign_response(response : bytes) -> Tuple[bytes, bytes, bytes]: + assert len(response) == 65 + + offset: int = 0 + + v: bytes = response[offset] + offset += 1 + + r: bytes = response[offset:offset + 32] + offset += 32 + + s: bytes = response[offset:] + + return (v, r, s) + + +def bip32_path_from_string(path: str) -> List[bytes]: + splitted_path: List[str] = path.split("/") + + if not splitted_path: + raise Exception(f"BIP32 path format error: '{path}'") + + if "m" in splitted_path and splitted_path[0] == "m": + splitted_path = splitted_path[1:] + + return [int(p).to_bytes(4, byteorder="big") if "'" not in p + else (0x80000000 | int(p[:-1])).to_bytes(4, byteorder="big") + for p in splitted_path] + + +def packed_bip32_path_from_string(path: str) -> bytes: + bip32_paths = bip32_path_from_string(path) + + return b"".join([ + len(bip32_paths).to_bytes(1, byteorder="big"), + *bip32_paths + ]) + + +def write_varint(n: int) -> bytes: + if n < 0xFC: + return n.to_bytes(1, byteorder="little") + + if n <= UINT16_MAX: + return b"\xFD" + n.to_bytes(2, byteorder="little") + + if n <= UINT32_MAX: + return b"\xFE" + n.to_bytes(4, byteorder="little") + + if n <= UINT64_MAX: + return b"\xFF" + n.to_bytes(8, byteorder="little") + + raise ValueError(f"Can't write to varint: '{n}'!") + + +def read_varint(buf: BytesIO, + prefix: Optional[bytes] = None) -> int: + b: bytes = prefix if prefix else buf.read(1) + + if not b: + raise ValueError(f"Can't read prefix: '{b}'!") + + n: int = {b"\xfd": 2, b"\xfe": 4, b"\xff": 8}.get(b, 1) # default to 1 + + b = buf.read(n) if n > 1 else b + + if len(b) != n: + raise ValueError("Can't read varint!") + + return int.from_bytes(b, byteorder="little") + + +def read(buf: BytesIO, size: int) -> bytes: + b: bytes = buf.read(size) + + if len(b) < size: + raise ValueError(f"Cant read {size} bytes in buffer!") + + return b + + +def read_uint(buf: BytesIO, + bit_len: int, + byteorder: Literal['big', 'little'] = 'little') -> int: + size: int = bit_len // 8 + b: bytes = buf.read(size) + + if len(b) < size: + raise ValueError(f"Can't read u{bit_len} in buffer!") + + return int.from_bytes(b, byteorder) diff --git a/tests/speculos/requirements.txt b/tests/speculos/requirements.txt new file mode 100644 index 0000000..2744c35 --- /dev/null +++ b/tests/speculos/requirements.txt @@ -0,0 +1,5 @@ +speculos +pytest>=6.1.1,<7.0.0 +ledgercomm>=1.1.0,<1.2.0 +ecdsa>=0.16.1,<0.17.0 +pysha3>=1.0.0,<2.0.0 diff --git a/tests/snapshots/nanos_approve_dai_tokens/00000.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00000.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00000.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00000.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00001.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00001.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00001.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00001.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00002.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00002.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00002.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00003.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00003.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00003.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00004.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00004.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00004.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00005.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00005.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00005.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00006.png b/tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00006.png rename to tests/speculos/screenshots/eip1559/nanos/sign_eip_1559/00006.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00000.png b/tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00000.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00000.png rename to tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00000.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00001.png b/tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00001.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00001.png rename to tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00001.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00002.png b/tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00002.png rename to tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00002.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00003.png b/tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00003.png rename to tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00003.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00004.png b/tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00004.png rename to tests/speculos/screenshots/eip1559/nanox/sign_eip_1559/00004.png diff --git a/tests/snapshots/nanos_eip191_metamask/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00000.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00000.png diff --git a/tests/snapshots/nanos_eip191_metamask/00001.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00001.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00001.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00001.png diff --git a/tests/snapshots/nanos_eip191_metamask/00002.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00002.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00002.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00002.png diff --git a/tests/snapshots/nanos_eip191_metamask/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00003.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00003.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_metamask/00003.png diff --git a/tests/snapshots/nanos_eip191_nonascii/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00000.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00000.png diff --git a/tests/snapshots/nanos_eip191_nonascii/00001.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00001.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00001.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00001.png diff --git a/tests/snapshots/nanos_eip191_nonascii/00002.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00002.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00002.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00002.png diff --git a/tests/snapshots/nanos_eip191_nonascii/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00003.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00003.png diff --git a/tests/snapshots/nanos_eip191_nonascii/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00004.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00004.png diff --git a/tests/snapshots/nanos_eip191_metamask/00005.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00005.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_non_ascii/00005.png diff --git a/tests/snapshots/nanos_eip191_opensea/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00000.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00000.png diff --git a/tests/snapshots/nanos_eip191_opensea/00001.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00001.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00001.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00001.png diff --git a/tests/snapshots/nanos_eip191_opensea/00002.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00002.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00002.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00002.png diff --git a/tests/snapshots/nanos_eip191_opensea/00003.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00003.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00003.png diff --git a/tests/snapshots/nanos_eip191_opensea/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00004.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00004.png diff --git a/tests/snapshots/nanos_eip191_opensea/00005.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00005.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00005.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00005.png diff --git a/tests/snapshots/nanos_eip191_opensea/00006.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00006.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_opensea/00006.png diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png new file mode 100644 index 0000000..ab16f62 Binary files /dev/null and b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00000.png differ diff --git a/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00001.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00001.png new file mode 100644 index 0000000..6603459 Binary files /dev/null and b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00001.png differ diff --git a/tests/snapshots/nanos_eip191_nonascii/00005.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00002.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00005.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00002.png diff --git a/tests/snapshots/nanos_eip191_metamask/00004.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00004.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00003.png diff --git a/tests/snapshots/nanos_eip191_nonascii/00006.png b/tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00004.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00006.png rename to tests/speculos/screenshots/eip191/nanos/personal_sign_reject/00004.png diff --git a/tests/snapshots/nanox_eip191_metamask/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00000.png similarity index 100% rename from tests/snapshots/nanox_eip191_metamask/00000.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00000.png diff --git a/tests/snapshots/nanox_eip191_metamask/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png similarity index 100% rename from tests/snapshots/nanox_eip191_metamask/00001.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00001.png diff --git a/tests/snapshots/nanox_eip191_metamask/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00002.png similarity index 100% rename from tests/snapshots/nanox_eip191_metamask/00002.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_metamask/00002.png diff --git a/tests/snapshots/nanox_eip191_nonascii/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00000.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00000.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00000.png diff --git a/tests/snapshots/nanox_eip191_nonascii/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00001.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00001.png diff --git a/tests/snapshots/nanox_eip191_nonascii/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00002.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00002.png diff --git a/tests/snapshots/nanox_eip191_nonascii/00003.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00003.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_non_ascii/00003.png diff --git a/tests/snapshots/nanox_eip191_opensea/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00000.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00000.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00000.png diff --git a/tests/snapshots/nanox_eip191_opensea/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00001.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00001.png diff --git a/tests/snapshots/nanox_eip191_opensea/00002.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00002.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00002.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00002.png diff --git a/tests/snapshots/nanox_eip191_opensea/00003.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00003.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00003.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00003.png diff --git a/tests/snapshots/nanox_eip191_opensea/00004.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00004.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00004.png diff --git a/tests/snapshots/nanox_eip191_opensea/00005.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00005.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00005.png diff --git a/tests/snapshots/nanox_eip191_opensea/00006.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00006.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_opensea/00006.png diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png new file mode 100644 index 0000000..1b27154 Binary files /dev/null and b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00000.png differ diff --git a/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png new file mode 100644 index 0000000..717f3a5 Binary files /dev/null and b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00001.png differ diff --git a/tests/snapshots/nanox_eip191_metamask/00004.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png similarity index 100% rename from tests/snapshots/nanox_eip191_metamask/00004.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00002.png diff --git a/tests/snapshots/nanox_eip191_metamask/00003.png b/tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00003.png similarity index 100% rename from tests/snapshots/nanox_eip191_metamask/00003.png rename to tests/speculos/screenshots/eip191/nanox/personal_sign_reject/00003.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00000.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00000.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00000.png rename to tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00000.png diff --git a/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00001.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00001.png new file mode 100644 index 0000000..68b7cb3 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00001.png differ diff --git a/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00002.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00002.png new file mode 100644 index 0000000..304f99e Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00002.png differ diff --git a/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00003.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00003.png new file mode 100644 index 0000000..cdb80b7 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00003.png differ diff --git a/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00004.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00004.png new file mode 100644 index 0000000..39f91a1 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00004.png differ diff --git a/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00005.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00005.png new file mode 100644 index 0000000..2f61fc9 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00005.png differ diff --git a/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00006.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00006.png new file mode 100644 index 0000000..493527e Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00006.png differ diff --git a/tests/snapshots/nanos_approve_dai_tokens/00007.png b/tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00007.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00007.png rename to tests/speculos/screenshots/eip2930/nanos/sign_eip_2930/00007.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00000.png b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00000.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00000.png rename to tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00000.png diff --git a/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00001.png b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00001.png new file mode 100644 index 0000000..1a0c6c3 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00001.png differ diff --git a/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00002.png b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00002.png new file mode 100644 index 0000000..8588465 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00002.png differ diff --git a/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00003.png b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00003.png new file mode 100644 index 0000000..b2dc741 Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00003.png differ diff --git a/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00004.png b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00004.png new file mode 100644 index 0000000..f1733ce Binary files /dev/null and b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00004.png differ diff --git a/tests/snapshots/nanox_approve_dai_tokens/00005.png b/tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00005.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00005.png rename to tests/speculos/screenshots/eip2930/nanox/sign_eip_2930/00005.png diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00000.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00000.png new file mode 100644 index 0000000..910bc43 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00000.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00001.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00001.png new file mode 100644 index 0000000..1492bd7 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00001.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00002.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00002.png new file mode 100644 index 0000000..f6dba7e Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00002.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00003.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00003.png new file mode 100644 index 0000000..21193e0 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00003.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00004.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00004.png new file mode 100644 index 0000000..45c88a3 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00004.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00005.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00005.png new file mode 100644 index 0000000..a512c88 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00005.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00006.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00006.png new file mode 100644 index 0000000..489127f Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00006.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00007.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00007.png new file mode 100644 index 0000000..61bcb2d Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00007.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00008.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00008.png new file mode 100644 index 0000000..3265601 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00008.png differ diff --git a/tests/snapshots/nanos_eip191_nonascii/00007.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00009.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00007.png rename to tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg/00009.png diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00000.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00000.png new file mode 100644 index 0000000..910bc43 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00000.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00001.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00001.png new file mode 100644 index 0000000..1492bd7 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00001.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00002.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00002.png new file mode 100644 index 0000000..f6dba7e Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00002.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00003.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00003.png new file mode 100644 index 0000000..21193e0 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00003.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00004.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00004.png new file mode 100644 index 0000000..45c88a3 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00004.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00005.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00005.png new file mode 100644 index 0000000..a512c88 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00005.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00006.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00006.png new file mode 100644 index 0000000..489127f Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00006.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00007.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00007.png new file mode 100644 index 0000000..61bcb2d Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00007.png differ diff --git a/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00008.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00008.png new file mode 100644 index 0000000..3265601 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00008.png differ diff --git a/tests/snapshots/nanos_eip191_opensea/00008.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00009.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00008.png rename to tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00009.png diff --git a/tests/snapshots/nanos_eip191_opensea/00007.png b/tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00010.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00007.png rename to tests/speculos/screenshots/eip712/nanos/sign_eip_712_hashed_msg_reject/00010.png diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00000.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00000.png new file mode 100644 index 0000000..00a89fd Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00000.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00001.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00001.png new file mode 100644 index 0000000..dfd24f4 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00001.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00002.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00002.png new file mode 100644 index 0000000..542bf19 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00002.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00003.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00003.png new file mode 100644 index 0000000..ae1ff79 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00003.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00004.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00004.png new file mode 100644 index 0000000..034e96f Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00004.png differ diff --git a/tests/snapshots/nanox_eip191_nonascii/00005.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00005.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00005.png rename to tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg/00005.png diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00000.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00000.png new file mode 100644 index 0000000..00a89fd Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00000.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00001.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00001.png new file mode 100644 index 0000000..dfd24f4 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00001.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00002.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00002.png new file mode 100644 index 0000000..542bf19 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00002.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00003.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00003.png new file mode 100644 index 0000000..ae1ff79 Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00003.png differ diff --git a/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00004.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00004.png new file mode 100644 index 0000000..034e96f Binary files /dev/null and b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00004.png differ diff --git a/tests/snapshots/nanox_eip191_opensea/00008.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00005.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00008.png rename to tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00005.png diff --git a/tests/snapshots/nanox_eip191_nonascii/00004.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00006.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00004.png rename to tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00006.png diff --git a/tests/snapshots/nanox_eip191_opensea/00007.png b/tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00009.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00007.png rename to tests/speculos/screenshots/eip712/nanox/sign_eip_712_hashed_msg_reject/00009.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00000.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00000.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00000.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00000.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00001.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00001.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00001.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00001.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00002.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00002.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00002.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00002.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00003.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00003.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00003.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00003.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00004.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00004.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00004.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00004.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00005.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00005.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00005.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00005.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00006.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00006.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00006.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00006.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00007.png b/tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00007.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00007.png rename to tests/speculos/screenshots/erc1155/nanox/test_transfer_batch_erc1155/00007.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00000.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00000.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00000.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00000.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00001.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00001.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00001.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00001.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00002.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00002.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00002.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00002.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00003.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00003.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00003.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00003.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00004.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00004.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00004.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00004.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00005.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00005.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00005.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00005.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00006.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00006.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00006.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00006.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00007.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00007.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00007.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00007.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00008.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00008.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00008.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00008.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00009.png b/tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00009.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00009.png rename to tests/speculos/screenshots/erc1155/nanox/transfer_erc1155/00009.png diff --git a/tests/snapshots/nanox_erc721_transfer/00000.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00000.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00000.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00000.png diff --git a/tests/snapshots/nanox_erc721_transfer/00001.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00001.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00001.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00001.png diff --git a/tests/snapshots/nanox_erc721_transfer/00002.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00002.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00002.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00002.png diff --git a/tests/snapshots/nanox_erc721_transfer/00003.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00003.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00003.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00003.png diff --git a/tests/snapshots/nanox_erc721_transfer/00004.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00004.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00004.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00004.png diff --git a/tests/snapshots/nanox_erc721_transfer/00005.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00005.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00005.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00005.png diff --git a/tests/snapshots/nanox_erc721_transfer/00006.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00006.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00006.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00006.png diff --git a/tests/snapshots/nanox_erc721_transfer/00007.png b/tests/speculos/screenshots/erc721/nanox/transfer_erc721/00007.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00007.png rename to tests/speculos/screenshots/erc721/nanox/transfer_erc721/00007.png diff --git a/tests/speculos/screenshots/pubkey/nanos/get_public_key/00000.png b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00000.png new file mode 100644 index 0000000..63778c4 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00000.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/get_public_key/00001.png b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00001.png new file mode 100644 index 0000000..63fe23c Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00001.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/get_public_key/00002.png b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00002.png new file mode 100644 index 0000000..b79ecb4 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00002.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/get_public_key/00003.png b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00003.png new file mode 100644 index 0000000..0b61bde Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00003.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/get_public_key/00004.png b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00004.png new file mode 100644 index 0000000..66c411c Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/get_public_key/00004.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00000.png b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00000.png new file mode 100644 index 0000000..63778c4 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00000.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00001.png b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00001.png new file mode 100644 index 0000000..63fe23c Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00001.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00002.png b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00002.png new file mode 100644 index 0000000..b79ecb4 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00002.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00003.png b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00003.png new file mode 100644 index 0000000..0b61bde Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00003.png differ diff --git a/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00004.png b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00004.png new file mode 100644 index 0000000..66c411c Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00004.png differ diff --git a/tests/snapshots/nanos_approve_dai_tokens/00008.png b/tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00005.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00008.png rename to tests/speculos/screenshots/pubkey/nanos/reject_get_public_key/00005.png diff --git a/tests/speculos/screenshots/pubkey/nanox/get_public_key/00000.png b/tests/speculos/screenshots/pubkey/nanox/get_public_key/00000.png new file mode 100644 index 0000000..a487005 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanox/get_public_key/00000.png differ diff --git a/tests/speculos/screenshots/pubkey/nanox/get_public_key/00001.png b/tests/speculos/screenshots/pubkey/nanox/get_public_key/00001.png new file mode 100644 index 0000000..5b381b6 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanox/get_public_key/00001.png differ diff --git a/tests/speculos/screenshots/pubkey/nanox/get_public_key/00002.png b/tests/speculos/screenshots/pubkey/nanox/get_public_key/00002.png new file mode 100644 index 0000000..53ae651 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanox/get_public_key/00002.png differ diff --git a/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00000.png b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00000.png new file mode 100644 index 0000000..a487005 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00000.png differ diff --git a/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00001.png b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00001.png new file mode 100644 index 0000000..5b381b6 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00001.png differ diff --git a/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00002.png b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00002.png new file mode 100644 index 0000000..53ae651 Binary files /dev/null and b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00002.png differ diff --git a/tests/snapshots/nanox_approve_dai_tokens/00006.png b/tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00003.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00006.png rename to tests/speculos/screenshots/pubkey/nanox/reject_get_public_key/00003.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00000.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00000.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00000.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00000.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00001.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00001.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00001.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00001.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00001.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00001.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00002.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00002.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00002.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00003.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00003.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00003.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00004.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00004.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00004.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00005.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00005.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00005.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00006.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00006.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00006.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00007.png diff --git a/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00008.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00008.png new file mode 100644 index 0000000..0aa6e19 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00008.png differ diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00008.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00008.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00009.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00007.png b/tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00010.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00007.png rename to tests/speculos/screenshots/sign/nanos/blind_and_nonce_display/00010.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00000.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00000.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00000.png diff --git a/tests/speculos/screenshots/sign/nanos/blind_simple/00001.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00001.png new file mode 100644 index 0000000..b2ab371 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/blind_simple/00001.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum/00001.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00001.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00002.png diff --git a/tests/snapshots/nanos_transfer_bsc/00002.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00002.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00003.png diff --git a/tests/snapshots/nanos_transfer_bsc/00003.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00003.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00004.png diff --git a/tests/snapshots/nanos_transfer_bsc/00004.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00004.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00005.png diff --git a/tests/snapshots/nanos_transfer_bsc/00005.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00005.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00006.png diff --git a/tests/snapshots/nanos_transfer_bsc/00006.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00006.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00007.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00008.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00008.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00008.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00009.png b/tests/speculos/screenshots/sign/nanos/blind_simple/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00009.png rename to tests/speculos/screenshots/sign/nanos/blind_simple/00009.png diff --git a/tests/snapshots/nanos_transfer_bsc/00000.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00000.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00000.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00001.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00001.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00001.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00001.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00002.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00002.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00002.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00003.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00003.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00003.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00004.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00004.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00004.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00005.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00005.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00005.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00006.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00006.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00006.png diff --git a/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00007.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00007.png new file mode 100644 index 0000000..f0a7d0e Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00007.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum/00007.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00007.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00008.png diff --git a/tests/snapshots/nanos_transfer_bsc/00009.png b/tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00009.png rename to tests/speculos/screenshots/sign/nanos/dai_coin_type_on_network_5234/00009.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00000.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00000.png rename to tests/speculos/screenshots/sign/nanos/limit_nonce/00000.png diff --git a/tests/speculos/screenshots/sign/nanos/limit_nonce/00001.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/limit_nonce/00001.png differ diff --git a/tests/speculos/screenshots/sign/nanos/limit_nonce/00002.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00002.png new file mode 100644 index 0000000..eaf18d9 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/limit_nonce/00002.png differ diff --git a/tests/speculos/screenshots/sign/nanos/limit_nonce/00003.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00003.png new file mode 100644 index 0000000..87688c6 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/limit_nonce/00003.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00004.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00004.png rename to tests/speculos/screenshots/sign/nanos/limit_nonce/00004.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00005.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00005.png rename to tests/speculos/screenshots/sign/nanos/limit_nonce/00005.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00006.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00006.png rename to tests/speculos/screenshots/sign/nanos/limit_nonce/00006.png diff --git a/tests/speculos/screenshots/sign/nanos/limit_nonce/00007.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00007.png new file mode 100644 index 0000000..933691b Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/limit_nonce/00007.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum/00008.png b/tests/speculos/screenshots/sign/nanos/limit_nonce/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00008.png rename to tests/speculos/screenshots/sign/nanos/limit_nonce/00008.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00000.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00000.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00000.png diff --git a/tests/speculos/screenshots/sign/nanos/nonce_display/00001.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/nonce_display/00001.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00002.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00002.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00002.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00003.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00003.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00003.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00004.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00004.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00004.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00005.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00005.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00005.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00006.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00006.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00006.png diff --git a/tests/speculos/screenshots/sign/nanos/nonce_display/00007.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00007.png new file mode 100644 index 0000000..46e1645 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/nonce_display/00007.png differ diff --git a/tests/speculos/screenshots/sign/nanos/nonce_display/00008.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00008.png new file mode 100644 index 0000000..c84d3ec Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/nonce_display/00008.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00009.png b/tests/speculos/screenshots/sign/nanos/nonce_display/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00009.png rename to tests/speculos/screenshots/sign/nanos/nonce_display/00009.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00000.png b/tests/speculos/screenshots/sign/nanos/reject/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00000.png rename to tests/speculos/screenshots/sign/nanos/reject/00000.png diff --git a/tests/speculos/screenshots/sign/nanos/reject/00001.png b/tests/speculos/screenshots/sign/nanos/reject/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/reject/00001.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00002.png b/tests/speculos/screenshots/sign/nanos/reject/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00002.png rename to tests/speculos/screenshots/sign/nanos/reject/00002.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00003.png b/tests/speculos/screenshots/sign/nanos/reject/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00003.png rename to tests/speculos/screenshots/sign/nanos/reject/00003.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00004.png b/tests/speculos/screenshots/sign/nanos/reject/00004.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00004.png rename to tests/speculos/screenshots/sign/nanos/reject/00004.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00005.png b/tests/speculos/screenshots/sign/nanos/reject/00005.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00005.png rename to tests/speculos/screenshots/sign/nanos/reject/00005.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00006.png b/tests/speculos/screenshots/sign/nanos/reject/00006.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00006.png rename to tests/speculos/screenshots/sign/nanos/reject/00006.png diff --git a/tests/speculos/screenshots/sign/nanos/reject/00007.png b/tests/speculos/screenshots/sign/nanos/reject/00007.png new file mode 100644 index 0000000..c84d3ec Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/reject/00007.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00008.png b/tests/speculos/screenshots/sign/nanos/reject/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00008.png rename to tests/speculos/screenshots/sign/nanos/reject/00008.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00009.png b/tests/speculos/screenshots/sign/nanos/reject/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00009.png rename to tests/speculos/screenshots/sign/nanos/reject/00009.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00000.png b/tests/speculos/screenshots/sign/nanos/simple/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00000.png rename to tests/speculos/screenshots/sign/nanos/simple/00000.png diff --git a/tests/speculos/screenshots/sign/nanos/simple/00001.png b/tests/speculos/screenshots/sign/nanos/simple/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/simple/00001.png differ diff --git a/tests/snapshots/nanos_transfer_palm_network/00002.png b/tests/speculos/screenshots/sign/nanos/simple/00002.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00002.png rename to tests/speculos/screenshots/sign/nanos/simple/00002.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00003.png b/tests/speculos/screenshots/sign/nanos/simple/00003.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00003.png rename to tests/speculos/screenshots/sign/nanos/simple/00003.png diff --git a/tests/speculos/screenshots/sign/nanos/simple/00004.png b/tests/speculos/screenshots/sign/nanos/simple/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/simple/00004.png differ diff --git a/tests/speculos/screenshots/sign/nanos/simple/00005.png b/tests/speculos/screenshots/sign/nanos/simple/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/simple/00005.png differ diff --git a/tests/speculos/screenshots/sign/nanos/simple/00006.png b/tests/speculos/screenshots/sign/nanos/simple/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/simple/00006.png differ diff --git a/tests/speculos/screenshots/sign/nanos/simple/00007.png b/tests/speculos/screenshots/sign/nanos/simple/00007.png new file mode 100644 index 0000000..c84d3ec Binary files /dev/null and b/tests/speculos/screenshots/sign/nanos/simple/00007.png differ diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00013.png b/tests/speculos/screenshots/sign/nanos/simple/00008.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00013.png rename to tests/speculos/screenshots/sign/nanos/simple/00008.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00000.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00000.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00000.png rename to tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00000.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00001.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00001.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00001.png rename to tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00001.png diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00001.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00001.png rename to tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00002.png diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00002.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00002.png rename to tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00003.png diff --git a/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00004.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00004.png new file mode 100644 index 0000000..61f3687 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00004.png differ diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00004.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00004.png rename to tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00005.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00005.png b/tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00006.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00005.png rename to tests/speculos/screenshots/sign/nanox/blind_and_nonce_display/00006.png diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00000.png b/tests/speculos/screenshots/sign/nanox/blind_simple/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00000.png rename to tests/speculos/screenshots/sign/nanox/blind_simple/00000.png diff --git a/tests/speculos/screenshots/sign/nanox/blind_simple/00001.png b/tests/speculos/screenshots/sign/nanox/blind_simple/00001.png new file mode 100644 index 0000000..9901736 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/blind_simple/00001.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum/00001.png b/tests/speculos/screenshots/sign/nanox/blind_simple/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00001.png rename to tests/speculos/screenshots/sign/nanox/blind_simple/00002.png diff --git a/tests/snapshots/nanox_transfer_bsc/00002.png b/tests/speculos/screenshots/sign/nanox/blind_simple/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00002.png rename to tests/speculos/screenshots/sign/nanox/blind_simple/00003.png diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00004.png b/tests/speculos/screenshots/sign/nanox/blind_simple/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00004.png rename to tests/speculos/screenshots/sign/nanox/blind_simple/00004.png diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00005.png b/tests/speculos/screenshots/sign/nanox/blind_simple/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00005.png rename to tests/speculos/screenshots/sign/nanox/blind_simple/00005.png diff --git a/tests/snapshots/nanox_transfer_bsc/00000.png b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00000.png rename to tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00000.png diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00001.png b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00001.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00001.png rename to tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00001.png diff --git a/tests/snapshots/nanox_transfer_ethereum/00002.png b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00002.png rename to tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00002.png diff --git a/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00003.png b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00003.png new file mode 100644 index 0000000..7037eb5 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00003.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum/00003.png b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00003.png rename to tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00004.png diff --git a/tests/snapshots/nanox_transfer_bsc/00005.png b/tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00005.png rename to tests/speculos/screenshots/sign/nanox/dai_coin_type_on_network_5234/00005.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00000.png b/tests/speculos/screenshots/sign/nanox/limit_nonce/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00000.png rename to tests/speculos/screenshots/sign/nanox/limit_nonce/00000.png diff --git a/tests/speculos/screenshots/sign/nanox/limit_nonce/00001.png b/tests/speculos/screenshots/sign/nanox/limit_nonce/00001.png new file mode 100644 index 0000000..84aba2c Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/limit_nonce/00001.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00002.png b/tests/speculos/screenshots/sign/nanox/limit_nonce/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00002.png rename to tests/speculos/screenshots/sign/nanox/limit_nonce/00002.png diff --git a/tests/speculos/screenshots/sign/nanox/limit_nonce/00003.png b/tests/speculos/screenshots/sign/nanox/limit_nonce/00003.png new file mode 100644 index 0000000..3edd720 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/limit_nonce/00003.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum/00004.png b/tests/speculos/screenshots/sign/nanox/limit_nonce/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00004.png rename to tests/speculos/screenshots/sign/nanox/limit_nonce/00004.png diff --git a/tests/snapshots/nanox_transfer_ethereum/00000.png b/tests/speculos/screenshots/sign/nanox/nonce_display/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00000.png rename to tests/speculos/screenshots/sign/nanox/nonce_display/00000.png diff --git a/tests/speculos/screenshots/sign/nanox/nonce_display/00001.png b/tests/speculos/screenshots/sign/nanox/nonce_display/00001.png new file mode 100644 index 0000000..0976a31 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/nonce_display/00001.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00002.png b/tests/speculos/screenshots/sign/nanox/nonce_display/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00002.png rename to tests/speculos/screenshots/sign/nanox/nonce_display/00002.png diff --git a/tests/speculos/screenshots/sign/nanox/nonce_display/00003.png b/tests/speculos/screenshots/sign/nanox/nonce_display/00003.png new file mode 100644 index 0000000..45b4d13 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/nonce_display/00003.png differ diff --git a/tests/speculos/screenshots/sign/nanox/nonce_display/00004.png b/tests/speculos/screenshots/sign/nanox/nonce_display/00004.png new file mode 100644 index 0000000..70c1b9a Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/nonce_display/00004.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00005.png b/tests/speculos/screenshots/sign/nanox/nonce_display/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00005.png rename to tests/speculos/screenshots/sign/nanox/nonce_display/00005.png diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00000.png b/tests/speculos/screenshots/sign/nanox/reject/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00000.png rename to tests/speculos/screenshots/sign/nanox/reject/00000.png diff --git a/tests/speculos/screenshots/sign/nanox/reject/00001.png b/tests/speculos/screenshots/sign/nanox/reject/00001.png new file mode 100644 index 0000000..0976a31 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/reject/00001.png differ diff --git a/tests/snapshots/nanox_transfer_palm_network/00002.png b/tests/speculos/screenshots/sign/nanox/reject/00002.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00002.png rename to tests/speculos/screenshots/sign/nanox/reject/00002.png diff --git a/tests/speculos/screenshots/sign/nanox/reject/00003.png b/tests/speculos/screenshots/sign/nanox/reject/00003.png new file mode 100644 index 0000000..70c1b9a Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/reject/00003.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00004.png b/tests/speculos/screenshots/sign/nanox/reject/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00004.png rename to tests/speculos/screenshots/sign/nanox/reject/00004.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00005.png b/tests/speculos/screenshots/sign/nanox/reject/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00005.png rename to tests/speculos/screenshots/sign/nanox/reject/00005.png diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00000.png b/tests/speculos/screenshots/sign/nanox/simple/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00000.png rename to tests/speculos/screenshots/sign/nanox/simple/00000.png diff --git a/tests/speculos/screenshots/sign/nanox/simple/00001.png b/tests/speculos/screenshots/sign/nanox/simple/00001.png new file mode 100644 index 0000000..0976a31 Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/simple/00001.png differ diff --git a/tests/speculos/screenshots/sign/nanox/simple/00002.png b/tests/speculos/screenshots/sign/nanox/simple/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/simple/00002.png differ diff --git a/tests/speculos/screenshots/sign/nanox/simple/00003.png b/tests/speculos/screenshots/sign/nanox/simple/00003.png new file mode 100644 index 0000000..70c1b9a Binary files /dev/null and b/tests/speculos/screenshots/sign/nanox/simple/00003.png differ diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00009.png b/tests/speculos/screenshots/sign/nanox/simple/00004.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00009.png rename to tests/speculos/screenshots/sign/nanox/simple/00004.png diff --git a/tests/speculos/setup.cfg b/tests/speculos/setup.cfg new file mode 100644 index 0000000..c79fd88 --- /dev/null +++ b/tests/speculos/setup.cfg @@ -0,0 +1,20 @@ +[tool:pytest] +addopts = --strict-markers + +[pylint] +disable = C0114, # missing-module-docstring + C0115, # missing-class-docstring + C0116, # missing-function-docstring + C0103, # invalid-name + R0801, # duplicate-code + R0913 # too-many-arguments +extension-pkg-whitelist=hid + +[pycodestyle] +max-line-length = 90 + +[mypy-hid.*] +ignore_missing_imports = True + +[mypy-pytest.*] +ignore_missing_imports = True diff --git a/tests/speculos/test_configuration_cmd.py b/tests/speculos/test_configuration_cmd.py new file mode 100644 index 0000000..6f9e5e0 --- /dev/null +++ b/tests/speculos/test_configuration_cmd.py @@ -0,0 +1,10 @@ + +def test_configuration(cmd): + if cmd.model == "nanos": + assert cmd.get_configuration() == (14, 1, 9, 20) + + if cmd.model == "nanox": + assert cmd.get_configuration() == (14, 1, 9, 20) + + if cmd.model == "nanosp": + assert cmd.get_configuration() == (14, 1, 9, 20) \ No newline at end of file diff --git a/tests/speculos/test_eip1559.py b/tests/speculos/test_eip1559.py new file mode 100644 index 0000000..f834df3 --- /dev/null +++ b/tests/speculos/test_eip1559.py @@ -0,0 +1,64 @@ +from time import sleep + +from ethereum_client.utils import compare_screenshot, save_screenshot, PATH_IMG, parse_sign_response + +def test_sign_eip_1559(cmd): + result: list = [] + # with bip32_path "44'/60'/0'/0/0" + apdu_sign_eip_1559 = bytes.fromhex("e004000088058000002c8000003c80000000000000000000000002f87001018502540be4008502540be40086246139ca800094cccccccccccccccccccccccccccccccccccccccc8000c001a0e07fb8a64ea3786c9a6649e54429e2786af3ea31c6d06165346678cf8ce44f9ba00e4a0526db1e905b7164a858fd5ebd2f1759e22e6955499448bd276a6aa62830") + + with cmd.send_apdu_context(apdu_sign_eip_1559, result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00001.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00004.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00005.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00006.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00002.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00003.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/eip1559/{PATH_IMG[cmd.model]}/sign_eip_1559/00004.png") + cmd.client.press_and_release('both') + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x01 + assert r.hex() == "3d6dfabc6c52374bfa34cb2c433856a0bcd9484870dd1b50249f7164a5fce052" + assert s.hex() == "0548a774dd0b63930d83cb2e1a836fe3ef24444e8b758b00585d9a076c0e98a8" diff --git a/tests/speculos/test_eip191.py b/tests/speculos/test_eip191.py new file mode 100644 index 0000000..d24ad0b --- /dev/null +++ b/tests/speculos/test_eip191.py @@ -0,0 +1,209 @@ +from time import sleep + +import pytest + +import ethereum_client +from ethereum_client.utils import compare_screenshot, compare_screenshot, parse_sign_response, save_screenshot, PATH_IMG +from ethereum_client.transaction import PersonalTransaction + +def test_personal_sign_metamask(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0/0" + transaction = PersonalTransaction( + msg="Example `personal_sign` message" + ) + + with cmd.personal_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00000.png") + cmd.client.press_and_release('right') + + # Message 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00002.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00003.png") + cmd.client.press_and_release('both') + if cmd.model == "nanox" or cmd.model == "nanosp": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00000.png") + cmd.client.press_and_release('right') + + # Message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00001.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_metamask/00002.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x1c # 28 + assert r.hex() == "916099cf0d9c21911c85f0770a47a9696a8189e78c259cf099749748c507baae" + assert s.hex() == "0d72234bc0ac2e94c5f7a5f4f9cd8610a52be4ea55515a85b9703f1bb158415c" + +def test_personal_sign_reject(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0/0" + transaction = PersonalTransaction( + msg="This is an reject sign" + ) + + with pytest.raises(ethereum_client.exception.errors.DenyError) as error: + with cmd.personal_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00000.png") + cmd.client.press_and_release('right') + + # Message 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00002.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00003.png") + cmd.client.press_and_release('right') + + # Cancel signature + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00004.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00000.png") + cmd.client.press_and_release('right') + + # Message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00001.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00002.png") + cmd.client.press_and_release('right') + + # Cancel signature + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_reject/00003.png") + cmd.client.press_and_release('both') + assert error.args[0] == '0x6985' + +def test_personal_sign_non_ascii(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0/0" + transaction = PersonalTransaction( + msg="0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658" + ) + + with cmd.personal_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00000.png") + cmd.client.press_and_release('right') + + # Message 1/4, 2/4, 3/4, 4/4 + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00004.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00005.png") + cmd.client.press_and_release('both') + if cmd.model == "nanox" or cmd.model == "nanosp": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00000.png") + cmd.client.press_and_release('right') + + # Message 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00002.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_non_ascii/00003.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x1c # 28 + assert r.hex() == "64bdbdb6959425445d00ff2536a7018d2dce904e1f7475938fe4221c3c72500c" + assert s.hex() == "7c9208e99b6b9266a73aae17b73472d06499746edec34fd47a9dab42f06f2e42" + +def test_personal_sign_opensea(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0/0" + transaction = PersonalTransaction( + msg="Welcome to OpenSea!\n\nClick to sign in and accept the OpenSea Terms of Service: https://opensea.io/tos\n\nThis request will not trigger a blockchain transaction or cost any gas fees.\n\nYour authentication status will reset after 24 hours.\n\nWallet address:\n0x9858effd232b4033e47d90003d41ec34ecaeda94\n\nNonce:\n2b02c8a0-f74f-4554-9821-a28054dc9121" + ) + + with cmd.personal_sign_tx(bip32_path, transaction, result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00000.png") + cmd.client.press_and_release('right') + + # Message 1/5, 2/5, 3/5, 4/5, 5/5 + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00005.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00006.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00000.png") + cmd.client.press_and_release('right') + + # Message 1/5, 2/5, 3/5, 4/5, 5/5 + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00005.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip191/{PATH_IMG[cmd.model]}/personal_sign_opensea/00006.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x1c # 28 + assert r.hex() == "61a68c986f087730d2f6ecf89d6d1e48ab963ac461102bb02664bc05c3db75bb" + assert s.hex() == "5714729ef441e097673a7b29a681e97f6963d875eeed2081f26b0b6686cd2bd2" diff --git a/tests/speculos/test_eip2930.py b/tests/speculos/test_eip2930.py new file mode 100644 index 0000000..972cbc5 --- /dev/null +++ b/tests/speculos/test_eip2930.py @@ -0,0 +1,72 @@ +from time import sleep + +from ethereum_client.utils import compare_screenshot, save_screenshot, PATH_IMG, parse_sign_response + +def test_sign_eip_2930(cmd): + result: list = [] + apdu_sign_eip_2930 = bytes.fromhex("e004000096058000002c8000003c80000000000000000000000001f886030685012a05f20082520894b2bb2b958afa2e96dab3f3ce7162b87daea39017872386f26fc1000080f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000007") + + with cmd.send_apdu_context(apdu_sign_eip_2930, result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00001.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00004.png") + cmd.client.press_and_release('right') + + # Network + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00005.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00006.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00007.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00002.png") + cmd.client.press_and_release('right') + + # Network + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00003.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00004.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/eip2930/{PATH_IMG[cmd.model]}/sign_eip_2930/00005.png") + cmd.client.press_and_release('both') + + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x01 + assert r.hex() == "a74d82400f49d1f9d85f734c22a1648d4ab74bb6367bef54c6abb0936be3d8b7" + assert s.hex() == "7a84a09673394c3c1bd76be05620ee17a2d0ff32837607625efa433cc017854e" diff --git a/tests/speculos/test_eip712.py b/tests/speculos/test_eip712.py new file mode 100644 index 0000000..6a72aa4 --- /dev/null +++ b/tests/speculos/test_eip712.py @@ -0,0 +1,179 @@ +from time import sleep + +import pytest + +from ethereum_client.utils import compare_screenshot, save_screenshot, PATH_IMG, parse_sign_response +from ethereum_client.transaction import EIP712 +import ethereum_client + +def test_sign_eip_712_hashed_msg(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0'/0" + transaction = EIP712( + domain_hash="c24f499b8c957196651b13edd64aaccc3980009674b2aea0966c8a56ba81278e", + msg_hash="9d96be8a7cca396e711a3ba356bd9878df02a726d753ddb6cda3c507d888bc77" + ) + + with cmd.sign_eip712(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Sign typed message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00000.png") + cmd.client.press_and_release('right') + + # Domain hash 1/4, 2/4, 3/4, 4/4 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00004.png") + cmd.client.press_and_release('right') + + # Message hash 1/4, 2/4, 3/4, 4/4 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00006.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00007.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00008.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00009.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Sign typed message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00000.png") + cmd.client.press_and_release('right') + + # Domain hash 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00002.png") + cmd.client.press_and_release('right') + + # Message hash 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00004.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg/00005.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x1B #27 + assert r.hex() == "b1cf3dd6f2902ae9b181e158cc07f6ee6e6c456360b18842ece0b947dec89f07" + assert s.hex() == "5372a9b1a495b76ccd75347b6f591867859fb73aa05a546b79c81073ddff5e8a" + +def test_sign_eip_712_hashed_msg_reject(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0'/0" + transaction = EIP712( + domain_hash="c24f499b8c957196651b13edd64aaccc3980009674b2aea0966c8a56ba81278e", + msg_hash="9d96be8a7cca396e711a3ba356bd9878df02a726d753ddb6cda3c507d888bc77" + ) + + with pytest.raises(ethereum_client.exception.errors.DenyError) as error: + with cmd.sign_eip712(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Sign typed message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00000.png") + cmd.client.press_and_release('right') + + # Domain hash 1/4, 2/4, 3/4, 4/4 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00004.png") + cmd.client.press_and_release('right') + + # Message hash 1/4, 2/4, 3/4, 4/4 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00006.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00007.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00008.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00009.png") + cmd.client.press_and_release('right') + + # Cancel signature + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00010.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Sign typed message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00000.png") + cmd.client.press_and_release('right') + + # Domain hash 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00002.png") + cmd.client.press_and_release('right') + + # Message hash 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00004.png") + cmd.client.press_and_release('right') + + # Sign message + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00005.png") + cmd.client.press_and_release('right') + + # Cancel signature + compare_screenshot(cmd, f"screenshots/eip712/{PATH_IMG[cmd.model]}/sign_eip_712_hashed_msg_reject/00006.png") + cmd.client.press_and_release('both') + assert error.args[0] == '0x6985' + +def test_sign_eip_712_bad_domain(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0'/0" + transaction = EIP712( + domain_hash="deadbeef", + msg_hash="9d96be8a7cca396e711a3ba356bd9878df02a726d753ddb6cda3c507d888bc77" + ) + + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + + with cmd.sign_eip712(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + pass + + assert error.args[0] == '0x6a80' + +def test_sign_eip_712_bad_msg(cmd): + result: list = [] + + bip32_path="44'/60'/0'/0'/0" + transaction = EIP712( + domain_hash="c24f499b8c957196651b13edd64aaccc3980009674b2aea0966c8a56ba81278e", + msg_hash="deadbeef" + ) + + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + + with cmd.sign_eip712(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + pass + + assert error.args[0] == '0x6a80' \ No newline at end of file diff --git a/tests/speculos/test_erc1155.py b/tests/speculos/test_erc1155.py new file mode 100644 index 0000000..b0692ec --- /dev/null +++ b/tests/speculos/test_erc1155.py @@ -0,0 +1,208 @@ +from time import sleep + +import pytest + +import ethereum_client +from ethereum_client.utils import compare_screenshot, save_screenshot, PATH_IMG, parse_sign_response +from ethereum_client.plugin import Plugin + +SIGN_FIRST = bytes.fromhex("e004000096058000002c8000003c800000000000000000000000f901090b8520b673dd0082bcb394495f947276749ce646f68ac8c248420045cb7b5e80b8e4f242432a0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596cabf06640f8ca8fc5e0ed471b10befcdf65a33e4300000000") +SIGN_MORE = bytes.fromhex("e00480008b00006a0000000064000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080") + +PLUGIN = Plugin( + type=1, + version=1, + name="ERC1155", + addr="0x495f947276749ce646f68ac8c248420045cb7b5e", + selector=0xf242432a, + chainID=1, + keyID=0, + algorithm=1, + sign="3045022100ec4377d17e8d98d424bf16b29c691bc1a010825fb5b8a35de0268a9dc22eab2402206701b016fe6718bf519d18cc12e9838e9ef898cc4c143017839023c3260b2d74", +) + +PROVIDE_NFT_INFORMATION = Plugin( + type=1, + version=1, + name="OpenSea Collection", + addr="0x495f947276749ce646f68ac8c248420045cb7b5e", + chainID=1, + keyID=0, + algorithm=1, + sign="304502210083e357a828f13d574b1296214a3749c194ab1df1f8a243655c053b1c72f91e0c02201ed93cfac7e87759445c4da2e4bfd6e1cf0405ea37c7293bc965948f51bef5cc", +) + +def test_transfer_erc1155(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + cmd.set_plugin(plugin=PLUGIN) + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + sleep(0.5) + # Review transaction + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00000.png") + cmd.client.press_and_release('right') + + # NFT Transfert + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00001.png") + cmd.client.press_and_release('right') + + # To + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00002.png") + cmd.client.press_and_release('right') + + # Collection Name + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00003.png") + cmd.client.press_and_release('right') + + # NFT Address + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00004.png") + cmd.client.press_and_release('right') + + # NFT ID 1/2, 2/2 + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00006.png") + cmd.client.press_and_release('right') + + # Quantity + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00007.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00008.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/transfer_erc1155/00009.png") + cmd.client.press_and_release('both') + + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x25 # 37 + assert r.hex() == "ab3eca1a0b5c66bfe603252037682a024a12f92d799b4d74993a8bf4221bbe7d" + assert s.hex() == "24de0c0598d1d8e5ea99b75fa26105478f45f43b510e504fc1b14f07fe7dda2a" + + +def test_transfer_erc1155_without_nft_provide_info(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + + cmd.set_plugin(plugin=PLUGIN) + + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + pass + + assert error.args[0] == '0x6a80' + + +def test_transfer_erc1155_without_set_plugin(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + with pytest.raises(ethereum_client.exception.errors.DenyError) as error: + + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + pass + + assert error.args[0] == '0x6985' + + +# =========================== +# Batch +# =========================== + +SIGN_FIRST_BATCH = bytes.fromhex("e004000096058000002c8000003c800000000000000000000000f9020b0e850d8cfd86008301617d94495f947276749ce646f68ac8c248420045cb7b5e80b901e42eb2c2d60000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c00000000000000000000000000000000000000000000") +SIGN_MORE_1_BATCH = bytes.fromhex("e004800096000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000003abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a0000000064def9d99ff495856496c028c0") +SIGN_MORE_2_BATCH = bytes.fromhex("e00480009689732473fcd0bbbe000000000000a30000000001abf06640f8ca8fc5e0ed471b10befcdf65a33e430000000000006a00000000640000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000") +SIGN_MORE_3_BATCH = bytes.fromhex("e00480006100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000018080") + +PLUGIN_BATCH = Plugin( + type=1, + version=1, + name="ERC1155", + addr="0x495f947276749ce646f68ac8c248420045cb7b5e", + selector=0x2eb2c2d6, + chainID=1, + keyID=0, + algorithm=1, + sign="304502210087b35cefc53fd94e25404933eb0d5ff08f20ba655d181de3b24ff0099dc3317f02204a216aa9e0b84bef6e20fcb036bd49647bf0cab66732b99b49ec277ffb682aa1", +) + +PROVIDE_NFT_INFORMATION_BATCH = Plugin( + type=1, + version=1, + name="OpenSea Shared Storefront", + addr="0x495f947276749ce646f68ac8c248420045cb7b5e", + chainID=1, + keyID=0, + algorithm=1, + sign="3045022100c74cd613a27a9f4887210f5a3a0e12745e1ba0ab3a0d284cb6485d89c3cce4e602205a13e62a91164985cf58a838f8f531c0b91b980d206a5ba8df28270023ef93a3", +) + +def test_transfer_batch_erc1155(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + cmd.set_plugin(plugin=PLUGIN_BATCH) + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION_BATCH) + + cmd.send_apdu(SIGN_FIRST_BATCH) + cmd.send_apdu(SIGN_MORE_1_BATCH) + cmd.send_apdu(SIGN_MORE_2_BATCH) + + with cmd.send_apdu_context(SIGN_MORE_3_BATCH, result) as ex: + sleep(0.5) + # Review transaction + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00000.png") + cmd.client.press_and_release('right') + + # NFT Batch Transfer + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00001.png") + cmd.client.press_and_release('right') + + # To + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00002.png") + cmd.client.press_and_release('right') + + # Collection Name + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00003.png") + cmd.client.press_and_release('right') + + # NFT Address + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00004.png") + cmd.client.press_and_release('right') + + # Total Quantity + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00005.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00006.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/erc1155/{PATH_IMG[cmd.model]}/test_transfer_batch_erc1155/00007.png") + cmd.client.press_and_release('both') + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x25 # 37 + assert r.hex() == "ee17b599747775a5056c6f654b476bdec0f3fea2c03a4754a31f736e61015082" + assert s.hex() == "3d76f264da438a5bda69389e59c08216e98ddb6649323bd5055980ae31f79c1c" diff --git a/tests/speculos/test_erc20information.py b/tests/speculos/test_erc20information.py new file mode 100644 index 0000000..9af2c7b --- /dev/null +++ b/tests/speculos/test_erc20information.py @@ -0,0 +1,31 @@ +import pytest +from ethereum_client.plugin import ERC20Information +import ethereum_client + +def test_provide_erc20_token(cmd): + erc20_info = ERC20Information( + erc20_ticker="5a5258", + addr="0xe41d2489571d322189246dafa5ebde1f4699f498", + nb_decimals=18, + chainID=1, + sign="304402200ae8634c22762a8ba41d2acb1e068dcce947337c6dd984f13b820d396176952302203306a49d8a6c35b11a61088e1570b3928ca3a0db6bd36f577b5ef87628561ff7" + ) + + # Test if return 9000 + try: + cmd.provide_erc20_token_information(info=erc20_info) + except: + raise + +def test_provide_erc20_token_error(cmd): + erc20_info = ERC20Information( + erc20_ticker="5a5258", + addr="0xe41d2489571d322189246dafa5ebde1f4699f498", + nb_decimals=18, + chainID=1, + sign="deadbeef" + ) + + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + cmd.provide_erc20_token_information(info=erc20_info) + assert error.args[0] == '0x6a80' \ No newline at end of file diff --git a/tests/speculos/test_erc721.py b/tests/speculos/test_erc721.py new file mode 100644 index 0000000..8652501 --- /dev/null +++ b/tests/speculos/test_erc721.py @@ -0,0 +1,115 @@ +from time import sleep + +import pytest + +import ethereum_client +from ethereum_client.utils import compare_screenshot, save_screenshot, PATH_IMG, parse_sign_response +from ethereum_client.plugin import Plugin + +SIGN_FIRST = bytes.fromhex("e004000096058000002c8000003c800000000000000000000000f88a0a852c3ce1ec008301f5679460f80121c31a0d46b5279700f9df786054aa5ee580b86442842e0e0000000000000000000000006cbcd73cd8e8a42844662f0a0e76d7f79afd933d000000000000000000000000c2907efcce4011c491bbeda8a0fa63ba7aab596c000000000000000000000000000000000000000000000000") +SIGN_MORE = bytes.fromhex("e00480000b0000000000112999018080") + +PLUGIN = Plugin( + type=1, + version=1, + name="ERC721", + addr="0x60f80121c31a0d46b5279700f9df786054aa5ee5", + selector=0x42842e0e, + chainID=1, + keyID=0, + algorithm=1, + sign="304502202e2282d7d3ea714da283010f517af469e1d59654aaee0fc438f017aa557eaea50221008b369679381065bbe01135723a4f9adb229295017d37c4d30138b90a51cf6ab6", +) + +PROVIDE_NFT_INFORMATION = Plugin( + type=1, + version=1, + name="Rarible", + addr="0x60f80121c31a0d46b5279700f9df786054aa5ee5", + chainID=1, + keyID=0, + algorithm=1, + sign="3045022025696986ef5f0ee2f72d9c6e41d7e2bf2e4f06373ab26d73ebe326c7fd4c7a6602210084f6b064d8750ae68ed5dd012296f37030390ec06ff534c5da6f0f4a4460af33", +) + +def test_transfer_erc721(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + cmd.set_plugin(plugin=PLUGIN) + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + sleep(0.5) + # Review transaction + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00000.png") + cmd.client.press_and_release('right') + + # NFT Transfer + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00001.png") + cmd.client.press_and_release('right') + + # To + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00002.png") + cmd.client.press_and_release('right') + + # Collection Name + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00003.png") + cmd.client.press_and_release('right') + + # NFT Address + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00004.png") + cmd.client.press_and_release('right') + + # NFT ID + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00005.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00006.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/erc721/{PATH_IMG[cmd.model]}/transfer_erc721/00007.png") + cmd.client.press_and_release('both') + + response: bytes = result[0] + v, r, s = parse_sign_response(response) + + assert v == 0x25 # 37 + assert r.hex() == "68ba082523584adbfc31d36d68b51d6f209ce0838215026bf1802a8f17dcdff4" + assert s.hex() == "7c92908fa05c8bc86507a3d6a1c8b3c2722ee01c836d89a61df60c1ab0b43fff" + + +def test_transfer_erc721_without_nft_provide_info(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + + cmd.set_plugin(plugin=PLUGIN) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + pass + + assert error.args[0] == '0x6a80' + + + +def test_transfer_erc721_without_set_plugin(cmd): + result: list = [] + + if cmd.model == "nanox" or cmd.model == "nanosp": + with pytest.raises(ethereum_client.exception.errors.DenyError) as error: + cmd.provide_nft_information(plugin=PROVIDE_NFT_INFORMATION) + + cmd.send_apdu(SIGN_FIRST) + + with cmd.send_apdu_context(SIGN_MORE, result) as ex: + pass + + assert error.args[0] == '0x6985' \ No newline at end of file diff --git a/tests/speculos/test_pubkey_cmd.py b/tests/speculos/test_pubkey_cmd.py new file mode 100644 index 0000000..17f1d78 --- /dev/null +++ b/tests/speculos/test_pubkey_cmd.py @@ -0,0 +1,117 @@ +from time import sleep + +import pytest + +import ethereum_client +from ethereum_client.utils import compare_screenshot, save_screenshot, PATH_IMG + + +def test_get_public_key(cmd): + # ETHER COIN without display + result: list = [] + with cmd.get_public_key(bip32_path="44'/60'/1'/0/0", display=False, result=result) as exchange: + pass + + uncompressed_addr_len, eth_addr, chain_code = result + + assert len(uncompressed_addr_len) == 65 + assert len(eth_addr) == 40 + assert len(chain_code) == 32 + + assert uncompressed_addr_len == b'\x04\xea\x02&\x91\xc7\x87\x00\xd2\xc3\xa0\xc7E\xbe\xa4\xf2\xb8\xe5\xe3\x13\x97j\x10B\xf6\xa1Vc\\\xb2\x05\xda\x1a\xcb\xfe\x04*\nZ\x89eyn6"E\x89\x0eT\xbd-\xbex\xec\x1e\x18df\xf2\xe9\xd0\xf5\xd5\xd8\xdf' + assert eth_addr == b'463e4e114AA57F54f2Fd2C3ec03572C6f75d84C2' + assert chain_code == b'\xaf\x89\xcd)\xea${8I\xec\xc80\xc2\xc8\x94\\e1\xd6P\x87\x07?\x9f\xd09\x00\xa0\xea\xa7\x96\xc8' + + # DAI COIN with display + result: list = [] + with cmd.get_public_key(bip32_path="44'/700'/1'/0/0", display=True, result=result) as exchange: + sleep(0.5) + + if cmd.model == "nanos": + # Verify address + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00000.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00003.png") + cmd.client.press_and_release('right') + + # Approved + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00004.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Verify address + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00000.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00001.png") + cmd.client.press_and_release('right') + + # Approve + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/get_public_key/00002.png") + cmd.client.press_and_release('both') + + uncompressed_addr_len, eth_addr, chain_code = result + assert len(uncompressed_addr_len) == 65 + assert len(eth_addr) == 40 + assert len(chain_code) == 32 + + assert uncompressed_addr_len == b'\x04V\x8a\x15\xdc\xed\xc8[\x16\x17\x8d\xaf\xcax\x91v~{\x9c\x06\xba\xaa\xde\xf4\xe7\x9f\x86\x1d~\xed)\xdc\n8\x9c\x84\xf01@E\x13]\xd7~6\x8e\x8e\xabb-\xad\xcdo\xc3Fw\xb7\xc8y\xdbQ/\xc3\xe5\x18' + assert eth_addr == b'Ba9A9aED0a1AbBE1da1155F64e73e57Af7995880' + assert chain_code == b'4\xaa\x95\xf4\x02\x12\x12-T\x155\x86\xed\xc5\x0b\x1d8\x81\xae\xce\xbd\x1a\xbbv\x9a\xc7\xd5\x1a\xd0KT\xe4' + + +def test_reject_get_public_key(cmd): + # DAI COIN with display + result: list = [] + + with pytest.raises(ethereum_client.exception.errors.DenyError) as error: + + with cmd.get_public_key(bip32_path="44'/700'/1'/0/0", display=True, result=result) as exchange: + sleep(0.5) + + if cmd.model == "nanos": + # Verify address + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00000.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00003.png") + cmd.client.press_and_release('right') + + # Approve + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00004.png") + cmd.client.press_and_release('right') + + # Reject + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00005.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Verify address + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00000.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00001.png") + cmd.client.press_and_release('right') + + # Approve + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00002.png") + cmd.client.press_and_release('right') + + # Reject + compare_screenshot(cmd, f"screenshots/pubkey/{PATH_IMG[cmd.model]}/reject_get_public_key/00003.png") + cmd.client.press_and_release('both') + + assert error.args[0] == '0x6985' diff --git a/tests/speculos/test_sign_cmd.py b/tests/speculos/test_sign_cmd.py new file mode 100644 index 0000000..0e0207a --- /dev/null +++ b/tests/speculos/test_sign_cmd.py @@ -0,0 +1,704 @@ +from time import sleep + +import pytest + +import ethereum_client +from ethereum_client.utils import compare_screenshot, compare_screenshot, save_screenshot, PATH_IMG +from ethereum_client.transaction import Transaction + + +# https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md + +def test_sign_simple(cmd): + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=68, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=1, + ) + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00000.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00003.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00006.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00007.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00008.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00002.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00003.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/simple/00004.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x26 # 38 + assert r.hex() == "6f389d15320f0501383526ed03de917c14212716f09a262dbc98431086a5db49" + assert s.hex() == "0dc994b7b97230bb35fdf6fec2f4d8ff4cfb8bfeb2a652c364c738ff033c05dd" + + +def test_sign_dai_coin_type_on_network_5234(cmd): + result: list = [] + + # DAI coin type + bip32_path="44'/700'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=0, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=5243, + ) + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00000.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00003.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00006.png") + cmd.client.press_and_release('right') + + # Network 5243 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00007.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00008.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00009.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00002.png") + cmd.client.press_and_release('right') + + # Network 5243 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00003.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00004.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/dai_coin_type_on_network_5234/00005.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x1A # 26 + assert r.hex() == "7ebfa5d5cac1e16bb1f1a8c67706b5c6019c0f198df6bb44e742a9de72330961" + assert s.hex() == "537419d8d1443d38ea87943c110789decb43b8f4fea8fae256fe842f669da634" + + +def test_sign_reject(cmd): + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=0, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=1, + ) + + with pytest.raises(ethereum_client.exception.errors.DenyError) as error: + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00000.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00003.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00006.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00007.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00008.png") + cmd.client.press_and_release('right') + + # Reject + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00009.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00002.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00003.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00004.png") + cmd.client.press_and_release('right') + + # Reject + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/reject/00005.png") + cmd.client.press_and_release('both') + + assert error.args[0] == '0x6985' + + +def test_sign_limit_nonce(cmd): + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + # EIP-2681: Limit account nonce to 2^64-1 + transaction = Transaction( + txType=0xEB, + nonce=2**64-1, + gasPrice=10, + gasLimit=50000, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x08762, + chainID=1, + ) + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00000.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00003.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00006.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00007.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00008.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00002.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00003.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/limit_nonce/00004.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x26 # 38 + assert r.hex() == "7f17f9efa5a6065f885a44a5f5d68a62381c6b2b23047817b4569c61ccf571c6" + assert s.hex() == "4b67d37cfe473e0b2daf246fa82c7595bcff0c1515d69089037d0c061f14b3b3" + + +def test_sign_error_transaction_type(cmd): + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + # the txType is between 0x00 and 0x7F + transaction = Transaction( + txType=0x00, + nonce=0, + gasPrice=10, + gasLimit=50000, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x19, + chainID=1, + ) + + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + pass + + assert error.args[0] == '0x6501' + + transaction.txType = 0x7F + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + pass + + assert error.args[0] == '0x6501' + + +def test_sign_nonce_display(cmd): + # Activate nonce display + # Application is ready + cmd.client.press_and_release('left') + # Quit + cmd.client.press_and_release('left') + # Settings + cmd.client.press_and_release('both') + # Blind signing + cmd.client.press_and_release('right') + # Debug data + cmd.client.press_and_release('right') + # Nonce display + cmd.client.press_and_release('both') + cmd.client.press_and_release('right') + # Back + cmd.client.press_and_release('both') + + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=68, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=1, + ) + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00000.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00001.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00003.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00004.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00006.png") + cmd.client.press_and_release('right') + + # Nonce + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00007.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00008.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00009.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00000.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00001.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00002.png") + cmd.client.press_and_release('right') + + # Nonce + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00003.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00004.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/nonce_display/00005.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x26 # 38 + assert r.hex() == "6f389d15320f0501383526ed03de917c14212716f09a262dbc98431086a5db49" + assert s.hex() == "0dc994b7b97230bb35fdf6fec2f4d8ff4cfb8bfeb2a652c364c738ff033c05dd" + + +def test_sign_blind_simple(cmd): + # Activate blind signing + # Application is ready + cmd.client.press_and_release('left') + # Quit + cmd.client.press_and_release('left') + # Settings + cmd.client.press_and_release('both') + # Blind signing + cmd.client.press_and_release('both') + cmd.client.press_and_release('right') + # Debug data + cmd.client.press_and_release('right') + # Nonce display + cmd.client.press_and_release('right') + # Back + cmd.client.press_and_release('both') + + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=68, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=1, + data="ok", + ) + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00000.png") + cmd.client.press_and_release('right') + + # Blind Signing + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00001.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00004.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00006.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00007.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00008.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00009.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00000.png") + cmd.client.press_and_release('right') + + # Blind Signing + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00001.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00002.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00003.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00004.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_simple/00005.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x26 # 38 + assert r.hex() == "98163696ad14f54e0e7207306b6f66665131cee601052facab8fd24250e15470" + assert s.hex() == "318e573fc809f7dcb8f9718c8bd2946b2c3c83cedf3720e66e06fb63ceea3174" + + +def test_sign_blind_error_disabled(cmd): + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=68, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=1, + data="ok", + ) + + with pytest.raises(ethereum_client.exception.errors.UnknownDeviceError) as error: + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + pass + if cmd.model == "nanox" or cmd.model == "nanosp": + pass + + assert error.args[0] == '0x6a80' + + +def test_sign_blind_and_nonce_display(cmd): + # Activate blind signing + # Application is ready + cmd.client.press_and_release('left') + # Quit + cmd.client.press_and_release('left') + # Settings + cmd.client.press_and_release('both') + # Blind signing + cmd.client.press_and_release('both') + cmd.client.press_and_release('right') + # Debug data + cmd.client.press_and_release('right') + # Nonce display + cmd.client.press_and_release('both') + cmd.client.press_and_release('right') + # Back + cmd.client.press_and_release('both') + + result: list = [] + + # Ether coin type + bip32_path="44'/60'/1'/0/0" + + transaction = Transaction( + txType=0xEB, + nonce=2**64-1, + gasPrice=0x0306dc4200, + gasLimit=0x5208, + to="0x5a321744667052affa8386ed49e00ef223cbffc3", + value=0x6f9c9e7bf61818, + chainID=1, + data="That's a little message :)", + ) + + with cmd.simple_sign_tx(bip32_path=bip32_path, transaction=transaction, result=result) as ex: + sleep(0.5) + + if cmd.model == "nanos": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00000.png") + cmd.client.press_and_release('right') + + # Blind Signing + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00001.png") + cmd.client.press_and_release('right') + + # Amount 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00002.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00003.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00004.png") + cmd.client.press_and_release('right') + + # Address 1/3, 2/3, 3/3 + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00005.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00006.png") + cmd.client.press_and_release('right') + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00007.png") + cmd.client.press_and_release('right') + + # Nonce + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00008.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00009.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00010.png") + cmd.client.press_and_release('both') + + if cmd.model == "nanox" or cmd.model == "nanosp": + # Review transaction + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00000.png") + cmd.client.press_and_release('right') + + # Blind Signing + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00001.png") + cmd.client.press_and_release('right') + + # Amount + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00002.png") + cmd.client.press_and_release('right') + + # Address + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00003.png") + cmd.client.press_and_release('right') + + # Nonce + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00004.png") + cmd.client.press_and_release('right') + + # Max Fees + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00005.png") + cmd.client.press_and_release('right') + + # Accept and send + compare_screenshot(cmd, f"screenshots/sign/{PATH_IMG[cmd.model]}/blind_and_nonce_display/00006.png") + cmd.client.press_and_release('both') + + v, r, s = result + + assert v == 0x25 # 37 + assert r.hex() == "737c07042022d37286216312d62163c4238536d82c5b45937ce9fbf259d11b7d" + assert s.hex() == "5604485e0cf37e465a84290eb26a18e40a430f1b0fda184c56b2c3a51ada2e6c" diff --git a/tests/unit/.gitignore b/tests/unit/.gitignore new file mode 100644 index 0000000..2cbee4e --- /dev/null +++ b/tests/unit/.gitignore @@ -0,0 +1,22 @@ +# Editor Files and Folders + +.idea/ +.vscode/ +.DS_Store +*~ +\#*# + +# Build Files and Binaries + +*.log +*.o +*.so +*.dll +*.dylib +cmake-build-*/ +*build/ +build/ + +# Coverage file +coverage.info +coverage \ No newline at end of file diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt new file mode 100644 index 0000000..93605b2 --- /dev/null +++ b/tests/unit/CMakeLists.txt @@ -0,0 +1,65 @@ +cmake_minimum_required(VERSION 3.10) + +if(${CMAKE_VERSION} VERSION_LESS 3.10) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif() + +# project information +project(unit_tests + VERSION 0.1 + DESCRIPTION "Unit tests for C project" + LANGUAGES C) + + +# guard against bad build-type strings +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug") +endif() + +include(CTest) +ENABLE_TESTING() + +# specify C standard +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED True) +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -pedantic -g -O0 --coverage") + +set(GCC_COVERAGE_LINK_FLAGS "--coverage -lgcov") +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") + +# guard against in-source builds +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ") +endif() + +# Fetch cmocka +find_package(cmocka QUIET) +include(FetchContent) +FetchContent_Declare( + cmocka + GIT_REPOSITORY https://git.cryptomilk.org/projects/cmocka.git + GIT_TAG cmocka-1.1.5 + GIT_SHALLOW 1 +) +set(WITH_STATIC_LIB ON CACHE BOOL "CMocka: Build with a static library" FORCE) +set(WITH_CMOCKERY_SUPPORT OFF CACHE BOOL "CMocka: Install a cmockery header" FORCE) +set(WITH_EXAMPLES OFF CACHE BOOL "CMocka: Build examples" FORCE) +set(UNIT_TESTING OFF CACHE BOOL "CMocka: Build with unit testing" FORCE) +set(PICKY_DEVELOPER OFF CACHE BOOL "CMocka: Build with picky developer flags" FORCE) +FetchContent_MakeAvailable(cmocka) + +add_compile_definitions(TEST DEBUG=0 SKIP_FOR_CMOCKA) + +include_directories(../../src/) +include_directories(../../src_common) + +# add cmocka tests +add_executable(test_demo tests/demo.c) + +# add src +add_library(demo SHARED ./demo_tu.c) + +target_link_libraries(test_demo PUBLIC cmocka gcov demo) + +add_test(test_demo test_demo) \ No newline at end of file diff --git a/tests/unit/Makefile b/tests/unit/Makefile new file mode 100644 index 0000000..71d8a14 --- /dev/null +++ b/tests/unit/Makefile @@ -0,0 +1,42 @@ +MAKEFLAGS += --no-print-directory + +RM ?= rm -f +ECHO = `which echo` + +ifneq (,$(findstring xterm,${TERM})) +GREEN := $(shell tput -Txterm setaf 2) +RED := $(shell tput -Txterm setaf 1) +CYAN := $(shell tput -Txterm setaf 6) +RESET := $(shell tput -Txterm sgr0) +else +GREEN := "" +RED := "" +RESET := "" +endif + +BUILD_DIRECTORY = $(realpath build/) + +DIRECTORY_BUILD = build + +all: + @cmake -B ${DIRECTORY_BUILD} -H. + @make -C ${DIRECTORY_BUILD} + @CTEST_OUTPUT_ON_FAILURE=1 make -C ${DIRECTORY_BUILD} test + +coverage: all + @lcov --directory . -b "${BUILD_DIRECTORY}" --capture --initial -o coverage.base + @lcov --rc lcov_branch_coverage=1 --directory . -b "${BUILD_DIRECTORY}" --capture -o coverage.capture + @lcov --directory . -b "${BUILD_DIRECTORY}" --add-tracefile coverage.base --add-tracefile coverage.capture -o coverage.info + @lcov --directory . -b "${BUILD_DIRECTORY}" --remove coverage.info '*/unit-tests/*' -o coverage.info --remove coverage.info '*/build/_deps/cmocka-src/src/*' + @$(ECHO) -e "${GREEN}[ OK ]${RESET} Generated 'coverage.info'." + @genhtml coverage.info -o coverage + @if [ -f coverage.base ]; then $(ECHO) -e "${RED}[ RM ]${RESET}" coverage.base && $(RM) -r coverage.base ; fi; + @if [ -f coverage.capture ]; then $(ECHO) -e "${RED}[ RM ]${RESET}" coverage.capture && $(RM) -r coverage.capture ; fi; + @$(ECHO) -e "${CYAN}[ REDIRECT ]${RESET}" `realpath coverage/index.html` && xdg-open `realpath coverage/index.html` + +clean: + @if [ -d ${DIRECTORY_BUILD} ]; then $(ECHO) -e "${RED}[ RM ]${RESET}" ${DIRECTORY_BUILD} && $(RM) -r ${DIRECTORY_BUILD} ; fi; + @if [ -d coverage ]; then $(ECHO) -e "${RED}[ RM ]${RESET}" coverage && $(RM) -r coverage ; fi; + @if [ -f coverage.info ]; then $(ECHO) -e "${RED}[ RM ]${RESET}" coverage.info && $(RM) -r coverage.info ; fi; + +.PHONY: all coverage clean \ No newline at end of file diff --git a/tests/unit/README.md b/tests/unit/README.md new file mode 100644 index 0000000..68a98f2 --- /dev/null +++ b/tests/unit/README.md @@ -0,0 +1,38 @@ +# Unit tests + +It is important to unit test your functions. +This also allows you to document how your functions work. +We use the library [**cmocka**](https://cmocka.org/#features) + +## Requirement + +- [CMake >= 3.10](https://cmake.org/download/) +- [lcov >= 1.14](http://ltp.sourceforge.net/coverage/lcov.php) + +Don't worry, you don't necessarily need to install the `cmocka library` because the **cmakelist automatically fetches** the library + +## Add new test + +Create new file into `tests` folder and follow [this initiation](https://cmocka.org/talks/cmocka_unit_testing_and_mocking.pdf) + +Now go to the `CMakeLists.txt` file and add your test with the specific file you want to test. + +## Usage + +### Build + +The `default rules` of makefile will compile the tests and run them. + +```sh +make +``` + +The `coverage rule` will launch the default rules and generate the coverage and you will be **automatically redirected** to the generated .html +```sh +make coverage +``` + +The `clean rule` will delete the folders and files generated +```sh +make clean +``` \ No newline at end of file diff --git a/tests/unit/demo_tu.c b/tests/unit/demo_tu.c new file mode 100644 index 0000000..c4f450c --- /dev/null +++ b/tests/unit/demo_tu.c @@ -0,0 +1,12 @@ +#include + +int local_strchr_demo(char *string, char ch) { + unsigned int length = strlen(string); + unsigned int i; + for (i = 0; i < length; i++) { + if (string[i] == ch) { + return i; + } + } + return -1; +} \ No newline at end of file diff --git a/tests/unit/tests/demo.c b/tests/unit/tests/demo.c new file mode 100644 index 0000000..1da227d --- /dev/null +++ b/tests/unit/tests/demo.c @@ -0,0 +1,18 @@ +#include +#include +#include +#include + +int local_strchr_demo(char *string, char ch); + +static void null_test_success(void **state) { + assert_int_equal(local_strchr_demo("salut", 'c'), -1); + assert_int_equal(local_strchr_demo("av", 'a'), 0); +} + +int main(void) { + const struct CMUnitTest tests[] = { + cmocka_unit_test(null_test_success), + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} \ No newline at end of file diff --git a/tests/.babelrc b/tests/zemu/.babelrc similarity index 100% rename from tests/.babelrc rename to tests/zemu/.babelrc diff --git a/tests/.flowconfig b/tests/zemu/.flowconfig similarity index 100% rename from tests/.flowconfig rename to tests/zemu/.flowconfig diff --git a/tests/zemu/.gitignore b/tests/zemu/.gitignore new file mode 100644 index 0000000..826d3f0 --- /dev/null +++ b/tests/zemu/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/snapshots-tmp +/elfs +/lib \ No newline at end of file diff --git a/tests/zemu/Makefile b/tests/zemu/Makefile new file mode 100644 index 0000000..82d7706 --- /dev/null +++ b/tests/zemu/Makefile @@ -0,0 +1,8 @@ +MAKEFLAGS += --no-print-directory + +all: + ./build_local_test_elfs.sh + yarn install + yarn test + +.PHONY: all \ No newline at end of file diff --git a/tests/build_local_test_elfs.sh b/tests/zemu/build_local_test_elfs.sh similarity index 100% rename from tests/build_local_test_elfs.sh rename to tests/zemu/build_local_test_elfs.sh diff --git a/tests/globalsetup.js b/tests/zemu/globalsetup.js similarity index 100% rename from tests/globalsetup.js rename to tests/zemu/globalsetup.js diff --git a/tests/jest.config.js b/tests/zemu/jest.config.js similarity index 100% rename from tests/jest.config.js rename to tests/zemu/jest.config.js diff --git a/tests/zemu/jest.js b/tests/zemu/jest.js new file mode 100644 index 0000000..521ecbe --- /dev/null +++ b/tests/zemu/jest.js @@ -0,0 +1,22 @@ +export default jest; +export const { expect, test } = global; + +export const sim_options_s = { + model: "nanos", + logging: true, + start_delay: 2000, + X11: true, + custom: "", +}; + +export const sim_options_x = { + model: "nanox", + logging: true, + start_delay: 2000, + X11: true, + custom: "", +}; + +export const Resolve = require("path").resolve; +export const NANOS_ELF_PATH = Resolve("elfs/ethereum_nanos.elf"); +export const NANOX_ELF_PATH = Resolve("elfs/ethereum_nanox.elf"); \ No newline at end of file diff --git a/tests/package.json b/tests/zemu/package.json similarity index 100% rename from tests/package.json rename to tests/zemu/package.json diff --git a/tests/setupTests.js b/tests/zemu/setupTests.js similarity index 100% rename from tests/setupTests.js rename to tests/zemu/setupTests.js diff --git a/tests/snapshots/nanos_transfer_palm_network/00000.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00000.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00000.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00000.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00001.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00001.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00001.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00001.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00002.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00002.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00002.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00002.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00003.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00003.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00003.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00003.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00004.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00004.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00004.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00004.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00005.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00005.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00005.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00005.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00006.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00006.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00006.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00006.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00009.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00009.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00007.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00008.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00008.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00008.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00008.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00009.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00009.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00009.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00009.png diff --git a/tests/snapshots/nanos_approve_dai_tokens/00010.png b/tests/zemu/snapshots/nanos_approve_dai_tokens/00010.png similarity index 100% rename from tests/snapshots/nanos_approve_dai_tokens/00010.png rename to tests/zemu/snapshots/nanos_approve_dai_tokens/00010.png diff --git a/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00000.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00000.png differ diff --git a/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00001.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00001.png new file mode 100644 index 0000000..b2ab371 Binary files /dev/null and b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00001.png differ diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00002.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00002.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00002.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00002.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00003.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00003.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00003.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00003.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00004.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00004.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00004.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00004.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00005.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00005.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00005.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00005.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00006.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00006.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00006.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00006.png diff --git a/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00007.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00007.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00007.png differ diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00014.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00008.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00014.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00008.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00009.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00009.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00009.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00009.png diff --git a/tests/snapshots/nanos_deposit_eth_compound_blind/00010.png b/tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00010.png similarity index 100% rename from tests/snapshots/nanos_deposit_eth_compound_blind/00010.png rename to tests/zemu/snapshots/nanos_deposit_eth_compound_blind/00010.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00000.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00000.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00000.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00000.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00001.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00001.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00001.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00001.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00002.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00002.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00002.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00002.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00003.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00003.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00003.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00003.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00004.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00004.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00004.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00004.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00005.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00005.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00005.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00005.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00006.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00006.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00006.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00006.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00007.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00007.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00007.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00007.png diff --git a/tests/snapshots/nanos_disable_blind_signing/00008.png b/tests/zemu/snapshots/nanos_disable_blind_signing/00008.png similarity index 100% rename from tests/snapshots/nanos_disable_blind_signing/00008.png rename to tests/zemu/snapshots/nanos_disable_blind_signing/00008.png diff --git a/tests/zemu/snapshots/nanos_eip191_metamask/00000.png b/tests/zemu/snapshots/nanos_eip191_metamask/00000.png new file mode 100644 index 0000000..ab16f62 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_metamask/00000.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_metamask/00001.png b/tests/zemu/snapshots/nanos_eip191_metamask/00001.png new file mode 100644 index 0000000..b90315c Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_metamask/00001.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_metamask/00002.png b/tests/zemu/snapshots/nanos_eip191_metamask/00002.png new file mode 100644 index 0000000..3d90dfd Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_metamask/00002.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_metamask/00003.png b/tests/zemu/snapshots/nanos_eip191_metamask/00003.png new file mode 100644 index 0000000..f5c2d67 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_metamask/00003.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_metamask/00004.png b/tests/zemu/snapshots/nanos_eip191_metamask/00004.png new file mode 100644 index 0000000..d55782f Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_metamask/00004.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_metamask/00005.png b/tests/zemu/snapshots/nanos_eip191_metamask/00005.png new file mode 100644 index 0000000..f5c2d67 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_metamask/00005.png differ diff --git a/tests/snapshots/nanos_eip191_metamask/00006.png b/tests/zemu/snapshots/nanos_eip191_metamask/00006.png similarity index 100% rename from tests/snapshots/nanos_eip191_metamask/00006.png rename to tests/zemu/snapshots/nanos_eip191_metamask/00006.png diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00000.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00000.png new file mode 100644 index 0000000..ab16f62 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00000.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00001.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00001.png new file mode 100644 index 0000000..ad00cb8 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00001.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00002.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00002.png new file mode 100644 index 0000000..b435297 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00002.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00003.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00003.png new file mode 100644 index 0000000..fcd68b2 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00003.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00004.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00004.png new file mode 100644 index 0000000..251c562 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00004.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00005.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00005.png new file mode 100644 index 0000000..f5c2d67 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00005.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00006.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00006.png new file mode 100644 index 0000000..d55782f Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00006.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_nonascii/00007.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00007.png new file mode 100644 index 0000000..f5c2d67 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_nonascii/00007.png differ diff --git a/tests/snapshots/nanos_eip191_nonascii/00008.png b/tests/zemu/snapshots/nanos_eip191_nonascii/00008.png similarity index 100% rename from tests/snapshots/nanos_eip191_nonascii/00008.png rename to tests/zemu/snapshots/nanos_eip191_nonascii/00008.png diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00000.png b/tests/zemu/snapshots/nanos_eip191_opensea/00000.png new file mode 100644 index 0000000..ab16f62 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00000.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00001.png b/tests/zemu/snapshots/nanos_eip191_opensea/00001.png new file mode 100644 index 0000000..bdbb3a0 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00001.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00002.png b/tests/zemu/snapshots/nanos_eip191_opensea/00002.png new file mode 100644 index 0000000..0676953 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00002.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00003.png b/tests/zemu/snapshots/nanos_eip191_opensea/00003.png new file mode 100644 index 0000000..582648d Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00003.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00004.png b/tests/zemu/snapshots/nanos_eip191_opensea/00004.png new file mode 100644 index 0000000..53e1317 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00004.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00005.png b/tests/zemu/snapshots/nanos_eip191_opensea/00005.png new file mode 100644 index 0000000..228f924 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00005.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00006.png b/tests/zemu/snapshots/nanos_eip191_opensea/00006.png new file mode 100644 index 0000000..f5c2d67 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00006.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00007.png b/tests/zemu/snapshots/nanos_eip191_opensea/00007.png new file mode 100644 index 0000000..d55782f Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00007.png differ diff --git a/tests/zemu/snapshots/nanos_eip191_opensea/00008.png b/tests/zemu/snapshots/nanos_eip191_opensea/00008.png new file mode 100644 index 0000000..f5c2d67 Binary files /dev/null and b/tests/zemu/snapshots/nanos_eip191_opensea/00008.png differ diff --git a/tests/snapshots/nanos_eip191_opensea/00009.png b/tests/zemu/snapshots/nanos_eip191_opensea/00009.png similarity index 100% rename from tests/snapshots/nanos_eip191_opensea/00009.png rename to tests/zemu/snapshots/nanos_eip191_opensea/00009.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00000.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00000.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00000.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00000.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00001.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00001.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00001.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00001.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00002.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00002.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00002.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00002.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00003.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00003.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00003.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00003.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00004.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00004.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00004.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00004.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00005.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00005.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00005.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00005.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00006.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00006.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00006.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00006.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00007.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00007.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00007.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00007.png diff --git a/tests/snapshots/nanos_enable_blind_signing/00008.png b/tests/zemu/snapshots/nanos_enable_blind_signing/00008.png similarity index 100% rename from tests/snapshots/nanos_enable_blind_signing/00008.png rename to tests/zemu/snapshots/nanos_enable_blind_signing/00008.png diff --git a/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00000.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00000.png differ diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00001.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00001.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00001.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00001.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00002.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00002.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00002.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00002.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00003.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00003.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00003.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00003.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00004.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00004.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00004.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00004.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00005.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00005.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00005.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00005.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00006.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00006.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00006.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00006.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00007.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00007.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00007.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00007.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00008.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00008.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00008.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00008.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00009.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00009.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00009.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00009.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00010.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00010.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00010.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00010.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00011.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00011.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00011.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00011.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00012.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00012.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00012.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00012.png diff --git a/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00013.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00013.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00013.png differ diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00010.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00014.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00010.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00014.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00015.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00015.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00015.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00015.png diff --git a/tests/snapshots/nanos_starkware_usdt_deposit/00016.png b/tests/zemu/snapshots/nanos_starkware_usdt_deposit/00016.png similarity index 100% rename from tests/snapshots/nanos_starkware_usdt_deposit/00016.png rename to tests/zemu/snapshots/nanos_starkware_usdt_deposit/00016.png diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00000.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00000.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00001.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00001.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00002.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00002.png new file mode 100644 index 0000000..c2af54e Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00003.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00003.png new file mode 100644 index 0000000..a54fefd Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00004.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00005.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00006.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00006.png differ diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00007.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00007.png rename to tests/zemu/snapshots/nanos_transfer_112233445566_network/00007.png diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00008.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00008.png new file mode 100644 index 0000000..c84d3ec Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00008.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_112233445566_network/00009.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00009.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00009.png differ diff --git a/tests/snapshots/nanos_transfer_bsc/00010.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00010.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00010.png rename to tests/zemu/snapshots/nanos_transfer_112233445566_network/00010.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00011.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00011.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00011.png rename to tests/zemu/snapshots/nanos_transfer_112233445566_network/00011.png diff --git a/tests/snapshots/nanos_transfer_112233445566_network/00012.png b/tests/zemu/snapshots/nanos_transfer_112233445566_network/00012.png similarity index 100% rename from tests/snapshots/nanos_transfer_112233445566_network/00012.png rename to tests/zemu/snapshots/nanos_transfer_112233445566_network/00012.png diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00000.png b/tests/zemu/snapshots/nanos_transfer_bsc/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00000.png differ diff --git a/tests/snapshots/nanos_transfer_bsc/00001.png b/tests/zemu/snapshots/nanos_transfer_bsc/00001.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00001.png rename to tests/zemu/snapshots/nanos_transfer_bsc/00001.png diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00002.png b/tests/zemu/snapshots/nanos_transfer_bsc/00002.png new file mode 100644 index 0000000..c2af54e Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00003.png b/tests/zemu/snapshots/nanos_transfer_bsc/00003.png new file mode 100644 index 0000000..a54fefd Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00004.png b/tests/zemu/snapshots/nanos_transfer_bsc/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00005.png b/tests/zemu/snapshots/nanos_transfer_bsc/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00006.png b/tests/zemu/snapshots/nanos_transfer_bsc/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00006.png differ diff --git a/tests/snapshots/nanos_transfer_bsc/00007.png b/tests/zemu/snapshots/nanos_transfer_bsc/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00007.png rename to tests/zemu/snapshots/nanos_transfer_bsc/00007.png diff --git a/tests/snapshots/nanos_transfer_bsc/00008.png b/tests/zemu/snapshots/nanos_transfer_bsc/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00008.png rename to tests/zemu/snapshots/nanos_transfer_bsc/00008.png diff --git a/tests/zemu/snapshots/nanos_transfer_bsc/00009.png b/tests/zemu/snapshots/nanos_transfer_bsc/00009.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_bsc/00009.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00010.png b/tests/zemu/snapshots/nanos_transfer_bsc/00010.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00010.png rename to tests/zemu/snapshots/nanos_transfer_bsc/00010.png diff --git a/tests/snapshots/nanos_transfer_bsc/00011.png b/tests/zemu/snapshots/nanos_transfer_bsc/00011.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00011.png rename to tests/zemu/snapshots/nanos_transfer_bsc/00011.png diff --git a/tests/snapshots/nanos_transfer_bsc/00012.png b/tests/zemu/snapshots/nanos_transfer_bsc/00012.png similarity index 100% rename from tests/snapshots/nanos_transfer_bsc/00012.png rename to tests/zemu/snapshots/nanos_transfer_bsc/00012.png diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00000.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00000.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00001.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00001.png new file mode 100644 index 0000000..9f26513 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00001.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00002.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00002.png new file mode 100644 index 0000000..701b26b Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00003.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00003.png new file mode 100644 index 0000000..32a2ee9 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00004.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00004.png new file mode 100644 index 0000000..1ed3d77 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00005.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00005.png new file mode 100644 index 0000000..f19d91c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_eip1559/00006.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00006.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_eip1559/00006.png differ diff --git a/tests/snapshots/nanos_transfer_eip1559/00007.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00007.png rename to tests/zemu/snapshots/nanos_transfer_eip1559/00007.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00008.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00008.png rename to tests/zemu/snapshots/nanos_transfer_eip1559/00008.png diff --git a/tests/snapshots/nanos_transfer_eip1559/00009.png b/tests/zemu/snapshots/nanos_transfer_eip1559/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_eip1559/00009.png rename to tests/zemu/snapshots/nanos_transfer_eip1559/00009.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00000.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00000.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00001.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00001.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00002.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00002.png new file mode 100644 index 0000000..c2af54e Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00003.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00003.png new file mode 100644 index 0000000..a54fefd Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00004.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00005.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00006.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00006.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00007.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00007.png new file mode 100644 index 0000000..c84d3ec Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00007.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum/00008.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00008.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum/00008.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00009.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00009.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00009.png rename to tests/zemu/snapshots/nanos_transfer_ethereum/00009.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00010.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00010.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00010.png rename to tests/zemu/snapshots/nanos_transfer_ethereum/00010.png diff --git a/tests/snapshots/nanos_transfer_ethereum/00011.png b/tests/zemu/snapshots/nanos_transfer_ethereum/00011.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum/00011.png rename to tests/zemu/snapshots/nanos_transfer_ethereum/00011.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00000.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00000.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00001.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00001.png new file mode 100644 index 0000000..7ebda4f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00001.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00002.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00002.png new file mode 100644 index 0000000..c2af54e Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00003.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00003.png new file mode 100644 index 0000000..a54fefd Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00004.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00005.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00006.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00006.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00007.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00007.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00007.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00008.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00008.png new file mode 100644 index 0000000..c84d3ec Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00008.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00009.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00009.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00009.png differ diff --git a/tests/snapshots/nanos_transfer_palm_network/00010.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00010.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00010.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00010.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00011.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00011.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00011.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00011.png diff --git a/tests/snapshots/nanos_transfer_ethereum_5234_network/00012.png b/tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00012.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_5234_network/00012.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_5234_network/00012.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00000.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00000.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00001.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00001.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00001.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_clone/00001.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00002.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00002.png new file mode 100644 index 0000000..c2af54e Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00003.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00003.png new file mode 100644 index 0000000..a54fefd Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00004.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00005.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00006.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00006.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00007.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00007.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_clone/00007.png diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00008.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00008.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00008.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00009.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00009.png new file mode 100644 index 0000000..9c7e704 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00009.png differ diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00010.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00010.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00010.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_clone/00010.png diff --git a/tests/snapshots/nanos_transfer_ethereum_clone/00011.png b/tests/zemu/snapshots/nanos_transfer_ethereum_clone/00011.png similarity index 100% rename from tests/snapshots/nanos_transfer_ethereum_clone/00011.png rename to tests/zemu/snapshots/nanos_transfer_ethereum_clone/00011.png diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00000.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00000.png new file mode 100644 index 0000000..8d84cc7 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00000.png differ diff --git a/tests/snapshots/nanos_transfer_palm_network/00001.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00001.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00001.png rename to tests/zemu/snapshots/nanos_transfer_palm_network/00001.png diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00002.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00002.png new file mode 100644 index 0000000..c2af54e Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00002.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00003.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00003.png new file mode 100644 index 0000000..a54fefd Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00003.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00004.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00004.png new file mode 100644 index 0000000..8656b81 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00004.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00005.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00005.png new file mode 100644 index 0000000..fd3155c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00005.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00006.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00006.png new file mode 100644 index 0000000..c63f25f Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00006.png differ diff --git a/tests/snapshots/nanos_transfer_palm_network/00007.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00007.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00007.png rename to tests/zemu/snapshots/nanos_transfer_palm_network/00007.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00008.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00008.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00008.png rename to tests/zemu/snapshots/nanos_transfer_palm_network/00008.png diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00009.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00009.png new file mode 100644 index 0000000..1c9156c Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00009.png differ diff --git a/tests/zemu/snapshots/nanos_transfer_palm_network/00010.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00010.png new file mode 100644 index 0000000..9c7e704 Binary files /dev/null and b/tests/zemu/snapshots/nanos_transfer_palm_network/00010.png differ diff --git a/tests/snapshots/nanos_transfer_palm_network/00011.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00011.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00011.png rename to tests/zemu/snapshots/nanos_transfer_palm_network/00011.png diff --git a/tests/snapshots/nanos_transfer_palm_network/00012.png b/tests/zemu/snapshots/nanos_transfer_palm_network/00012.png similarity index 100% rename from tests/snapshots/nanos_transfer_palm_network/00012.png rename to tests/zemu/snapshots/nanos_transfer_palm_network/00012.png diff --git a/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00000.png b/tests/zemu/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00000.png similarity index 100% rename from tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00000.png rename to tests/zemu/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00000.png diff --git a/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00001.png b/tests/zemu/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00001.png similarity index 100% rename from tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00001.png rename to tests/zemu/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00001.png diff --git a/tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00002.png b/tests/zemu/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00002.png similarity index 100% rename from tests/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00002.png rename to tests/zemu/snapshots/nanos_try_to_blind_sign_with_setting_disabled/00002.png diff --git a/tests/snapshots/nanox_transfer_palm_network/00000.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00000.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00000.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00000.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00001.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00001.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00001.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00001.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00002.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00002.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00002.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00002.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00003.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00003.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00003.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00003.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00004.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00004.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00004.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00004.png diff --git a/tests/snapshots/nanox_transfer_palm_network/00005.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00005.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00005.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00006.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00006.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00006.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00006.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00007.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00007.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00007.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00007.png diff --git a/tests/snapshots/nanox_approve_dai_tokens/00008.png b/tests/zemu/snapshots/nanox_approve_dai_tokens/00008.png similarity index 100% rename from tests/snapshots/nanox_approve_dai_tokens/00008.png rename to tests/zemu/snapshots/nanox_approve_dai_tokens/00008.png diff --git a/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00000.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00000.png differ diff --git a/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00001.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00001.png new file mode 100644 index 0000000..9901736 Binary files /dev/null and b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00001.png differ diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00002.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00002.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00002.png rename to tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00002.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00003.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00003.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00003.png rename to tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00003.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00004.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00004.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00004.png rename to tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00004.png diff --git a/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00005.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00005.png differ diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00006.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00006.png rename to tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00006.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00007.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00007.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00007.png rename to tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00007.png diff --git a/tests/snapshots/nanox_deposit_eth_compound_blind/00008.png b/tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00008.png similarity index 100% rename from tests/snapshots/nanox_deposit_eth_compound_blind/00008.png rename to tests/zemu/snapshots/nanox_deposit_eth_compound_blind/00008.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00000.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00000.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00000.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00000.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00001.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00001.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00001.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00001.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00002.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00002.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00002.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00002.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00003.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00003.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00003.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00003.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00004.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00004.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00004.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00004.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00005.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00005.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00005.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00005.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00006.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00006.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00006.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00006.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00007.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00007.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00007.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00007.png diff --git a/tests/snapshots/nanox_disable_blind_signing/00008.png b/tests/zemu/snapshots/nanox_disable_blind_signing/00008.png similarity index 100% rename from tests/snapshots/nanox_disable_blind_signing/00008.png rename to tests/zemu/snapshots/nanox_disable_blind_signing/00008.png diff --git a/tests/zemu/snapshots/nanox_eip191_metamask/00000.png b/tests/zemu/snapshots/nanox_eip191_metamask/00000.png new file mode 100644 index 0000000..1b27154 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_metamask/00000.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_metamask/00001.png b/tests/zemu/snapshots/nanox_eip191_metamask/00001.png new file mode 100644 index 0000000..58f0606 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_metamask/00001.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_metamask/00002.png b/tests/zemu/snapshots/nanox_eip191_metamask/00002.png new file mode 100644 index 0000000..c9da92b Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_metamask/00002.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_metamask/00003.png b/tests/zemu/snapshots/nanox_eip191_metamask/00003.png new file mode 100644 index 0000000..121cfd5 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_metamask/00003.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_metamask/00004.png b/tests/zemu/snapshots/nanox_eip191_metamask/00004.png new file mode 100644 index 0000000..c9da92b Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_metamask/00004.png differ diff --git a/tests/snapshots/nanox_eip191_metamask/00005.png b/tests/zemu/snapshots/nanox_eip191_metamask/00005.png similarity index 100% rename from tests/snapshots/nanox_eip191_metamask/00005.png rename to tests/zemu/snapshots/nanox_eip191_metamask/00005.png diff --git a/tests/zemu/snapshots/nanox_eip191_nonascii/00000.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00000.png new file mode 100644 index 0000000..1b27154 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_nonascii/00000.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_nonascii/00001.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00001.png new file mode 100644 index 0000000..93eda35 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_nonascii/00001.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_nonascii/00002.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00002.png new file mode 100644 index 0000000..873634e Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_nonascii/00002.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_nonascii/00003.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00003.png new file mode 100644 index 0000000..c9da92b Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_nonascii/00003.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_nonascii/00004.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00004.png new file mode 100644 index 0000000..121cfd5 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_nonascii/00004.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_nonascii/00005.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00005.png new file mode 100644 index 0000000..c9da92b Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_nonascii/00005.png differ diff --git a/tests/snapshots/nanox_eip191_nonascii/00006.png b/tests/zemu/snapshots/nanox_eip191_nonascii/00006.png similarity index 100% rename from tests/snapshots/nanox_eip191_nonascii/00006.png rename to tests/zemu/snapshots/nanox_eip191_nonascii/00006.png diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00000.png b/tests/zemu/snapshots/nanox_eip191_opensea/00000.png new file mode 100644 index 0000000..1b27154 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00000.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00001.png b/tests/zemu/snapshots/nanox_eip191_opensea/00001.png new file mode 100644 index 0000000..802fad5 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00001.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00002.png b/tests/zemu/snapshots/nanox_eip191_opensea/00002.png new file mode 100644 index 0000000..a3ba739 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00002.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00003.png b/tests/zemu/snapshots/nanox_eip191_opensea/00003.png new file mode 100644 index 0000000..4601bca Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00003.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00004.png b/tests/zemu/snapshots/nanox_eip191_opensea/00004.png new file mode 100644 index 0000000..eab9f1d Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00004.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00005.png b/tests/zemu/snapshots/nanox_eip191_opensea/00005.png new file mode 100644 index 0000000..0b4bdbd Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00005.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00006.png b/tests/zemu/snapshots/nanox_eip191_opensea/00006.png new file mode 100644 index 0000000..c9da92b Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00006.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00007.png b/tests/zemu/snapshots/nanox_eip191_opensea/00007.png new file mode 100644 index 0000000..121cfd5 Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00007.png differ diff --git a/tests/zemu/snapshots/nanox_eip191_opensea/00008.png b/tests/zemu/snapshots/nanox_eip191_opensea/00008.png new file mode 100644 index 0000000..c9da92b Binary files /dev/null and b/tests/zemu/snapshots/nanox_eip191_opensea/00008.png differ diff --git a/tests/snapshots/nanox_eip191_opensea/00009.png b/tests/zemu/snapshots/nanox_eip191_opensea/00009.png similarity index 100% rename from tests/snapshots/nanox_eip191_opensea/00009.png rename to tests/zemu/snapshots/nanox_eip191_opensea/00009.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00000.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00000.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00000.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00000.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00001.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00001.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00001.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00001.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00002.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00002.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00002.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00002.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00003.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00003.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00003.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00003.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00004.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00004.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00004.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00004.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00005.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00005.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00005.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00005.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00006.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00006.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00006.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00006.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00007.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00007.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00007.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00007.png diff --git a/tests/snapshots/nanox_enable_blind_signing/00008.png b/tests/zemu/snapshots/nanox_enable_blind_signing/00008.png similarity index 100% rename from tests/snapshots/nanox_enable_blind_signing/00008.png rename to tests/zemu/snapshots/nanox_enable_blind_signing/00008.png diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00000.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00000.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00001.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00001.png new file mode 100644 index 0000000..ba1dfa0 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00001.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00002.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00002.png new file mode 100644 index 0000000..7d01fe8 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00002.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00003.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00003.png new file mode 100644 index 0000000..950fd72 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00003.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00004.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00004.png new file mode 100644 index 0000000..5906d19 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00004.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00005.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00005.png new file mode 100644 index 0000000..05c1afa Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00005.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00006.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00006.png new file mode 100644 index 0000000..690bb3d Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00006.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00007.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00007.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00007.png differ diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00008.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00008.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00008.png rename to tests/zemu/snapshots/nanox_erc1155_batch_transfer/00008.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00009.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00009.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00009.png rename to tests/zemu/snapshots/nanox_erc1155_batch_transfer/00009.png diff --git a/tests/snapshots/nanox_erc1155_batch_transfer/00010.png b/tests/zemu/snapshots/nanox_erc1155_batch_transfer/00010.png similarity index 100% rename from tests/snapshots/nanox_erc1155_batch_transfer/00010.png rename to tests/zemu/snapshots/nanox_erc1155_batch_transfer/00010.png diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00000.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00000.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00001.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00001.png new file mode 100644 index 0000000..2b0fd14 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00001.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00002.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00002.png new file mode 100644 index 0000000..7d01fe8 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00002.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00003.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00003.png new file mode 100644 index 0000000..a5790c1 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00003.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00004.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00004.png new file mode 100644 index 0000000..5906d19 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00004.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00005.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00005.png new file mode 100644 index 0000000..d6257d3 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00005.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00006.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00006.png new file mode 100644 index 0000000..061c754 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00006.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00007.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00007.png new file mode 100644 index 0000000..c748a75 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00007.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00008.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00008.png new file mode 100644 index 0000000..cd509d9 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00008.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer/00009.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00009.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer/00009.png differ diff --git a/tests/snapshots/nanox_erc1155_transfer/00010.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00010.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00010.png rename to tests/zemu/snapshots/nanox_erc1155_transfer/00010.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00011.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00011.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00011.png rename to tests/zemu/snapshots/nanox_erc1155_transfer/00011.png diff --git a/tests/snapshots/nanox_erc1155_transfer/00012.png b/tests/zemu/snapshots/nanox_erc1155_transfer/00012.png similarity index 100% rename from tests/snapshots/nanox_erc1155_transfer/00012.png rename to tests/zemu/snapshots/nanox_erc1155_transfer/00012.png diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00000.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00000.png new file mode 120000 index 0000000..a808e25 --- /dev/null +++ b/tests/zemu/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/zemu/snapshots/nanox_erc1155_transfer_wo_info/00001.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00001.png new file mode 120000 index 0000000..18b62b5 --- /dev/null +++ b/tests/zemu/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/zemu/snapshots/nanox_erc1155_transfer_wo_info/00002.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00002.png new file mode 120000 index 0000000..3ba3b50 --- /dev/null +++ b/tests/zemu/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/zemu/snapshots/nanox_erc1155_transfer_wo_info/00003.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00003.png new file mode 100644 index 0000000..b34af53 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00003.png differ diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00004.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00004.png new file mode 120000 index 0000000..d5f5958 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00004.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00004.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00005.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00005.png new file mode 120000 index 0000000..0d2033d --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00005.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00005.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00006.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00006.png new file mode 120000 index 0000000..ce62159 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00006.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00006.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00007.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00007.png new file mode 120000 index 0000000..e9c683a --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00007.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00007.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00008.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00008.png new file mode 120000 index 0000000..8dc9044 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00008.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00008.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00009.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00009.png new file mode 120000 index 0000000..8293fcb --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00009.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00009.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00010.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00010.png new file mode 120000 index 0000000..76c0110 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00010.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00010.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00011.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00011.png new file mode 120000 index 0000000..e2f4374 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00011.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00011.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00012.png b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00012.png new file mode 120000 index 0000000..24a2c61 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc1155_transfer_wo_info/00012.png @@ -0,0 +1 @@ +../nanox_erc1155_transfer/00012.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00000.png b/tests/zemu/snapshots/nanox_erc721_transfer/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00000.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00001.png b/tests/zemu/snapshots/nanox_erc721_transfer/00001.png new file mode 100644 index 0000000..2b0fd14 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00001.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00002.png b/tests/zemu/snapshots/nanox_erc721_transfer/00002.png new file mode 100644 index 0000000..7d01fe8 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00002.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00003.png b/tests/zemu/snapshots/nanox_erc721_transfer/00003.png new file mode 100644 index 0000000..9e8c446 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00003.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00004.png b/tests/zemu/snapshots/nanox_erc721_transfer/00004.png new file mode 100644 index 0000000..23f2a45 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00004.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00005.png b/tests/zemu/snapshots/nanox_erc721_transfer/00005.png new file mode 100644 index 0000000..e369a1b Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00005.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00006.png b/tests/zemu/snapshots/nanox_erc721_transfer/00006.png new file mode 100644 index 0000000..6ce12ba Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00006.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer/00007.png b/tests/zemu/snapshots/nanox_erc721_transfer/00007.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer/00007.png differ diff --git a/tests/snapshots/nanox_erc721_transfer/00008.png b/tests/zemu/snapshots/nanox_erc721_transfer/00008.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00008.png rename to tests/zemu/snapshots/nanox_erc721_transfer/00008.png diff --git a/tests/snapshots/nanox_erc721_transfer/00009.png b/tests/zemu/snapshots/nanox_erc721_transfer/00009.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00009.png rename to tests/zemu/snapshots/nanox_erc721_transfer/00009.png diff --git a/tests/snapshots/nanox_erc721_transfer/00010.png b/tests/zemu/snapshots/nanox_erc721_transfer/00010.png similarity index 100% rename from tests/snapshots/nanox_erc721_transfer/00010.png rename to tests/zemu/snapshots/nanox_erc721_transfer/00010.png diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00000.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00000.png new file mode 120000 index 0000000..eaca370 --- /dev/null +++ b/tests/zemu/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/zemu/snapshots/nanox_erc721_transfer_wo_info/00001.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00001.png new file mode 120000 index 0000000..3f02420 --- /dev/null +++ b/tests/zemu/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/zemu/snapshots/nanox_erc721_transfer_wo_info/00002.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00002.png new file mode 120000 index 0000000..55b219f --- /dev/null +++ b/tests/zemu/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/zemu/snapshots/nanox_erc721_transfer_wo_info/00003.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00003.png new file mode 100644 index 0000000..b34af53 Binary files /dev/null and b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00003.png differ diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00004.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00004.png new file mode 120000 index 0000000..4e66c9a --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00004.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00004.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00005.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00005.png new file mode 120000 index 0000000..b538cb6 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00005.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00005.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00006.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00006.png new file mode 120000 index 0000000..9d4b343 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00006.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00006.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00007.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00007.png new file mode 120000 index 0000000..8851ec8 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00007.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00007.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00008.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00008.png new file mode 120000 index 0000000..7faf831 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00008.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00008.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00009.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00009.png new file mode 120000 index 0000000..d3f938b --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00009.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00009.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00010.png b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00010.png new file mode 120000 index 0000000..8e81364 --- /dev/null +++ b/tests/zemu/snapshots/nanox_erc721_transfer_wo_info/00010.png @@ -0,0 +1 @@ +../nanox_erc721_transfer/00010.png \ No newline at end of file diff --git a/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00000.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00000.png differ diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00001.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00001.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00001.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00001.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00002.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00002.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00002.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00002.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00003.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00003.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00003.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00003.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00004.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00004.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00004.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00004.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00005.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00005.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00005.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00005.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00006.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00006.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00006.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00006.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00007.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00007.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00007.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00007.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00008.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00008.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00008.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00008.png diff --git a/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00009.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00009.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00009.png differ diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00010.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00010.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00010.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00010.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00011.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00011.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00011.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00011.png diff --git a/tests/snapshots/nanox_starkware_usdt_deposit/00012.png b/tests/zemu/snapshots/nanox_starkware_usdt_deposit/00012.png similarity index 100% rename from tests/snapshots/nanox_starkware_usdt_deposit/00012.png rename to tests/zemu/snapshots/nanox_starkware_usdt_deposit/00012.png diff --git a/tests/zemu/snapshots/nanox_transfer_112233445566_network/00000.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00000.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_112233445566_network/00001.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00001.png new file mode 100644 index 0000000..0976a31 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00001.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_112233445566_network/00002.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00002.png differ diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00003.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00003.png rename to tests/zemu/snapshots/nanox_transfer_112233445566_network/00003.png diff --git a/tests/zemu/snapshots/nanox_transfer_112233445566_network/00004.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00004.png new file mode 100644 index 0000000..70c1b9a Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00004.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_112233445566_network/00005.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00005.png differ diff --git a/tests/snapshots/nanox_transfer_bsc/00006.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00006.png rename to tests/zemu/snapshots/nanox_transfer_112233445566_network/00006.png diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00007.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00007.png rename to tests/zemu/snapshots/nanox_transfer_112233445566_network/00007.png diff --git a/tests/snapshots/nanox_transfer_112233445566_network/00008.png b/tests/zemu/snapshots/nanox_transfer_112233445566_network/00008.png similarity index 100% rename from tests/snapshots/nanox_transfer_112233445566_network/00008.png rename to tests/zemu/snapshots/nanox_transfer_112233445566_network/00008.png diff --git a/tests/zemu/snapshots/nanox_transfer_bsc/00000.png b/tests/zemu/snapshots/nanox_transfer_bsc/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_bsc/00000.png differ diff --git a/tests/snapshots/nanox_transfer_bsc/00001.png b/tests/zemu/snapshots/nanox_transfer_bsc/00001.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00001.png rename to tests/zemu/snapshots/nanox_transfer_bsc/00001.png diff --git a/tests/zemu/snapshots/nanox_transfer_bsc/00002.png b/tests/zemu/snapshots/nanox_transfer_bsc/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_bsc/00002.png differ diff --git a/tests/snapshots/nanox_transfer_bsc/00003.png b/tests/zemu/snapshots/nanox_transfer_bsc/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00003.png rename to tests/zemu/snapshots/nanox_transfer_bsc/00003.png diff --git a/tests/snapshots/nanox_transfer_bsc/00004.png b/tests/zemu/snapshots/nanox_transfer_bsc/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00004.png rename to tests/zemu/snapshots/nanox_transfer_bsc/00004.png diff --git a/tests/zemu/snapshots/nanox_transfer_bsc/00005.png b/tests/zemu/snapshots/nanox_transfer_bsc/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_bsc/00005.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00006.png b/tests/zemu/snapshots/nanox_transfer_bsc/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00006.png rename to tests/zemu/snapshots/nanox_transfer_bsc/00006.png diff --git a/tests/snapshots/nanox_transfer_bsc/00007.png b/tests/zemu/snapshots/nanox_transfer_bsc/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00007.png rename to tests/zemu/snapshots/nanox_transfer_bsc/00007.png diff --git a/tests/snapshots/nanox_transfer_bsc/00008.png b/tests/zemu/snapshots/nanox_transfer_bsc/00008.png similarity index 100% rename from tests/snapshots/nanox_transfer_bsc/00008.png rename to tests/zemu/snapshots/nanox_transfer_bsc/00008.png diff --git a/tests/zemu/snapshots/nanox_transfer_eip1559/00000.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_eip1559/00000.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_eip1559/00001.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00001.png new file mode 100644 index 0000000..cdcc19d Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_eip1559/00001.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_eip1559/00002.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00002.png new file mode 100644 index 0000000..5b65b54 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_eip1559/00002.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_eip1559/00003.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00003.png new file mode 100644 index 0000000..1a7a3f3 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_eip1559/00003.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_eip1559/00004.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00004.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_eip1559/00004.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum/00005.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00005.png rename to tests/zemu/snapshots/nanox_transfer_eip1559/00005.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00006.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00006.png rename to tests/zemu/snapshots/nanox_transfer_eip1559/00006.png diff --git a/tests/snapshots/nanox_transfer_eip1559/00007.png b/tests/zemu/snapshots/nanox_transfer_eip1559/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_eip1559/00007.png rename to tests/zemu/snapshots/nanox_transfer_eip1559/00007.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00000.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum/00000.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00001.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00001.png new file mode 100644 index 0000000..0976a31 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum/00001.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00002.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum/00002.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00003.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00003.png new file mode 100644 index 0000000..70c1b9a Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum/00003.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum/00004.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00004.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum/00004.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00005.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00005.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00005.png rename to tests/zemu/snapshots/nanox_transfer_ethereum/00005.png diff --git a/tests/snapshots/nanox_transfer_ethereum/00006.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00006.png rename to tests/zemu/snapshots/nanox_transfer_ethereum/00006.png diff --git a/tests/snapshots/nanox_transfer_ethereum/00007.png b/tests/zemu/snapshots/nanox_transfer_ethereum/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum/00007.png rename to tests/zemu/snapshots/nanox_transfer_ethereum/00007.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00000.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00000.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00001.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00001.png new file mode 100644 index 0000000..0976a31 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00001.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00002.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00002.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00003.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00003.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00003.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00004.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00004.png new file mode 100644 index 0000000..70c1b9a Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00004.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00005.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00005.png differ diff --git a/tests/snapshots/nanox_transfer_palm_network/00006.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00006.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00006.png diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00007.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00007.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00007.png diff --git a/tests/snapshots/nanox_transfer_ethereum_5234_network/00008.png b/tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00008.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_5234_network/00008.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_5234_network/00008.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00000.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00000.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00001.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00001.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00001.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_clone/00001.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00002.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00002.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00003.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00003.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_clone/00003.png diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00004.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00004.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00004.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00005.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00005.png new file mode 100644 index 0000000..c922246 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00005.png differ diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00006.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00006.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00006.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_clone/00006.png diff --git a/tests/snapshots/nanox_transfer_ethereum_clone/00007.png b/tests/zemu/snapshots/nanox_transfer_ethereum_clone/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_ethereum_clone/00007.png rename to tests/zemu/snapshots/nanox_transfer_ethereum_clone/00007.png diff --git a/tests/zemu/snapshots/nanox_transfer_palm_network/00000.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00000.png new file mode 100644 index 0000000..487ea10 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_palm_network/00000.png differ diff --git a/tests/snapshots/nanox_transfer_palm_network/00001.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00001.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00001.png rename to tests/zemu/snapshots/nanox_transfer_palm_network/00001.png diff --git a/tests/zemu/snapshots/nanox_transfer_palm_network/00002.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00002.png new file mode 100644 index 0000000..0f18eee Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_palm_network/00002.png differ diff --git a/tests/snapshots/nanox_transfer_palm_network/00003.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00003.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00003.png rename to tests/zemu/snapshots/nanox_transfer_palm_network/00003.png diff --git a/tests/snapshots/nanox_transfer_palm_network/00004.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00004.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00004.png rename to tests/zemu/snapshots/nanox_transfer_palm_network/00004.png diff --git a/tests/zemu/snapshots/nanox_transfer_palm_network/00005.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00005.png new file mode 100644 index 0000000..570ce28 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_palm_network/00005.png differ diff --git a/tests/zemu/snapshots/nanox_transfer_palm_network/00006.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00006.png new file mode 100644 index 0000000..c922246 Binary files /dev/null and b/tests/zemu/snapshots/nanox_transfer_palm_network/00006.png differ diff --git a/tests/snapshots/nanox_transfer_palm_network/00007.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00007.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00007.png rename to tests/zemu/snapshots/nanox_transfer_palm_network/00007.png diff --git a/tests/snapshots/nanox_transfer_palm_network/00008.png b/tests/zemu/snapshots/nanox_transfer_palm_network/00008.png similarity index 100% rename from tests/snapshots/nanox_transfer_palm_network/00008.png rename to tests/zemu/snapshots/nanox_transfer_palm_network/00008.png diff --git a/tests/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00000.png b/tests/zemu/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00000.png similarity index 100% rename from tests/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00000.png rename to tests/zemu/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00000.png diff --git a/tests/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00001.png b/tests/zemu/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00001.png similarity index 100% rename from tests/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00001.png rename to tests/zemu/snapshots/nanox_try_to_blind_sign_with_setting_disabled/00001.png diff --git a/tests/src/approve.test.js b/tests/zemu/src/approve.test.js similarity index 100% rename from tests/src/approve.test.js rename to tests/zemu/src/approve.test.js diff --git a/tests/src/blind_compound_deposit.test.js b/tests/zemu/src/blind_compound_deposit.test.js similarity index 100% rename from tests/src/blind_compound_deposit.test.js rename to tests/zemu/src/blind_compound_deposit.test.js diff --git a/tests/src/chainid.test.js b/tests/zemu/src/chainid.test.js similarity index 100% rename from tests/src/chainid.test.js rename to tests/zemu/src/chainid.test.js diff --git a/tests/src/contract_data_warning.test.js b/tests/zemu/src/contract_data_warning.test.js similarity index 100% rename from tests/src/contract_data_warning.test.js rename to tests/zemu/src/contract_data_warning.test.js diff --git a/tests/src/eip1559.test.js b/tests/zemu/src/eip1559.test.js similarity index 100% rename from tests/src/eip1559.test.js rename to tests/zemu/src/eip1559.test.js diff --git a/tests/src/eip191.test.js b/tests/zemu/src/eip191.test.js similarity index 100% rename from tests/src/eip191.test.js rename to tests/zemu/src/eip191.test.js diff --git a/tests/src/erc1155.test.js b/tests/zemu/src/erc1155.test.js similarity index 100% rename from tests/src/erc1155.test.js rename to tests/zemu/src/erc1155.test.js diff --git a/tests/src/erc721.test.js b/tests/zemu/src/erc721.test.js similarity index 100% rename from tests/src/erc721.test.js rename to tests/zemu/src/erc721.test.js diff --git a/tests/src/send.test.js b/tests/zemu/src/send.test.js similarity index 100% rename from tests/src/send.test.js rename to tests/zemu/src/send.test.js diff --git a/tests/src/send_bsc.test.js b/tests/zemu/src/send_bsc.test.js similarity index 100% rename from tests/src/send_bsc.test.js rename to tests/zemu/src/send_bsc.test.js diff --git a/tests/src/send_etc.test.js b/tests/zemu/src/send_etc.test.js similarity index 100% rename from tests/src/send_etc.test.js rename to tests/zemu/src/send_etc.test.js diff --git a/tests/src/starkware.test.js b/tests/zemu/src/starkware.test.js similarity index 100% rename from tests/src/starkware.test.js rename to tests/zemu/src/starkware.test.js diff --git a/tests/src/test.fixture.js b/tests/zemu/src/test.fixture.js similarity index 100% rename from tests/src/test.fixture.js rename to tests/zemu/src/test.fixture.js diff --git a/tests/yarn.lock b/tests/zemu/yarn.lock similarity index 99% rename from tests/yarn.lock rename to tests/zemu/yarn.lock index 3029c57..b4b5395 100644 --- a/tests/yarn.lock +++ b/tests/zemu/yarn.lock @@ -2881,9 +2881,9 @@ camelcase@^6.0.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001219: - version "1.0.30001230" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" - integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== + version "1.0.30001312" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz" + integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== capture-exit@^2.0.0: version "2.0.0"