You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.7 KiB
138 lines
3.7 KiB
from typing import TYPE_CHECKING
|
|
|
|
import trezor.ui.layouts as layouts
|
|
from trezor import TR, strings
|
|
from trezor.enums import ButtonRequestType
|
|
|
|
from . import consts
|
|
|
|
if TYPE_CHECKING:
|
|
from trezor.enums import StellarMemoType
|
|
from trezor.messages import StellarAsset
|
|
|
|
|
|
async def require_confirm_init(
|
|
address: str,
|
|
network_passphrase: str,
|
|
accounts_match: bool,
|
|
) -> None:
|
|
description = (
|
|
TR.stellar__initialize_signing_with + TR.stellar__your_account
|
|
if accounts_match
|
|
else ""
|
|
)
|
|
await layouts.confirm_address(
|
|
TR.stellar__confirm_stellar,
|
|
address,
|
|
description,
|
|
"confirm_init",
|
|
)
|
|
|
|
# get_network_warning
|
|
if network_passphrase == consts.NETWORK_PASSPHRASE_PUBLIC:
|
|
network = None
|
|
elif network_passphrase == consts.NETWORK_PASSPHRASE_TESTNET:
|
|
network = TR.stellar__testnet_network
|
|
else:
|
|
network = TR.stellar__private_network
|
|
|
|
if network:
|
|
await layouts.confirm_metadata(
|
|
"confirm_init_network",
|
|
TR.stellar__confirm_network,
|
|
TR.stellar__on_network_template,
|
|
network,
|
|
ButtonRequestType.ConfirmOutput,
|
|
)
|
|
|
|
|
|
async def require_confirm_timebounds(start: int, end: int) -> None:
|
|
await layouts.confirm_properties(
|
|
"confirm_timebounds",
|
|
TR.stellar__confirm_timebounds,
|
|
(
|
|
(
|
|
TR.stellar__valid_from,
|
|
(
|
|
strings.format_timestamp(start)
|
|
if start > 0
|
|
else TR.stellar__no_restriction
|
|
),
|
|
),
|
|
(
|
|
TR.stellar__valid_to,
|
|
(
|
|
strings.format_timestamp(end)
|
|
if end > 0
|
|
else TR.stellar__no_restriction
|
|
),
|
|
),
|
|
),
|
|
)
|
|
|
|
|
|
async def require_confirm_memo(memo_type: StellarMemoType, memo_text: str) -> None:
|
|
from trezor.enums import StellarMemoType
|
|
|
|
if memo_type == StellarMemoType.TEXT:
|
|
description = "Memo (TEXT)"
|
|
elif memo_type == StellarMemoType.ID:
|
|
description = "Memo (ID)"
|
|
elif memo_type == StellarMemoType.HASH:
|
|
description = "Memo (HASH)"
|
|
elif memo_type == StellarMemoType.RETURN:
|
|
description = "Memo (RETURN)"
|
|
else:
|
|
return await layouts.confirm_action(
|
|
"confirm_memo",
|
|
TR.stellar__confirm_memo,
|
|
TR.stellar__no_memo_set,
|
|
TR.stellar__exchanges_require_memo,
|
|
br_code=ButtonRequestType.ConfirmOutput,
|
|
)
|
|
|
|
await layouts.confirm_blob(
|
|
"confirm_memo",
|
|
TR.stellar__confirm_memo,
|
|
memo_text,
|
|
description,
|
|
)
|
|
|
|
|
|
async def require_confirm_final(fee: int, num_operations: int) -> None:
|
|
op_str = strings.format_plural(
|
|
"{count} {plural}", num_operations, TR.plurals__transaction_of_x_operations
|
|
)
|
|
text = (
|
|
TR.stellar__sign_tx_count_template.format(op_str)
|
|
+ " "
|
|
+ TR.stellar__sign_tx_fee_template
|
|
)
|
|
await layouts.confirm_metadata(
|
|
"confirm_final",
|
|
TR.stellar__final_confirm,
|
|
text,
|
|
format_amount(fee),
|
|
hold=True,
|
|
)
|
|
|
|
|
|
def format_asset(asset: StellarAsset | None) -> str:
|
|
from trezor.enums import StellarAssetType
|
|
from trezor.wire import DataError
|
|
|
|
if asset is None or asset.type == StellarAssetType.NATIVE:
|
|
return "XLM"
|
|
else:
|
|
if asset.code is None:
|
|
raise DataError("Stellar asset code is missing")
|
|
return asset.code
|
|
|
|
|
|
def format_amount(amount: int, asset: StellarAsset | None = None) -> str:
|
|
return (
|
|
strings.format_amount(amount, consts.AMOUNT_DECIMALS)
|
|
+ " "
|
|
+ format_asset(asset)
|
|
)
|