From 34ea137c1a1e997580163e3b20ca74ddbb2d9e83 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 16 Jun 2023 15:52:03 +0200 Subject: [PATCH 1/4] network.c functions cleanup --- src/eth_plugin_handler.c | 5 +- src_common/ethUtils.c | 32 +++++++++++ src_common/ethUtils.h | 4 ++ src_common/network.c | 86 ++++++++---------------------- src_common/network.h | 21 ++------ src_features/signTx/logic_signTx.c | 10 ++-- src_nbgl/ui_approve_tx.c | 2 +- src_nbgl/ui_idle.c | 3 +- 8 files changed, 73 insertions(+), 90 deletions(-) diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index 8baa253..bb73e9e 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -47,6 +47,8 @@ void eth_plugin_prepare_query_contract_UI(ethQueryContractUI_t *queryContractUI, uint32_t titleLength, char *msg, uint32_t msgLength) { + uint64_t chain_id; + memset((uint8_t *) queryContractUI, 0, sizeof(ethQueryContractUI_t)); // If no extra information was found, set the pointer to NULL @@ -64,7 +66,8 @@ void eth_plugin_prepare_query_contract_UI(ethQueryContractUI_t *queryContractUI, } queryContractUI->screenIndex = screenIndex; - strlcpy(queryContractUI->network_ticker, get_tx_network_ticker(), MAX_TICKER_LEN); + chain_id = get_tx_chain_id(); + strlcpy(queryContractUI->network_ticker, get_displayable_ticker(&chain_id), MAX_TICKER_LEN); queryContractUI->title = title; queryContractUI->titleLength = titleLength; queryContractUI->msg = msg; diff --git a/src_common/ethUtils.c b/src_common/ethUtils.c index 4dd0e6a..e66e0d2 100644 --- a/src_common/ethUtils.c +++ b/src_common/ethUtils.c @@ -27,9 +27,12 @@ #include #include +#include "shared_context.h" +#include "utils.h" #include "ethUtils.h" #include "chainConfig.h" #include "ethUstream.h" +#include "network.h" bool rlpCanDecode(uint8_t *buffer, uint32_t bufferLength, bool *valid) { if (*buffer <= 0x7f) { @@ -301,3 +304,32 @@ bool adjustDecimals(const char *src, } return true; } + +// Returns the chain ID. Defaults to 0 if txType was not found (For TX). +uint64_t get_tx_chain_id(void) { + uint64_t chain_id = 0; + + switch (txContext.txType) { + case LEGACY: + chain_id = u64_from_BE(txContext.content->v, txContext.content->vLength); + break; + case EIP2930: + case EIP1559: + chain_id = u64_from_BE(tmpContent.txContent.chainID.value, + tmpContent.txContent.chainID.length); + break; + default: + PRINTF("Txtype `%d` not supported while generating chainID\n", txContext.txType); + break; + } + return chain_id; +} + +const char *get_displayable_ticker(const uint64_t *chain_id) { + const char *ticker = get_network_ticker_from_chain_id(chain_id); + + if (ticker == NULL) { + ticker = chainConfig->coinName; + } + return ticker; +} diff --git a/src_common/ethUtils.h b/src_common/ethUtils.h index 9722e2c..8702533 100644 --- a/src_common/ethUtils.h +++ b/src_common/ethUtils.h @@ -84,6 +84,10 @@ static __attribute__((no_instrument_function)) inline int ismaxint(uint8_t *buf, return 1; } +uint64_t get_tx_chain_id(void); + +const char *get_displayable_ticker(const uint64_t *chain_id); + static const char HEXDIGITS[] = "0123456789abcdef"; #endif // _ETHUTILS_H_ diff --git a/src_common/network.c b/src_common/network.c index dbb8f6b..410baab 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -1,13 +1,13 @@ -#include -#include -#include #include +#include "os_utils.h" +#include "os_pic.h" #include "network.h" -#include "os.h" -#include "shared_context.h" -#include "utils.h" -typedef enum { APP, TX } e_net_type; +typedef struct network_info_s { + const char *name; + const char *ticker; + uint64_t chain_id; +} network_info_t; // Mappping of chain ids to networks. static const network_info_t NETWORK_MAPPING[] = { @@ -66,73 +66,29 @@ static const network_info_t NETWORK_MAPPING[] = { {.chain_id = 39797, .name = "Energi", .ticker = "NRG"}, {.chain_id = 248, .name = "Oasys", .ticker = "OAS"}}; -uint64_t get_tx_chain_id(void) { - uint64_t chain_id = 0; - - switch (txContext.txType) { - case LEGACY: - chain_id = u64_from_BE(txContext.content->v, txContext.content->vLength); - break; - case EIP2930: - case EIP1559: - chain_id = u64_from_BE(tmpContent.txContent.chainID.value, - tmpContent.txContent.chainID.length); - break; - default: - PRINTF("Txtype `%d` not supported while generating chainID\n", txContext.txType); - break; - } - return chain_id; -} - -uint64_t get_app_chain_id(void) { - return chainConfig->chainId; -} - -static uint64_t get_chain_id(e_net_type type) { - return (type == APP) ? get_app_chain_id() : get_tx_chain_id(); -} - -static const network_info_t *get_network(e_net_type type) { - uint64_t chain_id = get_chain_id(type); - for (size_t i = 0; i < sizeof(NETWORK_MAPPING) / sizeof(*NETWORK_MAPPING); i++) { - if (NETWORK_MAPPING[i].chain_id == chain_id) { - return (const network_info_t *) PIC(&NETWORK_MAPPING[i]); +static const network_info_t *get_network_from_chain_id(const uint64_t *chain_id) { + for (size_t i = 0; i < ARRAYLEN(NETWORK_MAPPING); i++) { + if (NETWORK_MAPPING[i].chain_id == *chain_id) { + return (const network_info_t *) &NETWORK_MAPPING[i]; } } return NULL; } -static const char *get_network_name(e_net_type type) { - const network_info_t *network = get_network(type); - if (network == NULL) { +const char *get_network_name_from_chain_id(const uint64_t *chain_id) { + const network_info_t *net = get_network_from_chain_id(chain_id); + + if (net == NULL) { return NULL; - } else { - return (const char *) PIC(network->name); } + return PIC(net->name); } -const char *get_app_network_name(void) { - return get_network_name(APP); -} +const char *get_network_ticker_from_chain_id(const uint64_t *chain_id) { + const network_info_t *net = get_network_from_chain_id(chain_id); -const char *get_tx_network_name(void) { - return get_network_name(TX); -} - -static const char *get_network_ticker(e_net_type type) { - const network_info_t *network = get_network(type); - if (network == NULL) { - return chainConfig->coinName; - } else { - return (char *) PIC(network->ticker); + if (net == NULL) { + return NULL; } -} - -const char *get_app_network_ticker(void) { - return get_network_ticker(APP); -} - -const char *get_tx_network_ticker(void) { - return get_network_ticker(TX); + return PIC(net->ticker); } diff --git a/src_common/network.h b/src_common/network.h index a2ce262..7980c16 100644 --- a/src_common/network.h +++ b/src_common/network.h @@ -2,24 +2,9 @@ #define _NETWORK_H_ #include -#include "tokens.h" -#include "shared_context.h" +#include -typedef struct network_info_s { - const char *name; - const char *ticker; - uint64_t chain_id; -} network_info_t; - -// Returns the chain ID. Defaults to 0 if txType was not found (For TX). -uint64_t get_tx_chain_id(void); -uint64_t get_app_chain_id(void); -// Returns a pointer to the network name, or NULL if there is none. -const char *get_tx_network_name(void); -const char *get_app_network_name(void); - -// Returns a pointer to the network ticker, or chainConfig->coinName if there is none. -const char *get_tx_network_ticker(void); -const char *get_app_network_ticker(void); +const char *get_network_name_from_chain_id(const uint64_t *chain_id); +const char *get_network_ticker_from_chain_id(const uint64_t *chain_id); #endif // _NETWORK_H_ diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index f42addf..a107439 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -196,7 +196,8 @@ static void address_to_string(uint8_t *in, } static void raw_fee_to_string(uint256_t *rawFee, char *displayBuffer, uint32_t displayBufferSize) { - const char *feeTicker = get_tx_network_ticker(); + uint64_t chain_id = get_tx_chain_id(); + const char *feeTicker = get_displayable_ticker(&chain_id); uint8_t tickerOffset = 0; uint32_t i; @@ -263,10 +264,10 @@ static void nonce_to_string(const txInt256_t *nonce, char *out, size_t out_size) } static void get_network_as_string(char *out, size_t out_size) { - const char *name = get_tx_network_name(); + uint64_t chain_id = get_tx_chain_id(); + const char *name = get_network_name_from_chain_id(&chain_id); if (name == NULL) { // No network name found so simply copy the chain ID as the network name. - uint64_t chain_id = get_tx_chain_id(); u64_to_string(chain_id, out, out_size); } else { // Network name found, simply copy it. @@ -313,7 +314,8 @@ static int strcasecmp_workaround(const char *str1, const char *str2) { void finalizeParsing(bool direct) { char displayBuffer[50]; uint8_t decimals = WEI_TO_ETHER; - const char *ticker = get_tx_network_ticker(); + uint64_t chain_id = get_tx_chain_id(); + const char *ticker = get_displayable_ticker(&chain_id); ethPluginFinalize_t pluginFinalize; bool use_standard_UI = true; diff --git a/src_nbgl/ui_approve_tx.c b/src_nbgl/ui_approve_tx.c index 377166c..51a4c5c 100644 --- a/src_nbgl/ui_approve_tx.c +++ b/src_nbgl/ui_approve_tx.c @@ -3,7 +3,7 @@ #include "shared_context.h" #include "ui_callbacks.h" #include "ui_nbgl.h" -#include "network.h" +#include "ethUtils.h" #include "plugins.h" #include "domain_name.h" diff --git a/src_nbgl/ui_idle.c b/src_nbgl/ui_idle.c index b14ca9b..8f1d0f8 100644 --- a/src_nbgl/ui_idle.c +++ b/src_nbgl/ui_idle.c @@ -47,7 +47,8 @@ void ui_idle(void) { tagline = staxSharedBuffer; } } else { // Ethereum app - app_name = get_app_network_name(); + uint64_t mainnet_chain_id = ETHEREUM_MAINNET_CHAINID; + app_name = get_network_name_from_chain_id(&mainnet_chain_id); } nbgl_useCaseHome((char *) app_name, From c8360741a47c01731d2cdb4dda6e3f3b46c97254 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 16 Jun 2023 15:52:43 +0200 Subject: [PATCH 2/4] Activated ENS on other Ethereum-compatible chains --- src_common/network.c | 4 ++++ src_common/network.h | 2 ++ src_features/provideDomainName/cmd_provide_domain_name.c | 5 +++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src_common/network.c b/src_common/network.c index 410baab..9959ee4 100644 --- a/src_common/network.c +++ b/src_common/network.c @@ -92,3 +92,7 @@ const char *get_network_ticker_from_chain_id(const uint64_t *chain_id) { } return PIC(net->ticker); } + +bool chain_is_ethereum_compatible(const uint64_t *chain_id) { + return get_network_from_chain_id(chain_id) != NULL; +} diff --git a/src_common/network.h b/src_common/network.h index 7980c16..8361bcb 100644 --- a/src_common/network.h +++ b/src_common/network.h @@ -7,4 +7,6 @@ const char *get_network_name_from_chain_id(const uint64_t *chain_id); const char *get_network_ticker_from_chain_id(const uint64_t *chain_id); +bool chain_is_ethereum_compatible(const uint64_t *chain_id); + #endif // _NETWORK_H_ diff --git a/src_features/provideDomainName/cmd_provide_domain_name.c b/src_features/provideDomainName/cmd_provide_domain_name.c index 0d0849f..8cd974b 100644 --- a/src_features/provideDomainName/cmd_provide_domain_name.c +++ b/src_features/provideDomainName/cmd_provide_domain_name.c @@ -10,6 +10,7 @@ #include "challenge.h" #include "mem.h" #include "hash_bytes.h" +#include "network.h" static const uint8_t DOMAIN_NAME_PUB_KEY[] = { #ifdef HAVE_DOMAIN_NAME_TEST_KEY @@ -124,8 +125,8 @@ bool has_domain_name(const uint64_t *chain_id, const uint8_t *addr) { bool ret = false; if (g_domain_name_info.valid) { - // TODO: Remove once other domain name providers are supported - if ((*chain_id == ETHEREUM_MAINNET_CHAINID) && + // Check if chain ID is known to be Ethereum-compatible (same derivation path) + if ((chain_is_ethereum_compatible(chain_id)) && (memcmp(addr, g_domain_name_info.addr, ADDRESS_LENGTH) == 0)) { ret = true; } From e019eed3ab4b9bb9b866539d0df399f8e170ce6b Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 6 Jul 2023 14:46:00 +0200 Subject: [PATCH 3/4] Added a new ragger test --- .../nanosp/domain_name_non_mainnet/00002.png | Bin 585 -> 394 bytes .../domain_name_unknown_chain/00000.png | Bin 0 -> 414 bytes .../domain_name_unknown_chain/00001.png | Bin 0 -> 368 bytes .../domain_name_unknown_chain/00002.png | Bin 0 -> 585 bytes .../domain_name_unknown_chain/00003.png | Bin 0 -> 327 bytes .../domain_name_unknown_chain/00004.png | Bin 0 -> 436 bytes .../domain_name_unknown_chain/00005.png | Bin 0 -> 472 bytes .../domain_name_unknown_chain/00006.png | Bin 0 -> 382 bytes .../nanox/domain_name_non_mainnet/00002.png | Bin 585 -> 394 bytes .../nanox/domain_name_unknown_chain/00000.png | Bin 0 -> 414 bytes .../nanox/domain_name_unknown_chain/00001.png | Bin 0 -> 368 bytes .../nanox/domain_name_unknown_chain/00002.png | Bin 0 -> 585 bytes .../nanox/domain_name_unknown_chain/00003.png | Bin 0 -> 327 bytes .../nanox/domain_name_unknown_chain/00004.png | Bin 0 -> 434 bytes .../nanox/domain_name_unknown_chain/00005.png | Bin 0 -> 472 bytes .../nanox/domain_name_unknown_chain/00006.png | Bin 0 -> 381 bytes .../stax/domain_name_non_mainnet/00001.png | Bin 15045 -> 12824 bytes .../stax/domain_name_non_mainnet/00002.png | Bin 7485 -> 9348 bytes .../stax/domain_name_non_mainnet/00003.png | Bin 9348 -> 5086 bytes .../stax/domain_name_unknown_chain/00000.png | Bin 0 -> 8435 bytes .../stax/domain_name_unknown_chain/00001.png | Bin 0 -> 15045 bytes .../stax/domain_name_unknown_chain/00002.png | Bin 0 -> 6933 bytes .../stax/domain_name_unknown_chain/00003.png | Bin 0 -> 9348 bytes .../stax/domain_name_unknown_chain/00004.png | Bin 0 -> 5086 bytes tests/ragger/test_domain_name.py | 31 +++++++++++++++++- 25 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00000.png create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00001.png create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00002.png create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00003.png create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00004.png create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00005.png create mode 100644 tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00006.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00000.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00001.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00002.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00003.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00004.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00005.png create mode 100644 tests/ragger/snapshots/nanox/domain_name_unknown_chain/00006.png create mode 100644 tests/ragger/snapshots/stax/domain_name_unknown_chain/00000.png create mode 100644 tests/ragger/snapshots/stax/domain_name_unknown_chain/00001.png create mode 100644 tests/ragger/snapshots/stax/domain_name_unknown_chain/00002.png create mode 100644 tests/ragger/snapshots/stax/domain_name_unknown_chain/00003.png create mode 100644 tests/ragger/snapshots/stax/domain_name_unknown_chain/00004.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00002.png b/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00002.png index 6a5a9d64a202a062cb8bb576a84ba653e232345c..6af0ec54b2a0718d258e534bf29b059567fc8a37 100644 GIT binary patch delta 368 zcmV-$0gwL41d0QYBYy!=NklQ31IlDwCGRAX5@5>HjYF!y}X z2vV>EA|xdM003aRpVb{mDJ2oHKXc9_?*H}MoqA{s zu*tJcY=yejLXWk7f2|0dy>6pvo8(`qTG{I65yYJVb@)7i+kbBP3Oxhg5}^AZ4YXa#J<-?t+bu)@005Z5xlJ6sn~bnq4fGx`M}(kT>(7Fk=bgPe zwr1}fw0LE+*Wcyl8Q+nw*+|R%s?+^4FsJ>!7_-bgWmc?y!!cS#9Ar`kU~^TrP`V#q6YCxBp=Wc31*Z za|pplCC2K$e8+w{ILUsi&`EBBOb&)3yZ`_I000000000000000z%VZ&h5f)0OD|#o O0000Fdu__dw@MOS{tr(OJ6PoPLP9@*UxLb&ZA1lC4x zvBG!hMH^#>l)7kF<%E_%_tzyc0DA^z7O&?@FshG~zfc zeYg)OrT_o{001Xo`7cV6F5PinZ3RUt^2VwMCwNgqfg_sgp49P63cmjx@Fp$j#-~R6 z9W=|o`6{6A%^cJKW8Rm7R%x^V000000G!J|8HZ1szRqx300000NkvXXu0mjfQq~Wq diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00000.png b/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*fn&`6tH9gqo;^MN#J@G-NZG(W*iG}t#e1Fb- zKV8KTt0a`{lX$B4$~o~B?x*6e)~<@4Iz4h@Jmb~b5&vc;g`2H9{psfXevRGF%X%)F z{W^G1#bn40-weR!F*3L+ubT($m0wc}!uNKw0-sV5H z;CF7g9MJJ=+rKjGEBl+3>A2QyMfKUZ+;mUbm;0)$KRWh$yq((D^ZhGdwuD|?hi~Df z@|&)@8Hr8?_0j7y!?>j6!~H8~TztJ`f#FwsF1bzDbkz>zesQ*DR9hWnx9on|hmN^& zyJ|dM`zN>MP3ZiWI3+;%Z?hr$v=dI#e(*&r?E!in863#FcU<{Z?XiYs!60EzS3j3^ HP6 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00002.png b/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5a9d64a202a062cb8bb576a84ba653e232345c GIT binary patch literal 585 zcmV-P0=E5$P)Fdu z__dw@MOS{tr(OJ6PoPLP9@*UxLb&ZA1lC4xvBG!qQ&wg@Ymi`OA5aK9q=YC=*Fi;`yDjPzxkl=%^cJKW8Rm7R%x^V000000G!J| X8HZ1szRqx300000NkvXXu0mjfUbPWB literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00003.png b/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..85a797b91fa8909529984c6f23fc9581b79ffb48 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{6)ba4!+nDh3AW8Pr}0oH)1 zuWEPxd)!&dy}CnU(gjz^$NRQ#nkaNa-X_e0lYwE{?~YkJrWD0Ine+N>;oc%f?R1%6 zJ#*{gG?!j`Jvb2JZiuEZ?ea$7niHD%Ds0 zzeoR3588Y)Ce~p}uY+sOmD84@%NC#h-ymS7nAnPBi zdF|e$X&)6|5bm70JHXoFKX2x)MGy6v85p(|UKieF%X40FTk%o*r2kz^EW6(&-sxF8 z`+RLqESv6&B(qz-%O79T-4ppX&OR;J-+9_UqvjP$_s@`Wxzwsu$?q#&b2QSTI5qI}IeE+uQ$d($HH~rmjmfzpG^!&>@vHo;H|A#$&J>60(rv&w- z{Y$*re=CCT)rWkxbu*ft7z>`O-oI7u=d4xjo3yuXwAx+AyG_?&s?U?T(oz$vN~hG^ zITd^LMfdfDVy;c?KbE!zHs9!cv+j?u-i)SGA(L0?zp6X2s;;m5>ao50i9jz_e_Gr2 zjaxr8`Rh@Y?ag!bLo2gxTv~bJ)XKV#_qKdJdgcDJ@>9jrf~PT`jyPOzcvQ5zaQmZw zsyQ_iV&5BC&*W(?<|>M3c>Lz-s+s2Awug&us=u4vloD}$y3^rY@dWQRp`~22>^5u8 z-Wjt=zq~iKakEWo=0=}0$4N$E@I8h8IZK)78&qol`;+03*-H(EtDd literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00005.png b/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000sAjk5Y(@*V#~rbuHu`7A_H&AxgwHf8y4cdKvg$JbB4n%ez%sZ31aBYd&Oo@(7)_WJ(Znl2o8^PD` zFE`_Y-IS+Kdq0Q2-7r_C=}F(5ev`U`H~)QH|9$1FHE$YjoVax+e0xei%S`SAGlOm! zp7{T3NA-mVOYb&rdU8MdyIHo@@7cE*uj@I+Zu{2i)KMSV-E~oQ31IlDwCGRAX5@5>HjYF!y}X z2vV>EA|xdM003aRpVb{mDJ2oHKXc9_?*H}MoqA{s zu*tJcY=yejLXWk7f2|0dy>6pvo8(`qTG{I65yYJVb@)7i+kbBP3Oxhg5}^AZ4YXa#J<-?t+bu)@005Z5xlJ6sn~bnq4fGx`M}(kT>(7Fk=bgPe zwr1}fw0LE+*Wcyl8Q+nw*+|R%s?+^4FsJ>!7_-bgWmc?y!!cS#9Ar`kU~^TrP`V#q6YCxBp=Wc31*Z za|pplCC2K$e8+w{ILUsi&`EBBOb&)3yZ`_I000000000000000z%VZ&h5f)0OD|#o O0000Fdu__dw@MOS{tr(OJ6PoPLP9@*UxLb&ZA1lC4x zvBG!hMH^#>l)7kF<%E_%_tzyc0DA^z7O&?@FshG~zfc zeYg)OrT_o{001Xo`7cV6F5PinZ3RUt^2VwMCwNgqfg_sgp49P63cmjx@Fp$j#-~R6 z9W=|o`6{6A%^cJKW8Rm7R%x^V000000G!J|8HZ1szRqx300000NkvXXu0mjfQq~Wq diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00000.png b/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*fn&`6tH9gqo;^MN#J@G-NZG(W*iG}t#e1Fb- zKV8KTt0a`{lX$B4$~o~B?x*6e)~<@4Iz4h@Jmb~b5&vc;g`2H9{psfXevRGF%X%)F z{W^G1#bn40-weR!F*3L+ubT($m0wc}!uNKw0-sV5H z;CF7g9MJJ=+rKjGEBl+3>A2QyMfKUZ+;mUbm;0)$KRWh$yq((D^ZhGdwuD|?hi~Df z@|&)@8Hr8?_0j7y!?>j6!~H8~TztJ`f#FwsF1bzDbkz>zesQ*DR9hWnx9on|hmN^& zyJ|dM`zN>MP3ZiWI3+;%Z?hr$v=dI#e(*&r?E!in863#FcU<{Z?XiYs!60EzS3j3^ HP6 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00002.png b/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5a9d64a202a062cb8bb576a84ba653e232345c GIT binary patch literal 585 zcmV-P0=E5$P)Fdu z__dw@MOS{tr(OJ6PoPLP9@*UxLb&ZA1lC4xvBG!qQ&wg@Ymi`OA5aK9q=YC=*Fi;`yDjPzxkl=%^cJKW8Rm7R%x^V000000G!J| X8HZ1szRqx300000NkvXXu0mjfUbPWB literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00003.png b/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..85a797b91fa8909529984c6f23fc9581b79ffb48 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{6)ba4!+nDh3AW8Pr}0oH)1 zuWEPxd)!&dy}CnU(gjz^$NRQ#nkaNa-X_e0lYwE{?~YkJrWD0Ine+N>;oc%f?R1%6 zJ#*{gG?!j`Jvb2JZiuEZ?ea$7niHD%Ds0 zzeoR3588Y)Ce~p}uY+sOmD84@%NC#h-ymS7nAnPBi zdF|e$X&)6|5bm70JHXoFKX2x)MGy6v85p(|UKieF%X40FTk%o*r2kz^EW6(&-sxF8 z`+RLqESv6&B(qz-%O79T-4ppX&OR;J-+9_UqvjP$_s@`Wxzwsu$?qyDU;XaOUjRnu`wU6rmV;;(%8h-cKt95^+cIY}x^|>`ynr&iL>69AV zQ?XZH9Ls(%r|F4eU1s7g$2l(7wEwqoFI!-AH6`DME7ab-W_RyC{Y0P#t1qo>JIAe` zn*86P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00001.png b/tests/ragger/snapshots/stax/domain_name_non_mainnet/00001.png index 25278595239f5dad36d574d40b68a59e5512c75d..661ea68efa75f3947e58200c587b153cf08f73a7 100644 GIT binary patch literal 12824 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 Pn9PhUZ`a&%fBL@w`ChqM literal 15045 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 XxbCHaqOicrlekbaVUB30700{$f diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00003.png b/tests/ragger/snapshots/stax/domain_name_non_mainnet/00003.png index 50df3498127a21582b14f2b69375b5f885b7217f..7a05bf7b31c3fca94a4a464ad8709d1c20600e36 100644 GIT binary patch literal 5086 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 literal 9348 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�lMY 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 OK5L6x=JnUSlm825`x|rs literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00001.png b/tests/ragger/snapshots/stax/domain_name_unknown_chain/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..25278595239f5dad36d574d40b68a59e5512c75d GIT binary patch literal 15045 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�lMY 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/test_domain_name.py b/tests/ragger/test_domain_name.py index be08ebc..f137610 100644 --- a/tests/ragger/test_domain_name.py +++ b/tests/ragger/test_domain_name.py @@ -139,13 +139,42 @@ def test_send_fund_non_mainnet(firmware: Firmware, moves += [ NavInsID.RIGHT_CLICK ] * 5 moves += [ NavInsID.BOTH_CLICK ] else: - moves += [ NavInsID.USE_CASE_REVIEW_TAP ] * 3 + moves += [ NavInsID.USE_CASE_REVIEW_TAP ] * 2 moves += [ NavInsID.USE_CASE_REVIEW_CONFIRM ] navigator.navigate_and_compare(ROOT_SCREENSHOT_PATH, "domain_name_non_mainnet", moves) +def test_send_fund_unknown_chain(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + test_name: str): + app_client = EthAppClient(backend) + challenge = common(app_client) + + with app_client.provide_domain_name(challenge, NAME, ADDR): + pass + + with app_client.send_fund(BIP32_PATH, + NONCE, + GAS_PRICE, + GAS_LIMIT, + ADDR, + AMOUNT, + 9): + moves = list() + if firmware.device.startswith("nano"): + moves += [ NavInsID.RIGHT_CLICK ] * 5 + moves += [ NavInsID.BOTH_CLICK ] + else: + moves += [ NavInsID.USE_CASE_REVIEW_TAP ] * 3 + moves += [ NavInsID.USE_CASE_REVIEW_CONFIRM ] + navigator.navigate_and_compare(ROOT_SCREENSHOT_PATH, + "domain_name_unknown_chain", + moves) + + def test_send_fund_domain_too_long(firmware: Firmware, backend: BackendInterface, navigator: Navigator): From 116a320df382ca123ab782b489402138fb9c6953 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 19 Jun 2023 10:49:29 +0200 Subject: [PATCH 4/4] Removed ticker end space from hardcoded tokens --- src/tokens.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/tokens.c b/src/tokens.c index e17e482..a513758 100644 --- a/src/tokens.c +++ b/src/tokens.c @@ -24,36 +24,36 @@ const tokenDefinition_t TOKENS_EXTRA[NUM_TOKENS_EXTRA] = { // Ropsten DeversiFi tokens {{0x4c, 0x5f, 0x66, 0x59, 0x61, 0x97, 0xa8, 0x6f, 0xb3, 0x0a, 0x24, 0x35, 0xe2, 0xef, 0x4d, 0xdc, 0xb3, 0x93, 0x42, 0xc9}, - "tUSDT ", + "tUSDT", 6}, {{0x1c, 0x0f, 0x17, 0x43, 0x67, 0x40, 0xbf, 0xb9, 0x2c, 0x10, 0x70, 0xee, 0x86, 0x32, 0x2d, 0xe8, 0x90, 0x83, 0x7c, 0x6a}, - "tUSDT ", + "tUSDT", 6}, {{0xcd, 0x07, 0x7a, 0xbe, 0xdd, 0x83, 0x1a, 0x34, 0x43, 0xff, 0xbe, 0x24, 0xfb, 0x76, 0x66, 0x1b, 0xbb, 0x17, 0xeb, 0x69}, - "tZRX ", + "tZRX", 18}, {{0x40, 0xd8, 0x97, 0x85, 0x00, 0xbf, 0x68, 0x32, 0x4a, 0x51, 0x53, 0x3c, 0xd6, 0xa2, 0x1e, 0x3e, 0x59, 0xbe, 0x32, 0x4a}, - "tBTC ", + "tBTC", 18}, // Goerli DeversiFi tokens {{0xd9, 0x97, 0xa8, 0x63, 0x46, 0xe7, 0x65, 0x18, 0xe6, 0x92, 0x25, 0x56, 0xf3, 0x4d, 0x76, 0x61, 0x30, 0xc0, 0xbb, 0xfd}, - "tUSDT ", + "tUSDT", 6}, {{0xc1, 0xd5, 0x79, 0xeb, 0xff, 0x7c, 0x0f, 0x6c, 0xfd, 0x9a, 0xd5, 0xfb, 0x26, 0x7f, 0xec, 0x73, 0xbe, 0x70, 0xc8, 0xf7}, - "tBTC ", + "tBTC", 18}, {{0xa8, 0xf3, 0x14, 0x4f, 0xea, 0x2c, 0x37, 0x5a, 0xd0, 0x58, 0xec, 0x12, 0x09, 0x9a, 0x5a, 0x21, 0xa2, 0x6f, 0xe9, 0x96}, - "tDVF ", + "tDVF", 18}, {{0x4c, 0xda, 0xbe, 0xc1, 0x2a, 0x39, 0x7f, 0xb6, 0xef, 0xaf, 0x46, 0x13, 0xd5, 0xdf, 0xd7, 0x9b, 0x30, 0x9a, 0xe9, 0xfa}, - "tXDVF ", + "tXDVF", 18}, }; @@ -69,11 +69,11 @@ const tokenDefinition_t TOKENS_EXTRA[NUM_TOKENS_EXTRA] = { const tokenDefinition_t const TOKENS_ETHEREUM[NUM_TOKENS_ETHEREUM] = { {{0xdb, 0x25, 0xf2, 0x11, 0xab, 0x05, 0xb1, 0xc9, 0x7d, 0x59, 0x55, 0x16, 0xf4, 0x57, 0x94, 0x52, 0x8a, 0x80, 0x7a, 0xd8}, - "EURS ", + "EURS", 2}, {{0xa7, 0x44, 0x76, 0x44, 0x31, 0x19, 0xA9, 0x42, 0xdE, 0x49, 0x85, 0x90, 0xFe, 0x1f, 0x24, 0x54, 0xd7, 0xD4, 0xaC, 0x0d}, - "GNT ", + "GNT", 18}, }; @@ -89,19 +89,19 @@ const tokenDefinition_t const TOKENS_ELLAISM[NUM_TOKENS_ELLAISM] = { const tokenDefinition_t const TOKENS_ETHEREUM_CLASSIC[NUM_TOKENS_ETHEREUM_CLASSIC] = { {{0x6F, 0x6D, 0xEb, 0x5d, 0xb0, 0xC4, 0x99, 0x4A, 0x82, 0x83, 0xA0, 0x1D, 0x6C, 0xFe, 0xEB, 0x27, 0xFc, 0x3b, 0xBe, 0x9C}, - "Smart ", + "Smart", 0}, {{0x08, 0x5f, 0xb4, 0xf2, 0x40, 0x31, 0xea, 0xed, 0xbc, 0x2b, 0x61, 0x1a, 0xa5, 0x28, 0xf2, 0x23, 0x43, 0xeb, 0x52, 0xdb}, - "BEC ", + "BEC", 8}, {{0x5a, 0xce, 0x17, 0xf8, 0x7c, 0x73, 0x91, 0xe5, 0x79, 0x2a, 0x76, 0x83, 0x06, 0x9a, 0x80, 0x25, 0xb8, 0x3b, 0xbd, 0x85}, - "PLAY ", + "PLAY", 0}, {{0x6A, 0xDa, 0x6F, 0x48, 0xC8, 0x15, 0x68, 0x95, 0x02, 0xC4, 0x3e, 0xC1, 0xa5, 0x9F, 0x1b, 0x5D, 0xD3, 0xC0, 0x4E, 0x1F}, - "UNV ", + "UNV", 18}, }; @@ -118,27 +118,27 @@ const tokenDefinition_t const TOKENS_RSK[NUM_TOKENS_RSK] = {}; const tokenDefinition_t const TOKENS_UBIQ[NUM_TOKENS_UBIQ] = { {{0xd2, 0x45, 0x20, 0x7c, 0xfb, 0xf6, 0xeb, 0x6f, 0x34, 0x97, 0x0d, 0xb2, 0xa8, 0x07, 0xab, 0x1d, 0x17, 0x8f, 0xde, 0x6c}, - "APX ", + "APX", 8}, {{0xff, 0x3b, 0xf0, 0x57, 0xad, 0xf3, 0xb0, 0xe0, 0x15, 0xb6, 0x46, 0x53, 0x31, 0xa6, 0x23, 0x6e, 0x55, 0x68, 0x82, 0x74}, - "BEER ", + "BEER", 0}, {{0x08, 0x53, 0x3d, 0x6a, 0x06, 0xce, 0x36, 0x52, 0x98, 0xb1, 0x2e, 0xf9, 0x2e, 0xb4, 0x07, 0xcb, 0xa8, 0xaa, 0x82, 0x73}, - "CEFS ", + "CEFS", 8}, {{0x94, 0xad, 0x7e, 0x41, 0xc1, 0xd4, 0x40, 0x22, 0xc4, 0xf4, 0x7c, 0xb1, 0xba, 0x01, 0x9f, 0xd1, 0xa0, 0x22, 0xc5, 0x36}, - "DOT ", + "DOT", 8}, {{0x4b, 0x48, 0x99, 0xa1, 0x0f, 0x3e, 0x50, 0x7d, 0xb2, 0x07, 0xb0, 0xee, 0x24, 0x26, 0x02, 0x9e, 0xfa, 0x16, 0x8a, 0x67}, - "QWARK ", + "QWARK", 8}, {{0x5e, 0x17, 0x15, 0xbb, 0x79, 0x80, 0x5b, 0xd6, 0x72, 0x72, 0x97, 0x60, 0xb3, 0xf7, 0xf3, 0x4d, 0x6f, 0x48, 0x50, 0x98}, - "RICKS ", + "RICKS", 8}, };