mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-03 21:32:33 +00:00
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
from trezor import log, messages, wire
|
|
|
|
from . import seed
|
|
from .address import derive_human_readable_address, validate_address_parameters
|
|
from .helpers.credential import Credential, should_show_credentials
|
|
from .helpers.utils import validate_network_info
|
|
from .layout import show_cardano_address, show_credentials
|
|
|
|
|
|
@seed.with_keychain
|
|
async def get_address(
|
|
ctx: wire.Context, msg: messages.CardanoGetAddress, keychain: seed.Keychain
|
|
) -> messages.CardanoAddress:
|
|
validate_network_info(msg.network_id, msg.protocol_magic)
|
|
validate_address_parameters(msg.address_parameters)
|
|
|
|
try:
|
|
address = derive_human_readable_address(
|
|
keychain, msg.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, msg.address_parameters, address, msg.protocol_magic)
|
|
|
|
return messages.CardanoAddress(address=address)
|
|
|
|
|
|
async def _display_address(
|
|
ctx: wire.Context,
|
|
address_parameters: messages.CardanoAddressParametersType,
|
|
address: str,
|
|
protocol_magic: int,
|
|
) -> None:
|
|
if should_show_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)
|