1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-05-30 04:38:44 +00:00

refactor: Move TxAckPaymentRequest to common messages as PaymentRequest.

This commit is contained in:
Andrew Kozlik 2025-04-08 14:21:21 +02:00
parent 179670b8aa
commit 9c3592e8d0
20 changed files with 1848 additions and 1846 deletions

View File

@ -234,7 +234,7 @@ message SignTx {
* @next TxAckPrevInput * @next TxAckPrevInput
* @next TxAckPrevOutput * @next TxAckPrevOutput
* @next TxAckPrevExtraData * @next TxAckPrevExtraData
* @next TxAckPaymentRequest * @next PaymentRequest
*/ */
message TxRequest { message TxRequest {
optional RequestType request_type = 1; // what should be filled in TxAck message? optional RequestType request_type = 1; // what should be filled in TxAck message?
@ -445,41 +445,6 @@ message PrevOutput {
optional uint32 decred_script_version = 3; // only for Decred optional uint32 decred_script_version = 3; // only for Decred
} }
/** Data type of a payment request for a set of outputs.
* @next TxRequest
*/
message TxAckPaymentRequest {
option (experimental_message) = true;
optional bytes nonce = 1; // the nonce used in the signature computation
required string recipient_name = 2; // merchant's name
repeated PaymentRequestMemo memos = 3; // any memos that were signed as part of the request
optional uint64 amount = 4; // the sum of the external output amounts requested, required for non-CoinJoin
required bytes signature = 5; // the trusted party's signature of the paymentRequestDigest
message PaymentRequestMemo {
optional TextMemo text_memo = 1;
optional RefundMemo refund_memo = 2;
optional CoinPurchaseMemo coin_purchase_memo = 3;
}
message TextMemo {
required string text = 1; // plain-text note explaining the purpose of the payment request
}
message RefundMemo {
required string address = 1; // the address where the payment should be refunded if necessary
required bytes mac = 2; // the MAC returned by GetAddress
}
message CoinPurchaseMemo {
required uint32 coin_type = 1; // the SLIP-0044 coin type of the address
required string amount = 2; // the amount the address will receive as a human-readable string including units, e.g. "0.025 BTC"
required string address = 3; // the address where the coin purchase will be delivered
required bytes mac = 4; // the MAC returned by GetAddress
}
}
/** /**
* Request: Data about input to be signed. * Request: Data about input to be signed.
* Wire-alias of TxAck. * Wire-alias of TxAck.

View File

@ -169,3 +169,40 @@ message HDNodeType {
optional bytes private_key = 5; optional bytes private_key = 5;
required bytes public_key = 6; required bytes public_key = 6;
} }
/**
* Structure representing a SLIP-0024 payment request.
* @next TxRequest
* @embed
*/
message PaymentRequest {
option (experimental_message) = true;
optional bytes nonce = 1; // the nonce used in the signature computation
required string recipient_name = 2; // merchant's name
repeated PaymentRequestMemo memos = 3; // any memos that were signed as part of the request
optional uint64 amount = 4; // the sum of the external output amounts requested, required for non-CoinJoin
required bytes signature = 5; // the trusted party's signature of the paymentRequestDigest
message PaymentRequestMemo {
optional TextMemo text_memo = 1;
optional RefundMemo refund_memo = 2;
optional CoinPurchaseMemo coin_purchase_memo = 3;
}
message TextMemo {
required string text = 1; // plain-text note explaining the purpose of the payment request
}
message RefundMemo {
required string address = 1; // the address where the payment should be refunded if necessary
required bytes mac = 2; // the MAC returned by GetAddress
}
message CoinPurchaseMemo {
required uint32 coin_type = 1; // the SLIP-0044 coin type of the address
required string amount = 2; // the amount the address will receive as a human-readable string including units, e.g. "0.025 BTC"
required string address = 3; // the address where the coin purchase will be delivered
required bytes mac = 4; // the MAC returned by GetAddress
}
}

View File

@ -45,6 +45,7 @@ enum MessageType {
MessageType_BackupDevice = 34 [(bitcoin_only) = true, (wire_in) = true]; MessageType_BackupDevice = 34 [(bitcoin_only) = true, (wire_in) = true];
MessageType_EntropyRequest = 35 [(bitcoin_only) = true, (wire_out) = true]; MessageType_EntropyRequest = 35 [(bitcoin_only) = true, (wire_out) = true];
MessageType_EntropyAck = 36 [(bitcoin_only) = true, (wire_in) = true]; MessageType_EntropyAck = 36 [(bitcoin_only) = true, (wire_in) = true];
MessageType_PaymentRequest = 37 [(bitcoin_only) = true, (wire_in) = true];
MessageType_EntropyCheckReady = 994 [(bitcoin_only) = true, (wire_out) = true]; MessageType_EntropyCheckReady = 994 [(bitcoin_only) = true, (wire_out) = true];
MessageType_EntropyCheckContinue = 995 [(bitcoin_only) = true, (wire_in) = true]; MessageType_EntropyCheckContinue = 995 [(bitcoin_only) = true, (wire_in) = true];
MessageType_PassphraseRequest = 41 [(bitcoin_only) = true, (wire_out) = true]; MessageType_PassphraseRequest = 41 [(bitcoin_only) = true, (wire_out) = true];
@ -99,7 +100,6 @@ enum MessageType {
MessageType_TxAck = 22 [(bitcoin_only) = true, (wire_in) = true]; MessageType_TxAck = 22 [(bitcoin_only) = true, (wire_in) = true];
MessageType_GetAddress = 29 [(bitcoin_only) = true, (wire_in) = true]; MessageType_GetAddress = 29 [(bitcoin_only) = true, (wire_in) = true];
MessageType_Address = 30 [(bitcoin_only) = true, (wire_out) = true]; MessageType_Address = 30 [(bitcoin_only) = true, (wire_out) = true];
MessageType_TxAckPaymentRequest = 37 [(wire_in) = true];
MessageType_SignMessage = 38 [(bitcoin_only) = true, (wire_in) = true]; MessageType_SignMessage = 38 [(bitcoin_only) = true, (wire_in) = true];
MessageType_VerifyMessage = 39 [(bitcoin_only) = true, (wire_in) = true]; MessageType_VerifyMessage = 39 [(bitcoin_only) = true, (wire_in) = true];
MessageType_MessageSignature = 40 [(bitcoin_only) = true, (wire_out) = true]; MessageType_MessageSignature = 40 [(bitcoin_only) = true, (wire_out) = true];

View File

@ -14,7 +14,7 @@ if TYPE_CHECKING:
from typing import Optional from typing import Optional
from trezor.crypto import bip32 from trezor.crypto import bip32
from trezor.messages import SignTx, TxAckPaymentRequest, TxInput, TxOutput from trezor.messages import PaymentRequest, SignTx, TxInput, TxOutput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
@ -89,7 +89,7 @@ class Approver:
self.total_out += txo.amount self.total_out += txo.amount
async def add_payment_request( async def add_payment_request(
self, msg: TxAckPaymentRequest, keychain: Keychain self, msg: PaymentRequest, keychain: Keychain
) -> None: ) -> None:
from .payment_request import PaymentRequestVerifier from .payment_request import PaymentRequestVerifier
@ -241,7 +241,7 @@ class BasicApprover(Approver):
self.external_output_index += 1 self.external_output_index += 1
async def add_payment_request( async def add_payment_request(
self, msg: TxAckPaymentRequest, keychain: Keychain self, msg: PaymentRequest, keychain: Keychain
) -> None: ) -> None:
await super().add_payment_request(msg, keychain) await super().add_payment_request(msg, keychain)
if msg.amount is None: if msg.amount is None:

View File

@ -13,11 +13,11 @@ if TYPE_CHECKING:
from trezor.enums import AmountUnit from trezor.enums import AmountUnit
from trezor.messages import ( from trezor.messages import (
PaymentRequest,
PrevInput, PrevInput,
PrevOutput, PrevOutput,
PrevTx, PrevTx,
SignTx, SignTx,
TxAckPaymentRequest,
TxInput, TxInput,
TxOutput, TxOutput,
TxRequest, TxRequest,
@ -82,7 +82,7 @@ class UiConfirmDecredSSTXSubmission(UiConfirm):
class UiConfirmPaymentRequest(UiConfirm): class UiConfirmPaymentRequest(UiConfirm):
def __init__( def __init__(
self, self,
payment_req: TxAckPaymentRequest, payment_req: PaymentRequest,
coin: CoinInfo, coin: CoinInfo,
amount_unit: AmountUnit, amount_unit: AmountUnit,
) -> None: ) -> None:
@ -258,7 +258,7 @@ def confirm_decred_sstx_submission(output: TxOutput, coin: CoinInfo, amount_unit
return (yield UiConfirmDecredSSTXSubmission(output, coin, amount_unit)) # type: ignore [awaitable-return-type] return (yield UiConfirmDecredSSTXSubmission(output, coin, amount_unit)) # type: ignore [awaitable-return-type]
def should_show_payment_request_details(payment_req: TxAckPaymentRequest, coin: CoinInfo, amount_unit: AmountUnit) -> Awaitable[bool]: # type: ignore [awaitable-return-type] def should_show_payment_request_details(payment_req: PaymentRequest, coin: CoinInfo, amount_unit: AmountUnit) -> Awaitable[bool]: # type: ignore [awaitable-return-type]
return (yield UiConfirmPaymentRequest(payment_req, coin, amount_unit)) # type: ignore [awaitable-return-type] return (yield UiConfirmPaymentRequest(payment_req, coin, amount_unit)) # type: ignore [awaitable-return-type]
@ -393,13 +393,13 @@ def request_tx_prev_output(tx_req: TxRequest, i: int, coin: CoinInfo, tx_hash: b
return ack.tx.output return ack.tx.output
def request_payment_req(tx_req: TxRequest, i: int) -> Awaitable[TxAckPaymentRequest]: # type: ignore [awaitable-return-type] def request_payment_req(tx_req: TxRequest, i: int) -> Awaitable[PaymentRequest]: # type: ignore [awaitable-return-type]
from trezor.messages import TxAckPaymentRequest from trezor.messages import PaymentRequest
assert tx_req.details is not None assert tx_req.details is not None
tx_req.request_type = RequestType.TXPAYMENTREQ tx_req.request_type = RequestType.TXPAYMENTREQ
tx_req.details.request_index = i tx_req.details.request_index = i
ack = yield TxAckPaymentRequest, tx_req # type: ignore [awaitable-return-type] ack = yield PaymentRequest, tx_req # type: ignore [awaitable-return-type]
_clear_tx_request(tx_req) _clear_tx_request(tx_req)
return _sanitize_payment_req(ack) return _sanitize_payment_req(ack)
@ -585,7 +585,7 @@ def _sanitize_tx_output(txo: TxOutput, coin: CoinInfo) -> TxOutput:
return txo return txo
def _sanitize_payment_req(payment_req: TxAckPaymentRequest) -> TxAckPaymentRequest: def _sanitize_payment_req(payment_req: PaymentRequest) -> PaymentRequest:
for memo in payment_req.memos: for memo in payment_req.memos:
if (memo.text_memo, memo.refund_memo, memo.coin_purchase_memo).count(None) != 2: if (memo.text_memo, memo.refund_memo, memo.coin_purchase_memo).count(None) != 2:
raise DataError( raise DataError(

View File

@ -19,7 +19,7 @@ from ..keychain import address_n_to_name
if TYPE_CHECKING: if TYPE_CHECKING:
from trezor.enums import AmountUnit from trezor.enums import AmountUnit
from trezor.messages import TxAckPaymentRequest, TxOutput from trezor.messages import PaymentRequest, TxOutput
from apps.common.coininfo import CoinInfo from apps.common.coininfo import CoinInfo
from apps.common.paths import Bip32Path from apps.common.paths import Bip32Path
@ -155,7 +155,7 @@ async def confirm_decred_sstx_submission(
async def should_show_payment_request_details( async def should_show_payment_request_details(
msg: TxAckPaymentRequest, msg: PaymentRequest,
coin: CoinInfo, coin: CoinInfo,
amount_unit: AmountUnit, amount_unit: AmountUnit,
) -> bool: ) -> bool:

View File

@ -6,7 +6,7 @@ from trezor.wire import DataError, context
from .. import writers from .. import writers
if TYPE_CHECKING: if TYPE_CHECKING:
from trezor.messages import TxAckPaymentRequest, TxOutput from trezor.messages import PaymentRequest, TxOutput
from apps.common import coininfo from apps.common import coininfo
from apps.common.keychain import Keychain from apps.common.keychain import Keychain
@ -24,7 +24,7 @@ class PaymentRequestVerifier:
PUBLIC_KEY = b"" PUBLIC_KEY = b""
def __init__( def __init__(
self, msg: TxAckPaymentRequest, coin: coininfo.CoinInfo, keychain: Keychain self, msg: PaymentRequest, coin: coininfo.CoinInfo, keychain: Keychain
) -> None: ) -> None:
from storage.cache_common import APP_COMMON_NONCE from storage.cache_common import APP_COMMON_NONCE
from trezor.crypto.hashlib import sha256 from trezor.crypto.hashlib import sha256

View File

@ -29,6 +29,7 @@ Nonce = 33
BackupDevice = 34 BackupDevice = 34
EntropyRequest = 35 EntropyRequest = 35
EntropyAck = 36 EntropyAck = 36
PaymentRequest = 37
EntropyCheckReady = 994 EntropyCheckReady = 994
EntropyCheckContinue = 995 EntropyCheckContinue = 995
PassphraseRequest = 41 PassphraseRequest = 41
@ -106,7 +107,6 @@ if not utils.BITCOIN_ONLY:
SetU2FCounter = 63 SetU2FCounter = 63
GetNextU2FCounter = 80 GetNextU2FCounter = 80
NextU2FCounter = 81 NextU2FCounter = 81
TxAckPaymentRequest = 37
EthereumGetPublicKey = 450 EthereumGetPublicKey = 450
EthereumPublicKey = 451 EthereumPublicKey = 451
EthereumGetAddress = 56 EthereumGetAddress = 56

View File

@ -373,6 +373,7 @@ if TYPE_CHECKING:
BackupDevice = 34 BackupDevice = 34
EntropyRequest = 35 EntropyRequest = 35
EntropyAck = 36 EntropyAck = 36
PaymentRequest = 37
EntropyCheckReady = 994 EntropyCheckReady = 994
EntropyCheckContinue = 995 EntropyCheckContinue = 995
PassphraseRequest = 41 PassphraseRequest = 41
@ -417,7 +418,6 @@ if TYPE_CHECKING:
TxAck = 22 TxAck = 22
GetAddress = 29 GetAddress = 29
Address = 30 Address = 30
TxAckPaymentRequest = 37
SignMessage = 38 SignMessage = 38
VerifyMessage = 39 VerifyMessage = 39
MessageSignature = 40 MessageSignature = 40

View File

@ -456,6 +456,96 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["HDNodeType"]: def is_type_of(cls, msg: Any) -> TypeGuard["HDNodeType"]:
return isinstance(msg, cls) return isinstance(msg, cls)
class PaymentRequest(protobuf.MessageType):
nonce: "bytes | None"
recipient_name: "str"
memos: "list[PaymentRequestMemo]"
amount: "int | None"
signature: "bytes"
def __init__(
self,
*,
recipient_name: "str",
signature: "bytes",
memos: "list[PaymentRequestMemo] | None" = None,
nonce: "bytes | None" = None,
amount: "int | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["PaymentRequest"]:
return isinstance(msg, cls)
class PaymentRequestMemo(protobuf.MessageType):
text_memo: "TextMemo | None"
refund_memo: "RefundMemo | None"
coin_purchase_memo: "CoinPurchaseMemo | None"
def __init__(
self,
*,
text_memo: "TextMemo | None" = None,
refund_memo: "RefundMemo | None" = None,
coin_purchase_memo: "CoinPurchaseMemo | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["PaymentRequestMemo"]:
return isinstance(msg, cls)
class TextMemo(protobuf.MessageType):
text: "str"
def __init__(
self,
*,
text: "str",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["TextMemo"]:
return isinstance(msg, cls)
class RefundMemo(protobuf.MessageType):
address: "str"
mac: "bytes"
def __init__(
self,
*,
address: "str",
mac: "bytes",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["RefundMemo"]:
return isinstance(msg, cls)
class CoinPurchaseMemo(protobuf.MessageType):
coin_type: "int"
amount: "str"
address: "str"
mac: "bytes"
def __init__(
self,
*,
coin_type: "int",
amount: "str",
address: "str",
mac: "bytes",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["CoinPurchaseMemo"]:
return isinstance(msg, cls)
class MultisigRedeemScriptType(protobuf.MessageType): class MultisigRedeemScriptType(protobuf.MessageType):
pubkeys: "list[HDNodePathType]" pubkeys: "list[HDNodePathType]"
signatures: "list[bytes]" signatures: "list[bytes]"
@ -866,28 +956,6 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["PrevOutput"]: def is_type_of(cls, msg: Any) -> TypeGuard["PrevOutput"]:
return isinstance(msg, cls) return isinstance(msg, cls)
class TxAckPaymentRequest(protobuf.MessageType):
nonce: "bytes | None"
recipient_name: "str"
memos: "list[PaymentRequestMemo]"
amount: "int | None"
signature: "bytes"
def __init__(
self,
*,
recipient_name: "str",
signature: "bytes",
memos: "list[PaymentRequestMemo] | None" = None,
nonce: "bytes | None" = None,
amount: "int | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["TxAckPaymentRequest"]:
return isinstance(msg, cls)
class TxAckInput(protobuf.MessageType): class TxAckInput(protobuf.MessageType):
tx: "TxAckInputWrapper" tx: "TxAckInputWrapper"
@ -1118,74 +1186,6 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["TxRequestSerializedType"]: def is_type_of(cls, msg: Any) -> TypeGuard["TxRequestSerializedType"]:
return isinstance(msg, cls) return isinstance(msg, cls)
class PaymentRequestMemo(protobuf.MessageType):
text_memo: "TextMemo | None"
refund_memo: "RefundMemo | None"
coin_purchase_memo: "CoinPurchaseMemo | None"
def __init__(
self,
*,
text_memo: "TextMemo | None" = None,
refund_memo: "RefundMemo | None" = None,
coin_purchase_memo: "CoinPurchaseMemo | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["PaymentRequestMemo"]:
return isinstance(msg, cls)
class TextMemo(protobuf.MessageType):
text: "str"
def __init__(
self,
*,
text: "str",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["TextMemo"]:
return isinstance(msg, cls)
class RefundMemo(protobuf.MessageType):
address: "str"
mac: "bytes"
def __init__(
self,
*,
address: "str",
mac: "bytes",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["RefundMemo"]:
return isinstance(msg, cls)
class CoinPurchaseMemo(protobuf.MessageType):
coin_type: "int"
amount: "str"
address: "str"
mac: "bytes"
def __init__(
self,
*,
coin_type: "int",
amount: "str",
address: "str",
mac: "bytes",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["CoinPurchaseMemo"]:
return isinstance(msg, cls)
class TxAckInputWrapper(protobuf.MessageType): class TxAckInputWrapper(protobuf.MessageType):
input: "TxInput" input: "TxInput"

View File

@ -306,7 +306,7 @@ Trezor sets `request_type` to `TXPAYMENTREQ`, and `request_details.tx_hash` is u
`request_details.request_index` is the index of the payment request in the transaction: `request_details.request_index` is the index of the payment request in the transaction:
0 is the first payment request, 1 is second, etc. 0 is the first payment request, 1 is second, etc.
The host must respond with a `TxAckPaymentRequest` message. The host must respond with a `PaymentRequest` message.
## Replacement transactions ## Replacement transactions

View File

@ -5,7 +5,7 @@ endif
SKIPPED_MESSAGES := Binance Cardano DebugMonero Eos Monero Ontology Ripple SdProtect Tezos WebAuthn \ SKIPPED_MESSAGES := Binance Cardano DebugMonero Eos Monero Ontology Ripple SdProtect Tezos WebAuthn \
DebugLinkRecordScreen DebugLinkEraseSdCard DebugLinkWatchLayout \ DebugLinkRecordScreen DebugLinkEraseSdCard DebugLinkWatchLayout \
DebugLinkLayout DebugLinkResetDebugEvents GetNonce \ DebugLinkLayout DebugLinkResetDebugEvents GetNonce \
TxAckInput TxAckOutput TxAckPrev TxAckPaymentRequest \ TxAckInput TxAckOutput TxAckPrev PaymentRequest \
EthereumSignTypedData EthereumTypedDataStructRequest EthereumTypedDataStructAck \ EthereumSignTypedData EthereumTypedDataStructRequest EthereumTypedDataStructAck \
EthereumTypedDataValueRequest EthereumTypedDataValueAck ShowDeviceTutorial \ EthereumTypedDataValueRequest EthereumTypedDataValueAck ShowDeviceTutorial \
UnlockBootloader AuthenticateDevice AuthenticityProof \ UnlockBootloader AuthenticateDevice AuthenticityProof \

View File

@ -100,5 +100,5 @@ CoinJoinRequest.mask_public_key max_size:33
CoinJoinRequest.signature max_size:64 CoinJoinRequest.signature max_size:64
# Unused messages. # Unused messages.
TxAckPaymentRequest skip_message:true PaymentRequest skip_message:true
PaymentRequestMemo skip_message:true PaymentRequestMemo skip_message:true

View File

@ -272,7 +272,7 @@ def sign_tx(
outputs: Sequence[messages.TxOutputType], outputs: Sequence[messages.TxOutputType],
details: Optional[messages.SignTx] = None, details: Optional[messages.SignTx] = None,
prev_txes: Optional["TxCacheType"] = None, prev_txes: Optional["TxCacheType"] = None,
payment_reqs: Sequence[messages.TxAckPaymentRequest] = (), payment_reqs: Sequence[messages.PaymentRequest] = (),
preauthorized: bool = False, preauthorized: bool = False,
unlock_path: Optional[List[int]] = None, unlock_path: Optional[List[int]] = None,
unlock_path_mac: Optional[bytes] = None, unlock_path_mac: Optional[bytes] = None,

View File

@ -426,6 +426,7 @@ class MessageType(IntEnum):
BackupDevice = 34 BackupDevice = 34
EntropyRequest = 35 EntropyRequest = 35
EntropyAck = 36 EntropyAck = 36
PaymentRequest = 37
EntropyCheckReady = 994 EntropyCheckReady = 994
EntropyCheckContinue = 995 EntropyCheckContinue = 995
PassphraseRequest = 41 PassphraseRequest = 41
@ -470,7 +471,6 @@ class MessageType(IntEnum):
TxAck = 22 TxAck = 22
GetAddress = 29 GetAddress = 29
Address = 30 Address = 30
TxAckPaymentRequest = 37
SignMessage = 38 SignMessage = 38
VerifyMessage = 39 VerifyMessage = 39
MessageSignature = 40 MessageSignature = 40
@ -1098,6 +1098,106 @@ class HDNodeType(protobuf.MessageType):
self.private_key = private_key self.private_key = private_key
class PaymentRequest(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 37
FIELDS = {
1: protobuf.Field("nonce", "bytes", repeated=False, required=False, default=None),
2: protobuf.Field("recipient_name", "string", repeated=False, required=True),
3: protobuf.Field("memos", "PaymentRequestMemo", repeated=True, required=False, default=None),
4: protobuf.Field("amount", "uint64", repeated=False, required=False, default=None),
5: protobuf.Field("signature", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
recipient_name: "str",
signature: "bytes",
memos: Optional[Sequence["PaymentRequestMemo"]] = None,
nonce: Optional["bytes"] = None,
amount: Optional["int"] = None,
) -> None:
self.memos: Sequence["PaymentRequestMemo"] = memos if memos is not None else []
self.recipient_name = recipient_name
self.signature = signature
self.nonce = nonce
self.amount = amount
class PaymentRequestMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("text_memo", "TextMemo", repeated=False, required=False, default=None),
2: protobuf.Field("refund_memo", "RefundMemo", repeated=False, required=False, default=None),
3: protobuf.Field("coin_purchase_memo", "CoinPurchaseMemo", repeated=False, required=False, default=None),
}
def __init__(
self,
*,
text_memo: Optional["TextMemo"] = None,
refund_memo: Optional["RefundMemo"] = None,
coin_purchase_memo: Optional["CoinPurchaseMemo"] = None,
) -> None:
self.text_memo = text_memo
self.refund_memo = refund_memo
self.coin_purchase_memo = coin_purchase_memo
class TextMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("text", "string", repeated=False, required=True),
}
def __init__(
self,
*,
text: "str",
) -> None:
self.text = text
class RefundMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("address", "string", repeated=False, required=True),
2: protobuf.Field("mac", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
address: "str",
mac: "bytes",
) -> None:
self.address = address
self.mac = mac
class CoinPurchaseMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("coin_type", "uint32", repeated=False, required=True),
2: protobuf.Field("amount", "string", repeated=False, required=True),
3: protobuf.Field("address", "string", repeated=False, required=True),
4: protobuf.Field("mac", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
coin_type: "int",
amount: "str",
address: "str",
mac: "bytes",
) -> None:
self.coin_type = coin_type
self.amount = amount
self.address = address
self.mac = mac
class MultisigRedeemScriptType(protobuf.MessageType): class MultisigRedeemScriptType(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None MESSAGE_WIRE_TYPE = None
FIELDS = { FIELDS = {
@ -1611,32 +1711,6 @@ class PrevOutput(protobuf.MessageType):
self.decred_script_version = decred_script_version self.decred_script_version = decred_script_version
class TxAckPaymentRequest(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 37
FIELDS = {
1: protobuf.Field("nonce", "bytes", repeated=False, required=False, default=None),
2: protobuf.Field("recipient_name", "string", repeated=False, required=True),
3: protobuf.Field("memos", "PaymentRequestMemo", repeated=True, required=False, default=None),
4: protobuf.Field("amount", "uint64", repeated=False, required=False, default=None),
5: protobuf.Field("signature", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
recipient_name: "str",
signature: "bytes",
memos: Optional[Sequence["PaymentRequestMemo"]] = None,
nonce: Optional["bytes"] = None,
amount: Optional["int"] = None,
) -> None:
self.memos: Sequence["PaymentRequestMemo"] = memos if memos is not None else []
self.recipient_name = recipient_name
self.signature = signature
self.nonce = nonce
self.amount = amount
class TxAckInput(protobuf.MessageType): class TxAckInput(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 22 MESSAGE_WIRE_TYPE = 22
FIELDS = { FIELDS = {
@ -2064,80 +2138,6 @@ class TxOutputType(protobuf.MessageType):
self.payment_req_index = payment_req_index self.payment_req_index = payment_req_index
class PaymentRequestMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("text_memo", "TextMemo", repeated=False, required=False, default=None),
2: protobuf.Field("refund_memo", "RefundMemo", repeated=False, required=False, default=None),
3: protobuf.Field("coin_purchase_memo", "CoinPurchaseMemo", repeated=False, required=False, default=None),
}
def __init__(
self,
*,
text_memo: Optional["TextMemo"] = None,
refund_memo: Optional["RefundMemo"] = None,
coin_purchase_memo: Optional["CoinPurchaseMemo"] = None,
) -> None:
self.text_memo = text_memo
self.refund_memo = refund_memo
self.coin_purchase_memo = coin_purchase_memo
class TextMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("text", "string", repeated=False, required=True),
}
def __init__(
self,
*,
text: "str",
) -> None:
self.text = text
class RefundMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("address", "string", repeated=False, required=True),
2: protobuf.Field("mac", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
address: "str",
mac: "bytes",
) -> None:
self.address = address
self.mac = mac
class CoinPurchaseMemo(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None
FIELDS = {
1: protobuf.Field("coin_type", "uint32", repeated=False, required=True),
2: protobuf.Field("amount", "string", repeated=False, required=True),
3: protobuf.Field("address", "string", repeated=False, required=True),
4: protobuf.Field("mac", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
coin_type: "int",
amount: "str",
address: "str",
mac: "bytes",
) -> None:
self.coin_type = coin_type
self.amount = amount
self.address = address
self.mac = mac
class TxAckInputWrapper(protobuf.MessageType): class TxAckInputWrapper(protobuf.MessageType):
MESSAGE_WIRE_TYPE = None MESSAGE_WIRE_TYPE = None
FIELDS = { FIELDS = {

View File

@ -24,6 +24,7 @@ trezor_message_impl! {
BackupDevice => MessageType_BackupDevice, BackupDevice => MessageType_BackupDevice,
EntropyRequest => MessageType_EntropyRequest, EntropyRequest => MessageType_EntropyRequest,
EntropyAck => MessageType_EntropyAck, EntropyAck => MessageType_EntropyAck,
PaymentRequest => MessageType_PaymentRequest,
EntropyCheckReady => MessageType_EntropyCheckReady, EntropyCheckReady => MessageType_EntropyCheckReady,
EntropyCheckContinue => MessageType_EntropyCheckContinue, EntropyCheckContinue => MessageType_EntropyCheckContinue,
PassphraseRequest => MessageType_PassphraseRequest, PassphraseRequest => MessageType_PassphraseRequest,
@ -112,7 +113,6 @@ trezor_message_impl! {
TxAck => MessageType_TxAck, TxAck => MessageType_TxAck,
GetAddress => MessageType_GetAddress, GetAddress => MessageType_GetAddress,
Address => MessageType_Address, Address => MessageType_Address,
TxAckPaymentRequest => MessageType_TxAckPaymentRequest,
SignMessage => MessageType_SignMessage, SignMessage => MessageType_SignMessage,
VerifyMessage => MessageType_VerifyMessage, VerifyMessage => MessageType_VerifyMessage,
MessageSignature => MessageType_MessageSignature, MessageSignature => MessageType_MessageSignature,

View File

@ -78,6 +78,8 @@ pub enum MessageType {
MessageType_EntropyRequest = 35, MessageType_EntropyRequest = 35,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EntropyAck) // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EntropyAck)
MessageType_EntropyAck = 36, MessageType_EntropyAck = 36,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_PaymentRequest)
MessageType_PaymentRequest = 37,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EntropyCheckReady) // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EntropyCheckReady)
MessageType_EntropyCheckReady = 994, MessageType_EntropyCheckReady = 994,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EntropyCheckContinue) // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EntropyCheckContinue)
@ -166,8 +168,6 @@ pub enum MessageType {
MessageType_GetAddress = 29, MessageType_GetAddress = 29,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_Address) // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_Address)
MessageType_Address = 30, MessageType_Address = 30,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_TxAckPaymentRequest)
MessageType_TxAckPaymentRequest = 37,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_SignMessage) // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_SignMessage)
MessageType_SignMessage = 38, MessageType_SignMessage = 38,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_VerifyMessage) // @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_VerifyMessage)
@ -568,6 +568,7 @@ impl ::protobuf::Enum for MessageType {
34 => ::std::option::Option::Some(MessageType::MessageType_BackupDevice), 34 => ::std::option::Option::Some(MessageType::MessageType_BackupDevice),
35 => ::std::option::Option::Some(MessageType::MessageType_EntropyRequest), 35 => ::std::option::Option::Some(MessageType::MessageType_EntropyRequest),
36 => ::std::option::Option::Some(MessageType::MessageType_EntropyAck), 36 => ::std::option::Option::Some(MessageType::MessageType_EntropyAck),
37 => ::std::option::Option::Some(MessageType::MessageType_PaymentRequest),
994 => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckReady), 994 => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckReady),
995 => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckContinue), 995 => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckContinue),
41 => ::std::option::Option::Some(MessageType::MessageType_PassphraseRequest), 41 => ::std::option::Option::Some(MessageType::MessageType_PassphraseRequest),
@ -612,7 +613,6 @@ impl ::protobuf::Enum for MessageType {
22 => ::std::option::Option::Some(MessageType::MessageType_TxAck), 22 => ::std::option::Option::Some(MessageType::MessageType_TxAck),
29 => ::std::option::Option::Some(MessageType::MessageType_GetAddress), 29 => ::std::option::Option::Some(MessageType::MessageType_GetAddress),
30 => ::std::option::Option::Some(MessageType::MessageType_Address), 30 => ::std::option::Option::Some(MessageType::MessageType_Address),
37 => ::std::option::Option::Some(MessageType::MessageType_TxAckPaymentRequest),
38 => ::std::option::Option::Some(MessageType::MessageType_SignMessage), 38 => ::std::option::Option::Some(MessageType::MessageType_SignMessage),
39 => ::std::option::Option::Some(MessageType::MessageType_VerifyMessage), 39 => ::std::option::Option::Some(MessageType::MessageType_VerifyMessage),
40 => ::std::option::Option::Some(MessageType::MessageType_MessageSignature), 40 => ::std::option::Option::Some(MessageType::MessageType_MessageSignature),
@ -826,6 +826,7 @@ impl ::protobuf::Enum for MessageType {
"MessageType_BackupDevice" => ::std::option::Option::Some(MessageType::MessageType_BackupDevice), "MessageType_BackupDevice" => ::std::option::Option::Some(MessageType::MessageType_BackupDevice),
"MessageType_EntropyRequest" => ::std::option::Option::Some(MessageType::MessageType_EntropyRequest), "MessageType_EntropyRequest" => ::std::option::Option::Some(MessageType::MessageType_EntropyRequest),
"MessageType_EntropyAck" => ::std::option::Option::Some(MessageType::MessageType_EntropyAck), "MessageType_EntropyAck" => ::std::option::Option::Some(MessageType::MessageType_EntropyAck),
"MessageType_PaymentRequest" => ::std::option::Option::Some(MessageType::MessageType_PaymentRequest),
"MessageType_EntropyCheckReady" => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckReady), "MessageType_EntropyCheckReady" => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckReady),
"MessageType_EntropyCheckContinue" => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckContinue), "MessageType_EntropyCheckContinue" => ::std::option::Option::Some(MessageType::MessageType_EntropyCheckContinue),
"MessageType_PassphraseRequest" => ::std::option::Option::Some(MessageType::MessageType_PassphraseRequest), "MessageType_PassphraseRequest" => ::std::option::Option::Some(MessageType::MessageType_PassphraseRequest),
@ -870,7 +871,6 @@ impl ::protobuf::Enum for MessageType {
"MessageType_TxAck" => ::std::option::Option::Some(MessageType::MessageType_TxAck), "MessageType_TxAck" => ::std::option::Option::Some(MessageType::MessageType_TxAck),
"MessageType_GetAddress" => ::std::option::Option::Some(MessageType::MessageType_GetAddress), "MessageType_GetAddress" => ::std::option::Option::Some(MessageType::MessageType_GetAddress),
"MessageType_Address" => ::std::option::Option::Some(MessageType::MessageType_Address), "MessageType_Address" => ::std::option::Option::Some(MessageType::MessageType_Address),
"MessageType_TxAckPaymentRequest" => ::std::option::Option::Some(MessageType::MessageType_TxAckPaymentRequest),
"MessageType_SignMessage" => ::std::option::Option::Some(MessageType::MessageType_SignMessage), "MessageType_SignMessage" => ::std::option::Option::Some(MessageType::MessageType_SignMessage),
"MessageType_VerifyMessage" => ::std::option::Option::Some(MessageType::MessageType_VerifyMessage), "MessageType_VerifyMessage" => ::std::option::Option::Some(MessageType::MessageType_VerifyMessage),
"MessageType_MessageSignature" => ::std::option::Option::Some(MessageType::MessageType_MessageSignature), "MessageType_MessageSignature" => ::std::option::Option::Some(MessageType::MessageType_MessageSignature),
@ -1083,6 +1083,7 @@ impl ::protobuf::Enum for MessageType {
MessageType::MessageType_BackupDevice, MessageType::MessageType_BackupDevice,
MessageType::MessageType_EntropyRequest, MessageType::MessageType_EntropyRequest,
MessageType::MessageType_EntropyAck, MessageType::MessageType_EntropyAck,
MessageType::MessageType_PaymentRequest,
MessageType::MessageType_EntropyCheckReady, MessageType::MessageType_EntropyCheckReady,
MessageType::MessageType_EntropyCheckContinue, MessageType::MessageType_EntropyCheckContinue,
MessageType::MessageType_PassphraseRequest, MessageType::MessageType_PassphraseRequest,
@ -1127,7 +1128,6 @@ impl ::protobuf::Enum for MessageType {
MessageType::MessageType_TxAck, MessageType::MessageType_TxAck,
MessageType::MessageType_GetAddress, MessageType::MessageType_GetAddress,
MessageType::MessageType_Address, MessageType::MessageType_Address,
MessageType::MessageType_TxAckPaymentRequest,
MessageType::MessageType_SignMessage, MessageType::MessageType_SignMessage,
MessageType::MessageType_VerifyMessage, MessageType::MessageType_VerifyMessage,
MessageType::MessageType_MessageSignature, MessageType::MessageType_MessageSignature,
@ -1346,51 +1346,51 @@ impl ::protobuf::EnumFull for MessageType {
MessageType::MessageType_BackupDevice => 22, MessageType::MessageType_BackupDevice => 22,
MessageType::MessageType_EntropyRequest => 23, MessageType::MessageType_EntropyRequest => 23,
MessageType::MessageType_EntropyAck => 24, MessageType::MessageType_EntropyAck => 24,
MessageType::MessageType_EntropyCheckReady => 25, MessageType::MessageType_PaymentRequest => 25,
MessageType::MessageType_EntropyCheckContinue => 26, MessageType::MessageType_EntropyCheckReady => 26,
MessageType::MessageType_PassphraseRequest => 27, MessageType::MessageType_EntropyCheckContinue => 27,
MessageType::MessageType_PassphraseAck => 28, MessageType::MessageType_PassphraseRequest => 28,
MessageType::MessageType_RecoveryDevice => 29, MessageType::MessageType_PassphraseAck => 29,
MessageType::MessageType_WordRequest => 30, MessageType::MessageType_RecoveryDevice => 30,
MessageType::MessageType_WordAck => 31, MessageType::MessageType_WordRequest => 31,
MessageType::MessageType_GetFeatures => 32, MessageType::MessageType_WordAck => 32,
MessageType::MessageType_SdProtect => 33, MessageType::MessageType_GetFeatures => 33,
MessageType::MessageType_ChangeWipeCode => 34, MessageType::MessageType_SdProtect => 34,
MessageType::MessageType_EndSession => 35, MessageType::MessageType_ChangeWipeCode => 35,
MessageType::MessageType_DoPreauthorized => 36, MessageType::MessageType_EndSession => 36,
MessageType::MessageType_PreauthorizedRequest => 37, MessageType::MessageType_DoPreauthorized => 37,
MessageType::MessageType_CancelAuthorization => 38, MessageType::MessageType_PreauthorizedRequest => 38,
MessageType::MessageType_RebootToBootloader => 39, MessageType::MessageType_CancelAuthorization => 39,
MessageType::MessageType_GetFirmwareHash => 40, MessageType::MessageType_RebootToBootloader => 40,
MessageType::MessageType_FirmwareHash => 41, MessageType::MessageType_GetFirmwareHash => 41,
MessageType::MessageType_UnlockPath => 42, MessageType::MessageType_FirmwareHash => 42,
MessageType::MessageType_UnlockedPathRequest => 43, MessageType::MessageType_UnlockPath => 43,
MessageType::MessageType_ShowDeviceTutorial => 44, MessageType::MessageType_UnlockedPathRequest => 44,
MessageType::MessageType_UnlockBootloader => 45, MessageType::MessageType_ShowDeviceTutorial => 45,
MessageType::MessageType_AuthenticateDevice => 46, MessageType::MessageType_UnlockBootloader => 46,
MessageType::MessageType_AuthenticityProof => 47, MessageType::MessageType_AuthenticateDevice => 47,
MessageType::MessageType_ChangeLanguage => 48, MessageType::MessageType_AuthenticityProof => 48,
MessageType::MessageType_TranslationDataRequest => 49, MessageType::MessageType_ChangeLanguage => 49,
MessageType::MessageType_TranslationDataAck => 50, MessageType::MessageType_TranslationDataRequest => 50,
MessageType::MessageType_SetBrightness => 51, MessageType::MessageType_TranslationDataAck => 51,
MessageType::MessageType_SetU2FCounter => 52, MessageType::MessageType_SetBrightness => 52,
MessageType::MessageType_GetNextU2FCounter => 53, MessageType::MessageType_SetU2FCounter => 53,
MessageType::MessageType_NextU2FCounter => 54, MessageType::MessageType_GetNextU2FCounter => 54,
MessageType::MessageType_Deprecated_PassphraseStateRequest => 55, MessageType::MessageType_NextU2FCounter => 55,
MessageType::MessageType_Deprecated_PassphraseStateAck => 56, MessageType::MessageType_Deprecated_PassphraseStateRequest => 56,
MessageType::MessageType_FirmwareErase => 57, MessageType::MessageType_Deprecated_PassphraseStateAck => 57,
MessageType::MessageType_FirmwareUpload => 58, MessageType::MessageType_FirmwareErase => 58,
MessageType::MessageType_FirmwareRequest => 59, MessageType::MessageType_FirmwareUpload => 59,
MessageType::MessageType_ProdTestT1 => 60, MessageType::MessageType_FirmwareRequest => 60,
MessageType::MessageType_BleUnpair => 61, MessageType::MessageType_ProdTestT1 => 61,
MessageType::MessageType_GetPublicKey => 62, MessageType::MessageType_BleUnpair => 62,
MessageType::MessageType_PublicKey => 63, MessageType::MessageType_GetPublicKey => 63,
MessageType::MessageType_SignTx => 64, MessageType::MessageType_PublicKey => 64,
MessageType::MessageType_TxRequest => 65, MessageType::MessageType_SignTx => 65,
MessageType::MessageType_TxAck => 66, MessageType::MessageType_TxRequest => 66,
MessageType::MessageType_GetAddress => 67, MessageType::MessageType_TxAck => 67,
MessageType::MessageType_Address => 68, MessageType::MessageType_GetAddress => 68,
MessageType::MessageType_TxAckPaymentRequest => 69, MessageType::MessageType_Address => 69,
MessageType::MessageType_SignMessage => 70, MessageType::MessageType_SignMessage => 70,
MessageType::MessageType_VerifyMessage => 71, MessageType::MessageType_VerifyMessage => 71,
MessageType::MessageType_MessageSignature => 72, MessageType::MessageType_MessageSignature => 72,
@ -1591,7 +1591,7 @@ impl MessageType {
} }
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\xacW\ \n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\roptions.proto*\xabW\
\n\x0bMessageType\x12(\n\x16MessageType_Initialize\x10\0\x1a\x0c\x80\xa6\ \n\x0bMessageType\x12(\n\x16MessageType_Initialize\x10\0\x1a\x0c\x80\xa6\
\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\x10MessageType_Ping\ \x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\x10MessageType_Ping\
\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12%\n\x13MessageType_S\ \x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12%\n\x13MessageType_S\
@ -1622,266 +1622,266 @@ static file_descriptor_proto_data: &'static [u8] = b"\
essageType_BackupDevice\x10\"\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\ essageType_BackupDevice\x10\"\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\
\x12(\n\x1aMessageType_EntropyRequest\x10#\x1a\x08\x80\xa6\x1d\x01\x98\ \x12(\n\x1aMessageType_EntropyRequest\x10#\x1a\x08\x80\xa6\x1d\x01\x98\
\xb5\x18\x01\x12$\n\x16MessageType_EntropyAck\x10$\x1a\x08\x80\xa6\x1d\ \xb5\x18\x01\x12$\n\x16MessageType_EntropyAck\x10$\x1a\x08\x80\xa6\x1d\
\x01\x90\xb5\x18\x01\x12,\n\x1dMessageType_EntropyCheckReady\x10\xe2\x07\ \x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_PaymentRequest\x10%\x1a\x08\
\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12/\n\x20MessageType_EntropyCh\ \x80\xa6\x1d\x01\x90\xb5\x18\x01\x12,\n\x1dMessageType_EntropyCheckReady\
eckContinue\x10\xe3\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12+\n\ \x10\xe2\x07\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12/\n\x20MessageTy\
\x1dMessageType_PassphraseRequest\x10)\x1a\x08\x80\xa6\x1d\x01\x98\xb5\ pe_EntropyCheckContinue\x10\xe3\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\
\x18\x01\x12/\n\x19MessageType_PassphraseAck\x10*\x1a\x10\xc0\xb5\x18\ \x01\x12+\n\x1dMessageType_PassphraseRequest\x10)\x1a\x08\x80\xa6\x1d\
\x01\xb0\xb5\x18\x01\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageTy\ \x01\x98\xb5\x18\x01\x12/\n\x19MessageType_PassphraseAck\x10*\x1a\x10\
pe_RecoveryDevice\x10-\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12%\n\ \xc0\xb5\x18\x01\xb0\xb5\x18\x01\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\
\x17MessageType_WordRequest\x10.\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\ \x1aMessageType_RecoveryDevice\x10-\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\
\x12!\n\x13MessageType_WordAck\x10/\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\ \x01\x12%\n\x17MessageType_WordRequest\x10.\x1a\x08\x80\xa6\x1d\x01\x98\
\x01\x12%\n\x17MessageType_GetFeatures\x107\x1a\x08\x80\xa6\x1d\x01\x90\ \xb5\x18\x01\x12!\n\x13MessageType_WordAck\x10/\x1a\x08\x80\xa6\x1d\x01\
\xb5\x18\x01\x12#\n\x15MessageType_SdProtect\x10O\x1a\x08\x80\xa6\x1d\ \x90\xb5\x18\x01\x12%\n\x17MessageType_GetFeatures\x107\x1a\x08\x80\xa6\
\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_ChangeWipeCode\x10R\x1a\x08\ \x1d\x01\x90\xb5\x18\x01\x12#\n\x15MessageType_SdProtect\x10O\x1a\x08\
\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x16MessageType_EndSession\x10S\ \x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_ChangeWipeCode\
\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12)\n\x1bMessageType_DoPreauth\ \x10R\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x16MessageType_EndS\
orized\x10T\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12.\n\x20MessageTyp\ ession\x10S\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12)\n\x1bMessageTyp\
e_PreauthorizedRequest\x10U\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12-\ e_DoPreauthorized\x10T\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12.\n\
\n\x1fMessageType_CancelAuthorization\x10V\x1a\x08\x80\xa6\x1d\x01\x90\ \x20MessageType_PreauthorizedRequest\x10U\x1a\x08\x80\xa6\x1d\x01\x98\
\xb5\x18\x01\x12,\n\x1eMessageType_RebootToBootloader\x10W\x1a\x08\x80\ \xb5\x18\x01\x12-\n\x1fMessageType_CancelAuthorization\x10V\x1a\x08\x80\
\xa6\x1d\x01\x90\xb5\x18\x01\x12)\n\x1bMessageType_GetFirmwareHash\x10X\ \xa6\x1d\x01\x90\xb5\x18\x01\x12,\n\x1eMessageType_RebootToBootloader\
\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12&\n\x18MessageType_FirmwareH\ \x10W\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12)\n\x1bMessageType_GetF\
ash\x10Y\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12$\n\x16MessageType_U\ irmwareHash\x10X\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12&\n\x18Messa\
nlockPath\x10]\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12-\n\x1fMessage\ geType_FirmwareHash\x10Y\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12$\n\
Type_UnlockedPathRequest\x10^\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\ \x16MessageType_UnlockPath\x10]\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\
\x12,\n\x1eMessageType_ShowDeviceTutorial\x10_\x1a\x08\x80\xa6\x1d\x01\ \x12-\n\x1fMessageType_UnlockedPathRequest\x10^\x1a\x08\x80\xa6\x1d\x01\
\x90\xb5\x18\x01\x12*\n\x1cMessageType_UnlockBootloader\x10`\x1a\x08\x80\ \x98\xb5\x18\x01\x12,\n\x1eMessageType_ShowDeviceTutorial\x10_\x1a\x08\
\xa6\x1d\x01\x90\xb5\x18\x01\x12,\n\x1eMessageType_AuthenticateDevice\ \x80\xa6\x1d\x01\x90\xb5\x18\x01\x12*\n\x1cMessageType_UnlockBootloader\
\x10a\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageType_Auth\ \x10`\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12,\n\x1eMessageType_Auth\
enticityProof\x10b\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12)\n\x1aMes\ enticateDevice\x10a\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMe\
sageType_ChangeLanguage\x10\xde\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\ ssageType_AuthenticityProof\x10b\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\
\x01\x121\n\"MessageType_TranslationDataRequest\x10\xdf\x07\x1a\x08\x80\ \x12)\n\x1aMessageType_ChangeLanguage\x10\xde\x07\x1a\x08\x80\xa6\x1d\
\xa6\x1d\x01\x98\xb5\x18\x01\x12-\n\x1eMessageType_TranslationDataAck\ \x01\x90\xb5\x18\x01\x121\n\"MessageType_TranslationDataRequest\x10\xdf\
\x10\xe0\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x19MessageTy\ \x07\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12-\n\x1eMessageType_Trans\
pe_SetBrightness\x10\xe1\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12\ lationDataAck\x10\xe0\x07\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\
#\n\x19MessageType_SetU2FCounter\x10?\x1a\x04\x90\xb5\x18\x01\x12'\n\x1d\ \x19MessageType_SetBrightness\x10\xe1\x07\x1a\x08\x80\xa6\x1d\x01\x90\
MessageType_GetNextU2FCounter\x10P\x1a\x04\x90\xb5\x18\x01\x12$\n\x1aMes\ \xb5\x18\x01\x12#\n\x19MessageType_SetU2FCounter\x10?\x1a\x04\x90\xb5\
sageType_NextU2FCounter\x10Q\x1a\x04\x98\xb5\x18\x01\x125\n-MessageType_\ \x18\x01\x12'\n\x1dMessageType_GetNextU2FCounter\x10P\x1a\x04\x90\xb5\
Deprecated_PassphraseStateRequest\x10M\x1a\x02\x08\x01\x121\n)MessageTyp\ \x18\x01\x12$\n\x1aMessageType_NextU2FCounter\x10Q\x1a\x04\x98\xb5\x18\
e_Deprecated_PassphraseStateAck\x10N\x1a\x02\x08\x01\x12+\n\x19MessageTy\ \x01\x125\n-MessageType_Deprecated_PassphraseStateRequest\x10M\x1a\x02\
pe_FirmwareErase\x10\x06\x1a\x0c\xb8\xb5\x18\x01\x80\xa6\x1d\x01\x90\xb5\ \x08\x01\x121\n)MessageType_Deprecated_PassphraseStateAck\x10N\x1a\x02\
\x18\x01\x12,\n\x1aMessageType_FirmwareUpload\x10\x07\x1a\x0c\xb8\xb5\ \x08\x01\x12+\n\x19MessageType_FirmwareErase\x10\x06\x1a\x0c\xb8\xb5\x18\
\x18\x01\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12-\n\x1bMessageType_FirmwareR\ \x01\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12,\n\x1aMessageType_FirmwareUploa\
equest\x10\x08\x1a\x0c\xb8\xb5\x18\x01\x80\xa6\x1d\x01\x98\xb5\x18\x01\ d\x10\x07\x1a\x0c\xb8\xb5\x18\x01\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12-\n\
\x12(\n\x16MessageType_ProdTestT1\x10\x20\x1a\x0c\xb8\xb5\x18\x01\x80\ \x1bMessageType_FirmwareRequest\x10\x08\x1a\x0c\xb8\xb5\x18\x01\x80\xa6\
\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x15MessageType_BleUnpair\x10\xc1>\ \x1d\x01\x98\xb5\x18\x01\x12(\n\x16MessageType_ProdTestT1\x10\x20\x1a\
\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12&\n\x18MessageType_GetPublic\ \x0c\xb8\xb5\x18\x01\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x15MessageTy\
Key\x10\x0b\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12#\n\x15MessageTyp\ pe_BleUnpair\x10\xc1>\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12&\n\x18\
e_PublicKey\x10\x0c\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12\x20\n\ MessageType_GetPublicKey\x10\x0b\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\
\x12MessageType_SignTx\x10\x0f\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\ \x12#\n\x15MessageType_PublicKey\x10\x0c\x1a\x08\x80\xa6\x1d\x01\x98\xb5\
\x12#\n\x15MessageType_TxRequest\x10\x15\x1a\x08\x80\xa6\x1d\x01\x98\xb5\ \x18\x01\x12\x20\n\x12MessageType_SignTx\x10\x0f\x1a\x08\x80\xa6\x1d\x01\
\x18\x01\x12\x1f\n\x11MessageType_TxAck\x10\x16\x1a\x08\x80\xa6\x1d\x01\ \x90\xb5\x18\x01\x12#\n\x15MessageType_TxRequest\x10\x15\x1a\x08\x80\xa6\
\x90\xb5\x18\x01\x12$\n\x16MessageType_GetAddress\x10\x1d\x1a\x08\x80\ \x1d\x01\x98\xb5\x18\x01\x12\x1f\n\x11MessageType_TxAck\x10\x16\x1a\x08\
\xa6\x1d\x01\x90\xb5\x18\x01\x12!\n\x13MessageType_Address\x10\x1e\x1a\ \x80\xa6\x1d\x01\x90\xb5\x18\x01\x12$\n\x16MessageType_GetAddress\x10\
\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12)\n\x1fMessageType_TxAckPaymentR\ \x1d\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12!\n\x13MessageType_Addre\
equest\x10%\x1a\x04\x90\xb5\x18\x01\x12%\n\x17MessageType_SignMessage\ ss\x10\x1e\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12%\n\x17MessageType\
\x10&\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12'\n\x19MessageType_Veri\ _SignMessage\x10&\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12'\n\x19Mess\
fyMessage\x10'\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12*\n\x1cMessage\ ageType_VerifyMessage\x10'\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12*\
Type_MessageSignature\x10(\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12(\ \n\x1cMessageType_MessageSignature\x10(\x1a\x08\x80\xa6\x1d\x01\x98\xb5\
\n\x1aMessageType_GetOwnershipId\x10+\x1a\x08\x80\xa6\x1d\x01\x90\xb5\ \x18\x01\x12(\n\x1aMessageType_GetOwnershipId\x10+\x1a\x08\x80\xa6\x1d\
\x18\x01\x12%\n\x17MessageType_OwnershipId\x10,\x1a\x08\x80\xa6\x1d\x01\ \x01\x90\xb5\x18\x01\x12%\n\x17MessageType_OwnershipId\x10,\x1a\x08\x80\
\x98\xb5\x18\x01\x12+\n\x1dMessageType_GetOwnershipProof\x101\x1a\x08\ \xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageType_GetOwnershipProof\x10\
\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_OwnershipProof\ 1\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_Ownershi\
\x102\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageType_Auth\ pProof\x102\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageTyp\
orizeCoinJoin\x103\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMes\ e_AuthorizeCoinJoin\x103\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\
sageType_CipherKeyValue\x10\x17\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\ \x1aMessageType_CipherKeyValue\x10\x17\x1a\x08\x80\xa6\x1d\x01\x90\xb5\
\x12*\n\x1cMessageType_CipheredKeyValue\x100\x1a\x08\x80\xa6\x1d\x01\x98\ \x18\x01\x12*\n\x1cMessageType_CipheredKeyValue\x100\x1a\x08\x80\xa6\x1d\
\xb5\x18\x01\x12&\n\x18MessageType_SignIdentity\x105\x1a\x08\x80\xa6\x1d\ \x01\x98\xb5\x18\x01\x12&\n\x18MessageType_SignIdentity\x105\x1a\x08\x80\
\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_SignedIdentity\x106\x1a\x08\ \xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_SignedIdentity\x106\
\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageType_GetECDHSessionKey\ \x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageType_GetECDHSe\
\x10=\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_ECDH\ ssionKey\x10=\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageT\
SessionKey\x10>\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x123\n\x1dMessag\ ype_ECDHSessionKey\x10>\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x123\n\
eType_DebugLinkDecision\x10d\x1a\x10\xc0\xb5\x18\x01\xb0\xb5\x18\x01\x80\ \x1dMessageType_DebugLinkDecision\x10d\x1a\x10\xc0\xb5\x18\x01\xb0\xb5\
\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x1dMessageType_DebugLinkGetState\x10\ \x18\x01\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x1dMessageType_DebugLink\
e\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\xa0\xb5\x18\x01\x12(\n\x1aMess\ GetState\x10e\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\xa0\xb5\x18\x01\
ageType_DebugLinkState\x10f\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12'\ \x12(\n\x1aMessageType_DebugLinkState\x10f\x1a\x08\x80\xa6\x1d\x01\xa8\
\n\x19MessageType_DebugLinkStop\x10g\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\ \xb5\x18\x01\x12'\n\x19MessageType_DebugLinkStop\x10g\x1a\x08\x80\xa6\
\x01\x12&\n\x18MessageType_DebugLinkLog\x10h\x1a\x08\x80\xa6\x1d\x01\xa8\ \x1d\x01\xa0\xb5\x18\x01\x12&\n\x18MessageType_DebugLinkLog\x10h\x1a\x08\
\xb5\x18\x01\x12-\n\x1fMessageType_DebugLinkMemoryRead\x10n\x1a\x08\x80\ \x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12-\n\x1fMessageType_DebugLinkMemoryRe\
\xa6\x1d\x01\xa0\xb5\x18\x01\x12)\n\x1bMessageType_DebugLinkMemory\x10o\ ad\x10n\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12)\n\x1bMessageType_De\
\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12.\n\x20MessageType_DebugLink\ bugLinkMemory\x10o\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12.\n\x20Mes\
MemoryWrite\x10p\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12-\n\x1fMessa\ sageType_DebugLinkMemoryWrite\x10p\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\
geType_DebugLinkFlashErase\x10q\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\ \x01\x12-\n\x1fMessageType_DebugLinkFlashErase\x10q\x1a\x08\x80\xa6\x1d\
\x12*\n\x1bMessageType_DebugLinkLayout\x10\xa9F\x1a\x08\x80\xa6\x1d\x01\ \x01\xa0\xb5\x18\x01\x12*\n\x1bMessageType_DebugLinkLayout\x10\xa9F\x1a\
\xa8\xb5\x18\x01\x120\n!MessageType_DebugLinkReseedRandom\x10\xaaF\x1a\ \x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x120\n!MessageType_DebugLinkReseedR\
\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x120\n!MessageType_DebugLinkRecordS\ andom\x10\xaaF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x120\n!MessageTyp\
creen\x10\xabF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20Message\ e_DebugLinkRecordScreen\x10\xabF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\
Type_DebugLinkEraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\ \x12/\n\x20MessageType_DebugLinkEraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\
\x01\x12/\n\x20MessageType_DebugLinkWatchLayout\x10\xaeF\x1a\x08\x80\xa6\ \x01\xa0\xb5\x18\x01\x12/\n\x20MessageType_DebugLinkWatchLayout\x10\xaeF\
\x1d\x01\xa0\xb5\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvents\ \x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x124\n%MessageType_DebugLinkRes\
\x10\xafF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x123\n$MessageType_Deb\ etDebugEvents\x10\xafF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x123\n$Me\
ugLinkOptigaSetSecMax\x10\xb0F\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\ ssageType_DebugLinkOptigaSetSecMax\x10\xb0F\x1a\x08\x80\xa6\x1d\x01\xa0\
\x12+\n\x20MessageType_EthereumGetPublicKey\x10\xc2\x03\x1a\x04\x90\xb5\ \xb5\x18\x01\x12+\n\x20MessageType_EthereumGetPublicKey\x10\xc2\x03\x1a\
\x18\x01\x12(\n\x1dMessageType_EthereumPublicKey\x10\xc3\x03\x1a\x04\x98\ \x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_EthereumPublicKey\x10\xc3\x03\
\xb5\x18\x01\x12(\n\x1eMessageType_EthereumGetAddress\x108\x1a\x04\x90\ \x1a\x04\x98\xb5\x18\x01\x12(\n\x1eMessageType_EthereumGetAddress\x108\
\xb5\x18\x01\x12%\n\x1bMessageType_EthereumAddress\x109\x1a\x04\x98\xb5\ \x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_EthereumAddress\x109\x1a\
\x18\x01\x12$\n\x1aMessageType_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\ \x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumSignTx\x10:\x1a\x04\
\x01\x12,\n!MessageType_EthereumSignTxEIP1559\x10\xc4\x03\x1a\x04\x90\ \x90\xb5\x18\x01\x12,\n!MessageType_EthereumSignTxEIP1559\x10\xc4\x03\
\xb5\x18\x01\x12'\n\x1dMessageType_EthereumTxRequest\x10;\x1a\x04\x98\ \x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageType_EthereumTxRequest\x10;\
\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\x10<\x1a\x04\x90\xb5\ \x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\x10<\x1a\
\x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\x10@\x1a\x04\x90\xb5\ \x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\x10@\x1a\
\x18\x01\x12+\n!MessageType_EthereumVerifyMessage\x10A\x1a\x04\x90\xb5\ \x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVerifyMessage\x10A\x1a\
\x18\x01\x12.\n$MessageType_EthereumMessageSignature\x10B\x1a\x04\x98\ \x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMessageSignature\x10B\
\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\x10\xd0\x03\x1a\ \x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\x10\
\x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDataStructRequest\ \xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDataStr\
\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_EthereumTypedDat\ uctRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_Ethere\
aStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_Ethere\ umTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)MessageT\
umTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\x01\x120\n%Messa\ ype_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\x01\
geType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\x90\xb5\x18\x01\x12\ \x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\x90\
1\n&MessageType_EthereumTypedDataSignature\x10\xd5\x03\x1a\x04\x98\xb5\ \xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignature\x10\xd5\x03\
\x18\x01\x12,\n!MessageType_EthereumSignTypedHash\x10\xd6\x03\x1a\x04\ \x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedHash\x10\
\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\x10C\x1a\x04\x90\ \xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\x10\
\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\x1a\x04\x98\xb5\ C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\x1a\
\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\x90\xb5\x18\x01\ \x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\x90\
\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\x18\x01\x12'\n\ \xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\x18\
\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\x18\x01\x12)\n\ \x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\x18\
\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\x18\x01\x12&\n\ \x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\x18\
\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\xb5\x18\x01\x12#\ \x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\xb5\
\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\xb5\x18\x01\x12\"\ \x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\xb5\
\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\xb5\x18\x01\x12$\n\ \x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\xb5\
\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\ \x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\xb5\
\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\x90\xb5\x18\x01\ \x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\x90\
\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\x04\x98\xb5\x18\ \xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\x04\
\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\x04\x90\xb5\x18\ \x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\x04\
\x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\x01\x1a\x04\x98\ \x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\x01\
\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\xcf\x01\x1a\x04\ \x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\xcf\
\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\x10\xd0\x01\x1a\ \x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\x10\
\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAccountOp\x10\xd2\ \xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAccoun\
\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_StellarPaymentOp\x10\ tOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_StellarPay\
\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_StellarPathPaymentSt\ mentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_StellarPat\
rictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_Ste\ hPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$Messa\
llarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\x126\n+Message\ geType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\x126\
Type_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\x90\xb5\x18\x01\ \n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\x90\
\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\x1a\x04\x90\xb5\ \xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\x1a\
\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\xd8\x01\x1a\x04\ \x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\xd8\
\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrustOp\x10\xd9\x01\ \x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrustOp\
\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccountMergeOp\x10\ \x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccountMe\
\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarManageData\ rgeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarM\
Op\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarBumpSeq\ anageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Stell\
uenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_StellarMa\ arBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_\
nageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_St\ StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*Messa\
ellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\x01\x125\n*\ geType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\
MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\x04\x90\xb5\ \x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\
\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\x1a\x04\x98\ \x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\
\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\xb1\x02\x1a\ \x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\
\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\x10\xb2\x02\ \xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\
\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAddress\x10\xb3\ \x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAdd\
\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAddress\x10\ ress\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAd\
\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoTxItemAck\ dress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoT\
\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoTxAuxilia\ xItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoT\
ryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#MessageType_\ xAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#Mess\
CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\n$Messa\ ageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\
geType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\x01\x12'\ \n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\
\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\x18\x01\ \x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\
\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\xb5\x18\ \x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\
\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\x04\x98\ \xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\
\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\x1a\x04\ \x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\
\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\x02\x1a\ \x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\
\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\xc2\x02\ \x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\
\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\x10\xc3\ \xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\
\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\x10\xc4\ \x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\
\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCertificate\ \x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCert\
\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_CardanoTxWith\ ificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Cardan\
drawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_CardanoTx\ oTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_Ca\
AuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_\ rdanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\
CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&MessageType_\ geType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Messa\
CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Me\ geType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\
ssageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\xb5\x18\x01\ \x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\
\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\x04\x98\xb5\ \xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\
\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\x04\x90\xb5\ \x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\
\x18\x01\x12/\n$MessageType_CardanoTxCollateralInput\x10\xcd\x02\x1a\x04\ \x04\x90\xb5\x18\x01\x12/\n$MessageType_CardanoTxCollateralInput\x10\xcd\
\x90\xb5\x18\x01\x12.\n#MessageType_CardanoTxRequiredSigner\x10\xce\x02\ \x02\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_CardanoTxRequiredSigner\
\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_CardanoTxInlineDatumChunk\ \x10\xce\x02\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_CardanoTxInlineD\
\x10\xcf\x02\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_CardanoTxReferen\ atumChunk\x10\xcf\x02\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_Cardano\
ceScriptChunk\x10\xd0\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_Car\ TxReferenceScriptChunk\x10\xd0\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#Messag\
danoTxReferenceInput\x10\xd1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\ eType_CardanoTxReferenceInput\x10\xd1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\
geType_RippleGetAddress\x10\x90\x03\x1a\x04\x90\xb5\x18\x01\x12$\n\x19Me\ \x1cMessageType_RippleGetAddress\x10\x90\x03\x1a\x04\x90\xb5\x18\x01\x12\
ssageType_RippleAddress\x10\x91\x03\x1a\x04\x98\xb5\x18\x01\x12#\n\x18Me\ $\n\x19MessageType_RippleAddress\x10\x91\x03\x1a\x04\x98\xb5\x18\x01\x12\
ssageType_RippleSignTx\x10\x92\x03\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMes\ #\n\x18MessageType_RippleSignTx\x10\x92\x03\x1a\x04\x90\xb5\x18\x01\x12%\
sageType_RippleSignedTx\x10\x93\x03\x1a\x04\x90\xb5\x18\x01\x123\n(Messa\ \n\x1aMessageType_RippleSignedTx\x10\x93\x03\x1a\x04\x90\xb5\x18\x01\x12\
geType_MoneroTransactionInitRequest\x10\xf5\x03\x1a\x04\x98\xb5\x18\x01\ 3\n(MessageType_MoneroTransactionInitRequest\x10\xf5\x03\x1a\x04\x98\xb5\
\x12/\n$MessageType_MoneroTransactionInitAck\x10\xf6\x03\x1a\x04\x98\xb5\ \x18\x01\x12/\n$MessageType_MoneroTransactionInitAck\x10\xf6\x03\x1a\x04\
\x18\x01\x127\n,MessageType_MoneroTransactionSetInputRequest\x10\xf7\x03\ \x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionSetInputRequest\x10\
\x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroTransactionSetInputAck\ \xf7\x03\x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroTransactionSet\
\x10\xf8\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactio\ InputAck\x10\xf8\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTr\
nInputViniRequest\x10\xfb\x03\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\ ansactionInputViniRequest\x10\xfb\x03\x1a\x04\x98\xb5\x18\x01\x124\n)Mes\
_MoneroTransactionInputViniAck\x10\xfc\x03\x1a\x04\x98\xb5\x18\x01\x12;\ sageType_MoneroTransactionInputViniAck\x10\xfc\x03\x1a\x04\x98\xb5\x18\
\n0MessageType_MoneroTransactionAllInputsSetRequest\x10\xfd\x03\x1a\x04\ \x01\x12;\n0MessageType_MoneroTransactionAllInputsSetRequest\x10\xfd\x03\
\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionAllInputsSetAck\x10\ \x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionAllInputsSe\
\xfe\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactionSet\ tAck\x10\xfe\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransa\
OutputRequest\x10\xff\x03\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_Mon\ ctionSetOutputRequest\x10\xff\x03\x1a\x04\x98\xb5\x18\x01\x124\n)Message\
eroTransactionSetOutputAck\x10\x80\x04\x1a\x04\x98\xb5\x18\x01\x128\n-Me\ Type_MoneroTransactionSetOutputAck\x10\x80\x04\x1a\x04\x98\xb5\x18\x01\
ssageType_MoneroTransactionAllOutSetRequest\x10\x81\x04\x1a\x04\x98\xb5\ \x128\n-MessageType_MoneroTransactionAllOutSetRequest\x10\x81\x04\x1a\
\x18\x01\x124\n)MessageType_MoneroTransactionAllOutSetAck\x10\x82\x04\ \x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroTransactionAllOutSetAck\
\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactionSignInputRe\ \x10\x82\x04\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactio\
quest\x10\x83\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroTrans\ nSignInputRequest\x10\x83\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\
actionSignInputAck\x10\x84\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageTyp\ _MoneroTransactionSignInputAck\x10\x84\x04\x1a\x04\x98\xb5\x18\x01\x124\
e_MoneroTransactionFinalRequest\x10\x85\x04\x1a\x04\x98\xb5\x18\x01\x120\ \n)MessageType_MoneroTransactionFinalRequest\x10\x85\x04\x1a\x04\x98\xb5\
\n%MessageType_MoneroTransactionFinalAck\x10\x86\x04\x1a\x04\x98\xb5\x18\ \x18\x01\x120\n%MessageType_MoneroTransactionFinalAck\x10\x86\x04\x1a\
\x01\x126\n+MessageType_MoneroKeyImageExportInitRequest\x10\x92\x04\x1a\ \x04\x98\xb5\x18\x01\x126\n+MessageType_MoneroKeyImageExportInitRequest\
\x04\x98\xb5\x18\x01\x122\n'MessageType_MoneroKeyImageExportInitAck\x10\ \x10\x92\x04\x1a\x04\x98\xb5\x18\x01\x122\n'MessageType_MoneroKeyImageEx\
\x93\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroKeyImageSyncSt\ portInitAck\x10\x93\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_Moner\
epRequest\x10\x94\x04\x1a\x04\x98\xb5\x18\x01\x120\n%MessageType_MoneroK\ oKeyImageSyncStepRequest\x10\x94\x04\x1a\x04\x98\xb5\x18\x01\x120\n%Mess\
eyImageSyncStepAck\x10\x95\x04\x1a\x04\x98\xb5\x18\x01\x125\n*MessageTyp\ ageType_MoneroKeyImageSyncStepAck\x10\x95\x04\x1a\x04\x98\xb5\x18\x01\
e_MoneroKeyImageSyncFinalRequest\x10\x96\x04\x1a\x04\x98\xb5\x18\x01\x12\ \x125\n*MessageType_MoneroKeyImageSyncFinalRequest\x10\x96\x04\x1a\x04\
1\n&MessageType_MoneroKeyImageSyncFinalAck\x10\x97\x04\x1a\x04\x98\xb5\ \x98\xb5\x18\x01\x121\n&MessageType_MoneroKeyImageSyncFinalAck\x10\x97\
\x18\x01\x12'\n\x1cMessageType_MoneroGetAddress\x10\x9c\x04\x1a\x04\x90\ \x04\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_MoneroGetAddress\x10\
\xb5\x18\x01\x12$\n\x19MessageType_MoneroAddress\x10\x9d\x04\x1a\x04\x98\ \x9c\x04\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_MoneroAddress\x10\
\xb5\x18\x01\x12(\n\x1dMessageType_MoneroGetWatchKey\x10\x9e\x04\x1a\x04\ \x9d\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_MoneroGetWatchKey\
\x90\xb5\x18\x01\x12%\n\x1aMessageType_MoneroWatchKey\x10\x9f\x04\x1a\ \x10\x9e\x04\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_MoneroWatchKe\
\x04\x98\xb5\x18\x01\x12-\n\"MessageType_DebugMoneroDiagRequest\x10\xa2\ y\x10\x9f\x04\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_DebugMoneroDia\
\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_DebugMoneroDiagAck\ gRequest\x10\xa2\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_Debug\
\x10\xa3\x04\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_MoneroGetTxKeyRe\ MoneroDiagAck\x10\xa3\x04\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_Mon\
quest\x10\xa6\x04\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_MoneroGe\ eroGetTxKeyRequest\x10\xa6\x04\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessage\
tTxKeyAck\x10\xa7\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroL\ Type_MoneroGetTxKeyAck\x10\xa7\x04\x1a\x04\x98\xb5\x18\x01\x124\n)Messag\
iveRefreshStartRequest\x10\xa8\x04\x1a\x04\x90\xb5\x18\x01\x120\n%Messag\ eType_MoneroLiveRefreshStartRequest\x10\xa8\x04\x1a\x04\x90\xb5\x18\x01\
eType_MoneroLiveRefreshStartAck\x10\xa9\x04\x1a\x04\x98\xb5\x18\x01\x123\ \x120\n%MessageType_MoneroLiveRefreshStartAck\x10\xa9\x04\x1a\x04\x98\
\n(MessageType_MoneroLiveRefreshStepRequest\x10\xaa\x04\x1a\x04\x90\xb5\ \xb5\x18\x01\x123\n(MessageType_MoneroLiveRefreshStepRequest\x10\xaa\x04\
\x18\x01\x12/\n$MessageType_MoneroLiveRefreshStepAck\x10\xab\x04\x1a\x04\ \x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_MoneroLiveRefreshStepAck\x10\
\x98\xb5\x18\x01\x124\n)MessageType_MoneroLiveRefreshFinalRequest\x10\ \xab\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroLiveRefreshFin\
\xac\x04\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_MoneroLiveRefreshFin\ alRequest\x10\xac\x04\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_MoneroL\
alAck\x10\xad\x04\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bMessageType_EosGetPu\ iveRefreshFinalAck\x10\xad\x04\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bMessage\
blicKey\x10\xd8\x04\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_EosPub\ Type_EosGetPublicKey\x10\xd8\x04\x1a\x04\x90\xb5\x18\x01\x12#\n\x18Messa\
licKey\x10\xd9\x04\x1a\x04\x98\xb5\x18\x01\x12\x20\n\x15MessageType_EosS\ geType_EosPublicKey\x10\xd9\x04\x1a\x04\x98\xb5\x18\x01\x12\x20\n\x15Mes\
ignTx\x10\xda\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_EosTxAct\ sageType_EosSignTx\x10\xda\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessage\
ionRequest\x10\xdb\x04\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_Eos\ Type_EosTxActionRequest\x10\xdb\x04\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMe\
TxActionAck\x10\xdc\x04\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_E\ ssageType_EosTxActionAck\x10\xdc\x04\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17\
osSignedTx\x10\xdd\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_Bin\ MessageType_EosSignedTx\x10\xdd\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMe\
anceGetAddress\x10\xbc\x05\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType\ ssageType_BinanceGetAddress\x10\xbc\x05\x1a\x04\x90\xb5\x18\x01\x12%\n\
_BinanceAddress\x10\xbd\x05\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageTyp\ \x1aMessageType_BinanceAddress\x10\xbd\x05\x1a\x04\x98\xb5\x18\x01\x12*\
e_BinanceGetPublicKey\x10\xbe\x05\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMess\ \n\x1fMessageType_BinanceGetPublicKey\x10\xbe\x05\x1a\x04\x90\xb5\x18\
ageType_BinancePublicKey\x10\xbf\x05\x1a\x04\x98\xb5\x18\x01\x12$\n\x19M\ \x01\x12'\n\x1cMessageType_BinancePublicKey\x10\xbf\x05\x1a\x04\x98\xb5\
essageType_BinanceSignTx\x10\xc0\x05\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cM\ \x18\x01\x12$\n\x19MessageType_BinanceSignTx\x10\xc0\x05\x1a\x04\x90\xb5\
essageType_BinanceTxRequest\x10\xc1\x05\x1a\x04\x98\xb5\x18\x01\x12)\n\ \x18\x01\x12'\n\x1cMessageType_BinanceTxRequest\x10\xc1\x05\x1a\x04\x98\
\x1eMessageType_BinanceTransferMsg\x10\xc2\x05\x1a\x04\x90\xb5\x18\x01\ \xb5\x18\x01\x12)\n\x1eMessageType_BinanceTransferMsg\x10\xc2\x05\x1a\
\x12&\n\x1bMessageType_BinanceOrderMsg\x10\xc3\x05\x1a\x04\x90\xb5\x18\ \x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_BinanceOrderMsg\x10\xc3\x05\
\x01\x12'\n\x1cMessageType_BinanceCancelMsg\x10\xc4\x05\x1a\x04\x90\xb5\ \x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_BinanceCancelMsg\x10\xc4\
\x18\x01\x12&\n\x1bMessageType_BinanceSignedTx\x10\xc5\x05\x1a\x04\x98\ \x05\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_BinanceSignedTx\x10\
\xb5\x18\x01\x126\n+MessageType_WebAuthnListResidentCredentials\x10\xa0\ \xc5\x05\x1a\x04\x98\xb5\x18\x01\x126\n+MessageType_WebAuthnListResident\
\x06\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_WebAuthnCredentials\ Credentials\x10\xa0\x06\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_We\
\x10\xa1\x06\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_WebAuthnAddResid\ bAuthnCredentials\x10\xa1\x06\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\
entCredential\x10\xa2\x06\x1a\x04\x90\xb5\x18\x01\x127\n,MessageType_Web\ _WebAuthnAddResidentCredential\x10\xa2\x06\x1a\x04\x90\xb5\x18\x01\x127\
AuthnRemoveResidentCredential\x10\xa3\x06\x1a\x04\x90\xb5\x18\x01\x12)\n\ \n,MessageType_WebAuthnRemoveResidentCredential\x10\xa3\x06\x1a\x04\x90\
\x1eMessageType_SolanaGetPublicKey\x10\x84\x07\x1a\x04\x90\xb5\x18\x01\ \xb5\x18\x01\x12)\n\x1eMessageType_SolanaGetPublicKey\x10\x84\x07\x1a\
\x12&\n\x1bMessageType_SolanaPublicKey\x10\x85\x07\x1a\x04\x98\xb5\x18\ \x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_SolanaPublicKey\x10\x85\x07\
\x01\x12'\n\x1cMessageType_SolanaGetAddress\x10\x86\x07\x1a\x04\x90\xb5\ \x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_SolanaGetAddress\x10\x86\
\x18\x01\x12$\n\x19MessageType_SolanaAddress\x10\x87\x07\x1a\x04\x98\xb5\ \x07\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_SolanaAddress\x10\x87\
\x18\x01\x12#\n\x18MessageType_SolanaSignTx\x10\x88\x07\x1a\x04\x90\xb5\ \x07\x1a\x04\x98\xb5\x18\x01\x12#\n\x18MessageType_SolanaSignTx\x10\x88\
\x18\x01\x12(\n\x1dMessageType_SolanaTxSignature\x10\x89\x07\x1a\x04\x98\ \x07\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_SolanaTxSignature\x10\
\xb5\x18\x01\x12%\n\x1aMessageType_NostrGetPubkey\x10\xd1\x0f\x1a\x04\ \x89\x07\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_NostrGetPubkey\
\x90\xb5\x18\x01\x12\"\n\x17MessageType_NostrPubkey\x10\xd2\x0f\x1a\x04\ \x10\xd1\x0f\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17MessageType_NostrPubkey\
\x98\xb5\x18\x01\x12%\n\x1aMessageType_NostrSignEvent\x10\xd3\x0f\x1a\ \x10\xd2\x0f\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMessageType_NostrSignEven\
\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_NostrEventSignature\x10\xd4\ t\x10\xd3\x0f\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_NostrEventSi\
\x0f\x1a\x04\x98\xb5\x18\x01\x12)\n\x1eMessageType_BenchmarkListNames\ gnature\x10\xd4\x0f\x1a\x04\x98\xb5\x18\x01\x12)\n\x1eMessageType_Benchm\
\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageType_BenchmarkNames\ arkListNames\x10\x8cG\x1a\x04\x80\xa6\x1d\x01\x12%\n\x1aMessageType_Benc\
\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_BenchmarkRun\x10\ hmarkNames\x10\x8dG\x1a\x04\x80\xa6\x1d\x01\x12#\n\x18MessageType_Benchm\
\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_BenchmarkResult\x10\ arkRun\x10\x8eG\x1a\x04\x80\xa6\x1d\x01\x12&\n\x1bMessageType_BenchmarkR\
\x8fG\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\x04\x08Z\x10\\\"\ esult\x10\x8fG\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\x04\x08\
\x04\x08G\x10J\"\x04\x08r\x10z\"\x06\x08\xdb\x01\x10\xdb\x01\"\x06\x08\ Z\x10\\\"\x04\x08G\x10J\"\x04\x08r\x10z\"\x06\x08\xdb\x01\x10\xdb\x01\"\
\xe0\x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\x02\x10\ \x06\x08\xe0\x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\
\xb8\x02\"\x06\x08\xe8\x07\x10\xcb\x08B8\n#com.satoshilabs.trezor.lib.pr\ \x02\x10\xb8\x02\"\x06\x08\xe8\x07\x10\xcb\x08B8\n#com.satoshilabs.trezo\
otobufB\rTrezorMessage\x80\xa6\x1d\x01\ r.lib.protobufB\rTrezorMessage\x80\xa6\x1d\x01\
"; ";
/// `FileDescriptorProto` object which was a source for this generated file /// `FileDescriptorProto` object which was a source for this generated file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -93,7 +93,7 @@ def make_payment_request(
h_pr.update(h_outputs.digest()) h_pr.update(h_outputs.digest())
return messages.TxAckPaymentRequest( return messages.PaymentRequest(
recipient_name=recipient_name, recipient_name=recipient_name,
amount=sum(txo.amount for txo in outputs if txo.address), amount=sum(txo.amount for txo in outputs if txo.address),
memos=msg_memos, memos=msg_memos,