Skip to content

Commit

Permalink
feat(core): show ETH account info on all models
Browse files Browse the repository at this point in the history
  • Loading branch information
ibz committed Jan 23, 2025
1 parent 205a3be commit 6e4befd
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 37 deletions.
1 change: 1 addition & 0 deletions core/.changelog.d/3536.added
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[T2T1, T2B1] Added account info for ETH transactions.
51 changes: 31 additions & 20 deletions core/src/trezor/ui/layouts/bolt/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -815,50 +815,61 @@ def confirm_ethereum_unknown_contract_warning() -> Awaitable[None]:
async def confirm_ethereum_tx(
recipient: str | None,
total_amount: str,
_account: str | None,
_account_path: str | None,
account: str | None,
account_path: str | None,
maximum_fee: str,
fee_info_items: Iterable[tuple[str, str]],
is_contract_interaction: bool,
br_name: str = "confirm_ethereum_tx",
br_code: ButtonRequestType = ButtonRequestType.SignTx,
chunkify: bool = False,
) -> None:
# NOTE: fee_info used so that info button is shown
if not is_contract_interaction:
description = TR.words__recipient
else:
description = TR.ethereum__interaction_contract if recipient else None

address_layout = trezorui_api.confirm_value(
title=TR.words__address,
description=description,
value=recipient or TR.ethereum__new_contract,
verb=TR.buttons__continue,
verb_cancel=None,
info=True,
chunkify=(chunkify if recipient else False),
)

account_info_layout = trezorui_api.show_info_with_cancel(
title=TR.send__send_from,
items=[
(f"{TR.words__account}:", account or ""),
(f"{TR.address_details__derivation_path}:", account_path or ""),
],
)

total_layout = trezorui_api.confirm_summary(
amount=total_amount,
amount_label=f"{TR.words__amount}:",
fee=maximum_fee,
fee_label=f"{TR.send__maximum_fee}:",
title=TR.words__title_summary,
extra_items=fee_info_items,
extra_items=fee_info_items, # used so that info button is shown
extra_title=TR.confirm_total__title_fee,
verb_cancel="^",
)
info_layout = trezorui_api.show_info_with_cancel(

fee_info_layout = trezorui_api.show_info_with_cancel(
title=TR.confirm_total__title_fee,
items=[(f"{k}:", v) for (k, v) in fee_info_items],
)

if not is_contract_interaction:
description = TR.words__recipient
else:
description = TR.ethereum__interaction_contract if recipient else None

while True:
# Allowing going back and forth between recipient and summary/details
await confirm_blob(
br_name,
TR.words__address,
recipient or TR.ethereum__new_contract,
description=description,
verb=TR.buttons__continue,
chunkify=(chunkify if recipient else False),
)
await with_info(address_layout, account_info_layout, br_name, br_code)

try:
await with_info(total_layout, info_layout, br_name, br_code)
await with_info(total_layout, fee_info_layout, br_name, br_code)
except ActionCancelled:
# Allowing going back and forth between recipient and summary
continue
else:
break
Expand Down
41 changes: 25 additions & 16 deletions core/src/trezor/ui/layouts/caesar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from trezor.enums import ButtonRequestType
from trezor.wire import ActionCancelled

from ..common import draw_simple, interact, raise_if_not_confirmed
from ..common import draw_simple, interact, raise_if_not_confirmed, with_info

if TYPE_CHECKING:
from typing import Awaitable, Iterable, NoReturn, Sequence
Expand Down Expand Up @@ -951,38 +951,46 @@ def confirm_cardano_tx(
async def confirm_ethereum_tx(
recipient: str | None,
total_amount: str,
_account: str | None,
_account_path: str | None,
account: str | None,
account_path: str | None,
maximum_fee: str,
fee_info_items: Iterable[tuple[str, str]],
is_contract_interaction: bool,
br_name: str = "confirm_ethereum_tx",
br_code: ButtonRequestType = ButtonRequestType.SignTx,
chunkify: bool = False,
) -> None:
if not is_contract_interaction:
title = TR.words__recipient
else:
title = TR.ethereum__interaction_contract if recipient else ""

address_layout = trezorui_api.confirm_address(
title=title,
address=recipient or TR.ethereum__new_contract,
verb=TR.buttons__continue,
info_button=True,
)

account_info_layout = trezorui_api.confirm_more(
title=TR.send__send_from,
button="",
button_style_confirm=False,
items=[(ui.MONO, account or ""), (ui.MONO, account_path or "")],
)

summary_layout = trezorui_api.confirm_summary(
amount=total_amount,
amount_label=f"{TR.words__amount}:",
fee=maximum_fee,
fee_label=f"{TR.send__maximum_fee}:",
extra_items=[(f"{k}:", v) for (k, v) in fee_info_items],
extra_title=TR.confirm_total__title_fee,
verb_cancel="<",
)

if not is_contract_interaction:
title = TR.words__recipient
else:
title = TR.ethereum__interaction_contract if recipient else ""

while True:
# Allowing going back and forth between recipient and summary/details
await confirm_blob(
br_name,
title,
recipient or TR.ethereum__new_contract,
verb=TR.buttons__continue,
chunkify=(chunkify if recipient else False),
)
await with_info(address_layout, account_info_layout, br_name, br_code)

try:
await raise_if_not_confirmed(
Expand All @@ -992,6 +1000,7 @@ async def confirm_ethereum_tx(
)
break
except ActionCancelled:
# Allowing going back and forth between recipient and summary/details
continue


Expand Down
14 changes: 13 additions & 1 deletion tests/input_flows_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,14 @@ def _confirm_tx_bolt(
if cancel:
self.debug.press_no()
return
if info:
self.debug.press_info()
assert TR.words__account in self.debug.read_layout().text_content()
assert (
TR.address_details__derivation_path
in self.debug.read_layout().text_content()
)
self.debug.press_no()

self.debug.press_yes()
assert (yield).name == "confirm_ethereum_tx"
Expand Down Expand Up @@ -427,7 +435,11 @@ def _confirm_tx_caesar(
if cancel:
self.debug.press_left()
return
self.debug.press_right()
if info:
self.debug.press_right()
assert "m/44" in self.debug.read_layout().text_content()
self.debug.press_left()
self.debug.press_middle()
assert (yield).name == "confirm_ethereum_tx"
assert TR.send__maximum_fee in self.debug.read_layout().text_content()
if go_back_from_summary:
Expand Down

0 comments on commit 6e4befd

Please sign in to comment.