Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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,
        )
    )
Exemplo n.º 3
0
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,
        )
    )
Exemplo n.º 4
0
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,
        )
    )
Exemplo n.º 5
0
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