From b2d5b85a2f3359f85412670882b65f2e7f67c7ac Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 5 Feb 2021 17:33:12 +0100 Subject: [PATCH 1/6] Add nonce display settings ; nonce is always displayed --- src/handle_swap_sign_transaction.c | 1 + src/main.c | 1 + src/shared_context.h | 2 ++ src/ui_flow.c | 36 +++++++++++++++++++++++++--- src_common/ethUstream.c | 3 ++- src_common/ethUstream.h | 1 + src_features/signTx/logic_signTx.c | 11 ++++++++- src_features/signTx/ui_flow_signTx.c | 10 ++++++++ 8 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/handle_swap_sign_transaction.c b/src/handle_swap_sign_transaction.c index ebb0040..24bb2ed 100644 --- a/src/handle_swap_sign_transaction.c +++ b/src/handle_swap_sign_transaction.c @@ -60,6 +60,7 @@ void handle_swap_sign_transaction(chain_config_t* config) { storage.dataAllowed = 0x00; storage.contractDetails = 0x00; storage.initialized = 0x01; + storage.displayNonce = 0x00; nvm_write((void*) &N_storage, (void*) &storage, sizeof(internalStorage_t)); } diff --git a/src/main.c b/src/main.c index d939aff..5932d99 100644 --- a/src/main.c +++ b/src/main.c @@ -714,6 +714,7 @@ void coin_main(chain_config_t *coin_config) { internalStorage_t storage; storage.dataAllowed = 0x00; storage.contractDetails = 0x00; + storage.displayNonce = 0x00; storage.initialized = 0x01; nvm_write((void *) &N_storage, (void *) &storage, sizeof(internalStorage_t)); } diff --git a/src/shared_context.h b/src/shared_context.h index a858227..d868ebb 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -27,6 +27,7 @@ typedef struct internalStorage_t { unsigned char dataAllowed; unsigned char contractDetails; + unsigned char displayNonce; uint8_t initialized; } internalStorage_t; @@ -157,6 +158,7 @@ typedef struct txStringProperties_t { char fullAddress[43]; char fullAmount[50]; char maxFee[50]; + char nonce[14]; // size needed to write "NOT Displayed" } txStringProperties_t; typedef struct strDataTmp_t { diff --git a/src/ui_flow.c b/src/ui_flow.c index 26f8c7c..b6566c5 100644 --- a/src/ui_flow.c +++ b/src/ui_flow.c @@ -4,6 +4,7 @@ void display_settings(void); void switch_settings_contract_data(void); void switch_settings_display_data(void); +void switch_settings_display_nonce(void); ////////////////////////////////////////////////////////////////////// // clang-format off @@ -68,6 +69,15 @@ UX_STEP_CB( .text = strings.common.fullAddress + 20 }); +UX_STEP_CB( + ux_settings_flow_3_step, + bnnn_paging, + switch_settings_display_nonce(), + { + .title = "Account nonce", + .text = strings.common.nonce + }); + #else UX_STEP_CB( @@ -91,11 +101,22 @@ UX_STEP_CB( "details", strings.common.fullAddress + 20 }); + + UX_STEP_CB( + ux_settings_flow_3_step, + bnnn, + switch_settings_display_nonce(), + { + "Nonce", + "Display account nonce", + "details", + strings.common.nonce + }); #endif UX_STEP_CB( - ux_settings_flow_3_step, + ux_settings_flow_4_step, pb, ui_idle(), { @@ -107,12 +128,15 @@ UX_STEP_CB( UX_FLOW(ux_settings_flow, &ux_settings_flow_1_step, &ux_settings_flow_2_step, - &ux_settings_flow_3_step); + &ux_settings_flow_3_step, + &ux_settings_flow_4_step); void display_settings() { strcpy(strings.common.fullAddress, (N_storage.dataAllowed ? "Allowed" : "NOT Allowed")); strcpy(strings.common.fullAddress + 20, - (N_storage.contractDetails ? "Displayed" : "NOT Displayed")); + (N_storage.contractDetails ? "Displayed" : "NOT Displayed")); + strcpy(strings.common.nonce, + (N_storage.displayNonce ? "Displayed" : "NOT Displayed")); ux_flow_init(0, ux_settings_flow, NULL); } @@ -127,3 +151,9 @@ void switch_settings_display_data() { nvm_write((void*) &N_storage.contractDetails, (void*) &value, sizeof(uint8_t)); display_settings(); } + +void switch_settings_display_nonce() { + uint8_t value = (N_storage.displayNonce ? 0 : 1); + nvm_write((void*) &N_storage.displayNonce, (void*) &value, sizeof(uint8_t)); + display_settings(); +} diff --git a/src_common/ethUstream.c b/src_common/ethUstream.c index f6f0ecd..ee8296f 100644 --- a/src_common/ethUstream.c +++ b/src_common/ethUstream.c @@ -117,9 +117,10 @@ static void processNonce(txContext_t *context) { if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, NULL, copySize); + copyTxData(context, context->content->nonce.value, copySize); } if (context->currentFieldPos == context->currentFieldLength) { + context->content->nonce.length = context->currentFieldLength; context->currentField++; context->processingField = false; } diff --git a/src_common/ethUstream.h b/src_common/ethUstream.h index 80f57f9..ff5c28e 100644 --- a/src_common/ethUstream.h +++ b/src_common/ethUstream.h @@ -69,6 +69,7 @@ typedef struct txContent_t { txInt256_t gasprice; txInt256_t startgas; txInt256_t value; + txInt256_t nonce; uint8_t destination[20]; uint8_t destinationLength; uint8_t v[4]; diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 1f4d087..98de27c 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -229,7 +229,7 @@ void computeFees(char *displayBuffer, uint32_t displayBufferSize) { } void finalizeParsing(bool direct) { - char displayBuffer[50]; + char displayBuffer[79]; // required to store the string representation of uint256_t max uint8_t decimals = WEI_TO_ETHER; uint8_t *ticker = (uint8_t *) PIC(chainConfig->coinName); ethPluginFinalize_t pluginFinalize; @@ -353,6 +353,15 @@ void finalizeParsing(bool direct) { sizeof(displayBuffer)); compareOrCopy(strings.common.fullAmount, displayBuffer, called_from_swap); } + // Prepare nonce to display + if (genericUI) { + uint256_t nonce; + convertUint256BE(tmpContent.txContent.nonce.value, + tmpContent.txContent.nonce.length, + &nonce); + tostring256(&nonce, 10, displayBuffer, sizeof(displayBuffer)); + compareOrCopy(strings.common.nonce, displayBuffer, called_from_swap); + } // Compute maximum fee if (genericUI) { computeFees(displayBuffer, sizeof(displayBuffer)); diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index 09c55e2..7443fbc 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -131,6 +131,14 @@ UX_STEP_CB( "Reject", }); +UX_STEP_NOCB( + ux_approval_tx_display_nonce_step, + bnnn_paging, + { + .title = "Nonce", + .text = strings.common.nonce, + }); + UX_STEP_NOCB(ux_approval_tx_data_warning_step, pbb, { @@ -144,6 +152,7 @@ UX_FLOW(ux_approval_tx_flow, &ux_approval_tx_1_step, &ux_approval_tx_2_step, &ux_approval_tx_3_step, + &ux_approval_tx_display_nonce_step, &ux_approval_tx_4_step, &ux_approval_tx_5_step, &ux_approval_tx_6_step); @@ -153,6 +162,7 @@ UX_FLOW(ux_approval_tx_data_warning_flow, &ux_approval_tx_data_warning_step, &ux_approval_tx_2_step, &ux_approval_tx_3_step, + &ux_approval_tx_display_nonce_step, &ux_approval_tx_4_step, &ux_approval_tx_5_step, &ux_approval_tx_6_step); \ No newline at end of file From 2518efd3dd2a4705f19894ffb5bd91e1893e7ef0 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 5 Feb 2021 17:52:46 +0100 Subject: [PATCH 2/6] Add manual ux_flow; display nonce is now a setting --- src/ui_flow.h | 4 ---- src_features/signTx/logic_signTx.c | 6 +---- src_features/signTx/ui_flow_signTx.c | 36 +++++++++++++++------------- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/ui_flow.h b/src/ui_flow.h index cd06ff0..4e8f321 100644 --- a/src/ui_flow.h +++ b/src/ui_flow.h @@ -12,10 +12,6 @@ extern const ux_flow_step_t* const ux_confirm_selector_flow[]; extern const ux_flow_step_t* const ux_confirm_parameter_flow[]; -extern const ux_flow_step_t* const ux_approval_tx_flow[]; - -extern const ux_flow_step_t* const ux_approval_tx_data_warning_flow[]; - extern const ux_flow_step_t* const ux_approval_allowance_flow[]; extern const ux_flow_step_t* const ux_sign_flow[]; diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 98de27c..91228ad 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -380,11 +380,7 @@ void finalizeParsing(bool direct) { io_seproxyhal_touch_tx_ok(NULL); } else { if (genericUI) { - ux_flow_init( - 0, - ((dataPresent && !N_storage.contractDetails) ? ux_approval_tx_data_warning_flow - : ux_approval_tx_flow), - NULL); + ux_approve_tx(dataPresent); } else { plugin_ui_start(); } diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index 7443fbc..27dab0a 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -148,21 +148,23 @@ UX_STEP_NOCB(ux_approval_tx_data_warning_step, }); // clang-format on -UX_FLOW(ux_approval_tx_flow, - &ux_approval_tx_1_step, - &ux_approval_tx_2_step, - &ux_approval_tx_3_step, - &ux_approval_tx_display_nonce_step, - &ux_approval_tx_4_step, - &ux_approval_tx_5_step, - &ux_approval_tx_6_step); +const ux_flow_step_t *ux_approval_tx_flow_scott[9]; -UX_FLOW(ux_approval_tx_data_warning_flow, - &ux_approval_tx_1_step, - &ux_approval_tx_data_warning_step, - &ux_approval_tx_2_step, - &ux_approval_tx_3_step, - &ux_approval_tx_display_nonce_step, - &ux_approval_tx_4_step, - &ux_approval_tx_5_step, - &ux_approval_tx_6_step); \ No newline at end of file +void ux_approve_tx(bool dataPresent) { + int step = 0; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_1_step; + if (dataPresent && !N_storage.contractDetails) { + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_data_warning_step; + } + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_2_step; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_3_step; + if (N_storage.displayNonce) { + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_display_nonce_step; + } + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_4_step; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_5_step; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_6_step; + ux_approval_tx_flow_scott[step++] = FLOW_END_STEP; + + ux_flow_init(0, ux_approval_tx_flow_scott, NULL); +} \ No newline at end of file From 4cbcdc0be03be4a6ad94e7f6144f87022711803f Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 5 Feb 2021 17:58:21 +0100 Subject: [PATCH 3/6] Apply clang-format --- src/shared_context.h | 2 +- src/ui_flow.c | 5 ++--- src_features/signTx/logic_signTx.c | 2 +- src_features/signTx/ui_flow_signTx.c | 30 ++++++++++++++-------------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/shared_context.h b/src/shared_context.h index d868ebb..3ee8692 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -158,7 +158,7 @@ typedef struct txStringProperties_t { char fullAddress[43]; char fullAmount[50]; char maxFee[50]; - char nonce[14]; // size needed to write "NOT Displayed" + char nonce[14]; // size needed to write "NOT Displayed" } txStringProperties_t; typedef struct strDataTmp_t { diff --git a/src/ui_flow.c b/src/ui_flow.c index b6566c5..46c3872 100644 --- a/src/ui_flow.c +++ b/src/ui_flow.c @@ -134,9 +134,8 @@ UX_FLOW(ux_settings_flow, void display_settings() { strcpy(strings.common.fullAddress, (N_storage.dataAllowed ? "Allowed" : "NOT Allowed")); strcpy(strings.common.fullAddress + 20, - (N_storage.contractDetails ? "Displayed" : "NOT Displayed")); - strcpy(strings.common.nonce, - (N_storage.displayNonce ? "Displayed" : "NOT Displayed")); + (N_storage.contractDetails ? "Displayed" : "NOT Displayed")); + strcpy(strings.common.nonce, (N_storage.displayNonce ? "Displayed" : "NOT Displayed")); ux_flow_init(0, ux_settings_flow, NULL); } diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 91228ad..ab6edea 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -229,7 +229,7 @@ void computeFees(char *displayBuffer, uint32_t displayBufferSize) { } void finalizeParsing(bool direct) { - char displayBuffer[79]; // required to store the string representation of uint256_t max + char displayBuffer[79]; // required to store the string representation of uint256_t max uint8_t decimals = WEI_TO_ETHER; uint8_t *ticker = (uint8_t *) PIC(chainConfig->coinName); ethPluginFinalize_t pluginFinalize; diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index 27dab0a..e5af81f 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -151,20 +151,20 @@ UX_STEP_NOCB(ux_approval_tx_data_warning_step, const ux_flow_step_t *ux_approval_tx_flow_scott[9]; void ux_approve_tx(bool dataPresent) { - int step = 0; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_1_step; - if (dataPresent && !N_storage.contractDetails) { - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_data_warning_step; - } - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_2_step; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_3_step; - if (N_storage.displayNonce) { - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_display_nonce_step; - } - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_4_step; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_5_step; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_6_step; - ux_approval_tx_flow_scott[step++] = FLOW_END_STEP; + int step = 0; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_1_step; + if (dataPresent && !N_storage.contractDetails) { + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_data_warning_step; + } + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_2_step; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_3_step; + if (N_storage.displayNonce) { + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_display_nonce_step; + } + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_4_step; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_5_step; + ux_approval_tx_flow_scott[step++] = &ux_approval_tx_6_step; + ux_approval_tx_flow_scott[step++] = FLOW_END_STEP; - ux_flow_init(0, ux_approval_tx_flow_scott, NULL); + ux_flow_init(0, ux_approval_tx_flow_scott, NULL); } \ No newline at end of file From 1acce7aa4c6be6e391f7298d1722b3fcdabd1685 Mon Sep 17 00:00:00 2001 From: pscott Date: Fri, 5 Feb 2021 18:03:24 +0100 Subject: [PATCH 4/6] Update ux_approval_tx_flow naming --- src_features/signTx/ui_flow_signTx.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src_features/signTx/ui_flow_signTx.c b/src_features/signTx/ui_flow_signTx.c index e5af81f..477a25a 100644 --- a/src_features/signTx/ui_flow_signTx.c +++ b/src_features/signTx/ui_flow_signTx.c @@ -148,23 +148,23 @@ UX_STEP_NOCB(ux_approval_tx_data_warning_step, }); // clang-format on -const ux_flow_step_t *ux_approval_tx_flow_scott[9]; +const ux_flow_step_t *ux_approval_tx_flow_[9]; void ux_approve_tx(bool dataPresent) { int step = 0; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_1_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_1_step; if (dataPresent && !N_storage.contractDetails) { - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_data_warning_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_data_warning_step; } - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_2_step; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_3_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_2_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_3_step; if (N_storage.displayNonce) { - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_display_nonce_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_display_nonce_step; } - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_4_step; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_5_step; - ux_approval_tx_flow_scott[step++] = &ux_approval_tx_6_step; - ux_approval_tx_flow_scott[step++] = FLOW_END_STEP; + ux_approval_tx_flow_[step++] = &ux_approval_tx_4_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_5_step; + ux_approval_tx_flow_[step++] = &ux_approval_tx_6_step; + ux_approval_tx_flow_[step++] = FLOW_END_STEP; - ux_flow_init(0, ux_approval_tx_flow_scott, NULL); + ux_flow_init(0, ux_approval_tx_flow_, NULL); } \ No newline at end of file From 9874ab41169572f6474bcab78cadfaf19f7044d5 Mon Sep 17 00:00:00 2001 From: pscott <30843220+pscott@users.noreply.github.com> Date: Mon, 8 Feb 2021 13:19:00 +0100 Subject: [PATCH 5/6] Set displayBuffer back to 50 bytes --- src_features/signTx/logic_signTx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index ab6edea..a17a21f 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -229,7 +229,7 @@ void computeFees(char *displayBuffer, uint32_t displayBufferSize) { } void finalizeParsing(bool direct) { - char displayBuffer[79]; // required to store the string representation of uint256_t max + char displayBuffer[50]; uint8_t decimals = WEI_TO_ETHER; uint8_t *ticker = (uint8_t *) PIC(chainConfig->coinName); ethPluginFinalize_t pluginFinalize; From a96caadc4f238ddbacfb5a341510dbf81b40be37 Mon Sep 17 00:00:00 2001 From: TamtamHero <10632523+TamtamHero@users.noreply.github.com> Date: Fri, 12 Feb 2021 11:53:41 +0100 Subject: [PATCH 6/6] Fix swap issue with nonce update, save a few bytes and improve settings switch feedback --- src/shared_context.h | 2 +- src/ui_flow.c | 31 +++++++++++++++--------------- src_features/signTx/logic_signTx.c | 2 +- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/shared_context.h b/src/shared_context.h index 3ee8692..63db781 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -158,7 +158,7 @@ typedef struct txStringProperties_t { char fullAddress[43]; char fullAmount[50]; char maxFee[50]; - char nonce[14]; // size needed to write "NOT Displayed" + char nonce[8]; // 10M tx per account ought to be enough for everybody } txStringProperties_t; typedef struct strDataTmp_t { diff --git a/src/ui_flow.c b/src/ui_flow.c index 46c3872..6bac181 100644 --- a/src/ui_flow.c +++ b/src/ui_flow.c @@ -1,7 +1,7 @@ #include "shared_context.h" #include "ui_callbacks.h" -void display_settings(void); +void display_settings(const ux_flow_step_t* const start_step); void switch_settings_contract_data(void); void switch_settings_display_data(void); void switch_settings_display_nonce(void); @@ -26,7 +26,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_idle_flow_3_step, pb, - display_settings(), + display_settings(NULL), { &C_icon_eye, "Settings", @@ -66,7 +66,7 @@ UX_STEP_CB( switch_settings_display_data(), { .title = "Debug data", - .text = strings.common.fullAddress + 20 + .text = strings.common.fullAddress + 12 }); UX_STEP_CB( @@ -75,7 +75,7 @@ UX_STEP_CB( switch_settings_display_nonce(), { .title = "Account nonce", - .text = strings.common.nonce + .text = strings.common.fullAddress + 26 }); #else @@ -99,9 +99,9 @@ UX_STEP_CB( "Debug data", "Display contract data", "details", - strings.common.fullAddress + 20 + strings.common.fullAddress + 12 }); - + UX_STEP_CB( ux_settings_flow_3_step, bnnn, @@ -109,8 +109,8 @@ UX_STEP_CB( { "Nonce", "Display account nonce", - "details", - strings.common.nonce + "in transactions", + strings.common.fullAddress + 26 }); #endif @@ -131,28 +131,29 @@ UX_FLOW(ux_settings_flow, &ux_settings_flow_3_step, &ux_settings_flow_4_step); -void display_settings() { +void display_settings(const ux_flow_step_t* const start_step) { strcpy(strings.common.fullAddress, (N_storage.dataAllowed ? "Allowed" : "NOT Allowed")); - strcpy(strings.common.fullAddress + 20, + strcpy(strings.common.fullAddress + 12, (N_storage.contractDetails ? "Displayed" : "NOT Displayed")); - strcpy(strings.common.nonce, (N_storage.displayNonce ? "Displayed" : "NOT Displayed")); - ux_flow_init(0, ux_settings_flow, NULL); + strcpy(strings.common.fullAddress + 26, + (N_storage.displayNonce ? "Displayed" : "NOT Displayed")); + ux_flow_init(0, ux_settings_flow, start_step); } void switch_settings_contract_data() { uint8_t value = (N_storage.dataAllowed ? 0 : 1); nvm_write((void*) &N_storage.dataAllowed, (void*) &value, sizeof(uint8_t)); - display_settings(); + display_settings(&ux_settings_flow_1_step); } void switch_settings_display_data() { uint8_t value = (N_storage.contractDetails ? 0 : 1); nvm_write((void*) &N_storage.contractDetails, (void*) &value, sizeof(uint8_t)); - display_settings(); + display_settings(&ux_settings_flow_2_step); } void switch_settings_display_nonce() { uint8_t value = (N_storage.displayNonce ? 0 : 1); nvm_write((void*) &N_storage.displayNonce, (void*) &value, sizeof(uint8_t)); - display_settings(); + display_settings(&ux_settings_flow_3_step); } diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index a17a21f..cfbfa8a 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -360,7 +360,7 @@ void finalizeParsing(bool direct) { tmpContent.txContent.nonce.length, &nonce); tostring256(&nonce, 10, displayBuffer, sizeof(displayBuffer)); - compareOrCopy(strings.common.nonce, displayBuffer, called_from_swap); + strncpy(strings.common.nonce, displayBuffer, sizeof(strings.common.nonce)); } // Compute maximum fee if (genericUI) {