From f9b16cfa343d96645b3e5b7e3a4a77ca701dda43 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Tue, 27 Feb 2018 20:28:01 +0100 Subject: [PATCH] src/apps/wallet/sign_tx: op_return ui --- src/apps/wallet/sign_tx/layout.py | 32 +++++++++++++++++++++-------- src/apps/wallet/sign_tx/multisig.py | 2 +- src/apps/wallet/verify_message.py | 4 +--- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/apps/wallet/sign_tx/layout.py b/src/apps/wallet/sign_tx/layout.py index d96d9c7d4..11e08865d 100644 --- a/src/apps/wallet/sign_tx/layout.py +++ b/src/apps/wallet/sign_tx/layout.py @@ -1,3 +1,4 @@ +from ubinascii import hexlify from trezor import ui from trezor.utils import chunks, format_amount from trezor.ui.text import Text @@ -15,26 +16,39 @@ def split_address(address): return chunks(address, 17) +def split_op_return(data): + return chunks(data, 18) + + async def confirm_output(ctx, output, coin): if output.script_type == OutputScriptType.PAYTOOPRETURN: - address = 'OP_RETURN' # TODO: handle OP_RETURN correctly + data = hexlify(output.op_return_data).decode() + if len(data) >= 18 * 5: + data = data[:(18 * 5 - 3)] + '...' + content = Text('OP_RETURN', ui.ICON_DEFAULT, + ui.MONO, *split_op_return(data)) else: address = output.address - content = Text('Confirm output', ui.ICON_DEFAULT, - ui.BOLD, format_coin_amount(output.amount, coin), - ui.NORMAL, 'to', - ui.MONO, *split_address(address)) + content = Text('Confirm sending', ui.ICON_DEFAULT, + ui.NORMAL, format_coin_amount(output.amount, coin) + ' to', + ui.MONO, *split_address(address)) return await confirm(ctx, content, ButtonRequestType.ConfirmOutput) async def confirm_total(ctx, spending, fee, coin): content = Text('Confirm transaction', ui.ICON_DEFAULT, - 'Sending: %s' % format_coin_amount(spending, coin), - 'Fee: %s' % format_coin_amount(fee, coin)) + 'Total amount:', + ui.BOLD, format_coin_amount(spending, coin), + ui.NORMAL, 'including fee:', + ui.BOLD, format_coin_amount(fee, coin)) return await hold_to_confirm(ctx, content, ButtonRequestType.SignTx) async def confirm_feeoverthreshold(ctx, fee, coin): - content = Text('Confirm high fee:', ui.ICON_DEFAULT, - ui.BOLD, format_coin_amount(fee, coin)) + content = Text('High fee', ui.ICON_DEFAULT, + 'The fee of', + ui.BOLD, format_coin_amount(fee, coin), + ui.NORMAL, 'is unexpectedly high.', + 'Continue?') + return await confirm(ctx, content, ButtonRequestType.FeeOverThreshold) diff --git a/src/apps/wallet/sign_tx/multisig.py b/src/apps/wallet/sign_tx/multisig.py index ba41b7eaa..891c06fe5 100644 --- a/src/apps/wallet/sign_tx/multisig.py +++ b/src/apps/wallet/sign_tx/multisig.py @@ -70,7 +70,7 @@ def multisig_pubkey_index(multisig: MultisigRedeemScriptType, pubkey: bytes) -> if multisig_get_pubkey(hd) == pubkey: return i raise MultisigError(FailureType.DataError, - 'Pubkey not found in multisig script') + 'Pubkey not found in multisig script') def multisig_get_pubkey(hd: HDNodePathType) -> bytes: diff --git a/src/apps/wallet/verify_message.py b/src/apps/wallet/verify_message.py index f2ca994a5..09ca43ad6 100644 --- a/src/apps/wallet/verify_message.py +++ b/src/apps/wallet/verify_message.py @@ -1,12 +1,10 @@ from trezor import ui, wire -from trezor.crypto import base58 from trezor.crypto.curve import secp256k1 -from trezor.crypto.hashlib import ripemd160, sha256 from trezor.messages.InputScriptType import SPENDADDRESS, SPENDP2SHWITNESS, SPENDWITNESS from trezor.messages.FailureType import ProcessError from trezor.messages.Success import Success from trezor.ui.text import Text -from apps.common import address_type, coins +from apps.common import coins from apps.common.confirm import require_confirm from apps.common.signverify import message_digest, split_message from apps.wallet.sign_tx.addresses import address_pkh, address_p2wpkh_in_p2sh, address_p2wpkh