1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-18 05:28:40 +00:00

refactor(core): convert apps.tezos to layouts

This commit is contained in:
Martin Milata 2021-03-03 16:13:17 +01:00 committed by matejcik
parent 12478b1716
commit ebf6ef1666
2 changed files with 154 additions and 81 deletions

View File

@ -1,76 +1,106 @@
from trezor import ui
from trezor.enums import ButtonRequestType
from trezor.strings import format_amount
from trezor.ui.components.tt.scroll import Paginated
from trezor.ui.components.tt.text import Text
from trezor.utils import chunks
from apps.common.confirm import require_confirm, require_hold_to_confirm
from trezor.ui.layouts import (
confirm_hex,
confirm_metadata,
confirm_output,
confirm_proposals_tezos,
confirm_total,
)
from .helpers import TEZOS_AMOUNT_DECIMALS
async def require_confirm_tx(ctx, to, value):
text = Text("Confirm sending", ui.ICON_SEND, ui.GREEN)
text.bold(format_tezos_amount(value))
text.normal("to")
text.mono(*split_address(to))
await require_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_output(
ctx,
to,
format_tezos_amount(value),
font_amount=ui.BOLD,
to_str="\nto\n",
width=18,
br_code=ButtonRequestType.SignTx,
)
async def require_confirm_fee(ctx, value, fee):
text = Text("Confirm transaction", ui.ICON_SEND, ui.GREEN)
text.normal("Amount:")
text.bold(format_tezos_amount(value))
text.normal("Fee:")
text.bold(format_tezos_amount(fee))
await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_total(
ctx,
total_amount=format_tezos_amount(value),
total_label="Amount:\n",
fee_amount=format_tezos_amount(fee),
fee_label="\nFee:\n",
)
async def require_confirm_origination(ctx, address):
text = Text("Confirm origination", ui.ICON_SEND, ui.ORANGE)
text.normal("Address:")
text.mono(*split_address(address))
await require_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_hex(
ctx,
"confirm_origination",
title="Confirm origination",
description="Address:",
data=address,
width=18,
truncate=True,
icon_color=ui.ORANGE,
br_code=ButtonRequestType.SignTx,
)
async def require_confirm_origination_fee(ctx, balance, fee):
text = Text("Confirm origination", ui.ICON_SEND, ui.ORANGE)
text.normal("Balance:")
text.bold(format_tezos_amount(balance))
text.normal("Fee:")
text.bold(format_tezos_amount(fee))
await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_total(
ctx,
title="Confirm origination",
total_amount=format_tezos_amount(balance),
total_label="Balance:\n",
fee_amount=format_tezos_amount(fee),
fee_label="\nFee:\n",
icon_color=ui.ORANGE,
br_type="confirm_origination_final",
)
async def require_confirm_delegation_baker(ctx, baker):
text = Text("Confirm delegation", ui.ICON_SEND, ui.BLUE)
text.normal("Baker address:")
text.mono(*split_address(baker))
await require_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_hex(
ctx,
"confirm_delegation",
title="Confirm delegation",
description="Baker address:",
data=baker,
width=18,
truncate=True,
icon_color=ui.BLUE,
br_code=ButtonRequestType.SignTx,
)
async def require_confirm_set_delegate(ctx, fee):
text = Text("Confirm delegation", ui.ICON_SEND, ui.BLUE)
text.normal("Fee:")
text.bold(format_tezos_amount(fee))
await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_metadata(
ctx,
"confirm_delegation_final",
title="Confirm delegation",
content="Fee:\n{}",
param=format_tezos_amount(fee),
hold=True,
hide_continue=True,
icon_color=ui.BLUE,
br_code=ButtonRequestType.SignTx,
)
async def require_confirm_register_delegate(ctx, address, fee):
text = Text("Register delegate", ui.ICON_SEND, ui.BLUE)
text.bold("Fee: " + format_tezos_amount(fee))
text.normal("Address:")
text.mono(*split_address(address))
await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
def split_address(address):
return chunks(address, 18)
def split_proposal(proposal):
return chunks(proposal, 17)
await confirm_hex(
ctx,
"confirm_register_delegate",
title="Register delegate",
subtitle="Fee: " + format_tezos_amount(fee),
description="Address:",
data=address,
width=18,
icon_color=ui.BLUE,
br_code=ButtonRequestType.SignTx,
)
def format_tezos_amount(value):
@ -79,39 +109,48 @@ def format_tezos_amount(value):
async def require_confirm_ballot(ctx, proposal, ballot):
text = Text("Submit ballot", ui.ICON_SEND, icon_color=ui.PURPLE)
text.bold("Ballot: {}".format(ballot))
text.bold("Proposal:")
text.mono(*split_proposal(proposal))
await require_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_hex(
ctx,
"confirm_ballot",
title="Submit ballot",
subtitle="Ballot: {}\nProposal:".format(ballot),
data=proposal,
width=17,
truncate=True,
icon_color=ui.PURPLE,
br_code=ButtonRequestType.SignTx,
)
async def require_confirm_proposals(ctx, proposals):
if len(proposals) > 1:
title = "Submit proposals"
else:
title = "Submit proposal"
pages = []
for page, proposal in enumerate(proposals):
text = Text(title, ui.ICON_SEND, icon_color=ui.PURPLE)
text.bold("Proposal {}: ".format(page + 1))
text.mono(*split_proposal(proposal))
pages.append(text)
paginated = Paginated(pages)
await require_confirm(ctx, paginated, ButtonRequestType.SignTx)
await confirm_proposals_tezos(ctx, proposals)
async def require_confirm_delegation_manager_withdraw(ctx, address):
text = Text("Remove delegation", ui.ICON_RECEIVE, icon_color=ui.RED)
text.bold("Delegator:")
text.mono(*split_address(address))
await require_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_hex(
ctx,
"confirm_undelegation",
title="Remove delegation",
subtitle="Delegator:",
data=address,
width=18,
truncate=True,
icon=ui.ICON_RECEIVE,
icon_color=ui.RED,
br_code=ButtonRequestType.SignTx,
)
async def require_confirm_manager_remove_delegate(ctx, fee):
text = Text("Remove delegation", ui.ICON_RECEIVE, ui.RED)
text.normal("Fee:")
text.bold(format_tezos_amount(fee))
await require_hold_to_confirm(ctx, text, ButtonRequestType.SignTx)
await confirm_metadata(
ctx,
"confirm_undelegation_final",
title="Remove delegation",
content="Fee:\n{}",
param=format_tezos_amount(fee),
hold=True,
hide_continue=True,
icon=ui.ICON_RECEIVE,
icon_color=ui.RED,
br_code=ButtonRequestType.SignTx,
)

View File

@ -62,6 +62,7 @@ __all__ = (
"confirm_modify_fee",
"confirm_coinjoin",
"confirm_timebounds_stellar",
"confirm_proposals_tezos",
)
@ -451,6 +452,7 @@ async def confirm_output(
amount: str,
font_amount: int = ui.NORMAL, # TODO cleanup @ redesign
color_to: int = ui.FG, # TODO cleanup @ redesign
to_str: str = " to\n", # TODO cleanup @ redesign
width: int = MONO_ADDR_PER_LINE,
width_paginated: int = MONO_ADDR_PER_LINE - 1,
br_code: ButtonRequestType = ButtonRequestType.ConfirmOutput,
@ -462,7 +464,7 @@ async def confirm_output(
content: ui.Layout = paginate_paragraphs(para, title, ui.ICON_SEND, ui.GREEN)
else:
text = Text(title, ui.ICON_SEND, ui.GREEN, new_lines=False)
text.content = [font_amount, amount, ui.NORMAL, color_to, " to\n", ui.FG]
text.content = [font_amount, amount, ui.NORMAL, color_to, to_str, ui.FG]
text.mono(*chunks_intersperse(address, width))
content = Confirm(text)
@ -547,15 +549,22 @@ async def confirm_hex(
async def confirm_total(
ctx: wire.GenericContext, total_amount: str, fee_amount: str
ctx: wire.GenericContext,
total_amount: str,
fee_amount: str,
title: str = "Confirm transaction",
total_label: str = "Total amount:\n",
fee_label: str = "\nincluding fee:\n",
icon_color: int = ui.GREEN,
br_type: str = "confirm_total",
) -> None:
text = Text("Confirm transaction", ui.ICON_SEND, ui.GREEN, new_lines=False)
text.normal("Total amount:\n")
text = Text(title, ui.ICON_SEND, icon_color, new_lines=False)
text.normal(total_label)
text.bold(total_amount)
text.normal("\nincluding fee:\n")
text.normal(fee_label)
text.bold(fee_amount)
await raise_if_cancelled(
interact(ctx, HoldToConfirm(text), "confirm_total", ButtonRequestType.SignTx)
interact(ctx, HoldToConfirm(text), br_type, ButtonRequestType.SignTx)
)
@ -616,8 +625,9 @@ async def confirm_metadata(
hide_continue: bool = False,
hold: bool = False,
icon: str = ui.ICON_SEND, # TODO cleanup @ redesign
icon_color: int = ui.GREEN, # TODO cleanup @ redesign
) -> None:
text = Text(title, icon, ui.GREEN, new_lines=False)
text = Text(title, icon, icon_color, new_lines=False)
text.format_parametrized(content, param if param is not None else "")
if not hide_continue:
@ -775,3 +785,27 @@ async def confirm_timebounds_stellar(
ctx, Confirm(text), "confirm_timebounds", ButtonRequestType.ConfirmOutput
)
)
# TODO cleanup @ redesign
async def confirm_proposals_tezos(
ctx: wire.GenericContext, proposals: Sequence[str]
) -> None:
if len(proposals) > 1:
title = "Submit proposals"
else:
title = "Submit proposal"
pages: list[ui.Component] = []
for page, proposal in enumerate(proposals):
text = Text(title, ui.ICON_SEND, icon_color=ui.PURPLE, new_lines=False)
text.bold("Proposal {}:\n".format(page + 1))
text.mono(*chunks_intersperse(proposal, 17))
pages.append(text)
pages[-1] = Confirm(pages[-1])
paginated = Paginated(pages)
await raise_if_cancelled(
interact(ctx, paginated, "confirm_proposals", ButtonRequestType.SignTx)
)