src/apps/wallet/sign_tx: op_return ui

pull/25/head
Pavol Rusnak 6 years ago
parent 9f48e3d471
commit f9b16cfa34
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

@ -1,3 +1,4 @@
from ubinascii import hexlify
from trezor import ui from trezor import ui
from trezor.utils import chunks, format_amount from trezor.utils import chunks, format_amount
from trezor.ui.text import Text from trezor.ui.text import Text
@ -15,26 +16,39 @@ def split_address(address):
return chunks(address, 17) return chunks(address, 17)
def split_op_return(data):
return chunks(data, 18)
async def confirm_output(ctx, output, coin): async def confirm_output(ctx, output, coin):
if output.script_type == OutputScriptType.PAYTOOPRETURN: 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: else:
address = output.address address = output.address
content = Text('Confirm output', ui.ICON_DEFAULT, content = Text('Confirm sending', ui.ICON_DEFAULT,
ui.BOLD, format_coin_amount(output.amount, coin), ui.NORMAL, format_coin_amount(output.amount, coin) + ' to',
ui.NORMAL, 'to', ui.MONO, *split_address(address))
ui.MONO, *split_address(address))
return await confirm(ctx, content, ButtonRequestType.ConfirmOutput) return await confirm(ctx, content, ButtonRequestType.ConfirmOutput)
async def confirm_total(ctx, spending, fee, coin): async def confirm_total(ctx, spending, fee, coin):
content = Text('Confirm transaction', ui.ICON_DEFAULT, content = Text('Confirm transaction', ui.ICON_DEFAULT,
'Sending: %s' % format_coin_amount(spending, coin), 'Total amount:',
'Fee: %s' % format_coin_amount(fee, coin)) 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) return await hold_to_confirm(ctx, content, ButtonRequestType.SignTx)
async def confirm_feeoverthreshold(ctx, fee, coin): async def confirm_feeoverthreshold(ctx, fee, coin):
content = Text('Confirm high fee:', ui.ICON_DEFAULT, content = Text('High fee', ui.ICON_DEFAULT,
ui.BOLD, format_coin_amount(fee, coin)) 'The fee of',
ui.BOLD, format_coin_amount(fee, coin),
ui.NORMAL, 'is unexpectedly high.',
'Continue?')
return await confirm(ctx, content, ButtonRequestType.FeeOverThreshold) return await confirm(ctx, content, ButtonRequestType.FeeOverThreshold)

@ -70,7 +70,7 @@ def multisig_pubkey_index(multisig: MultisigRedeemScriptType, pubkey: bytes) ->
if multisig_get_pubkey(hd) == pubkey: if multisig_get_pubkey(hd) == pubkey:
return i return i
raise MultisigError(FailureType.DataError, raise MultisigError(FailureType.DataError,
'Pubkey not found in multisig script') 'Pubkey not found in multisig script')
def multisig_get_pubkey(hd: HDNodePathType) -> bytes: def multisig_get_pubkey(hd: HDNodePathType) -> bytes:

@ -1,12 +1,10 @@
from trezor import ui, wire from trezor import ui, wire
from trezor.crypto import base58
from trezor.crypto.curve import secp256k1 from trezor.crypto.curve import secp256k1
from trezor.crypto.hashlib import ripemd160, sha256
from trezor.messages.InputScriptType import SPENDADDRESS, SPENDP2SHWITNESS, SPENDWITNESS from trezor.messages.InputScriptType import SPENDADDRESS, SPENDP2SHWITNESS, SPENDWITNESS
from trezor.messages.FailureType import ProcessError from trezor.messages.FailureType import ProcessError
from trezor.messages.Success import Success from trezor.messages.Success import Success
from trezor.ui.text import Text 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.confirm import require_confirm
from apps.common.signverify import message_digest, split_message from apps.common.signverify import message_digest, split_message
from apps.wallet.sign_tx.addresses import address_pkh, address_p2wpkh_in_p2sh, address_p2wpkh from apps.wallet.sign_tx.addresses import address_pkh, address_p2wpkh_in_p2sh, address_p2wpkh

Loading…
Cancel
Save