diff --git a/src/apps/stellar/layout.py b/src/apps/stellar/layout.py index b98dda46d9..92cce082c1 100644 --- a/src/apps/stellar/layout.py +++ b/src/apps/stellar/layout.py @@ -6,10 +6,16 @@ from apps.common.confirm import require_confirm, require_hold_to_confirm from apps.stellar import consts -async def require_confirm_init(ctx, address: str, network_passphrase: str): +async def require_confirm_init( + ctx, address: str, network_passphrase: str, accounts_match: bool +): text = Text("Confirm Stellar", ui.ICON_SEND, icon_color=ui.GREEN) text.normal("Initialize signing with") - text.mono(*split(address)) + if accounts_match: + text.normal("your account") + text.mono(*split(trim_to_rows(address, 3))) + else: + text.mono(*split(address)) await require_confirm(ctx, text, ButtonRequestType.ConfirmOutput) network = get_network_warning(network_passphrase) if network: diff --git a/src/apps/stellar/sign_tx.py b/src/apps/stellar/sign_tx.py index 55152348b6..cc905b9216 100644 --- a/src/apps/stellar/sign_tx.py +++ b/src/apps/stellar/sign_tx.py @@ -49,14 +49,16 @@ async def _init(ctx, w: bytearray, pubkey: bytes, msg: StellarSignTx): writers.write_bytes(w, consts.TX_TYPE) address = helpers.address_from_public_key(pubkey) - writers.write_pubkey(w, address) - if helpers.public_key_from_address(msg.source_account) != pubkey: - raise ProcessError("Stellar: source account does not match address_n") + accounts_match = msg.source_account == address + + writers.write_pubkey(w, msg.source_account) writers.write_uint32(w, msg.fee) writers.write_uint64(w, msg.sequence_number) # confirm init - await layout.require_confirm_init(ctx, address, msg.network_passphrase) + await layout.require_confirm_init( + ctx, msg.source_account, msg.network_passphrase, accounts_match + ) def _timebounds(w: bytearray, start: int, end: int): @@ -78,6 +80,8 @@ async def _operations(ctx, w: bytearray, num_operations: int): async def _memo(ctx, w: bytearray, msg: StellarSignTx): + if msg.memo_type is None: + msg.memo_type = consts.MEMO_TYPE_NONE writers.write_uint32(w, msg.memo_type) if msg.memo_type == consts.MEMO_TYPE_NONE: # nothing is serialized