diff --git a/common/protob/messages-cardano.proto b/common/protob/messages-cardano.proto index b1331beee92..403b220551d 100644 --- a/common/protob/messages-cardano.proto +++ b/common/protob/messages-cardano.proto @@ -56,6 +56,7 @@ enum CardanoCertificateType { STAKE_DEREGISTRATION = 1; STAKE_DELEGATION = 2; STAKE_POOL_REGISTRATION = 3; + STAKE_REGISTRATION_CONWAY = 7; } enum CardanoPoolRelayType { @@ -346,6 +347,7 @@ message CardanoTxCertificate { optional CardanoPoolParametersType pool_parameters = 4; // used for stake pool registration certificate optional bytes script_hash = 5; // stake credential script hash optional bytes key_hash = 6; // stake credential key hash + optional uint64 coins = 7; // used for stake key registration certificate } /** diff --git a/common/tests/fixtures/cardano/sign_tx.json b/common/tests/fixtures/cardano/sign_tx.json index 26cfa63af11..a636b86df2a 100644 --- a/common/tests/fixtures/cardano/sign_tx.json +++ b/common/tests/fixtures/cardano/sign_tx.json @@ -662,6 +662,59 @@ ] } }, + { + "description": "transaction with conway stake registration certificate", + "parameters": { + "protocol_magic": 764824073, + "network_id": 1, + "fee": 42, + "ttl": 10, + "validity_interval_start": null, + "certificates": [ + { + "type": 7, + "path": "m/1852'/1815'/0'/2/0", + "coins": 2000000 + } + ], + "withdrawals": [], + "auxiliary_data": null, + "inputs": [ + { + "path": "m/1852'/1815'/0'/0/0", + "prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7", + "prev_index": 0 + } + ], + "outputs": [ + { + "address": "addr1q84sh2j72ux0l03fxndjnhctdg7hcppsaejafsa84vh7lwgmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsd5tq5r", + "amount": "1" + } + ], + "mint": [], + "script_data_hash": null, + "collateral_inputs": [], + "required_signers": [], + "collateral_return": null, + "total_collateral": null, + "reference_inputs": [], + "signing_mode": "ORDINARY_TRANSACTION", + "additional_witness_requests": [], + "include_network_id": false + }, + "result": { + "tx_hash": "e200b2c91f3493a1f3b9cfc8b6c141f70181741025e53941e9d57d22b1470c5c", + "witnesses": [ + { + "type": 1, + "pub_key": "5d010cf16fdeff40955633d6c565f3844a288a24967cf6b76acbeb271b4f13c1", + "signature": "79a357517a08c7256b0fab1e93a92a477386f4c2d72cea7bc68527c0133c32472305f010350665d72e8017bb6c2080b5742680ce7700bbddda561c917f294a07", + "chain_code": null + } + ] + } + }, { "description": "transaction with stake registration certificate (no outputs)", "parameters": { diff --git a/core/src/apps/cardano/certificates.py b/core/src/apps/cardano/certificates.py index 2c116860c0e..18003c299b1 100644 --- a/core/src/apps/cardano/certificates.py +++ b/core/src/apps/cardano/certificates.py @@ -42,6 +42,7 @@ def validate( if certificate.type in ( CCT.STAKE_DELEGATION, CCT.STAKE_REGISTRATION, + CCT.STAKE_REGISTRATION_CONWAY, CCT.STAKE_DEREGISTRATION, ): validate_stake_credential( @@ -68,17 +69,20 @@ def validate( def _validate_structure(certificate: messages.CardanoTxCertificate) -> None: pool = certificate.pool # local_cache_attribute pool_parameters = certificate.pool_parameters # local_cache_attribute + coins = certificate.coins CCT = CardanoCertificateType # local_cache_global fields_to_be_empty: dict[CCT, tuple[Any, ...]] = { - CCT.STAKE_REGISTRATION: (pool, pool_parameters), - CCT.STAKE_DELEGATION: (pool_parameters,), - CCT.STAKE_DEREGISTRATION: (pool, pool_parameters), + CCT.STAKE_REGISTRATION: (pool, pool_parameters, coins), + CCT.STAKE_REGISTRATION_CONWAY: (pool, pool_parameters), + CCT.STAKE_DELEGATION: (pool_parameters, coins), + CCT.STAKE_DEREGISTRATION: (pool, pool_parameters, coins), CCT.STAKE_POOL_REGISTRATION: ( certificate.path, certificate.script_hash, certificate.key_hash, pool, + coins, ), } @@ -106,6 +110,17 @@ def cborize( certificate.key_hash, ), ) + elif cert_type == CardanoCertificateType.STAKE_REGISTRATION_CONWAY: + return ( + cert_type, + cborize_stake_credential( + keychain, + certificate.path, + certificate.script_hash, + certificate.key_hash, + ), + certificate.coins, + ) elif cert_type == CardanoCertificateType.STAKE_DELEGATION: return ( cert_type, diff --git a/core/src/apps/cardano/layout.py b/core/src/apps/cardano/layout.py index aa95efa8eb3..6c56242dc36 100644 --- a/core/src/apps/cardano/layout.py +++ b/core/src/apps/cardano/layout.py @@ -58,6 +58,7 @@ CERTIFICATE_TYPE_NAMES = { CardanoCertificateType.STAKE_REGISTRATION: "Stake key registration", + CardanoCertificateType.STAKE_REGISTRATION_CONWAY: "Stake key registration with deposit", CardanoCertificateType.STAKE_DEREGISTRATION: "Stake key deregistration", CardanoCertificateType.STAKE_DELEGATION: "Stake delegation", CardanoCertificateType.STAKE_POOL_REGISTRATION: "Stakepool registration", @@ -532,7 +533,9 @@ async def confirm_tx( ) -async def confirm_certificate(certificate: messages.CardanoTxCertificate) -> None: +async def confirm_certificate( + certificate: messages.CardanoTxCertificate, network_id: int +) -> None: # stake pool registration requires custom confirmation logic not covered # in this call assert certificate.type != CardanoCertificateType.STAKE_POOL_REGISTRATION @@ -547,6 +550,9 @@ async def confirm_certificate(certificate: messages.CardanoTxCertificate) -> Non if certificate.type == CardanoCertificateType.STAKE_DELEGATION: assert certificate.pool is not None # validate_certificate props.append(("to pool:", format_stake_pool_id(certificate.pool))) + elif certificate.type == CardanoCertificateType.STAKE_REGISTRATION_CONWAY: + assert certificate.coins is not None + props.append(("deposit:", format_coin_amount(certificate.coins, network_id))) await confirm_properties( "confirm_certificate", diff --git a/core/src/apps/cardano/sign_tx/signer.py b/core/src/apps/cardano/sign_tx/signer.py index 9627c87365b..a4381a95199 100644 --- a/core/src/apps/cardano/sign_tx/signer.py +++ b/core/src/apps/cardano/sign_tx/signer.py @@ -727,7 +727,7 @@ async def _show_certificate( certificate.pool_parameters.metadata ) else: - await layout.confirm_certificate(certificate) + await layout.confirm_certificate(certificate, self.msg.network_id) # pool owners diff --git a/core/src/trezor/enums/CardanoCertificateType.py b/core/src/trezor/enums/CardanoCertificateType.py index 4b7d2412024..e9db11aedcb 100644 --- a/core/src/trezor/enums/CardanoCertificateType.py +++ b/core/src/trezor/enums/CardanoCertificateType.py @@ -6,3 +6,4 @@ STAKE_DEREGISTRATION = 1 STAKE_DELEGATION = 2 STAKE_POOL_REGISTRATION = 3 +STAKE_REGISTRATION_CONWAY = 7 diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py index d2c31237c96..fd9bd8d7451 100644 --- a/core/src/trezor/enums/__init__.py +++ b/core/src/trezor/enums/__init__.py @@ -378,6 +378,7 @@ class CardanoCertificateType(IntEnum): STAKE_DEREGISTRATION = 1 STAKE_DELEGATION = 2 STAKE_POOL_REGISTRATION = 3 + STAKE_REGISTRATION_CONWAY = 7 class CardanoPoolRelayType(IntEnum): SINGLE_HOST_IP = 0 diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py index efe61ba8059..390eaad72cc 100644 --- a/core/src/trezor/messages.py +++ b/core/src/trezor/messages.py @@ -1617,6 +1617,7 @@ class CardanoTxCertificate(protobuf.MessageType): pool_parameters: "CardanoPoolParametersType | None" script_hash: "bytes | None" key_hash: "bytes | None" + coins: "int | None" def __init__( self, @@ -1627,6 +1628,7 @@ def __init__( pool_parameters: "CardanoPoolParametersType | None" = None, script_hash: "bytes | None" = None, key_hash: "bytes | None" = None, + coins: "int | None" = None, ) -> None: pass diff --git a/python/src/trezorlib/cardano.py b/python/src/trezorlib/cardano.py index 2ff367cc1ab..c1e9d96768a 100644 --- a/python/src/trezorlib/cardano.py +++ b/python/src/trezorlib/cardano.py @@ -420,6 +420,24 @@ def parse_certificate(certificate: dict) -> CertificateWithPoolOwnersAndRelays: ), None, ) + elif certificate_type == messages.CardanoCertificateType.STAKE_REGISTRATION_CONWAY: + if "coins" not in certificate: + raise CERTIFICATE_MISSING_FIELDS_ERROR + + path, script_hash, key_hash = _parse_credential( + certificate, CERTIFICATE_MISSING_FIELDS_ERROR + ) + + return ( + messages.CardanoTxCertificate( + type=certificate_type, + path=path, + script_hash=script_hash, + key_hash=key_hash, + coins=int(certificate["coins"]), + ), + None, + ) elif certificate_type == messages.CardanoCertificateType.STAKE_POOL_REGISTRATION: pool_parameters = certificate["pool_parameters"] diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py index adabfc2be67..8b26a8bb749 100644 --- a/python/src/trezorlib/messages.py +++ b/python/src/trezorlib/messages.py @@ -400,6 +400,7 @@ class CardanoCertificateType(IntEnum): STAKE_DEREGISTRATION = 1 STAKE_DELEGATION = 2 STAKE_POOL_REGISTRATION = 3 + STAKE_REGISTRATION_CONWAY = 7 class CardanoPoolRelayType(IntEnum): @@ -2631,6 +2632,7 @@ class CardanoTxCertificate(protobuf.MessageType): 4: protobuf.Field("pool_parameters", "CardanoPoolParametersType", repeated=False, required=False, default=None), 5: protobuf.Field("script_hash", "bytes", repeated=False, required=False, default=None), 6: protobuf.Field("key_hash", "bytes", repeated=False, required=False, default=None), + 7: protobuf.Field("coins", "uint64", repeated=False, required=False, default=None), } def __init__( @@ -2642,6 +2644,7 @@ def __init__( pool_parameters: Optional["CardanoPoolParametersType"] = None, script_hash: Optional["bytes"] = None, key_hash: Optional["bytes"] = None, + coins: Optional["int"] = None, ) -> None: self.path: Sequence["int"] = path if path is not None else [] self.type = type @@ -2649,6 +2652,7 @@ def __init__( self.pool_parameters = pool_parameters self.script_hash = script_hash self.key_hash = key_hash + self.coins = coins class CardanoTxWithdrawal(protobuf.MessageType): diff --git a/rust/trezor-client/src/protos/generated/messages_cardano.rs b/rust/trezor-client/src/protos/generated/messages_cardano.rs index 7142a9a4b45..f6c77fded80 100644 --- a/rust/trezor-client/src/protos/generated/messages_cardano.rs +++ b/rust/trezor-client/src/protos/generated/messages_cardano.rs @@ -5911,6 +5911,8 @@ pub struct CardanoTxCertificate { pub script_hash: ::std::option::Option<::std::vec::Vec>, // @@protoc_insertion_point(field:hw.trezor.messages.cardano.CardanoTxCertificate.key_hash) pub key_hash: ::std::option::Option<::std::vec::Vec>, + // @@protoc_insertion_point(field:hw.trezor.messages.cardano.CardanoTxCertificate.coins) + pub coins: ::std::option::Option, // special fields // @@protoc_insertion_point(special_field:hw.trezor.messages.cardano.CardanoTxCertificate.special_fields) pub special_fields: ::protobuf::SpecialFields, @@ -6057,8 +6059,27 @@ impl CardanoTxCertificate { self.key_hash.take().unwrap_or_else(|| ::std::vec::Vec::new()) } + // optional uint64 coins = 7; + + pub fn coins(&self) -> u64 { + self.coins.unwrap_or(0) + } + + pub fn clear_coins(&mut self) { + self.coins = ::std::option::Option::None; + } + + pub fn has_coins(&self) -> bool { + self.coins.is_some() + } + + // Param is passed by value, moved + pub fn set_coins(&mut self, v: u64) { + self.coins = ::std::option::Option::Some(v); + } + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { - let mut fields = ::std::vec::Vec::with_capacity(6); + let mut fields = ::std::vec::Vec::with_capacity(7); let mut oneofs = ::std::vec::Vec::with_capacity(0); fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>( "type", @@ -6090,6 +6111,11 @@ impl CardanoTxCertificate { |m: &CardanoTxCertificate| { &m.key_hash }, |m: &mut CardanoTxCertificate| { &mut m.key_hash }, )); + fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>( + "coins", + |m: &CardanoTxCertificate| { &m.coins }, + |m: &mut CardanoTxCertificate| { &mut m.coins }, + )); ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( "CardanoTxCertificate", fields, @@ -6137,6 +6163,9 @@ impl ::protobuf::Message for CardanoTxCertificate { 50 => { self.key_hash = ::std::option::Option::Some(is.read_bytes()?); }, + 56 => { + self.coins = ::std::option::Option::Some(is.read_uint64()?); + }, tag => { ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; }, @@ -6168,6 +6197,9 @@ impl ::protobuf::Message for CardanoTxCertificate { if let Some(v) = self.key_hash.as_ref() { my_size += ::protobuf::rt::bytes_size(6, &v); } + if let Some(v) = self.coins { + my_size += ::protobuf::rt::uint64_size(7, v); + } my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); self.special_fields.cached_size().set(my_size as u32); my_size @@ -6192,6 +6224,9 @@ impl ::protobuf::Message for CardanoTxCertificate { if let Some(v) = self.key_hash.as_ref() { os.write_bytes(6, v)?; } + if let Some(v) = self.coins { + os.write_uint64(7, v)?; + } os.write_unknown_fields(self.special_fields.unknown_fields())?; ::std::result::Result::Ok(()) } @@ -6215,6 +6250,7 @@ impl ::protobuf::Message for CardanoTxCertificate { self.pool_parameters.clear(); self.script_hash = ::std::option::Option::None; self.key_hash = ::std::option::Option::None; + self.coins = ::std::option::Option::None; self.special_fields.clear(); } @@ -6226,6 +6262,7 @@ impl ::protobuf::Message for CardanoTxCertificate { pool_parameters: ::protobuf::MessageField::none(), script_hash: ::std::option::Option::None, key_hash: ::std::option::Option::None, + coins: ::std::option::Option::None, special_fields: ::protobuf::SpecialFields::new(), }; &instance @@ -9546,6 +9583,8 @@ pub enum CardanoCertificateType { STAKE_DELEGATION = 2, // @@protoc_insertion_point(enum_value:hw.trezor.messages.cardano.CardanoCertificateType.STAKE_POOL_REGISTRATION) STAKE_POOL_REGISTRATION = 3, + // @@protoc_insertion_point(enum_value:hw.trezor.messages.cardano.CardanoCertificateType.STAKE_REGISTRATION_CONWAY) + STAKE_REGISTRATION_CONWAY = 7, } impl ::protobuf::Enum for CardanoCertificateType { @@ -9561,6 +9600,7 @@ impl ::protobuf::Enum for CardanoCertificateType { 1 => ::std::option::Option::Some(CardanoCertificateType::STAKE_DEREGISTRATION), 2 => ::std::option::Option::Some(CardanoCertificateType::STAKE_DELEGATION), 3 => ::std::option::Option::Some(CardanoCertificateType::STAKE_POOL_REGISTRATION), + 7 => ::std::option::Option::Some(CardanoCertificateType::STAKE_REGISTRATION_CONWAY), _ => ::std::option::Option::None } } @@ -9570,6 +9610,7 @@ impl ::protobuf::Enum for CardanoCertificateType { CardanoCertificateType::STAKE_DEREGISTRATION, CardanoCertificateType::STAKE_DELEGATION, CardanoCertificateType::STAKE_POOL_REGISTRATION, + CardanoCertificateType::STAKE_REGISTRATION_CONWAY, ]; } @@ -9580,7 +9621,13 @@ impl ::protobuf::EnumFull for CardanoCertificateType { } fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor { - let index = *self as usize; + let index = match self { + CardanoCertificateType::STAKE_REGISTRATION => 0, + CardanoCertificateType::STAKE_DEREGISTRATION => 1, + CardanoCertificateType::STAKE_DELEGATION => 2, + CardanoCertificateType::STAKE_POOL_REGISTRATION => 3, + CardanoCertificateType::STAKE_REGISTRATION_CONWAY => 4, + }; Self::enum_descriptor().value_by_index(index) } } @@ -9981,78 +10028,80 @@ static file_descriptor_proto_data: &'static [u8] = b"\ unt\x18\x07\x20\x02(\tR\rrewardAccount\x12O\n\x08metadata\x18\n\x20\x01(\ \x0b23.hw.trezor.messages.cardano.CardanoPoolMetadataTypeR\x08metadata\ \x12!\n\x0cowners_count\x18\x0b\x20\x02(\rR\x0bownersCount\x12!\n\x0crel\ - ays_count\x18\x0c\x20\x02(\rR\x0brelaysCount\"\xa2\x02\n\x14CardanoTxCer\ + ays_count\x18\x0c\x20\x02(\rR\x0brelaysCount\"\xb8\x02\n\x14CardanoTxCer\ tificate\x12F\n\x04type\x18\x01\x20\x02(\x0e22.hw.trezor.messages.cardan\ o.CardanoCertificateTypeR\x04type\x12\x12\n\x04path\x18\x02\x20\x03(\rR\ \x04path\x12\x12\n\x04pool\x18\x03\x20\x01(\x0cR\x04pool\x12^\n\x0fpool_\ parameters\x18\x04\x20\x01(\x0b25.hw.trezor.messages.cardano.CardanoPool\ ParametersTypeR\x0epoolParameters\x12\x1f\n\x0bscript_hash\x18\x05\x20\ \x01(\x0cR\nscriptHash\x12\x19\n\x08key_hash\x18\x06\x20\x01(\x0cR\x07ke\ - yHash\"}\n\x13CardanoTxWithdrawal\x12\x12\n\x04path\x18\x01\x20\x03(\rR\ - \x04path\x12\x16\n\x06amount\x18\x02\x20\x02(\x04R\x06amount\x12\x1f\n\ - \x0bscript_hash\x18\x03\x20\x01(\x0cR\nscriptHash\x12\x19\n\x08key_hash\ - \x18\x04\x20\x01(\x0cR\x07keyHash\"d\n\"CardanoCVoteRegistrationDelegati\ - on\x12&\n\x0fvote_public_key\x18\x01\x20\x02(\x0cR\rvotePublicKey\x12\ - \x16\n\x06weight\x18\x02\x20\x02(\rR\x06weight\"\x8e\x04\n&CardanoCVoteR\ - egistrationParametersType\x12&\n\x0fvote_public_key\x18\x01\x20\x01(\x0c\ - R\rvotePublicKey\x12!\n\x0cstaking_path\x18\x02\x20\x03(\rR\x0bstakingPa\ - th\x12v\n\x1apayment_address_parameters\x18\x03\x20\x01(\x0b28.hw.trezor\ - .messages.cardano.CardanoAddressParametersTypeR\x18paymentAddressParamet\ - ers\x12\x14\n\x05nonce\x18\x04\x20\x02(\x04R\x05nonce\x12Y\n\x06format\ - \x18\x05\x20\x01(\x0e2:.hw.trezor.messages.cardano.CardanoCVoteRegistrat\ - ionFormat:\x05CIP15R\x06format\x12`\n\x0bdelegations\x18\x06\x20\x03(\ - \x0b2>.hw.trezor.messages.cardano.CardanoCVoteRegistrationDelegationR\ - \x0bdelegations\x12%\n\x0evoting_purpose\x18\x07\x20\x01(\x04R\rvotingPu\ - rpose\x12'\n\x0fpayment_address\x18\x08\x20\x01(\tR\x0epaymentAddress\"\ - \xb5\x01\n\x16CardanoTxAuxiliaryData\x12\x86\x01\n\x1dcvote_registration\ - _parameters\x18\x01\x20\x01(\x0b2B.hw.trezor.messages.cardano.CardanoCVo\ - teRegistrationParametersTypeR\x1bcvoteRegistrationParameters\x12\x12\n\ - \x04hash\x18\x02\x20\x01(\x0cR\x04hash\"=\n\rCardanoTxMint\x12,\n\x12ass\ - et_groups_count\x18\x01\x20\x02(\rR\x10assetGroupsCount\"V\n\x18CardanoT\ - xCollateralInput\x12\x1b\n\tprev_hash\x18\x01\x20\x02(\x0cR\x08prevHash\ - \x12\x1d\n\nprev_index\x18\x02\x20\x02(\rR\tprevIndex\"O\n\x17CardanoTxR\ - equiredSigner\x12\x19\n\x08key_hash\x18\x01\x20\x01(\x0cR\x07keyHash\x12\ - \x19\n\x08key_path\x18\x02\x20\x03(\rR\x07keyPath\"U\n\x17CardanoTxRefer\ - enceInput\x12\x1b\n\tprev_hash\x18\x01\x20\x02(\x0cR\x08prevHash\x12\x1d\ - \n\nprev_index\x18\x02\x20\x02(\rR\tprevIndex\"\x12\n\x10CardanoTxItemAc\ - k\"\xea\x01\n\x20CardanoTxAuxiliaryDataSupplement\x12T\n\x04type\x18\x01\ - \x20\x02(\x0e2@.hw.trezor.messages.cardano.CardanoTxAuxiliaryDataSupplem\ - entTypeR\x04type\x12.\n\x13auxiliary_data_hash\x18\x02\x20\x01(\x0cR\x11\ - auxiliaryDataHash\x12@\n\x1ccvote_registration_signature\x18\x03\x20\x01\ - (\x0cR\x1acvoteRegistrationSignature\"-\n\x17CardanoTxWitnessRequest\x12\ - \x12\n\x04path\x18\x01\x20\x03(\rR\x04path\"\xb6\x01\n\x18CardanoTxWitne\ - ssResponse\x12D\n\x04type\x18\x01\x20\x02(\x0e20.hw.trezor.messages.card\ - ano.CardanoTxWitnessTypeR\x04type\x12\x17\n\x07pub_key\x18\x02\x20\x02(\ - \x0cR\x06pubKey\x12\x1c\n\tsignature\x18\x03\x20\x02(\x0cR\tsignature\ - \x12\x1d\n\nchain_code\x18\x04\x20\x01(\x0cR\tchainCode\"\x12\n\x10Carda\ - noTxHostAck\",\n\x11CardanoTxBodyHash\x12\x17\n\x07tx_hash\x18\x01\x20\ - \x02(\x0cR\x06txHash\"\x17\n\x15CardanoSignTxFinished*B\n\x15CardanoDeri\ - vationType\x12\n\n\x06LEDGER\x10\0\x12\n\n\x06ICARUS\x10\x01\x12\x11\n\r\ - ICARUS_TREZOR\x10\x02*\xd2\x01\n\x12CardanoAddressType\x12\x08\n\x04BASE\ - \x10\0\x12\x13\n\x0fBASE_SCRIPT_KEY\x10\x01\x12\x13\n\x0fBASE_KEY_SCRIPT\ - \x10\x02\x12\x16\n\x12BASE_SCRIPT_SCRIPT\x10\x03\x12\x0b\n\x07POINTER\ - \x10\x04\x12\x12\n\x0ePOINTER_SCRIPT\x10\x05\x12\x0e\n\nENTERPRISE\x10\ - \x06\x12\x15\n\x11ENTERPRISE_SCRIPT\x10\x07\x12\t\n\x05BYRON\x10\x08\x12\ - \n\n\x06REWARD\x10\x0e\x12\x11\n\rREWARD_SCRIPT\x10\x0f*o\n\x17CardanoNa\ - tiveScriptType\x12\x0b\n\x07PUB_KEY\x10\0\x12\x07\n\x03ALL\x10\x01\x12\ - \x07\n\x03ANY\x10\x02\x12\n\n\x06N_OF_K\x10\x03\x12\x12\n\x0eINVALID_BEF\ - ORE\x10\x04\x12\x15\n\x11INVALID_HEREAFTER\x10\x05*K\n$CardanoNativeScri\ - ptHashDisplayFormat\x12\x08\n\x04HIDE\x10\0\x12\n\n\x06BECH32\x10\x01\ - \x12\r\n\tPOLICY_ID\x10\x02*G\n\"CardanoTxOutputSerializationFormat\x12\ - \x10\n\x0cARRAY_LEGACY\x10\0\x12\x0f\n\x0bMAP_BABBAGE\x10\x01*}\n\x16Car\ - danoCertificateType\x12\x16\n\x12STAKE_REGISTRATION\x10\0\x12\x18\n\x14S\ - TAKE_DEREGISTRATION\x10\x01\x12\x14\n\x10STAKE_DELEGATION\x10\x02\x12\ - \x1b\n\x17STAKE_POOL_REGISTRATION\x10\x03*X\n\x14CardanoPoolRelayType\ - \x12\x12\n\x0eSINGLE_HOST_IP\x10\0\x12\x14\n\x10SINGLE_HOST_NAME\x10\x01\ - \x12\x16\n\x12MULTIPLE_HOST_NAME\x10\x02*R\n$CardanoTxAuxiliaryDataSuppl\ - ementType\x12\x08\n\x04NONE\x10\0\x12\x20\n\x1cCVOTE_REGISTRATION_SIGNAT\ - URE\x10\x01*6\n\x1eCardanoCVoteRegistrationFormat\x12\t\n\x05CIP15\x10\0\ - \x12\t\n\x05CIP36\x10\x01*\x82\x01\n\x14CardanoTxSigningMode\x12\x18\n\ - \x14ORDINARY_TRANSACTION\x10\0\x12\x1e\n\x1aPOOL_REGISTRATION_AS_OWNER\ - \x10\x01\x12\x18\n\x14MULTISIG_TRANSACTION\x10\x02\x12\x16\n\x12PLUTUS_T\ - RANSACTION\x10\x03*>\n\x14CardanoTxWitnessType\x12\x11\n\rBYRON_WITNESS\ - \x10\0\x12\x13\n\x0fSHELLEY_WITNESS\x10\x01B;\n#com.satoshilabs.trezor.l\ - ib.protobufB\x14TrezorMessageCardano\ + yHash\x12\x14\n\x05coins\x18\x07\x20\x01(\x04R\x05coins\"}\n\x13CardanoT\ + xWithdrawal\x12\x12\n\x04path\x18\x01\x20\x03(\rR\x04path\x12\x16\n\x06a\ + mount\x18\x02\x20\x02(\x04R\x06amount\x12\x1f\n\x0bscript_hash\x18\x03\ + \x20\x01(\x0cR\nscriptHash\x12\x19\n\x08key_hash\x18\x04\x20\x01(\x0cR\ + \x07keyHash\"d\n\"CardanoCVoteRegistrationDelegation\x12&\n\x0fvote_publ\ + ic_key\x18\x01\x20\x02(\x0cR\rvotePublicKey\x12\x16\n\x06weight\x18\x02\ + \x20\x02(\rR\x06weight\"\x8e\x04\n&CardanoCVoteRegistrationParametersTyp\ + e\x12&\n\x0fvote_public_key\x18\x01\x20\x01(\x0cR\rvotePublicKey\x12!\n\ + \x0cstaking_path\x18\x02\x20\x03(\rR\x0bstakingPath\x12v\n\x1apayment_ad\ + dress_parameters\x18\x03\x20\x01(\x0b28.hw.trezor.messages.cardano.Carda\ + noAddressParametersTypeR\x18paymentAddressParameters\x12\x14\n\x05nonce\ + \x18\x04\x20\x02(\x04R\x05nonce\x12Y\n\x06format\x18\x05\x20\x01(\x0e2:.\ + hw.trezor.messages.cardano.CardanoCVoteRegistrationFormat:\x05CIP15R\x06\ + format\x12`\n\x0bdelegations\x18\x06\x20\x03(\x0b2>.hw.trezor.messages.c\ + ardano.CardanoCVoteRegistrationDelegationR\x0bdelegations\x12%\n\x0evoti\ + ng_purpose\x18\x07\x20\x01(\x04R\rvotingPurpose\x12'\n\x0fpayment_addres\ + s\x18\x08\x20\x01(\tR\x0epaymentAddress\"\xb5\x01\n\x16CardanoTxAuxiliar\ + yData\x12\x86\x01\n\x1dcvote_registration_parameters\x18\x01\x20\x01(\ + \x0b2B.hw.trezor.messages.cardano.CardanoCVoteRegistrationParametersType\ + R\x1bcvoteRegistrationParameters\x12\x12\n\x04hash\x18\x02\x20\x01(\x0cR\ + \x04hash\"=\n\rCardanoTxMint\x12,\n\x12asset_groups_count\x18\x01\x20\ + \x02(\rR\x10assetGroupsCount\"V\n\x18CardanoTxCollateralInput\x12\x1b\n\ + \tprev_hash\x18\x01\x20\x02(\x0cR\x08prevHash\x12\x1d\n\nprev_index\x18\ + \x02\x20\x02(\rR\tprevIndex\"O\n\x17CardanoTxRequiredSigner\x12\x19\n\ + \x08key_hash\x18\x01\x20\x01(\x0cR\x07keyHash\x12\x19\n\x08key_path\x18\ + \x02\x20\x03(\rR\x07keyPath\"U\n\x17CardanoTxReferenceInput\x12\x1b\n\tp\ + rev_hash\x18\x01\x20\x02(\x0cR\x08prevHash\x12\x1d\n\nprev_index\x18\x02\ + \x20\x02(\rR\tprevIndex\"\x12\n\x10CardanoTxItemAck\"\xea\x01\n\x20Carda\ + noTxAuxiliaryDataSupplement\x12T\n\x04type\x18\x01\x20\x02(\x0e2@.hw.tre\ + zor.messages.cardano.CardanoTxAuxiliaryDataSupplementTypeR\x04type\x12.\ + \n\x13auxiliary_data_hash\x18\x02\x20\x01(\x0cR\x11auxiliaryDataHash\x12\ + @\n\x1ccvote_registration_signature\x18\x03\x20\x01(\x0cR\x1acvoteRegist\ + rationSignature\"-\n\x17CardanoTxWitnessRequest\x12\x12\n\x04path\x18\ + \x01\x20\x03(\rR\x04path\"\xb6\x01\n\x18CardanoTxWitnessResponse\x12D\n\ + \x04type\x18\x01\x20\x02(\x0e20.hw.trezor.messages.cardano.CardanoTxWitn\ + essTypeR\x04type\x12\x17\n\x07pub_key\x18\x02\x20\x02(\x0cR\x06pubKey\ + \x12\x1c\n\tsignature\x18\x03\x20\x02(\x0cR\tsignature\x12\x1d\n\nchain_\ + code\x18\x04\x20\x01(\x0cR\tchainCode\"\x12\n\x10CardanoTxHostAck\",\n\ + \x11CardanoTxBodyHash\x12\x17\n\x07tx_hash\x18\x01\x20\x02(\x0cR\x06txHa\ + sh\"\x17\n\x15CardanoSignTxFinished*B\n\x15CardanoDerivationType\x12\n\n\ + \x06LEDGER\x10\0\x12\n\n\x06ICARUS\x10\x01\x12\x11\n\rICARUS_TREZOR\x10\ + \x02*\xd2\x01\n\x12CardanoAddressType\x12\x08\n\x04BASE\x10\0\x12\x13\n\ + \x0fBASE_SCRIPT_KEY\x10\x01\x12\x13\n\x0fBASE_KEY_SCRIPT\x10\x02\x12\x16\ + \n\x12BASE_SCRIPT_SCRIPT\x10\x03\x12\x0b\n\x07POINTER\x10\x04\x12\x12\n\ + \x0ePOINTER_SCRIPT\x10\x05\x12\x0e\n\nENTERPRISE\x10\x06\x12\x15\n\x11EN\ + TERPRISE_SCRIPT\x10\x07\x12\t\n\x05BYRON\x10\x08\x12\n\n\x06REWARD\x10\ + \x0e\x12\x11\n\rREWARD_SCRIPT\x10\x0f*o\n\x17CardanoNativeScriptType\x12\ + \x0b\n\x07PUB_KEY\x10\0\x12\x07\n\x03ALL\x10\x01\x12\x07\n\x03ANY\x10\ + \x02\x12\n\n\x06N_OF_K\x10\x03\x12\x12\n\x0eINVALID_BEFORE\x10\x04\x12\ + \x15\n\x11INVALID_HEREAFTER\x10\x05*K\n$CardanoNativeScriptHashDisplayFo\ + rmat\x12\x08\n\x04HIDE\x10\0\x12\n\n\x06BECH32\x10\x01\x12\r\n\tPOLICY_I\ + D\x10\x02*G\n\"CardanoTxOutputSerializationFormat\x12\x10\n\x0cARRAY_LEG\ + ACY\x10\0\x12\x0f\n\x0bMAP_BABBAGE\x10\x01*\x9c\x01\n\x16CardanoCertific\ + ateType\x12\x16\n\x12STAKE_REGISTRATION\x10\0\x12\x18\n\x14STAKE_DEREGIS\ + TRATION\x10\x01\x12\x14\n\x10STAKE_DELEGATION\x10\x02\x12\x1b\n\x17STAKE\ + _POOL_REGISTRATION\x10\x03\x12\x1d\n\x19STAKE_REGISTRATION_CONWAY\x10\ + \x07*X\n\x14CardanoPoolRelayType\x12\x12\n\x0eSINGLE_HOST_IP\x10\0\x12\ + \x14\n\x10SINGLE_HOST_NAME\x10\x01\x12\x16\n\x12MULTIPLE_HOST_NAME\x10\ + \x02*R\n$CardanoTxAuxiliaryDataSupplementType\x12\x08\n\x04NONE\x10\0\ + \x12\x20\n\x1cCVOTE_REGISTRATION_SIGNATURE\x10\x01*6\n\x1eCardanoCVoteRe\ + gistrationFormat\x12\t\n\x05CIP15\x10\0\x12\t\n\x05CIP36\x10\x01*\x82\ + \x01\n\x14CardanoTxSigningMode\x12\x18\n\x14ORDINARY_TRANSACTION\x10\0\ + \x12\x1e\n\x1aPOOL_REGISTRATION_AS_OWNER\x10\x01\x12\x18\n\x14MULTISIG_T\ + RANSACTION\x10\x02\x12\x16\n\x12PLUTUS_TRANSACTION\x10\x03*>\n\x14Cardan\ + oTxWitnessType\x12\x11\n\rBYRON_WITNESS\x10\0\x12\x13\n\x0fSHELLEY_WITNE\ + SS\x10\x01B;\n#com.satoshilabs.trezor.lib.protobufB\x14TrezorMessageCard\ + ano\ "; /// `FileDescriptorProto` object which was a source for this generated file