You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/core/src/apps/cardano/get_address.py

57 lines
1.7 KiB

from typing import TYPE_CHECKING
from trezor import log, wire
from trezor.messages import CardanoAddress
from . import seed
from .address import derive_human_readable_address, validate_address_parameters
from .helpers.credential import Credential, should_show_address_credentials
from .layout import show_cardano_address, show_credentials
from .sign_tx import validate_network_info
if TYPE_CHECKING:
from trezor.messages import (
CardanoAddressParametersType,
CardanoGetAddress,
)
@seed.with_keychain
async def get_address(
ctx: wire.Context, msg: CardanoGetAddress, keychain: seed.Keychain
) -> CardanoAddress:
address_parameters = msg.address_parameters
validate_network_info(msg.network_id, msg.protocol_magic)
validate_address_parameters(address_parameters)
try:
address = derive_human_readable_address(
keychain, address_parameters, msg.protocol_magic, msg.network_id
)
except ValueError as e:
if __debug__:
log.exception(__name__, e)
raise wire.ProcessError("Deriving address failed")
if msg.show_display:
await _display_address(ctx, address_parameters, address, msg.protocol_magic)
return CardanoAddress(address=address)
async def _display_address(
ctx: wire.Context,
address_parameters: CardanoAddressParametersType,
address: str,
protocol_magic: int,
) -> None:
if should_show_address_credentials(address_parameters):
await show_credentials(
ctx,
Credential.payment_credential(address_parameters),
Credential.stake_credential(address_parameters),
)
await show_cardano_address(ctx, address_parameters, address, protocol_magic)