* Add network name display instead of chainID * Add display of correct ticker along with network * Add FTM * Clang-format * Add comment in python script * Rename SIZE_MAX to MAX_SIZE * Change %u to %d in printf * Remove needless PIC * Update comment about get_chain_id() * Update example script to follow EIP155 * Remove unused PIC calls * Add whitespace between ticker and amount when using EIP155 * Remove decimal config per network, set back 18 everywhere * Adapt u32_from_BE to swith cases * Remove chainid from signTx.py * Switch to switch in stead of if in get_chain_id * Revert "Remove chainid from signTx.py" This reverts commit 454e09f280ec3e3ec1c7d7cc0027247ef4390088. * Change Ethereum chainid to 1 * Rename chainid_step to network_step * Adapt finalizeParsing to new chainid for Ethereum * Update snapshots * clang-format * Fix network display logic for clones * Fix tests * Add clone tests Co-authored-by: TamtamHero <10632523+TamtamHero@users.noreply.github.com>
186 lines
4.1 KiB
C
186 lines
4.1 KiB
C
#include "shared_context.h"
|
|
#include "ui_callbacks.h"
|
|
#include "chainConfig.h"
|
|
#include "utils.h"
|
|
#include "feature_signTx.h"
|
|
#include "network.h"
|
|
|
|
// clang-format off
|
|
UX_STEP_NOCB(
|
|
ux_confirm_selector_flow_1_step,
|
|
pnn,
|
|
{
|
|
&C_icon_eye,
|
|
"Verify",
|
|
"selector",
|
|
});
|
|
|
|
UX_STEP_NOCB(
|
|
ux_confirm_selector_flow_2_step,
|
|
bn,
|
|
{
|
|
"Selector",
|
|
strings.tmp.tmp
|
|
});
|
|
UX_STEP_CB(
|
|
ux_confirm_selector_flow_3_step,
|
|
pb,
|
|
io_seproxyhal_touch_data_ok(NULL),
|
|
{
|
|
&C_icon_validate_14,
|
|
"Approve",
|
|
});
|
|
UX_STEP_CB(
|
|
ux_confirm_selector_flow_4_step,
|
|
pb,
|
|
io_seproxyhal_touch_data_cancel(NULL),
|
|
{
|
|
&C_icon_crossmark,
|
|
"Reject",
|
|
});
|
|
// clang-format on
|
|
|
|
UX_FLOW(ux_confirm_selector_flow,
|
|
&ux_confirm_selector_flow_1_step,
|
|
&ux_confirm_selector_flow_2_step,
|
|
&ux_confirm_selector_flow_3_step,
|
|
&ux_confirm_selector_flow_4_step);
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// clang-format off
|
|
UX_STEP_NOCB(
|
|
ux_confirm_parameter_flow_1_step,
|
|
pnn,
|
|
{
|
|
&C_icon_eye,
|
|
"Verify",
|
|
strings.tmp.tmp2
|
|
});
|
|
UX_STEP_NOCB(
|
|
ux_confirm_parameter_flow_2_step,
|
|
bnnn_paging,
|
|
{
|
|
.title = "Parameter",
|
|
.text = strings.tmp.tmp,
|
|
});
|
|
UX_STEP_CB(
|
|
ux_confirm_parameter_flow_3_step,
|
|
pb,
|
|
io_seproxyhal_touch_data_ok(NULL),
|
|
{
|
|
&C_icon_validate_14,
|
|
"Approve",
|
|
});
|
|
UX_STEP_CB(
|
|
ux_confirm_parameter_flow_4_step,
|
|
pb,
|
|
io_seproxyhal_touch_data_cancel(NULL),
|
|
{
|
|
&C_icon_crossmark,
|
|
"Reject",
|
|
});
|
|
// clang-format on
|
|
|
|
UX_FLOW(ux_confirm_parameter_flow,
|
|
&ux_confirm_parameter_flow_1_step,
|
|
&ux_confirm_parameter_flow_2_step,
|
|
&ux_confirm_parameter_flow_3_step,
|
|
&ux_confirm_parameter_flow_4_step);
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// clang-format off
|
|
UX_STEP_NOCB(ux_approval_review_step,
|
|
pnn,
|
|
{
|
|
&C_icon_eye,
|
|
"Review",
|
|
"transaction",
|
|
});
|
|
UX_STEP_NOCB(
|
|
ux_approval_amount_step,
|
|
bnnn_paging,
|
|
{
|
|
.title = "Amount",
|
|
.text = strings.common.fullAmount
|
|
});
|
|
UX_STEP_NOCB(
|
|
ux_approval_address_step,
|
|
bnnn_paging,
|
|
{
|
|
.title = "Address",
|
|
.text = strings.common.fullAddress,
|
|
});
|
|
UX_STEP_NOCB(
|
|
ux_approval_fees_step,
|
|
bnnn_paging,
|
|
{
|
|
.title = "Max Fees",
|
|
.text = strings.common.maxFee,
|
|
});
|
|
UX_STEP_NOCB(
|
|
ux_approval_network_step,
|
|
bnnn_paging,
|
|
{
|
|
.title = "Network",
|
|
.text = strings.common.network_name,
|
|
});
|
|
UX_STEP_CB(
|
|
ux_approval_accept_step,
|
|
pbb,
|
|
io_seproxyhal_touch_tx_ok(NULL),
|
|
{
|
|
&C_icon_validate_14,
|
|
"Accept",
|
|
"and send",
|
|
});
|
|
UX_STEP_CB(
|
|
ux_approval_reject_step,
|
|
pb,
|
|
io_seproxyhal_touch_tx_cancel(NULL),
|
|
{
|
|
&C_icon_crossmark,
|
|
"Reject",
|
|
});
|
|
|
|
UX_STEP_NOCB(
|
|
ux_approval_nonce_step,
|
|
bnnn_paging,
|
|
{
|
|
.title = "Nonce",
|
|
.text = strings.common.nonce,
|
|
});
|
|
|
|
UX_STEP_NOCB(ux_approval_data_warning_step,
|
|
pbb,
|
|
{
|
|
&C_icon_warning,
|
|
"Data",
|
|
"Present",
|
|
});
|
|
// clang-format on
|
|
|
|
const ux_flow_step_t *ux_approval_tx_flow_[10];
|
|
|
|
void ux_approve_tx(bool dataPresent) {
|
|
int step = 0;
|
|
ux_approval_tx_flow_[step++] = &ux_approval_review_step;
|
|
if (dataPresent && !N_storage.contractDetails) {
|
|
ux_approval_tx_flow_[step++] = &ux_approval_data_warning_step;
|
|
}
|
|
ux_approval_tx_flow_[step++] = &ux_approval_amount_step;
|
|
ux_approval_tx_flow_[step++] = &ux_approval_address_step;
|
|
if (N_storage.displayNonce) {
|
|
ux_approval_tx_flow_[step++] = &ux_approval_nonce_step;
|
|
}
|
|
|
|
uint32_t chain_id = get_chain_id();
|
|
if (chainConfig->chainId == ETHEREUM_MAINNET_CHAINID && chain_id != chainConfig->chainId) {
|
|
ux_approval_tx_flow_[step++] = &ux_approval_network_step;
|
|
}
|
|
ux_approval_tx_flow_[step++] = &ux_approval_fees_step;
|
|
ux_approval_tx_flow_[step++] = &ux_approval_accept_step;
|
|
ux_approval_tx_flow_[step++] = &ux_approval_reject_step;
|
|
ux_approval_tx_flow_[step++] = FLOW_END_STEP;
|
|
|
|
ux_flow_init(0, ux_approval_tx_flow_, NULL);
|
|
} |