async def confirm_output( ctx: wire.Context, output: TxOutput, coin: CoinInfo, amount_unit: EnumTypeAmountUnit ) -> None: if output.script_type == OutputScriptType.PAYTOOPRETURN: data = output.op_return_data assert data is not None if omni.is_valid(data): # OMNI transaction layout: LayoutType = layouts.confirm_metadata( ctx, "omni_transaction", "OMNI transaction", omni.parse(data), br_code=ButtonRequestType.ConfirmOutput, ) else: # generic OP_RETURN layout = layouts.confirm_hex( ctx, "op_return", "OP_RETURN", hexlify(data).decode(), ButtonRequestType.ConfirmOutput, ) else: assert output.address is not None address_short = addresses.address_short(coin, output.address) layout = layouts.confirm_output( ctx, address_short, format_coin_amount(output.amount, coin, amount_unit) ) await require(layout)
async def confirm_nondefault_locktime( ctx: wire.Context, lock_time: int, lock_time_disabled: bool ) -> None: if lock_time_disabled: title = "Warning" text = "Locktime is set but will\nhave no effect.\n" param: Optional[str] = None elif lock_time < _LOCKTIME_TIMESTAMP_MIN_VALUE: title = "Confirm locktime" text = "Locktime for this\ntransaction is set to\nblockheight:\n{}" param = str(lock_time) else: title = "Confirm locktime" text = "Locktime for this\ntransaction is set to\ntimestamp:\n{}" param = str(lock_time) await require( layouts.confirm_metadata( ctx, "nondefault_locktime", title, text, param, br_code=ButtonRequestType.SignTx, ) )
async def confirm_change_count_over_threshold( ctx: wire.Context, change_count: int ) -> None: await require( layouts.confirm_metadata( ctx, "change_count_over_threshold", "Warning", "There are {}\nchange-outputs.\n", str(change_count), ButtonRequestType.SignTx, ) )
async def confirm_feeoverthreshold( ctx: wire.Context, fee: int, coin: CoinInfo, amount_unit: EnumTypeAmountUnit ) -> None: fee_amount = format_coin_amount(fee, coin, amount_unit) await require( layouts.confirm_metadata( ctx, "fee_over_threshold", "High fee", "The fee of\n{}is unexpectedly high.", fee_amount, ButtonRequestType.FeeOverThreshold, ) )
async def confirm_output(ctx: wire.Context, output: TxOutput, coin: CoinInfo, amount_unit: AmountUnit) -> None: if output.script_type == OutputScriptType.PAYTOOPRETURN: data = output.op_return_data assert data is not None if omni.is_valid(data): # OMNI transaction layout: LayoutType = layouts.confirm_metadata( ctx, "omni_transaction", "OMNI transaction", omni.parse(data), br_code=ButtonRequestType.ConfirmOutput, ) else: # generic OP_RETURN layout = layouts.confirm_blob( ctx, "op_return", title="OP_RETURN", data=data, br_code=ButtonRequestType.ConfirmOutput, ) else: assert output.address is not None address_short = addresses.address_short(coin, output.address) if output.payment_req_index is not None: title = "Confirm details" icon = ui.ICON_CONFIRM else: title = "Confirm sending" icon = ui.ICON_SEND layout = layouts.confirm_output( ctx, address_short, format_coin_amount(output.amount, coin, amount_unit), title=title, icon=icon, ) await layout