mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-02 19:40:57 +00:00
refactor(cardano): shorten identifiers
This commit is contained in:
parent
1ae6b68eaf
commit
2753faa7b0
@ -132,7 +132,7 @@ def cborize_certificate_stake_credential(
|
|||||||
raise RuntimeError
|
raise RuntimeError
|
||||||
|
|
||||||
|
|
||||||
def cborize_initial_pool_registration_certificate_fields(
|
def cborize_pool_registration_certificate_init(
|
||||||
certificate: messages.CardanoTxCertificate,
|
certificate: messages.CardanoTxCertificate,
|
||||||
) -> CborSequence:
|
) -> CborSequence:
|
||||||
assert certificate.type == CardanoCertificateType.STAKE_POOL_REGISTRATION
|
assert certificate.type == CardanoCertificateType.STAKE_POOL_REGISTRATION
|
||||||
|
@ -2,23 +2,21 @@ from trezor import log, messages, wire
|
|||||||
|
|
||||||
from . import seed
|
from . import seed
|
||||||
from .address import derive_human_readable_address, validate_address_parameters
|
from .address import derive_human_readable_address, validate_address_parameters
|
||||||
from .helpers.credential import Credential, should_show_address_credentials
|
from .helpers.credential import Credential, should_show_credentials
|
||||||
from .helpers.utils import validate_network_info
|
from .helpers.utils import validate_network_info
|
||||||
from .layout import show_address_credentials, show_cardano_address
|
from .layout import show_cardano_address, show_credentials
|
||||||
|
|
||||||
|
|
||||||
@seed.with_keychain
|
@seed.with_keychain
|
||||||
async def get_address(
|
async def get_address(
|
||||||
ctx: wire.Context, msg: messages.CardanoGetAddress, keychain: seed.Keychain
|
ctx: wire.Context, msg: messages.CardanoGetAddress, keychain: seed.Keychain
|
||||||
) -> messages.CardanoAddress:
|
) -> messages.CardanoAddress:
|
||||||
address_parameters = msg.address_parameters
|
|
||||||
|
|
||||||
validate_network_info(msg.network_id, msg.protocol_magic)
|
validate_network_info(msg.network_id, msg.protocol_magic)
|
||||||
validate_address_parameters(address_parameters)
|
validate_address_parameters(msg.address_parameters)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
address = derive_human_readable_address(
|
address = derive_human_readable_address(
|
||||||
keychain, address_parameters, msg.protocol_magic, msg.network_id
|
keychain, msg.address_parameters, msg.protocol_magic, msg.network_id
|
||||||
)
|
)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
if __debug__:
|
if __debug__:
|
||||||
@ -26,7 +24,7 @@ async def get_address(
|
|||||||
raise wire.ProcessError("Deriving address failed")
|
raise wire.ProcessError("Deriving address failed")
|
||||||
|
|
||||||
if msg.show_display:
|
if msg.show_display:
|
||||||
await _display_address(ctx, address_parameters, address, msg.protocol_magic)
|
await _display_address(ctx, msg.address_parameters, address, msg.protocol_magic)
|
||||||
|
|
||||||
return messages.CardanoAddress(address=address)
|
return messages.CardanoAddress(address=address)
|
||||||
|
|
||||||
@ -37,8 +35,8 @@ async def _display_address(
|
|||||||
address: str,
|
address: str,
|
||||||
protocol_magic: int,
|
protocol_magic: int,
|
||||||
) -> None:
|
) -> None:
|
||||||
if should_show_address_credentials(address_parameters):
|
if should_show_credentials(address_parameters):
|
||||||
await show_address_credentials(
|
await show_credentials(
|
||||||
ctx,
|
ctx,
|
||||||
Credential.payment_credential(address_parameters),
|
Credential.payment_credential(address_parameters),
|
||||||
Credential.stake_credential(address_parameters),
|
Credential.stake_credential(address_parameters),
|
||||||
|
@ -203,7 +203,7 @@ class Credential:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
def should_show_address_credentials(
|
def should_show_credentials(
|
||||||
address_parameters: messages.CardanoAddressParametersType,
|
address_parameters: messages.CardanoAddressParametersType,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
return not (
|
return not (
|
||||||
|
@ -179,7 +179,7 @@ async def show_script_hash(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_multisig_transaction(ctx: wire.Context) -> None:
|
async def show_multisig_tx(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_signing_mode",
|
"confirm_signing_mode",
|
||||||
@ -190,7 +190,7 @@ async def show_multisig_transaction(ctx: wire.Context) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_plutus_transaction(ctx: wire.Context) -> None:
|
async def show_plutus_tx(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_signing_mode",
|
"confirm_signing_mode",
|
||||||
@ -258,7 +258,7 @@ async def confirm_sending_token(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_address_credentials(
|
async def show_credentials(
|
||||||
ctx: wire.Context,
|
ctx: wire.Context,
|
||||||
payment_credential: Credential,
|
payment_credential: Credential,
|
||||||
stake_credential: Credential,
|
stake_credential: Credential,
|
||||||
@ -348,11 +348,11 @@ async def _show_credential(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_path(ctx: wire.Context, path: list[int], title: str) -> None:
|
async def warn_path(ctx: wire.Context, path: list[int], title: str) -> None:
|
||||||
await confirm_path_warning(ctx, address_n_to_str(path), path_type=title)
|
await confirm_path_warning(ctx, address_n_to_str(path), path_type=title)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_tx_output_contains_tokens(ctx: wire.Context) -> None:
|
async def warn_tx_output_contains_tokens(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_tokens",
|
"confirm_tokens",
|
||||||
@ -363,7 +363,7 @@ async def show_warning_tx_output_contains_tokens(ctx: wire.Context) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_tx_contains_mint(ctx: wire.Context) -> None:
|
async def warn_tx_contains_mint(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_tokens",
|
"confirm_tokens",
|
||||||
@ -374,7 +374,7 @@ async def show_warning_tx_contains_mint(ctx: wire.Context) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_tx_output_contains_datum_hash(
|
async def warn_tx_output_contains_datum_hash(
|
||||||
ctx: wire.Context, datum_hash: bytes
|
ctx: wire.Context, datum_hash: bytes
|
||||||
) -> None:
|
) -> None:
|
||||||
await confirm_properties(
|
await confirm_properties(
|
||||||
@ -392,7 +392,7 @@ async def show_warning_tx_output_contains_datum_hash(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_tx_output_no_datum_hash(ctx: wire.Context) -> None:
|
async def warn_tx_output_no_datum_hash(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_no_datum_hash",
|
"confirm_no_datum_hash",
|
||||||
@ -402,7 +402,7 @@ async def show_warning_tx_output_no_datum_hash(ctx: wire.Context) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_no_script_data_hash(ctx: wire.Context) -> None:
|
async def warn_no_script_data_hash(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_no_script_data_hash",
|
"confirm_no_script_data_hash",
|
||||||
@ -412,7 +412,7 @@ async def show_warning_no_script_data_hash(ctx: wire.Context) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_no_collateral_inputs(ctx: wire.Context) -> None:
|
async def warn_no_collateral_inputs(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"confirm_no_collateral_inputs",
|
"confirm_no_collateral_inputs",
|
||||||
@ -443,7 +443,7 @@ async def confirm_witness_request(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def confirm_transaction(
|
async def confirm_tx(
|
||||||
ctx: wire.Context,
|
ctx: wire.Context,
|
||||||
fee: int,
|
fee: int,
|
||||||
network_id: int,
|
network_id: int,
|
||||||
@ -633,13 +633,13 @@ async def confirm_stake_pool_registration_final(
|
|||||||
async def confirm_withdrawal(
|
async def confirm_withdrawal(
|
||||||
ctx: wire.Context,
|
ctx: wire.Context,
|
||||||
withdrawal: messages.CardanoTxWithdrawal,
|
withdrawal: messages.CardanoTxWithdrawal,
|
||||||
reward_address_bytes: bytes,
|
address_bytes: bytes,
|
||||||
network_id: int,
|
network_id: int,
|
||||||
) -> None:
|
) -> None:
|
||||||
address_type_name = "script reward" if withdrawal.script_hash else "reward"
|
address_type_name = "script reward" if withdrawal.script_hash else "reward"
|
||||||
reward_address = encode_human_readable_address(reward_address_bytes)
|
address = encode_human_readable_address(address_bytes)
|
||||||
props: list[PropertyType] = [
|
props: list[PropertyType] = [
|
||||||
(f"Confirm withdrawal for {address_type_name} address:", reward_address),
|
(f"Confirm withdrawal for {address_type_name} address:", address),
|
||||||
]
|
]
|
||||||
|
|
||||||
if withdrawal.path:
|
if withdrawal.path:
|
||||||
@ -739,7 +739,7 @@ async def confirm_token_minting(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def show_warning_tx_network_unverifiable(ctx: wire.Context) -> None:
|
async def warn_tx_network_unverifiable(ctx: wire.Context) -> None:
|
||||||
await confirm_metadata(
|
await confirm_metadata(
|
||||||
ctx,
|
ctx,
|
||||||
"warning_no_outputs",
|
"warning_no_outputs",
|
||||||
|
@ -32,9 +32,8 @@ def validate_native_script(script: messages.CardanoNativeScript | None) -> None:
|
|||||||
if len(script.key_hash) != ADDRESS_KEY_HASH_SIZE:
|
if len(script.key_hash) != ADDRESS_KEY_HASH_SIZE:
|
||||||
raise INVALID_NATIVE_SCRIPT
|
raise INVALID_NATIVE_SCRIPT
|
||||||
elif script.key_path:
|
elif script.key_path:
|
||||||
if not is_multisig_path(script.key_path) and not SCHEMA_MINT.match(
|
is_minting = SCHEMA_MINT.match(script.key_path)
|
||||||
script.key_path
|
if not is_multisig_path(script.key_path) and not is_minting:
|
||||||
):
|
|
||||||
raise INVALID_NATIVE_SCRIPT
|
raise INVALID_NATIVE_SCRIPT
|
||||||
else:
|
else:
|
||||||
raise INVALID_NATIVE_SCRIPT
|
raise INVALID_NATIVE_SCRIPT
|
||||||
|
@ -20,17 +20,17 @@ class MultisigSigner(Signer):
|
|||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(ctx, msg, keychain)
|
super().__init__(ctx, msg, keychain)
|
||||||
|
|
||||||
def _validate_tx_signing_request(self) -> None:
|
def _validate_tx_init(self) -> None:
|
||||||
super()._validate_tx_signing_request()
|
super()._validate_tx_init()
|
||||||
if (
|
if (
|
||||||
self.msg.collateral_inputs_count != 0
|
self.msg.collateral_inputs_count != 0
|
||||||
or self.msg.required_signers_count != 0
|
or self.msg.required_signers_count != 0
|
||||||
):
|
):
|
||||||
raise wire.ProcessError("Invalid tx signing request")
|
raise wire.ProcessError("Invalid tx signing request")
|
||||||
|
|
||||||
async def _show_tx_signing_request(self) -> None:
|
async def _show_tx_init(self) -> None:
|
||||||
await layout.show_multisig_transaction(self.ctx)
|
await layout.show_multisig_tx(self.ctx)
|
||||||
await super()._show_tx_signing_request()
|
await super()._show_tx_init()
|
||||||
|
|
||||||
async def _confirm_tx(self, tx_hash: bytes) -> None:
|
async def _confirm_tx(self, tx_hash: bytes) -> None:
|
||||||
# super() omitted intentionally
|
# super() omitted intentionally
|
||||||
@ -68,10 +68,10 @@ class MultisigSigner(Signer):
|
|||||||
) -> None:
|
) -> None:
|
||||||
super()._validate_witness_request(witness_request)
|
super()._validate_witness_request(witness_request)
|
||||||
is_minting = SCHEMA_MINT.match(witness_request.path)
|
is_minting = SCHEMA_MINT.match(witness_request.path)
|
||||||
transaction_has_token_minting = self.msg.minting_asset_groups_count > 0
|
tx_has_token_minting = self.msg.minting_asset_groups_count > 0
|
||||||
|
|
||||||
if not (
|
if not (
|
||||||
is_multisig_path(witness_request.path)
|
is_multisig_path(witness_request.path)
|
||||||
or (is_minting and transaction_has_token_minting)
|
or (is_minting and tx_has_token_minting)
|
||||||
):
|
):
|
||||||
raise wire.ProcessError("Invalid witness request")
|
raise wire.ProcessError("Invalid witness request")
|
||||||
|
@ -26,8 +26,8 @@ class OrdinarySigner(Signer):
|
|||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(ctx, msg, keychain)
|
super().__init__(ctx, msg, keychain)
|
||||||
|
|
||||||
def _validate_tx_signing_request(self) -> None:
|
def _validate_tx_init(self) -> None:
|
||||||
super()._validate_tx_signing_request()
|
super()._validate_tx_init()
|
||||||
if (
|
if (
|
||||||
self.msg.collateral_inputs_count != 0
|
self.msg.collateral_inputs_count != 0
|
||||||
or self.msg.required_signers_count != 0
|
or self.msg.required_signers_count != 0
|
||||||
@ -65,12 +65,12 @@ class OrdinarySigner(Signer):
|
|||||||
) -> None:
|
) -> None:
|
||||||
super()._validate_witness_request(witness_request)
|
super()._validate_witness_request(witness_request)
|
||||||
is_minting = SCHEMA_MINT.match(witness_request.path)
|
is_minting = SCHEMA_MINT.match(witness_request.path)
|
||||||
transaction_has_token_minting = self.msg.minting_asset_groups_count > 0
|
tx_has_token_minting = self.msg.minting_asset_groups_count > 0
|
||||||
|
|
||||||
if not (
|
if not (
|
||||||
is_byron_path(witness_request.path)
|
is_byron_path(witness_request.path)
|
||||||
or is_shelley_path(witness_request.path)
|
or is_shelley_path(witness_request.path)
|
||||||
or (is_minting and transaction_has_token_minting)
|
or (is_minting and tx_has_token_minting)
|
||||||
):
|
):
|
||||||
raise wire.ProcessError("Invalid witness request")
|
raise wire.ProcessError("Invalid witness request")
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ from trezor import messages, wire
|
|||||||
from trezor.enums import CardanoCertificateType
|
from trezor.enums import CardanoCertificateType
|
||||||
|
|
||||||
from .. import layout, seed
|
from .. import layout, seed
|
||||||
from ..helpers.credential import Credential, should_show_address_credentials
|
from ..helpers.credential import Credential, should_show_credentials
|
||||||
from ..helpers.paths import SCHEMA_MINT
|
from ..helpers.paths import SCHEMA_MINT
|
||||||
from ..seed import is_multisig_path, is_shelley_path
|
from ..seed import is_multisig_path, is_shelley_path
|
||||||
from .signer import Signer
|
from .signer import Signer
|
||||||
@ -22,22 +22,22 @@ class PlutusSigner(Signer):
|
|||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(ctx, msg, keychain)
|
super().__init__(ctx, msg, keychain)
|
||||||
|
|
||||||
async def _show_tx_signing_request(self) -> None:
|
async def _show_tx_init(self) -> None:
|
||||||
await layout.show_plutus_transaction(self.ctx)
|
await layout.show_plutus_tx(self.ctx)
|
||||||
await super()._show_tx_signing_request()
|
await super()._show_tx_init()
|
||||||
# These items should be present if a Plutus script is to be executed.
|
# These items should be present if a Plutus script is to be executed.
|
||||||
if self.msg.script_data_hash is None:
|
if self.msg.script_data_hash is None:
|
||||||
await layout.show_warning_no_script_data_hash(self.ctx)
|
await layout.warn_no_script_data_hash(self.ctx)
|
||||||
if self.msg.collateral_inputs_count == 0:
|
if self.msg.collateral_inputs_count == 0:
|
||||||
await layout.show_warning_no_collateral_inputs(self.ctx)
|
await layout.warn_no_collateral_inputs(self.ctx)
|
||||||
|
|
||||||
async def _confirm_transaction(self, tx_hash: bytes) -> None:
|
async def _confirm_tx(self, tx_hash: bytes) -> None:
|
||||||
# super() omitted intentionally
|
# super() omitted intentionally
|
||||||
# We display tx hash so that experienced users can compare it to the tx hash
|
# We display tx hash so that experienced users can compare it to the tx hash
|
||||||
# computed by a trusted device (in case the tx contains many items which are
|
# computed by a trusted device (in case the tx contains many items which are
|
||||||
# tedious to check one by one on the Trezor screen).
|
# tedious to check one by one on the Trezor screen).
|
||||||
is_network_id_verifiable = self._is_network_id_verifiable()
|
is_network_id_verifiable = self._is_network_id_verifiable()
|
||||||
await layout.confirm_transaction(
|
await layout.confirm_tx(
|
||||||
self.ctx,
|
self.ctx,
|
||||||
self.msg.fee,
|
self.msg.fee,
|
||||||
self.msg.network_id,
|
self.msg.network_id,
|
||||||
@ -59,7 +59,7 @@ class PlutusSigner(Signer):
|
|||||||
# In ordinary txs, change outputs with matching payment and staking paths can be
|
# In ordinary txs, change outputs with matching payment and staking paths can be
|
||||||
# hidden, but we need to show them in Plutus txs because of the script
|
# hidden, but we need to show them in Plutus txs because of the script
|
||||||
# evaluation. We at least hide the staking path if it matches the payment path.
|
# evaluation. We at least hide the staking path if it matches the payment path.
|
||||||
show_both_credentials = should_show_address_credentials(address_parameters)
|
show_both_credentials = should_show_credentials(address_parameters)
|
||||||
await layout.show_device_owned_output_credentials(
|
await layout.show_device_owned_output_credentials(
|
||||||
self.ctx,
|
self.ctx,
|
||||||
Credential.payment_credential(address_parameters),
|
Credential.payment_credential(address_parameters),
|
||||||
|
@ -27,8 +27,8 @@ class PoolOwnerSigner(Signer):
|
|||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(ctx, msg, keychain)
|
super().__init__(ctx, msg, keychain)
|
||||||
|
|
||||||
def _validate_tx_signing_request(self) -> None:
|
def _validate_tx_init(self) -> None:
|
||||||
super()._validate_tx_signing_request()
|
super()._validate_tx_init()
|
||||||
if (
|
if (
|
||||||
self.msg.certificates_count != 1
|
self.msg.certificates_count != 1
|
||||||
or self.msg.withdrawals_count != 0
|
or self.msg.withdrawals_count != 0
|
||||||
@ -45,7 +45,7 @@ class PoolOwnerSigner(Signer):
|
|||||||
):
|
):
|
||||||
raise wire.ProcessError("Invalid tx signing request")
|
raise wire.ProcessError("Invalid tx signing request")
|
||||||
|
|
||||||
async def _confirm_transaction(self, tx_hash: bytes) -> None:
|
async def _confirm_tx(self, tx_hash: bytes) -> None:
|
||||||
# super() omitted intentionally
|
# super() omitted intentionally
|
||||||
await layout.confirm_stake_pool_registration_final(
|
await layout.confirm_stake_pool_registration_final(
|
||||||
self.ctx,
|
self.ctx,
|
||||||
|
@ -30,9 +30,9 @@ from ..auxiliary_data import (
|
|||||||
from ..certificates import (
|
from ..certificates import (
|
||||||
assert_certificate_cond,
|
assert_certificate_cond,
|
||||||
cborize_certificate,
|
cborize_certificate,
|
||||||
cborize_initial_pool_registration_certificate_fields,
|
|
||||||
cborize_pool_metadata,
|
cborize_pool_metadata,
|
||||||
cborize_pool_owner,
|
cborize_pool_owner,
|
||||||
|
cborize_pool_registration_certificate_init,
|
||||||
cborize_pool_relay,
|
cborize_pool_relay,
|
||||||
validate_certificate,
|
validate_certificate,
|
||||||
validate_pool_owner,
|
validate_pool_owner,
|
||||||
@ -46,7 +46,7 @@ from ..helpers import (
|
|||||||
SCRIPT_DATA_HASH_SIZE,
|
SCRIPT_DATA_HASH_SIZE,
|
||||||
)
|
)
|
||||||
from ..helpers.account_path_check import AccountPathChecker
|
from ..helpers.account_path_check import AccountPathChecker
|
||||||
from ..helpers.credential import Credential, should_show_address_credentials
|
from ..helpers.credential import Credential, should_show_credentials
|
||||||
from ..helpers.hash_builder_collection import HashBuilderDict, HashBuilderList
|
from ..helpers.hash_builder_collection import HashBuilderDict, HashBuilderList
|
||||||
from ..helpers.paths import (
|
from ..helpers.paths import (
|
||||||
CERTIFICATE_PATH_NAME,
|
CERTIFICATE_PATH_NAME,
|
||||||
@ -115,7 +115,7 @@ class Signer:
|
|||||||
self.account_path_checker = AccountPathChecker()
|
self.account_path_checker = AccountPathChecker()
|
||||||
|
|
||||||
# Inputs, outputs and fee are mandatory, count the number of optional fields present.
|
# Inputs, outputs and fee are mandatory, count the number of optional fields present.
|
||||||
tx_body_map_item_count = 3 + sum(
|
tx_dict_items_count = 3 + sum(
|
||||||
(
|
(
|
||||||
msg.ttl is not None,
|
msg.ttl is not None,
|
||||||
msg.certificates_count > 0,
|
msg.certificates_count > 0,
|
||||||
@ -130,17 +130,17 @@ class Signer:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
self.tx_dict: HashBuilderDict[int, Any] = HashBuilderDict(
|
self.tx_dict: HashBuilderDict[int, Any] = HashBuilderDict(
|
||||||
tx_body_map_item_count, wire.ProcessError("Invalid tx signing request")
|
tx_dict_items_count, wire.ProcessError("Invalid tx signing request")
|
||||||
)
|
)
|
||||||
|
|
||||||
async def sign(self) -> None:
|
async def sign(self) -> None:
|
||||||
hash_fn = hashlib.blake2b(outlen=32)
|
hash_fn = hashlib.blake2b(outlen=32)
|
||||||
self.tx_dict.start(hash_fn)
|
self.tx_dict.start(hash_fn)
|
||||||
with self.tx_dict:
|
with self.tx_dict:
|
||||||
await self._processs_tx_signing_request()
|
await self._processs_tx_init()
|
||||||
|
|
||||||
tx_hash = hash_fn.digest()
|
tx_hash = hash_fn.digest()
|
||||||
await self._confirm_transaction(tx_hash)
|
await self._confirm_tx(tx_hash)
|
||||||
|
|
||||||
response_after_witness_requests = await self._process_witness_requests(tx_hash)
|
response_after_witness_requests = await self._process_witness_requests(tx_hash)
|
||||||
await self.ctx.call(response_after_witness_requests, messages.CardanoTxHostAck)
|
await self.ctx.call(response_after_witness_requests, messages.CardanoTxHostAck)
|
||||||
@ -150,9 +150,9 @@ class Signer:
|
|||||||
|
|
||||||
# signing request
|
# signing request
|
||||||
|
|
||||||
async def _processs_tx_signing_request(self) -> None:
|
async def _processs_tx_init(self) -> None:
|
||||||
self._validate_tx_signing_request()
|
self._validate_tx_init()
|
||||||
await self._show_tx_signing_request()
|
await self._show_tx_init()
|
||||||
|
|
||||||
inputs_list: HashBuilderList[tuple[bytes, int]] = HashBuilderList(
|
inputs_list: HashBuilderList[tuple[bytes, int]] = HashBuilderList(
|
||||||
self.msg.inputs_count
|
self.msg.inputs_count
|
||||||
@ -221,14 +221,14 @@ class Signer:
|
|||||||
if self.msg.include_network_id:
|
if self.msg.include_network_id:
|
||||||
self.tx_dict.add(TX_BODY_KEY_NETWORK_ID, self.msg.network_id)
|
self.tx_dict.add(TX_BODY_KEY_NETWORK_ID, self.msg.network_id)
|
||||||
|
|
||||||
def _validate_tx_signing_request(self) -> None:
|
def _validate_tx_init(self) -> None:
|
||||||
if self.msg.fee > LOVELACE_MAX_SUPPLY:
|
if self.msg.fee > LOVELACE_MAX_SUPPLY:
|
||||||
raise wire.ProcessError("Fee is out of range!")
|
raise wire.ProcessError("Fee is out of range!")
|
||||||
validate_network_info(self.msg.network_id, self.msg.protocol_magic)
|
validate_network_info(self.msg.network_id, self.msg.protocol_magic)
|
||||||
|
|
||||||
async def _show_tx_signing_request(self) -> None:
|
async def _show_tx_init(self) -> None:
|
||||||
if not self._is_network_id_verifiable():
|
if not self._is_network_id_verifiable():
|
||||||
await layout.show_warning_tx_network_unverifiable(self.ctx)
|
await layout.warn_tx_network_unverifiable(self.ctx)
|
||||||
|
|
||||||
async def _confirm_tx(self, tx_hash: bytes) -> None:
|
async def _confirm_tx(self, tx_hash: bytes) -> None:
|
||||||
# Final signing confirmation is handled separately in each signing mode.
|
# Final signing confirmation is handled separately in each signing mode.
|
||||||
@ -328,16 +328,14 @@ class Signer:
|
|||||||
return
|
return
|
||||||
|
|
||||||
if output.datum_hash is not None:
|
if output.datum_hash is not None:
|
||||||
await layout.show_warning_tx_output_contains_datum_hash(
|
await layout.warn_tx_output_contains_datum_hash(self.ctx, output.datum_hash)
|
||||||
self.ctx, output.datum_hash
|
|
||||||
)
|
|
||||||
|
|
||||||
address_type = self._get_output_address_type(output)
|
address_type = self._get_output_address_type(output)
|
||||||
if output.datum_hash is None and address_type in ADDRESS_TYPES_PAYMENT_SCRIPT:
|
if output.datum_hash is None and address_type in ADDRESS_TYPES_PAYMENT_SCRIPT:
|
||||||
await layout.show_warning_tx_output_no_datum_hash(self.ctx)
|
await layout.warn_tx_output_no_datum_hash(self.ctx)
|
||||||
|
|
||||||
if output.asset_groups_count > 0:
|
if output.asset_groups_count > 0:
|
||||||
await layout.show_warning_tx_output_contains_tokens(self.ctx)
|
await layout.warn_tx_output_contains_tokens(self.ctx)
|
||||||
|
|
||||||
if output.address_parameters is not None:
|
if output.address_parameters is not None:
|
||||||
address = derive_human_readable_address(
|
address = derive_human_readable_address(
|
||||||
@ -384,7 +382,7 @@ class Signer:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
if output.address_parameters is not None: # change output
|
if output.address_parameters is not None: # change output
|
||||||
if not should_show_address_credentials(output.address_parameters):
|
if not should_show_credentials(output.address_parameters):
|
||||||
# We don't need to display simple address outputs.
|
# We don't need to display simple address outputs.
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -491,9 +489,7 @@ class Signer:
|
|||||||
POOL_REGISTRATION_CERTIFICATE_ITEMS_COUNT
|
POOL_REGISTRATION_CERTIFICATE_ITEMS_COUNT
|
||||||
)
|
)
|
||||||
with certificates_list.append(pool_items_list):
|
with certificates_list.append(pool_items_list):
|
||||||
for item in cborize_initial_pool_registration_certificate_fields(
|
for item in cborize_pool_registration_certificate_init(certificate):
|
||||||
certificate
|
|
||||||
):
|
|
||||||
pool_items_list.append(item)
|
pool_items_list.append(item)
|
||||||
|
|
||||||
pool_owners_list: HashBuilderList[bytes] = HashBuilderList(
|
pool_owners_list: HashBuilderList[bytes] = HashBuilderList(
|
||||||
@ -600,13 +596,11 @@ class Signer:
|
|||||||
messages.CardanoTxItemAck(), messages.CardanoTxWithdrawal
|
messages.CardanoTxItemAck(), messages.CardanoTxWithdrawal
|
||||||
)
|
)
|
||||||
self._validate_withdrawal(withdrawal)
|
self._validate_withdrawal(withdrawal)
|
||||||
reward_address_bytes = self._derive_withdrawal_reward_address_bytes(
|
address_bytes = self._derive_withdrawal_address_bytes(withdrawal)
|
||||||
withdrawal
|
|
||||||
)
|
|
||||||
await layout.confirm_withdrawal(
|
await layout.confirm_withdrawal(
|
||||||
self.ctx, withdrawal, reward_address_bytes, self.msg.network_id
|
self.ctx, withdrawal, address_bytes, self.msg.network_id
|
||||||
)
|
)
|
||||||
withdrawals_dict.add(reward_address_bytes, withdrawal.amount)
|
withdrawals_dict.add(address_bytes, withdrawal.amount)
|
||||||
|
|
||||||
def _validate_withdrawal(self, withdrawal: messages.CardanoTxWithdrawal) -> None:
|
def _validate_withdrawal(self, withdrawal: messages.CardanoTxWithdrawal) -> None:
|
||||||
validate_stake_credential(
|
validate_stake_credential(
|
||||||
@ -656,7 +650,7 @@ class Signer:
|
|||||||
messages.CardanoTxItemAck(), messages.CardanoTxMint
|
messages.CardanoTxItemAck(), messages.CardanoTxMint
|
||||||
)
|
)
|
||||||
|
|
||||||
await layout.show_warning_tx_contains_mint(self.ctx)
|
await layout.warn_tx_contains_mint(self.ctx)
|
||||||
|
|
||||||
for _ in range(token_minting.asset_groups_count):
|
for _ in range(token_minting.asset_groups_count):
|
||||||
asset_group: messages.CardanoAssetGroup = await self.ctx.call(
|
asset_group: messages.CardanoAssetGroup = await self.ctx.call(
|
||||||
@ -832,7 +826,7 @@ class Signer:
|
|||||||
assert output.address is not None # _validate_output
|
assert output.address is not None # _validate_output
|
||||||
return get_address_type(get_address_bytes_unsafe(output.address))
|
return get_address_type(get_address_bytes_unsafe(output.address))
|
||||||
|
|
||||||
def _derive_withdrawal_reward_address_bytes(
|
def _derive_withdrawal_address_bytes(
|
||||||
self, withdrawal: messages.CardanoTxWithdrawal
|
self, withdrawal: messages.CardanoTxWithdrawal
|
||||||
) -> bytes:
|
) -> bytes:
|
||||||
reward_address_type = (
|
reward_address_type = (
|
||||||
@ -888,7 +882,7 @@ class Signer:
|
|||||||
if safety_checks.is_strict():
|
if safety_checks.is_strict():
|
||||||
raise wire.DataError(f"Invalid {path_name.lower()}")
|
raise wire.DataError(f"Invalid {path_name.lower()}")
|
||||||
else:
|
else:
|
||||||
await layout.show_warning_path(self.ctx, path, path_name)
|
await layout.warn_path(self.ctx, path, path_name)
|
||||||
|
|
||||||
def _fail_if_strict_and_unusual(
|
def _fail_if_strict_and_unusual(
|
||||||
self, address_parameters: messages.CardanoAddressParametersType
|
self, address_parameters: messages.CardanoAddressParametersType
|
||||||
|
Loading…
Reference in New Issue
Block a user