diff --git a/.github/workflows/codeql_check.yml b/.github/workflows/codeql_check.yml index 4c4b209..656844c 100644 --- a/.github/workflows/codeql_check.yml +++ b/.github/workflows/codeql_check.yml @@ -18,7 +18,7 @@ jobs: name: Analyse strategy: matrix: - sdk: ["$NANOS_SDK", "$NANOX_SDK", "$NANOSP_SDK", "$STAX_SDK"] + sdk: ["$NANOS_SDK", "$NANOX_SDK", "$NANOSP_SDK", "$STAX_SDK","$FLEX_SDK"] # 'cpp' covers C and C++ language: ['cpp'] runs-on: ubuntu-latest diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index da6d771..2d4c36f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,6 +6,8 @@ on: branches: - main - develop + - master # for safety reasons + - dev # for safety reasons jobs: configure: @@ -20,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - name: Install deps @@ -41,7 +43,7 @@ jobs: size: ${{steps.build.outputs.size}} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - name: Build Standard app @@ -70,24 +72,23 @@ jobs: echo $HOME echo $DISPLAY - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - run: sudo apt-get update -y && sudo apt-get install -y libusb-1.0.0 libudev-dev - name: Install node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 + with: + node-version: 18 - name: Install yarn run: | npm install -g yarn - - name: Build Ledger app - run: make - - name: Build/Install build js deps - run: make zemu_install - - name: Run zemu tests - run: "cd tests_zemu; yarn test" + - name: Build and run zemu tests + run: | + make test_all - name: Upload Snapshots (only failure) if: ${{ failure() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: snapshots-tmp path: tests_zemu/snapshots-tmp/ @@ -103,7 +104,7 @@ jobs: BOLOS_SDK: /opt/nanos-secure-sdk steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - name: Install deps @@ -139,7 +140,7 @@ jobs: BOLOS_SDK: /opt/nanosplus-secure-sdk steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - name: Install deps @@ -163,3 +164,71 @@ jobs: tag_name: ${{ steps.nanosp.outputs.tag_name }} draft: false prerelease: false + + build_package_stax: + needs: [configure, build, build_ledger, test_zemu] + if: ${{ github.ref == 'refs/heads/main' }} + runs-on: ubuntu-latest + container: + image: zondax/ledger-app-builder:latest + options: --user ${{ needs.configure.outputs.uid_gid }} + env: + BOLOS_SDK: /opt/stax-secure-sdk + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + - name: Install deps + run: pip install ledgerblue + + - name: Build Stax + shell: bash -l {0} + run: make + - name: Set tag + id: stax + run: echo "tag_name=$(./app/pkg/installer_stax.sh version)" >> $GITHUB_OUTPUT + - name: Update Release + id: update_release_2 + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + files: ./app/pkg/installer_stax.sh + tag_name: ${{ steps.stax.outputs.tag_name }} + draft: false + prerelease: false + + build_package_flex: + needs: [configure, build, build_ledger, test_zemu] + if: ${{ github.ref == 'refs/heads/main' }} + runs-on: ubuntu-latest + container: + image: zondax/ledger-app-builder:latest + options: --user ${{ needs.configure.outputs.uid_gid }} + env: + BOLOS_SDK: /opt/flex-secure-sdk + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + - name: Install deps + run: pip install ledgerblue + + - name: Build Flex + shell: bash -l {0} + run: make + - name: Set tag + id: flex + run: echo "tag_name=$(./app/pkg/installer_flex.sh version)" >> $GITHUB_OUTPUT + - name: Update Release + id: update_release_2 + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + files: ./app/pkg/installer_flex.sh + tag_name: ${{ steps.flex.outputs.tag_name }} + draft: false + prerelease: false diff --git a/.gitignore b/.gitignore index 4862135..0a01dd8 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,8 @@ CMakeFiles/ CMakeCache.txt unittests *.cmake +!\cmake/Hunter/config.cmake +!\cmake/HunterGate.cmake Testing/ cmake-build-fuzz/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 9da3479..b291d9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,12 +14,22 @@ #* limitations under the License. #******************************************************************************** cmake_minimum_required(VERSION 3.0) +include("cmake/HunterGate.cmake") +HunterGate( + URL "https://github.com/cpp-pm/hunter/archive/v0.25.5.tar.gz" + SHA1 "a20151e4c0740ee7d0f9994476856d813cdead29" + LOCAL +) + project(ledger-thorchain VERSION 0.0.0) enable_testing() cmake_policy(SET CMP0025 NEW) set(CMAKE_CXX_STANDARD 11) +set(HUNTER_STATUS_DEBUG ON) +set(HUNTER_TLS_VERIFY OFF) + option(ENABLE_FUZZING "Build with fuzzing instrumentation and build fuzz targets" OFF) option(ENABLE_COVERAGE "Build with source code coverage instrumentation" OFF) option(ENABLE_SANITIZERS "Build with ASAN and UBSAN" OFF) @@ -30,6 +40,13 @@ string(APPEND CMAKE_LINKER_FLAGS " -fno-omit-frame-pointer -g") add_definitions(-DAPP_STANDARD) +hunter_add_package(fmt) +find_package(fmt CONFIG REQUIRED) +hunter_add_package(jsoncpp) +find_package(jsoncpp CONFIG REQUIRED) +hunter_add_package(GTest) +find_package(GTest CONFIG REQUIRED) + if(ENABLE_FUZZING) add_definitions(-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1) SET(ENABLE_SANITIZERS ON CACHE BOOL "Sanitizer automatically enabled" FORCE) @@ -71,8 +88,7 @@ if(ENABLE_SANITIZERS) string(APPEND CMAKE_LINKER_FLAGS " -fsanitize=address,undefined -fsanitize-recover=address,undefined") endif() -include(cmake/conan/CMakeLists.txt) -add_subdirectory(cmake/gtest) + string(APPEND CMAKE_CXX_FLAGS " -fsanitize=address -fno-omit-frame-pointer") string(APPEND CMAKE_LINKER_FLAGS " -fsanitize=address -fno-omit-frame-pointer") @@ -135,23 +151,19 @@ file(GLOB_RECURSE TESTS_SRC add_executable(unittests ${TESTS_SRC}) target_include_directories(unittests PRIVATE - ${gtest_SOURCE_DIR}/include - ${gmock_SOURCE_DIR}/include - ${CONAN_INCLUDE_DIRS_FMT} - ${CONAN_INCLUDE_DIRS_JSONCPP} ${CMAKE_CURRENT_SOURCE_DIR}/deps/jsmn/src ${CMAKE_CURRENT_SOURCE_DIR}/deps/tinycbor/src ) target_link_libraries(unittests PRIVATE - gtest_main + GTest::gtest_main app_lib - CONAN_PKG::fmt - CONAN_PKG::jsoncpp) + fmt::fmt + JsonCpp::JsonCpp) add_compile_definitions(TESTVECTORS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/tests/") add_compile_definitions(APP_TESTING=1) -add_test(unittests ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittests) +add_test(NAME unittests COMMAND unittests) set_tests_properties(unittests PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests) ############################################################## diff --git a/Makefile b/Makefile index 74ff1e1..b930237 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ ifeq ($(BOLOS_SDK),) ZXLIB_COMPILE_STAX ?= 1 +PRODUCTION_BUILD ?= 1 include $(CURDIR)/deps/ledger-zxlib/dockerized_build.mk else default: @@ -32,4 +33,4 @@ endif test_all: make zemu_install make - make zemu_test + make zemu_test \ No newline at end of file diff --git a/README.md b/README.md index bb670d2..ab1b828 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ Forked from [Cosmos App](https://github.com/LedgerHQ/app-cosmos) by Zondax --- -This project contains the THORChain app for Ledger Nano S, Nano S+, X and Stax. +This project contains the THORChain app for Ledger Nano S, Nano S+, X, Flex and Stax. -- Ledger Nano S/S+/X/Stax THORChain app +- Ledger Nano S/S+/X/Flex/Stax THORChain app - Specs / Documentation - C++ unit tests - Zemu tests diff --git a/app/Makefile b/app/Makefile index 5d4ac98..528c2ed 100755 --- a/app/Makefile +++ b/app/Makefile @@ -27,6 +27,19 @@ include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.installer_script include $(BOLOS_SDK)/Makefile.defines include $(CURDIR)/Makefile.version +# Set the default value for PRODUCTION_BUILD to 1 if not already defined +PRODUCTION_BUILD ?= 1 + +# Display whether this is a production build or for internal use +ifeq ($(PRODUCTION_BUILD), 1) + $(info ************ PRODUCTION_BUILD = [PRODUCTION BUILD]) +else + $(info ************ PRODUCTION_BUILD = [INTERNAL USE]) +endif + +# Add the PRODUCTION_BUILD definition to the compiler flags +DEFINES += PRODUCTION_BUILD=$(PRODUCTION_BUILD) + $(info ************ TARGET_NAME = [$(TARGET_NAME)]) include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.app_testing @@ -56,6 +69,13 @@ ENABLE_PENDING_REVIEW_SCREEN ?= 1 include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.devices +ifeq ($(TARGET_NAME),TARGET_NANOS) + APP_STACK_MIN_SIZE := 1600 +else ifeq ($(TARGET_NAME),TARGET_NANOX) +# the previous value (5000) was too high and caused the app to crash, i reduced it until it worked + APP_STACK_MIN_SIZE := 1730 +endif + $(info TARGET_NAME = [$(TARGET_NAME)]) $(info ICONNAME = [$(ICONNAME)]) diff --git a/app/Makefile.version b/app/Makefile.version index b196e86..6862e02 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -1,6 +1,6 @@ # This is the `transaction_version` field of `Runtime` APPVERSION_M=2 # This is the `spec_version` field of `Runtime` -APPVERSION_N=3 +APPVERSION_N=4 # This is the patch version of this release -APPVERSION_P=3 +APPVERSION_P=1 diff --git a/app/flex_icon.gif b/app/flex_icon.gif new file mode 100644 index 0000000..b112e7d Binary files /dev/null and b/app/flex_icon.gif differ diff --git a/app/glyphs/icon_flex_40.gif b/app/glyphs/icon_flex_40.gif new file mode 100644 index 0000000..b112e7d Binary files /dev/null and b/app/glyphs/icon_flex_40.gif differ diff --git a/app/src/coin.h b/app/src/coin.h index 5ff033c..1855716 100644 --- a/app/src/coin.h +++ b/app/src/coin.h @@ -57,6 +57,7 @@ typedef enum { #define COIN_DEFAULT_DENOM_BASE "rune" #define COIN_DEFAULT_DENOM_REPR "RUNE" +#define COIN_DEFAULT_DENOM_REPR_2 "THOR.RUNE" #define COIN_DEFAULT_DENOM_FACTOR 8u #define COIN_DEFAULT_DENOM_TRIMMING 0u diff --git a/app/src/common/tx.c b/app/src/common/tx.c index fa766ce..fcdb027 100644 --- a/app/src/common/tx.c +++ b/app/src/common/tx.c @@ -21,14 +21,16 @@ #include #include "zxmacros.h" -#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) || defined(TARGET_STAX) +#if defined(TARGET_NANOS2) || defined(TARGET_STAX) || defined(TARGET_FLEX) #define RAM_BUFFER_SIZE 8192 #define FLASH_BUFFER_SIZE 16384 +#elif defined(TARGET_NANOX) +#define RAM_BUFFER_SIZE 8158 +#define FLASH_BUFFER_SIZE 16384 #elif defined(TARGET_NANOS) #define RAM_BUFFER_SIZE 256 #define FLASH_BUFFER_SIZE 8192 #endif - // Ram uint8_t ram_buffer[RAM_BUFFER_SIZE]; @@ -38,7 +40,7 @@ typedef struct uint8_t buffer[FLASH_BUFFER_SIZE]; } storage_t; -#if defined(TARGET_NANOS) || defined(TARGET_NANOX) || defined(TARGET_NANOS2) || defined(TARGET_STAX) +#if defined(TARGET_NANOS) || defined(TARGET_NANOX) || defined(TARGET_NANOS2) || defined(TARGET_STAX) || defined(TARGET_FLEX) storage_t NV_CONST N_appdata_impl __attribute__((aligned(64))); #define N_appdata (*(NV_VOLATILE storage_t *)PIC(&N_appdata_impl)) #endif diff --git a/app/src/json/json_parser.h b/app/src/json/json_parser.h index e62677c..a146676 100644 --- a/app/src/json/json_parser.h +++ b/app/src/json/json_parser.h @@ -39,7 +39,7 @@ extern "C" { #define MAX_NUMBER_OF_TOKENS 70 #endif -#if defined(TARGET_STAX) +#if defined(TARGET_STAX) || defined(TARGET_FLEX) #undef MAX_NUMBER_OF_TOKENS #define MAX_NUMBER_OF_TOKENS 600 #endif diff --git a/app/src/parser.c b/app/src/parser.c index 4108e35..b5fd754 100644 --- a/app/src/parser.c +++ b/app/src/parser.c @@ -110,12 +110,12 @@ __Z_INLINE parser_error_t is_default_denom_base(const char *denom, uint8_t denom return parser_ok; } - if (strlen(COIN_DEFAULT_DENOM_BASE) != denom_len) { + if (strlen(COIN_DEFAULT_DENOM_BASE) != denom_len && strlen(COIN_DEFAULT_DENOM_REPR_2) != denom_len) { *is_default = false; return parser_ok; } - if (memcmp(denom, COIN_DEFAULT_DENOM_BASE, denom_len) == 0) { + if (memcmp(denom, COIN_DEFAULT_DENOM_BASE, denom_len) == 0 || memcmp(denom, COIN_DEFAULT_DENOM_REPR_2, denom_len) == 0) { *is_default = true; return parser_ok; } @@ -125,7 +125,7 @@ __Z_INLINE parser_error_t is_default_denom_base(const char *denom, uint8_t denom __Z_INLINE parser_error_t parser_formatAmountItem(uint16_t amountToken, char *outVal, uint16_t outValLen, - uint8_t pageIdx, uint8_t *pageCount) { + uint8_t pageIdx, uint8_t *pageCount, bool *is_default) { *pageCount = 0; uint16_t numElements; @@ -187,9 +187,9 @@ __Z_INLINE parser_error_t parser_formatAmountItem(uint16_t amountToken, snprintf(bufferUI, sizeof(bufferUI), "%s ", tmpAmount); // If denomination has been recognized format and replace - bool is_default =false; - CHECK_PARSER_ERR(is_default_denom_base(denomPtr, denomLen, &is_default)) - if (is_default) { + *is_default = false; + CHECK_PARSER_ERR(is_default_denom_base(denomPtr, denomLen, is_default)) + if (*is_default) { if (fpstr_to_str(bufferUI, sizeof(bufferUI), tmpAmount, COIN_DEFAULT_DENOM_FACTOR) != 0) { return parser_unexpected_error; } @@ -205,12 +205,12 @@ __Z_INLINE parser_error_t parser_formatAmountItem(uint16_t amountToken, __Z_INLINE parser_error_t parser_formatAmount(uint16_t amountToken, char *outVal, uint16_t outValLen, - uint8_t pageIdx, uint8_t *pageCount) { - ZEMU_LOGF(200, "[formatAmount] ------- pageidx %d", pageIdx) + uint8_t pageIdx, uint8_t *pageCount, bool *is_default) { + ZEMU_LOGF(200, "[formatAmount] ------- pageidx %d\n", pageIdx) *pageCount = 0; if (parser_tx_obj.tx_json.json.tokens[amountToken].type != JSMN_ARRAY) { - return parser_formatAmountItem(amountToken, outVal, outValLen, pageIdx, pageCount); + return parser_formatAmountItem(amountToken, outVal, outValLen, pageIdx, pageCount, is_default); } uint8_t totalPages = 0; @@ -227,7 +227,7 @@ __Z_INLINE parser_error_t parser_formatAmount(uint16_t amountToken, uint8_t subpagesCount; CHECK_PARSER_ERR(array_get_nth_element(&parser_tx_obj.tx_json.json, amountToken, i, &itemTokenIdx)); - CHECK_PARSER_ERR(parser_formatAmountItem(itemTokenIdx, outVal, outValLen, 0, &subpagesCount)); + CHECK_PARSER_ERR(parser_formatAmountItem(itemTokenIdx, outVal, outValLen, 0, &subpagesCount, is_default)); totalPages += subpagesCount; ZEMU_LOGF(200, "[formatAmount] [%d] TokenIdx: %d - PageIdx: %d - Pages: %d - Total %d", i, itemTokenIdx, @@ -256,7 +256,7 @@ __Z_INLINE parser_error_t parser_formatAmount(uint16_t amountToken, } uint8_t dummy; - return parser_formatAmountItem(showItemTokenIdx, outVal, outValLen, showPageIdx, &dummy); + return parser_formatAmountItem(showItemTokenIdx, outVal, outValLen, showPageIdx, &dummy, is_default); } __Z_INLINE parser_error_t parser_getJsonItem(uint8_t displayIdx, @@ -287,10 +287,12 @@ __Z_INLINE parser_error_t parser_getJsonItem(uint8_t displayIdx, CHECK_APP_CANARY() snprintf(outKey, outKeyLen, "%s", tmpKey); + bool is_default = false; + if (parser_isAmount(tmpKey)) { CHECK_PARSER_ERR(parser_formatAmount(ret_value_token_index, outVal, outValLen, - pageIdx, pageCount)) + pageIdx, pageCount, &is_default)) } else { CHECK_PARSER_ERR(tx_getToken(ret_value_token_index, outVal, outValLen, @@ -300,8 +302,12 @@ __Z_INLINE parser_error_t parser_getJsonItem(uint8_t displayIdx, CHECK_PARSER_ERR(tx_display_make_friendly()) CHECK_APP_CANARY() - - snprintf(outKey, outKeyLen, "%s", tmpKey); + // Display "Raw Amount" for non-default tokens + if(memcmp(tmpKey, "Amount", 6) == 0 && is_default == false){ + snprintf(outKey, outKeyLen, "Raw %s", tmpKey); + } else { + snprintf(outKey, outKeyLen, "%s", tmpKey); + } CHECK_APP_CANARY() return parser_ok; diff --git a/app/stax_icon.gif b/app/stax_icon.gif index bd33818..1b8f342 100644 Binary files a/app/stax_icon.gif and b/app/stax_icon.gif differ diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake new file mode 100644 index 0000000..0703ceb --- /dev/null +++ b/cmake/Hunter/config.cmake @@ -0,0 +1 @@ +hunter_config(GTest VERSION 1.14.0) diff --git a/cmake/HunterGate.cmake b/cmake/HunterGate.cmake new file mode 100644 index 0000000..17c6d38 --- /dev/null +++ b/cmake/HunterGate.cmake @@ -0,0 +1,543 @@ +# Copyright (c) 2013-2019, Ruslan Baratov +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This is a gate file to Hunter package manager. +# Include this file using `include` command and add package you need, example: +# +# cmake_minimum_required(VERSION 3.5) +# +# include("cmake/HunterGate.cmake") +# HunterGate( +# URL "https://github.com/path/to/hunter/archive.tar.gz" +# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d" +# ) +# +# project(MyProject) +# +# hunter_add_package(Foo) +# hunter_add_package(Boo COMPONENTS Bar Baz) +# +# Projects: +# * https://github.com/cpp-pm/gate/ +# * https://github.com/cpp-pm/hunter + +option(HUNTER_ENABLED "Enable Hunter package manager support" ON) + +if(HUNTER_ENABLED) + if(CMAKE_VERSION VERSION_LESS "3.5") + message( + FATAL_ERROR + "At least CMake version 3.5 required for Hunter dependency management." + " Update CMake or set HUNTER_ENABLED to OFF." + ) + endif() +endif() + +include(CMakeParseArguments) # cmake_parse_arguments + +option(HUNTER_STATUS_PRINT "Print working status" ON) +option(HUNTER_STATUS_DEBUG "Print a lot info" OFF) +option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON) +set(HUNTER_ROOT "" CACHE FILEPATH "Override the HUNTER_ROOT.") + +set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors") + +function(hunter_gate_status_print) + if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG) + foreach(print_message ${ARGV}) + message(STATUS "[hunter] ${print_message}") + endforeach() + endif() +endfunction() + +function(hunter_gate_status_debug) + if(HUNTER_STATUS_DEBUG) + foreach(print_message ${ARGV}) + string(TIMESTAMP timestamp) + message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}") + endforeach() + endif() +endfunction() + +function(hunter_gate_error_page error_page) + message("------------------------------ ERROR ------------------------------") + message(" ${HUNTER_ERROR_PAGE}/${error_page}.html") + message("-------------------------------------------------------------------") + message("") + message(FATAL_ERROR "") +endfunction() + +function(hunter_gate_internal_error) + message("") + foreach(print_message ${ARGV}) + message("[hunter ** INTERNAL **] ${print_message}") + endforeach() + message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") + message("") + hunter_gate_error_page("error.internal") +endfunction() + +function(hunter_gate_fatal_error) + cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}") + if("${hunter_ERROR_PAGE}" STREQUAL "") + hunter_gate_internal_error("Expected ERROR_PAGE") + endif() + message("") + foreach(x ${hunter_UNPARSED_ARGUMENTS}) + message("[hunter ** FATAL ERROR **] ${x}") + endforeach() + message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") + message("") + hunter_gate_error_page("${hunter_ERROR_PAGE}") +endfunction() + +function(hunter_gate_user_error) + hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data") +endfunction() + +function(hunter_gate_self root version sha1 result) + string(COMPARE EQUAL "${root}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("root is empty") + endif() + + string(COMPARE EQUAL "${version}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("version is empty") + endif() + + string(COMPARE EQUAL "${sha1}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("sha1 is empty") + endif() + + string(SUBSTRING "${sha1}" 0 7 archive_id) + + if(EXISTS "${root}/cmake/Hunter") + set(hunter_self "${root}") + else() + set( + hunter_self + "${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked" + ) + endif() + + set("${result}" "${hunter_self}" PARENT_SCOPE) +endfunction() + +# Set HUNTER_GATE_ROOT cmake variable to suitable value. +function(hunter_gate_detect_root) + # Check CMake variable + if(HUNTER_ROOT) + set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable") + return() + endif() + + # Check environment variable + if(DEFINED ENV{HUNTER_ROOT}) + set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT detected by environment variable") + return() + endif() + + # Check HOME environment variable + if(DEFINED ENV{HOME}) + set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable") + return() + endif() + + # Check SYSTEMDRIVE and USERPROFILE environment variable (windows only) + if(WIN32) + if(DEFINED ENV{SYSTEMDRIVE}) + set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug( + "HUNTER_ROOT set using SYSTEMDRIVE environment variable" + ) + return() + endif() + + if(DEFINED ENV{USERPROFILE}) + set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug( + "HUNTER_ROOT set using USERPROFILE environment variable" + ) + return() + endif() + endif() + + hunter_gate_fatal_error( + "Can't detect HUNTER_ROOT" + ERROR_PAGE "error.detect.hunter.root" + ) +endfunction() + +function(hunter_gate_download dir) + string( + COMPARE + NOTEQUAL + "$ENV{HUNTER_DISABLE_AUTOINSTALL}" + "" + disable_autoinstall + ) + if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL) + hunter_gate_fatal_error( + "Hunter not found in '${dir}'" + "Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'" + "Settings:" + " HUNTER_ROOT: ${HUNTER_GATE_ROOT}" + " HUNTER_SHA1: ${HUNTER_GATE_SHA1}" + ERROR_PAGE "error.run.install" + ) + endif() + string(COMPARE EQUAL "${dir}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("Empty 'dir' argument") + endif() + + string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("HUNTER_GATE_SHA1 empty") + endif() + + string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("HUNTER_GATE_URL empty") + endif() + + set(done_location "${dir}/DONE") + set(sha1_location "${dir}/SHA1") + + set(build_dir "${dir}/Build") + set(cmakelists "${dir}/CMakeLists.txt") + + hunter_gate_status_debug("Locking directory: ${dir}") + file(LOCK "${dir}" DIRECTORY GUARD FUNCTION) + hunter_gate_status_debug("Lock done") + + if(EXISTS "${done_location}") + # while waiting for lock other instance can do all the job + hunter_gate_status_debug("File '${done_location}' found, skip install") + return() + endif() + + file(REMOVE_RECURSE "${build_dir}") + file(REMOVE_RECURSE "${cmakelists}") + + file(MAKE_DIRECTORY "${build_dir}") # check directory permissions + + # Disabling languages speeds up a little bit, reduces noise in the output + # and avoids path too long windows error + file( + WRITE + "${cmakelists}" + "cmake_minimum_required(VERSION 3.5)\n" + "if(POLICY CMP0114)\n" + " cmake_policy(SET CMP0114 NEW)\n" + "endif()\n" + "if(POLICY CMP0135)\n" + " cmake_policy(SET CMP0135 NEW)\n" + "endif()\n" + "project(HunterDownload LANGUAGES NONE)\n" + "include(ExternalProject)\n" + "ExternalProject_Add(\n" + " Hunter\n" + " URL\n" + " \"${HUNTER_GATE_URL}\"\n" + " URL_HASH\n" + " SHA1=${HUNTER_GATE_SHA1}\n" + " DOWNLOAD_DIR\n" + " \"${dir}\"\n" + " TLS_VERIFY\n" + " ${HUNTER_TLS_VERIFY}\n" + " SOURCE_DIR\n" + " \"${dir}/Unpacked\"\n" + " CONFIGURE_COMMAND\n" + " \"\"\n" + " BUILD_COMMAND\n" + " \"\"\n" + " INSTALL_COMMAND\n" + " \"\"\n" + ")\n" + ) + + if(HUNTER_STATUS_DEBUG) + set(logging_params "") + else() + set(logging_params OUTPUT_QUIET) + endif() + + hunter_gate_status_debug("Run generate") + + # Need to add toolchain file too. + # Otherwise on Visual Studio + MDD this will fail with error: + # "Could not find an appropriate version of the Windows 10 SDK installed on this machine" + if(EXISTS "${CMAKE_TOOLCHAIN_FILE}") + get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE) + set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}") + else() + # 'toolchain_arg' can't be empty + set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=") + endif() + + string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make) + if(no_make) + set(make_arg "") + else() + # Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM + set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}") + endif() + + execute_process( + COMMAND + "${CMAKE_COMMAND}" + "-H${dir}" + "-B${build_dir}" + "-G${CMAKE_GENERATOR}" + "${toolchain_arg}" + ${make_arg} + WORKING_DIRECTORY "${dir}" + RESULT_VARIABLE download_result + ${logging_params} + ) + + if(NOT download_result EQUAL 0) + hunter_gate_internal_error( + "Configure project failed." + "To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}" + "In directory ${dir}" + ) + endif() + + hunter_gate_status_print( + "Initializing Hunter workspace (${HUNTER_GATE_SHA1})" + " ${HUNTER_GATE_URL}" + " -> ${dir}" + ) + execute_process( + COMMAND "${CMAKE_COMMAND}" --build "${build_dir}" + WORKING_DIRECTORY "${dir}" + RESULT_VARIABLE download_result + ${logging_params} + ) + + if(NOT download_result EQUAL 0) + hunter_gate_internal_error("Build project failed") + endif() + + file(REMOVE_RECURSE "${build_dir}") + file(REMOVE_RECURSE "${cmakelists}") + + file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}") + file(WRITE "${done_location}" "DONE") + + hunter_gate_status_debug("Finished") +endfunction() + +# Must be a macro so master file 'cmake/Hunter' can +# apply all variables easily just by 'include' command +# (otherwise PARENT_SCOPE magic needed) +macro(HunterGate) + if(HUNTER_GATE_DONE) + # variable HUNTER_GATE_DONE set explicitly for external project + # (see `hunter_download`) + set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) + endif() + + # First HunterGate command will init Hunter, others will be ignored + get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET) + + if(NOT HUNTER_ENABLED) + # Empty function to avoid error "unknown function" + function(hunter_add_package) + endfunction() + + set( + _hunter_gate_disabled_mode_dir + "${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode" + ) + if(EXISTS "${_hunter_gate_disabled_mode_dir}") + hunter_gate_status_debug( + "Adding \"disabled-mode\" modules: ${_hunter_gate_disabled_mode_dir}" + ) + list(APPEND CMAKE_PREFIX_PATH "${_hunter_gate_disabled_mode_dir}") + endif() + elseif(_hunter_gate_done) + hunter_gate_status_debug("Secondary HunterGate (use old settings)") + hunter_gate_self( + "${HUNTER_CACHED_ROOT}" + "${HUNTER_VERSION}" + "${HUNTER_SHA1}" + _hunter_self + ) + include("${_hunter_self}/cmake/Hunter") + else() + set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}") + + string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name) + if(_have_project_name) + hunter_gate_fatal_error( + "Please set HunterGate *before* 'project' command. " + "Detected project: ${PROJECT_NAME}" + ERROR_PAGE "error.huntergate.before.project" + ) + endif() + + cmake_parse_arguments( + HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV} + ) + + string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1) + string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url) + string( + COMPARE + NOTEQUAL + "${HUNTER_GATE_UNPARSED_ARGUMENTS}" + "" + _have_unparsed + ) + string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global) + string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath) + + if(_have_unparsed) + hunter_gate_user_error( + "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}" + ) + endif() + if(_empty_sha1) + hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory") + endif() + if(_empty_url) + hunter_gate_user_error("URL suboption of HunterGate is mandatory") + endif() + if(_have_global) + if(HUNTER_GATE_LOCAL) + hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)") + endif() + if(_have_filepath) + hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)") + endif() + endif() + if(HUNTER_GATE_LOCAL) + if(_have_global) + hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)") + endif() + if(_have_filepath) + hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)") + endif() + endif() + if(_have_filepath) + if(_have_global) + hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)") + endif() + if(HUNTER_GATE_LOCAL) + hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)") + endif() + endif() + + hunter_gate_detect_root() # set HUNTER_GATE_ROOT + + # Beautify path, fix probable problems with windows path slashes + get_filename_component( + HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE + ) + hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}") + if(NOT HUNTER_ALLOW_SPACES_IN_PATH) + string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces) + if(NOT _contain_spaces EQUAL -1) + hunter_gate_fatal_error( + "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces." + "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error" + "(Use at your own risk!)" + ERROR_PAGE "error.spaces.in.hunter.root" + ) + endif() + endif() + + string( + REGEX + MATCH + "[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*" + HUNTER_GATE_VERSION + "${HUNTER_GATE_URL}" + ) + string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty) + if(_is_empty) + set(HUNTER_GATE_VERSION "unknown") + endif() + + hunter_gate_self( + "${HUNTER_GATE_ROOT}" + "${HUNTER_GATE_VERSION}" + "${HUNTER_GATE_SHA1}" + _hunter_self + ) + + set(_master_location "${_hunter_self}/cmake/Hunter") + if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter") + # Hunter downloaded manually (e.g. by 'git clone') + set(_unused "xxxxxxxxxx") + set(HUNTER_GATE_SHA1 "${_unused}") + set(HUNTER_GATE_VERSION "${_unused}") + else() + get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE) + set(_done_location "${_archive_id_location}/DONE") + set(_sha1_location "${_archive_id_location}/SHA1") + + # Check Hunter already downloaded by HunterGate + if(NOT EXISTS "${_done_location}") + hunter_gate_download("${_archive_id_location}") + endif() + + if(NOT EXISTS "${_done_location}") + hunter_gate_internal_error("hunter_gate_download failed") + endif() + + if(NOT EXISTS "${_sha1_location}") + hunter_gate_internal_error("${_sha1_location} not found") + endif() + file(READ "${_sha1_location}" _sha1_value) + string(TOLOWER "${_sha1_value}" _sha1_value_lower) + string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower) + string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal) + if(NOT _is_equal) + hunter_gate_internal_error( + "Short SHA1 collision:" + " ${_sha1_value} (from ${_sha1_location})" + " ${HUNTER_GATE_SHA1} (HunterGate)" + ) + endif() + if(NOT EXISTS "${_master_location}") + hunter_gate_user_error( + "Master file not found:" + " ${_master_location}" + "try to update Hunter/HunterGate" + ) + endif() + endif() + include("${_master_location}") + set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) + endif() +endmacro() diff --git a/cmake/conan/CMakeLists.txt b/cmake/conan/CMakeLists.txt deleted file mode 100644 index e892437..0000000 --- a/cmake/conan/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Download automatically, you can also just copy the conan.cmake file - -if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") - message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") - file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake" - "${CMAKE_BINARY_DIR}/conan.cmake") -endif () -include(${CMAKE_BINARY_DIR}/conan.cmake) - -conan_check(REQUIRED) - -conan_cmake_run(CONANFILE conanfile.txt - BASIC_SETUP - CMAKE_TARGETS - BUILD missing) diff --git a/cmake/gtest/CMakeLists.txt b/cmake/gtest/CMakeLists.txt deleted file mode 100644 index eea7d07..0000000 --- a/cmake/gtest/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -############################## -# Google Test -# Based on instructions in https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -# Download and unpack googletest at configure time -configure_file(CMakeLists.txt.gtest.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt) - -execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "CMake step for googletest failed: ${result}") -endif () - -execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "Build step for googletest failed: ${result}") -endif () - -# Prevent overriding the parent project's compiler/linker settings on Windows -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - -add_subdirectory( - ${CMAKE_BINARY_DIR}/googletest-src - ${CMAKE_BINARY_DIR}/googletest-build -) - -if (CMAKE_VERSION VERSION_LESS 2.8.11) - include_directories("${gtest_SOURCE_DIR}/include") -endif () diff --git a/cmake/gtest/CMakeLists.txt.gtest.in b/cmake/gtest/CMakeLists.txt.gtest.in deleted file mode 100644 index b456631..0000000 --- a/cmake/gtest/CMakeLists.txt.gtest.in +++ /dev/null @@ -1,16 +0,0 @@ -# Based on https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -cmake_minimum_required(VERSION 3.0.0) - -project(googletest-download NONE) - -include(ExternalProject) -ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.11.0 - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - ) diff --git a/deps/ledger-zxlib b/deps/ledger-zxlib index df81cb7..0172a43 160000 --- a/deps/ledger-zxlib +++ b/deps/ledger-zxlib @@ -1 +1 @@ -Subproject commit df81cb767d464995327218f0fb92eaa2dd3b4db3 +Subproject commit 0172a430279045bfd5103e51d3975a3fbb9dc4b4 diff --git a/deps/nanosplus-secure-sdk b/deps/nanosplus-secure-sdk index 86e20d8..95e44c9 160000 --- a/deps/nanosplus-secure-sdk +++ b/deps/nanosplus-secure-sdk @@ -1 +1 @@ -Subproject commit 86e20d8dbcee181e11bc2ad7ac3f638eb7dc7b08 +Subproject commit 95e44c9635f08b0dcbbdd9b35f28425ac31d65ea diff --git a/deps/nanox-secure-sdk b/deps/nanox-secure-sdk index 86e20d8..95e44c9 160000 --- a/deps/nanox-secure-sdk +++ b/deps/nanox-secure-sdk @@ -1 +1 @@ -Subproject commit 86e20d8dbcee181e11bc2ad7ac3f638eb7dc7b08 +Subproject commit 95e44c9635f08b0dcbbdd9b35f28425ac31d65ea diff --git a/ledger_app.toml b/ledger_app.toml index 3e4cbb1..7f63dfe 100644 --- a/ledger_app.toml +++ b/ledger_app.toml @@ -1,7 +1,7 @@ [app] build_directory = "./app/" sdk = "C" -devices = ["nanos", "nanox", "nanos+", "stax"] +devices = ["nanos", "nanox", "nanos+", "stax", "flex"] [tests] unit_directory = "./tests/" diff --git a/tests/testcases/thor.json b/tests/testcases/thor.json index 05cc61f..ec492b3 100644 --- a/tests/testcases/thor.json +++ b/tests/testcases/thor.json @@ -54,12 +54,12 @@ "1 | Account : 588", "2 | Sequence : 5", "3 | Type : Send", - "4 | Amount : 150000000 rune", + "4 | Raw Amount : 150000000 rune", "5 | From [1/2] : tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv", "5 | From [2/2] : 5t5gp", "6 | To [1/2] : tthor10xgrknu44d83qr4s4uw56cqxg0hsev5e6", "6 | To [2/2] : 8lc9z", - "7 | Amount : 50000000 rune", + "7 | Raw Amount : 50000000 rune", "8 | From [1/2] : tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv", "8 | From [2/2] : 5t5gp", "9 | To [1/2] : tthor10xgrknu44d83qr4s4uw56cqxg0hsev5e6", @@ -103,7 +103,7 @@ "1 | Account : 588", "2 | Sequence : 5", "3 | Type : Send", - "4 | Amount : 150000000 rune", + "4 | Raw Amount : 150000000 rune", "5 | From [1/2] : tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv", "5 | From [2/2] : 5t5gp", "6 | To [1/2] : tthor10xgrknu44d83qr4s4uw56cqxg0hsev5e6", @@ -185,7 +185,7 @@ "1 | Account : 588", "2 | Sequence : 5", "3 | Type : Send", - "4 | Amount : 150000000 rune", + "4 | Raw Amount : 150000000 rune", "5 | From [1/2] : tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv", "5 | From [2/2] : 5t5gp", "6 | To [1/2] : tthor10xgrknu44d83qr4s4uw56cqxg0hsev5e6", @@ -309,8 +309,8 @@ "1 | Account : 588", "2 | Sequence : 6", "3 | Type : Deposit", - "4 | Amount [1/2] : 330000000 THOR.RUNE", - "4 | Amount [2/2] : 220000000 BSC.USDT", + "4 | Raw Amount [1/2] : 330000000 THOR.RUNE", + "4 | Raw Amount [2/2] : 220000000 BSC.USDT", "5 | Memo [1/2] : SWAP:BNB.BNB:tbnb1qk2m905ypazwfau9cn0qn", "5 | Memo [2/2] : r4c4yxz63v9u9md20:", "6 | Sender [1/2] : tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv", @@ -352,7 +352,7 @@ "1 | Account : 588", "2 | Sequence : 6", "3 | Type : Deposit", - "4 | Amount : 330000000 THOR.RUNE", + "4 | Raw Amount : 330000000 THOR.RUNE", "5 | Sender [1/2] : tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv", "5 | Sender [2/2] : 5t5gp", "6 | Fee : Empty", diff --git a/tests_zemu/package.json b/tests_zemu/package.json index 4221e55..2bce56c 100644 --- a/tests_zemu/package.json +++ b/tests_zemu/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@blooo/ledger-thorchain-js": "^1.0.1", - "@zondax/zemu": "^0.46.0" + "@zondax/zemu": "^0.50.2" }, "devDependencies": { "@types/jest": "^29.5.11", diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit/00000.png b/tests_zemu/snapshots/fl-sign_msgDeposit/00000.png new file mode 100644 index 0000000..aeae152 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit/00000.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit/00001.png b/tests_zemu/snapshots/fl-sign_msgDeposit/00001.png new file mode 100644 index 0000000..899806c Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit/00001.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit/00002.png b/tests_zemu/snapshots/fl-sign_msgDeposit/00002.png new file mode 100644 index 0000000..4d22495 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit/00002.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit/00003.png b/tests_zemu/snapshots/fl-sign_msgDeposit/00003.png new file mode 100644 index 0000000..e337a06 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit/00003.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit/00004.png b/tests_zemu/snapshots/fl-sign_msgDeposit/00004.png new file mode 100644 index 0000000..6c76e6a Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit/00004.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00000.png b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00000.png new file mode 100644 index 0000000..aeae152 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00000.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00001.png b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00001.png new file mode 100644 index 0000000..db57394 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00001.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00002.png b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00002.png new file mode 100644 index 0000000..4d22495 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00002.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00003.png b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00003.png new file mode 100644 index 0000000..e337a06 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00003.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00004.png b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00004.png new file mode 100644 index 0000000..6c76e6a Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgDeposit_token_2/00004.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgSend/00000.png b/tests_zemu/snapshots/fl-sign_msgSend/00000.png new file mode 100644 index 0000000..aeae152 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgSend/00000.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgSend/00001.png b/tests_zemu/snapshots/fl-sign_msgSend/00001.png new file mode 100644 index 0000000..bc1dd3e Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgSend/00001.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgSend/00002.png b/tests_zemu/snapshots/fl-sign_msgSend/00002.png new file mode 100644 index 0000000..a98f161 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgSend/00002.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgSend/00003.png b/tests_zemu/snapshots/fl-sign_msgSend/00003.png new file mode 100644 index 0000000..e337a06 Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgSend/00003.png differ diff --git a/tests_zemu/snapshots/fl-sign_msgSend/00004.png b/tests_zemu/snapshots/fl-sign_msgSend/00004.png new file mode 100644 index 0000000..6c76e6a Binary files /dev/null and b/tests_zemu/snapshots/fl-sign_msgSend/00004.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit/00001.png b/tests_zemu/snapshots/s-sign_msgDeposit/00001.png index c882ca3..17b9937 100644 Binary files a/tests_zemu/snapshots/s-sign_msgDeposit/00001.png and b/tests_zemu/snapshots/s-sign_msgDeposit/00001.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00000.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00000.png new file mode 100644 index 0000000..9d416d5 Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00000.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00001.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00001.png new file mode 100644 index 0000000..5a8f226 Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00001.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00002.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00002.png new file mode 100644 index 0000000..a07a571 Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00002.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00003.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00003.png new file mode 100644 index 0000000..ff57ad1 Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00003.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00004.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00004.png new file mode 100644 index 0000000..9ebadfb Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00004.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00005.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00005.png new file mode 100644 index 0000000..107c36d Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00005.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00006.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00006.png new file mode 100644 index 0000000..006c26a Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00006.png differ diff --git a/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00007.png b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00007.png new file mode 100644 index 0000000..f1867e4 Binary files /dev/null and b/tests_zemu/snapshots/s-sign_msgDeposit_token_2/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit/00002.png b/tests_zemu/snapshots/sp-sign_msgDeposit/00002.png index 3b0813c..7ea7d0f 100644 Binary files a/tests_zemu/snapshots/sp-sign_msgDeposit/00002.png and b/tests_zemu/snapshots/sp-sign_msgDeposit/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit/00003.png b/tests_zemu/snapshots/sp-sign_msgDeposit/00003.png index 3a272aa..8e2ae03 100644 Binary files a/tests_zemu/snapshots/sp-sign_msgDeposit/00003.png and b/tests_zemu/snapshots/sp-sign_msgDeposit/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit/00004.png b/tests_zemu/snapshots/sp-sign_msgDeposit/00004.png index 88d3733..a888d14 100644 Binary files a/tests_zemu/snapshots/sp-sign_msgDeposit/00004.png and b/tests_zemu/snapshots/sp-sign_msgDeposit/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit/00005.png b/tests_zemu/snapshots/sp-sign_msgDeposit/00005.png index a712452..d9fd802 100644 Binary files a/tests_zemu/snapshots/sp-sign_msgDeposit/00005.png and b/tests_zemu/snapshots/sp-sign_msgDeposit/00005.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00000.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00000.png new file mode 100644 index 0000000..07b7c03 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00000.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00001.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00001.png new file mode 100644 index 0000000..6b22373 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00002.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00002.png new file mode 100644 index 0000000..3d828b8 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00003.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00003.png new file mode 100644 index 0000000..8e2ae03 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00004.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00004.png new file mode 100644 index 0000000..a888d14 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00005.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00005.png new file mode 100644 index 0000000..d9fd802 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00005.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00006.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00006.png new file mode 100644 index 0000000..1e4be69 Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00006.png differ diff --git a/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00007.png b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00007.png new file mode 100644 index 0000000..1d4449e Binary files /dev/null and b/tests_zemu/snapshots/sp-sign_msgDeposit_token_2/00007.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit/00000.png b/tests_zemu/snapshots/st-sign_msgDeposit/00000.png index 35a1ffa..dd77b1f 100644 Binary files a/tests_zemu/snapshots/st-sign_msgDeposit/00000.png and b/tests_zemu/snapshots/st-sign_msgDeposit/00000.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit/00001.png b/tests_zemu/snapshots/st-sign_msgDeposit/00001.png index 56e8392..4f43f93 100644 Binary files a/tests_zemu/snapshots/st-sign_msgDeposit/00001.png and b/tests_zemu/snapshots/st-sign_msgDeposit/00001.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit/00002.png b/tests_zemu/snapshots/st-sign_msgDeposit/00002.png index 98cbd8b..b8c272b 100644 Binary files a/tests_zemu/snapshots/st-sign_msgDeposit/00002.png and b/tests_zemu/snapshots/st-sign_msgDeposit/00002.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit/00003.png b/tests_zemu/snapshots/st-sign_msgDeposit/00003.png index 26c0cf9..7336583 100644 Binary files a/tests_zemu/snapshots/st-sign_msgDeposit/00003.png and b/tests_zemu/snapshots/st-sign_msgDeposit/00003.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit/00004.png b/tests_zemu/snapshots/st-sign_msgDeposit/00004.png index 851d38e..ce8d690 100644 Binary files a/tests_zemu/snapshots/st-sign_msgDeposit/00004.png and b/tests_zemu/snapshots/st-sign_msgDeposit/00004.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00000.png b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00000.png new file mode 100644 index 0000000..dd77b1f Binary files /dev/null and b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00000.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00001.png b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00001.png new file mode 100644 index 0000000..2932de8 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00001.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00002.png b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00002.png new file mode 100644 index 0000000..b8c272b Binary files /dev/null and b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00002.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00003.png b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00003.png new file mode 100644 index 0000000..7336583 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00003.png differ diff --git a/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00004.png b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00004.png new file mode 100644 index 0000000..ce8d690 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_msgDeposit_token_2/00004.png differ diff --git a/tests_zemu/snapshots/st-sign_msgSend/00000.png b/tests_zemu/snapshots/st-sign_msgSend/00000.png index 35a1ffa..dd77b1f 100644 Binary files a/tests_zemu/snapshots/st-sign_msgSend/00000.png and b/tests_zemu/snapshots/st-sign_msgSend/00000.png differ diff --git a/tests_zemu/snapshots/st-sign_msgSend/00001.png b/tests_zemu/snapshots/st-sign_msgSend/00001.png index a7d1548..369d32c 100644 Binary files a/tests_zemu/snapshots/st-sign_msgSend/00001.png and b/tests_zemu/snapshots/st-sign_msgSend/00001.png differ diff --git a/tests_zemu/snapshots/st-sign_msgSend/00002.png b/tests_zemu/snapshots/st-sign_msgSend/00002.png index ae890fc..dbbee33 100644 Binary files a/tests_zemu/snapshots/st-sign_msgSend/00002.png and b/tests_zemu/snapshots/st-sign_msgSend/00002.png differ diff --git a/tests_zemu/snapshots/st-sign_msgSend/00003.png b/tests_zemu/snapshots/st-sign_msgSend/00003.png index 26c0cf9..7336583 100644 Binary files a/tests_zemu/snapshots/st-sign_msgSend/00003.png and b/tests_zemu/snapshots/st-sign_msgSend/00003.png differ diff --git a/tests_zemu/snapshots/st-sign_msgSend/00004.png b/tests_zemu/snapshots/st-sign_msgSend/00004.png index 851d38e..ce8d690 100644 Binary files a/tests_zemu/snapshots/st-sign_msgSend/00004.png and b/tests_zemu/snapshots/st-sign_msgSend/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit/00002.png b/tests_zemu/snapshots/x-sign_msgDeposit/00002.png index 3b0813c..7ea7d0f 100644 Binary files a/tests_zemu/snapshots/x-sign_msgDeposit/00002.png and b/tests_zemu/snapshots/x-sign_msgDeposit/00002.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00000.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00000.png new file mode 100644 index 0000000..07b7c03 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00000.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00001.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00001.png new file mode 100644 index 0000000..6b22373 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00002.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00002.png new file mode 100644 index 0000000..3d828b8 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00002.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00003.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00003.png new file mode 100644 index 0000000..8e2ae03 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00003.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00004.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00004.png new file mode 100644 index 0000000..a888d14 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00005.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00005.png new file mode 100644 index 0000000..d9fd802 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00005.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00006.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00006.png new file mode 100644 index 0000000..1e4be69 Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00006.png differ diff --git a/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00007.png b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00007.png new file mode 100644 index 0000000..1d4449e Binary files /dev/null and b/tests_zemu/snapshots/x-sign_msgDeposit_token_2/00007.png differ diff --git a/tests_zemu/tests/common.ts b/tests_zemu/tests/common.ts index 6dad1e8..9eed2e2 100644 --- a/tests_zemu/tests/common.ts +++ b/tests_zemu/tests/common.ts @@ -24,6 +24,7 @@ const APP_PATH_S = Resolve('../app/output/app_s.elf') const APP_PATH_X = Resolve('../app/output/app_x.elf') const APP_PATH_SP = Resolve('../app/output/app_s2.elf') const APP_PATH_ST = Resolve('../app/output/app_stax.elf') +const APP_PATH_FL = Resolve('../app/output/app_flex.elf') export const defaultOptions = { ...DEFAULT_START_OPTIONS, @@ -37,6 +38,7 @@ export const DEVICE_MODELS: IDeviceModel[] = [ { name: 'nanox', prefix: 'X', path: APP_PATH_X }, { name: 'nanosp', prefix: 'SP', path: APP_PATH_SP }, { name: 'stax', prefix: 'ST', path: APP_PATH_ST }, + {name: 'flex', prefix: 'FL', path: APP_PATH_FL}, ] export const example_tx_str_MsgSend = { @@ -89,4 +91,30 @@ export const example_tx_str_MsgDeposit = { } ], "sequence": "6" +}; + +export const example_tx_str_MsgDeposit_token_2 = { + "account_number": "588", + "chain_id": "thorchain", + "fee": { + "amount": [], + "gas": "10000000" + }, + "memo": "", + "msgs": [ + { + "type": "thorchain/MsgDeposit", + "value": { + "coins": [ + { + "amount": "330000000", + "asset": "ETH.ETH" + } + ], + "memo": "SWAP:BNB.BNB:tbnb1qk2m905ypazwfau9cn0qnr4c4yxz63v9u9md20:", + "signer": "tthor1c648xgpter9xffhmcqvs7lzd7hxh0prgv5t5gp" + } + } + ], + "sequence": "6" }; \ No newline at end of file diff --git a/tests_zemu/tests/thor.test.ts b/tests_zemu/tests/thor.test.ts index 4263880..0e7d3db 100644 --- a/tests_zemu/tests/thor.test.ts +++ b/tests_zemu/tests/thor.test.ts @@ -23,6 +23,7 @@ import { AMINO_JSON_TX, example_tx_str_MsgSend, example_tx_str_MsgDeposit, + example_tx_str_MsgDeposit_token_2 } from './common' // @ts-ignore @@ -98,4 +99,8 @@ describe('Thor', function () { await signAndVerifyTransaction(m, 'sign_msgDeposit', example_tx_str_MsgDeposit); }); + test.concurrent.each(DEVICE_MODELS)('sign msgDeposit token 2', async function (m) { + await signAndVerifyTransaction(m, 'sign_msgDeposit_token_2', example_tx_str_MsgDeposit_token_2); + }); + })