feat(core): SLIP-24 payment requests for Stellar
What changed, and why it matters
This commit adds support for SLIP-24 payment requests to Stellar transactions on Trezor devices. It lets a merchant or service provider attach a signed payment request to a Stellar transaction, which the device verifies and shows on screen before signing. The change is a feature addition, not a fix for a known vulnerability, and it includes safeguards such as rejecting payment requests that contain multiple operations.
Review the PaymentRequestVerifier implementation and the confirm_payment_request UI layout to ensure the verified amount, recipient, and asset are displayed unambiguously and cannot be confused with ordinary operation screens. Verify that suppressing per-operation confirmation does not allow a malicious host to smuggle unexpected operation types inside a payment-request transaction.
Security signals we found
New optional payment request field added to StellarSignTx protobuf
Operation confirmations suppressed when payment request is present
Payment request verified after serialization but before final user confirmation
Multiple operations explicitly rejected in payment-request mode
Legacy firmware configured to ignore the new field
Keychain decorator changed from auto_keychain to with_slip44_keychain with SLIP-21 namespace for SLIP-24
Evidence from the diff
The commit extends the Stellar signing flow with an optional PaymentRequest field in StellarSignTx. When present, the device uses PaymentRequestVerifier to check the request’s signature and binds it to a single StellarPaymentOp output. Operation-level confirmation is skipped when a payment request is active; instead, a single payment-request confirmation screen is shown after all operations are serialized. The legacy firmware ignores the new field (FT_IGNORE). Tests and UI fixtures are added for the new flow, including a negative test for multiple operations.
Changed components
core/src/apps/stellar/sign_tx.pycore/src/apps/stellar/layout.pycore/src/apps/stellar/operations/__init__.pycommon/protob/messages-stellar.protolegacy/firmware/protob/messages-stellar.optionspython/src/trezorlib/messages.pycore/src/trezor/messages.pyrust/trezor-client/src/protos/generated/messages_stellar.rsInspect captured patch +544 / −136
diff --git a/common/protob/messages-stellar.proto b/common/protob/messages-stellar.proto
index 056c55bb..f5d6d797 100644
--- a/common/protob/messages-stellar.proto
+++ b/common/protob/messages-stellar.proto
@@ -5,6 +5,9 @@ package hw.trezor.messages.stellar;
option java_package = "com.satoshilabs.trezor.lib.protobuf";
option java_outer_classname = "TrezorMessageStellar";
+import "messages-common.proto";
+import "options.proto";
+
// https://github.com/stellar/stellar-core/blob/02d26858069de7c0eefe065056fb0a19bf72ea56/src/xdr/Stellar-ledger-entries.x#L25-L31
enum StellarAssetType {
NATIVE = 0;
@@ -61,6 +64,7 @@ message StellarSignTx {
optional uint64 memo_id = 12; // 8-byte uint64
optional bytes memo_hash = 13; // 32 bytes representing a hash
required uint32 num_operations = 14; // number of operations in this transaction
+ optional common.PaymentRequest payment_req = 15 [(experimental_field)=true]; // SLIP-24 payment request
// https://github.com/stellar/stellar-core/blob/02d26858069de7c0eefe065056fb0a19bf72ea56/src/xdr/Stellar-transaction.x#L506-L513
enum StellarMemoType {
diff --git a/common/tests/fixtures/stellar/sign_tx.json b/common/tests/fixtures/stellar/sign_tx.json
index 4e6c314c..0335d38d 100644
--- a/common/tests/fixtures/stellar/sign_tx.json
+++ b/common/tests/fixtures/stellar/sign_tx.json
@@ -204,6 +204,121 @@
"signature": "3dyV+ehncXreLCg6lDZWsYUwUtWoggNOdDDrRCn3YZ/V2rX+6c0ngydfWfgI3HOpM9yfUmrIKzyXNMPW31xzCQ=="
}
},
+ {
+ "name": "StellarPaymentOp-memo-and-payment-request",
+ "experimental": true,
+ "parameters": {
+ "xdr": "AAAAAgAAAAAvIrnGLwi3dPPr5t1ufbk8PsLL3gJ5Vho9nFIluMMikgAAAGQAAAAAAAAD6AAAAAEAAAAAG4J3zQAAAABd5CqEAAAAAAAAAAEAAAAAAAAAAQAAAABdVWQkZrGFuEMVLp4hkVHbxYkgJ+xAEBpRe+1coDDC4AAAAAFYAAAAAAAAACmElgLCDlg2XxI8Eth6HKRVDRDNIbCuDhjUTj5W/WoVAAAAAB3PFpgAAAAAAAAAAA==",
+ "address_n": "m/44'/148'/0'",
+ "network_passphrase": "Test SDF Network ; September 2015",
+ "tx": {
+ "source_account": "GAXSFOOGF4ELO5HT5PTN23T5XE6D5QWL3YBHSVQ2HWOFEJNYYMRJENBV",
+ "fee": 100,
+ "sequence_number": 1000,
+ "timebounds_start": 461535181,
+ "timebounds_end": 1575234180,
+ "memo_type": "TEXT",
+ "memo_text": "Hello payment requests!"
+ },
+ "operations": [
+ {
+ "_message_type": "StellarPaymentOp",
+ "destination_account": "GBOVKZBEM2YYLOCDCUXJ4IMRKHN4LCJAE7WEAEA2KF562XFAGDBOB64V",
+ "asset": {
+ "type": "ALPHANUM4",
+ "code": "X",
+ "issuer": "GAUYJFQCYIHFQNS7CI6BFWD2DSSFKDIQZUQ3BLQODDKE4PSW7VVBKENC"
+ },
+ "amount": 500111000
+ }
+ ],
+ "payment_request": true
+ },
+ "result": {
+ "public_key": "2f22b9c62f08b774f3ebe6dd6e7db93c3ec2cbde0279561a3d9c5225b8c32292",
+ "signature": "ATGEYTnuzlDzIGtAPSdZ67ALfKTfa7jrVRHyAXnAYz/pFcT8q/F2rGlhwn1UHxove5bHaMu9NyiqhHH4yoSBCA=="
+ },
+ "skip_models": ["t1"]
+ },
+ {
+ "name": "StellarPaymentOp-payment-request",
+ "experimental": true,
+ "parameters": {
+ "xdr": "AAAAAgAAAAAvIrnGLwi3dPPr5t1ufbk8PsLL3gJ5Vho9nFIluMMikgAAAGQAAAAAAAAD6AAAAAEAAAAAG4J3zQAAAABd5CqEAAAAAAAAAAEAAAAAAAAAAQAAAABdVWQkZrGFuEMVLp4hkVHbxYkgJ+xAEBpRe+1coDDC4AAAAAFYAAAAAAAAACmElgLCDlg2XxI8Eth6HKRVDRDNIbCuDhjUTj5W/WoVAAAAAB3PFpgAAAAAAAAAAA==",
+ "address_n": "m/44'/148'/0'",
+ "network_passphrase": "Test SDF Network ; September 2015",
+ "tx": {
+ "source_account": "GAXSFOOGF4ELO5HT5PTN23T5XE6D5QWL3YBHSVQ2HWOFEJNYYMRJENBV",
+ "fee": 100,
+ "sequence_number": 1000,
+ "timebounds_start": 461535181,
+ "timebounds_end": 1575234180,
+ "memo_type": "NONE"
+ },
+ "operations": [
+ {
+ "_message_type": "StellarPaymentOp",
+ "destination_account": "GBOVKZBEM2YYLOCDCUXJ4IMRKHN4LCJAE7WEAEA2KF562XFAGDBOB64V",
+ "asset": {
+ "type": "ALPHANUM4",
+ "code": "X",
+ "issuer": "GAUYJFQCYIHFQNS7CI6BFWD2DSSFKDIQZUQ3BLQODDKE4PSW7VVBKENC"
+ },
+ "amount": 500111000
+ }
+ ],
+ "payment_request": true
+ },
+ "result": {
+ "public_key": "2f22b9c62f08b774f3ebe6dd6e7db93c3ec2cbde0279561a3d9c5225b8c32292",
+ "signature": "nPrFo5IQ5vESiX9F4fi+zOuZom/TM8ZzO+qPHSxTmC2JnILqtbh91CV8Teao0jVrovjQmmgxLPzOSjgPNYmJBw=="
+ },
+ "skip_models": ["t1"]
+ },
+ {
+ "name": "StellarPaymentOp-payment-request-multiple-operations",
+ "experimental": true,
+ "parameters": {
+ "xdr": "AAAAAgAAAAAvIrnGLwi3dPPr5t1ufbk8PsLL3gJ5Vho9nFIluMMikgAAAGQAAAAAAAAD6AAAAAEAAAAAG4J3zQAAAABd5CqEAAAAAAAAAAEAAAAAAAAAAQAAAABdVWQkZrGFuEMVLp4hkVHbxYkgJ+xAEBpRe+1coDDC4AAAAAFYAAAAAAAAACmElgLCDlg2XxI8Eth6HKRVDRDNIbCuDhjUTj5W/WoVAAAAAB3PFpgAAAAAAAAAAA==",
+ "address_n": "m/44'/148'/0'",
+ "network_passphrase": "Test SDF Network ; September 2015",
+ "tx": {
+ "source_account": "GAXSFOOGF4ELO5HT5PTN23T5XE6D5QWL3YBHSVQ2HWOFEJNYYMRJENBV",
+ "fee": 100,
+ "sequence_number": 1000,
+ "timebounds_start": 461535181,
+ "timebounds_end": 1575234180,
+ "memo_type": "NONE"
+ },
+ "operations": [
+ {
+ "_message_type": "StellarPaymentOp",
+ "destination_account": "GBOVKZBEM2YYLOCDCUXJ4IMRKHN4LCJAE7WEAEA2KF562XFAGDBOB64V",
+ "asset": {
+ "type": "ALPHANUM4",
+ "code": "X",
+ "issuer": "GAUYJFQCYIHFQNS7CI6BFWD2DSSFKDIQZUQ3BLQODDKE4PSW7VVBKENC"
+ },
+ "amount": 200111000
+ },
+ {
+ "_message_type": "StellarPaymentOp",
+ "destination_account": "GBOVKZBEM2YYLOCDCUXJ4IMRKHN4LCJAE7WEAEA2KF562XFAGDBOB64V",
+ "asset": {
+ "type": "ALPHANUM4",
+ "code": "X",
+ "issuer": "GAUYJFQCYIHFQNS7CI6BFWD2DSSFKDIQZUQ3BLQODDKE4PSW7VVBKENC"
+ },
+ "amount": 300111000
+ }
+ ],
+ "payment_request": true
+ },
+ "result": {
+ "error_message": "Multiple operations not supported for payment requests"
+ },
+ "skip_models": ["t1"]
+ },
{
"name": "StellarAllowTrustOp-allow",
"parameters": {
diff --git a/core/src/apps/stellar/layout.py b/core/src/apps/stellar/layout.py
index a350ed99..8ac91718 100644
--- a/core/src/apps/stellar/layout.py
+++ b/core/src/apps/stellar/layout.py
@@ -1,14 +1,18 @@
from typing import TYPE_CHECKING
import trezor.ui.layouts as layouts
-from trezor import TR, strings
+from trezor import TR, strings, wire
from trezor.enums import ButtonRequestType
+from apps.common.paths import address_n_to_str
+
from . import consts
if TYPE_CHECKING:
from trezor.enums import StellarMemoType
- from trezor.messages import StellarAsset
+ from trezor.messages import PaymentRequest, StellarAsset
+
+ from apps.common.paths import Bip32Path
async def require_confirm_tx_source(tx_source: str) -> None:
@@ -53,6 +57,63 @@ async def require_confirm_memo(memo_type: StellarMemoType, memo_text: str) -> No
)
+async def require_confirm_payment_request(
+ provider_address: str,
+ verified_payment_request: PaymentRequest,
+ address_n: Bip32Path | None,
+ asset: StellarAsset,
+) -> None:
+ from trezor.ui.layouts import confirm_payment_request
+
+ assert verified_payment_request.amount is not None # required for non-CoinJoin
+
+ total_amount = format_amount(verified_payment_request.amount, asset)
+
+ texts: list[tuple[str | None, str]] = []
+ refunds: list[tuple[str, str | None, str | None]] = []
+ trades: list[tuple[str, str, str, str | None, str | None]] = []
+ for memo in verified_payment_request.memos:
+ if memo.text_memo is not None:
+ texts.append((None, memo.text_memo.text))
+ elif memo.text_details_memo is not None:
+ texts.append((memo.text_details_memo.title, memo.text_details_memo.text))
+ elif memo.refund_memo:
+ refund_account_path = address_n_to_str(memo.refund_memo.address_n)
+ refunds.append((memo.refund_memo.address, None, refund_account_path))
+ elif memo.coin_purchase_memo:
+ coin_purchase_account_path = address_n_to_str(
+ memo.coin_purchase_memo.address_n
+ )
+ trades.append(
+ (
+ f"-\u00A0{total_amount}",
+ f"+\u00A0{memo.coin_purchase_memo.amount}",
+ memo.coin_purchase_memo.address,
+ None,
+ coin_purchase_account_path,
+ )
+ )
+ else:
+ raise wire.DataError("Unrecognized memo type in payment request memo.")
+
+ account_path = address_n_to_str(address_n) if address_n else None
+ account_items = []
+ if account_path:
+ account_items.append((TR.address_details__derivation_path, account_path))
+
+ await confirm_payment_request(
+ verified_payment_request.recipient_name,
+ provider_address,
+ texts,
+ refunds,
+ trades,
+ account_items,
+ None,
+ None,
+ None,
+ )
+
+
async def require_confirm_final(
address_n: list[int],
fee: int,
diff --git a/core/src/apps/stellar/operations/__init__.py b/core/src/apps/stellar/operations/__init__.py
index ea1a565a..e69c12ea 100644
--- a/core/src/apps/stellar/operations/__init__.py
+++ b/core/src/apps/stellar/operations/__init__.py
@@ -6,7 +6,10 @@ if TYPE_CHECKING:
async def process_operation(
- w: Writer, op: StellarMessageType, output_index: int
+ w: Writer,
+ op: StellarMessageType,
+ output_index: int,
+ confirm: bool,
) -> None:
# Importing the stuff inside (only) function saves around 100 bytes here
# (probably because the local lookup is more efficient than a global lookup)
@@ -23,46 +26,60 @@ async def process_operation(
writers.write_uint32(w, consts.get_op_code(op))
# NOTE: each branch below has 45 bytes (26 the actions, 19 the condition)
if messages.StellarAccountMergeOp.is_type_of(op):
- await layout.confirm_account_merge_op(op, output_index)
+ if confirm:
+ await layout.confirm_account_merge_op(op, output_index)
serialize.write_account_merge_op(w, op)
elif messages.StellarAllowTrustOp.is_type_of(op):
- await layout.confirm_allow_trust_op(op)
+ if confirm:
+ await layout.confirm_allow_trust_op(op)
serialize.write_allow_trust_op(w, op)
elif messages.StellarBumpSequenceOp.is_type_of(op):
- await layout.confirm_bump_sequence_op(op)
+ if confirm:
+ await layout.confirm_bump_sequence_op(op)
serialize.write_bump_sequence_op(w, op)
elif messages.StellarChangeTrustOp.is_type_of(op):
- await layout.confirm_change_trust_op(op)
+ if confirm:
+ await layout.confirm_change_trust_op(op)
serialize.write_change_trust_op(w, op)
elif messages.StellarCreateAccountOp.is_type_of(op):
- await layout.confirm_create_account_op(op, output_index)
+ if confirm:
+ await layout.confirm_create_account_op(op, output_index)
serialize.write_create_account_op(w, op)
elif messages.StellarCreatePassiveSellOfferOp.is_type_of(op):
- await layout.confirm_create_passive_sell_offer_op(op)
+ if confirm:
+ await layout.confirm_create_passive_sell_offer_op(op)
serialize.write_create_passive_sell_offer_op(w, op)
elif messages.StellarManageDataOp.is_type_of(op):
- await layout.confirm_manage_data_op(op)
+ if confirm:
+ await layout.confirm_manage_data_op(op)
serialize.write_manage_data_op(w, op)
elif messages.StellarManageBuyOfferOp.is_type_of(op):
- await layout.confirm_manage_buy_offer_op(op)
+ if confirm:
+ await layout.confirm_manage_buy_offer_op(op)
serialize.write_manage_buy_offer_op(w, op)
elif messages.StellarManageSellOfferOp.is_type_of(op):
- await layout.confirm_manage_sell_offer_op(op)
+ if confirm:
+ await layout.confirm_manage_sell_offer_op(op)
serialize.write_manage_sell_offer_op(w, op)
elif messages.StellarPathPaymentStrictReceiveOp.is_type_of(op):
- await layout.confirm_path_payment_strict_receive_op(op, output_index)
+ if confirm:
+ await layout.confirm_path_payment_strict_receive_op(op, output_index)
serialize.write_path_payment_strict_receive_op(w, op)
elif messages.StellarPathPaymentStrictSendOp.is_type_of(op):
- await layout.confirm_path_payment_strict_send_op(op, output_index)
+ if confirm:
+ await layout.confirm_path_payment_strict_send_op(op, output_index)
serialize.write_path_payment_strict_send_op(w, op)
elif messages.StellarPaymentOp.is_type_of(op):
- await layout.confirm_payment_op(op, output_index)
+ if confirm:
+ await layout.confirm_payment_op(op, output_index)
serialize.write_payment_op(w, op)
elif messages.StellarSetOptionsOp.is_type_of(op):
- await layout.confirm_set_options_op(op)
+ if confirm:
+ await layout.confirm_set_options_op(op)
serialize.write_set_options_op(w, op)
elif messages.StellarClaimClaimableBalanceOp.is_type_of(op):
- await layout.confirm_claim_claimable_balance_op(op)
+ if confirm:
+ await layout.confirm_claim_claimable_balance_op(op)
serialize.write_claim_claimable_balance_op(w, op)
else:
raise ValueError("Unknown operation")
diff --git a/core/src/apps/stellar/sign_tx.py b/core/src/apps/stellar/sign_tx.py
index 44cdd8ea..055a4dce 100644
--- a/core/src/apps/stellar/sign_tx.py
+++ b/core/src/apps/stellar/sign_tx.py
@@ -1,15 +1,19 @@
from typing import TYPE_CHECKING
-from apps.common.keychain import auto_keychain
+from apps.common.keychain import with_slip44_keychain
+
+from . import CURVE, PATTERN, SLIP44_ID
if TYPE_CHECKING:
from trezor.messages import StellarSignedTx, StellarSignTx
- from apps.common.keychain import Keychain
+ from apps.common.keychain import Keychain as Slip21Keychain
-@auto_keychain(__name__)
-async def sign_tx(msg: StellarSignTx, keychain: Keychain) -> StellarSignedTx:
+@with_slip44_keychain(
+ *[PATTERN], slip44_id=SLIP44_ID, curve=CURVE, slip21_namespaces=[[b"SLIP-0024"]]
+)
+async def sign_tx(msg: StellarSignTx, keychain: Slip21Keychain) -> StellarSignedTx:
from ubinascii import hexlify
from trezor import TR
@@ -102,13 +106,28 @@ async def sign_tx(msg: StellarSignTx, keychain: Keychain) -> StellarSignedTx:
raise ProcessError("Stellar invalid memo type")
await layout.require_confirm_memo(memo_type, memo_confirm_text)
+ if msg.payment_req:
+ from apps.common.payment_request import PaymentRequestVerifier
+
+ verifier = PaymentRequestVerifier(msg.payment_req, SLIP44_ID, keychain)
+ else:
+ verifier = None
+
# ---------------------------------
# OPERATION
# ---------------------------------
+
+ # these two are used in case of payment requests, where we allow only one output, hence we have a single output address and asset
+ output_address = None
+ output_asset = None
+
writers.write_uint32(w, num_operations)
for _ in range(num_operations):
op = await call_any(StellarTxOpRequest(), *consts.op_codes.keys())
- await process_operation(w, op, current_output_index) # type: ignore [Argument of type "MessageType" cannot be assigned to parameter "op" of type "StellarMessageType" in function "process_operation"]
+
+ # Note: in case of payment requests we don't confirm each operation individually
+ # but rather we confirm the whole payment request afterwards
+ await process_operation(w, op, current_output_index, confirm=not msg.payment_req) # type: ignore [Argument of type "MessageType" cannot be assigned to parameter "op" of type "StellarMessageType" in function "process_operation"]
if op.source_account is not None and op.source_account != address: # type: ignore [Cannot access attribute "source_account" for class "MessageType"]
# if the operation source account does not match the Trezor account
@@ -124,6 +143,17 @@ async def sign_tx(msg: StellarSignTx, keychain: Keychain) -> StellarSignedTx:
StellarPathPaymentStrictReceiveOp,
]
):
+ if msg.payment_req:
+ assert verifier is not None
+ if current_output_index != 0:
+ raise ProcessError(
+ "Multiple operations not supported for payment requests"
+ )
+ if StellarPaymentOp.is_type_of(op):
+ verifier.add_output(op.amount, op.destination_account)
+ output_address = op.destination_account
+ output_asset = op.asset
+
current_output_index += 1
# ---------------------------------
@@ -131,6 +161,22 @@ async def sign_tx(msg: StellarSignTx, keychain: Keychain) -> StellarSignedTx:
# ---------------------------------
# 4 null bytes representing a (currently unused) empty union
writers.write_uint32(w, 0)
+
+ if msg.payment_req:
+ assert verifier is not None
+
+ verifier.verify()
+
+ assert output_address
+ assert output_asset
+
+ await layout.require_confirm_payment_request(
+ output_address,
+ msg.payment_req,
+ msg.address_n,
+ output_asset,
+ )
+
# final confirm
await layout.require_confirm_final(
msg.address_n,
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index bb18fd26..6902ecdb 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -5647,6 +5647,7 @@ if TYPE_CHECKING:
memo_id: "int | None"
memo_hash: "bytes | None"
num_operations: "int"
+ payment_req: "PaymentRequest | None"
def __init__(
self,
@@ -5663,6 +5664,7 @@ if TYPE_CHECKING:
memo_text: "str | None" = None,
memo_id: "int | None" = None,
memo_hash: "bytes | None" = None,
+ payment_req: "PaymentRequest | None" = None,
) -> None:
pass
diff --git a/legacy/firmware/protob/messages-stellar.options b/legacy/firmware/protob/messages-stellar.options
index 1443b0d7..c8b6a302 100644
--- a/legacy/firmware/protob/messages-stellar.options
+++ b/legacy/firmware/protob/messages-stellar.options
@@ -10,6 +10,7 @@ StellarSignTx.address_n max_count:10
StellarSignTx.network_passphrase max_size:1024
StellarSignTx.memo_text max_size:29
StellarSignTx.memo_hash max_size:32
+StellarSignTx.payment_req type:FT_IGNORE
StellarPaymentOp.source_account max_size:57
StellarPaymentOp.destination_account max_size:57
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index 7e1a838a..a9fab2ed 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -7283,6 +7283,7 @@ class StellarSignTx(protobuf.MessageType):
12: protobuf.Field("memo_id", "uint64", repeated=False, required=False, default=None),
13: protobuf.Field("memo_hash", "bytes", repeated=False, required=False, default=None),
14: protobuf.Field("num_operations", "uint32", repeated=False, required=True),
+ 15: protobuf.Field("payment_req", "PaymentRequest", repeated=False, required=False, default=None),
}
def __init__(
@@ -7300,6 +7301,7 @@ class StellarSignTx(protobuf.MessageType):
memo_text: Optional["str"] = None,
memo_id: Optional["int"] = None,
memo_hash: Optional["bytes"] = None,
+ payment_req: Optional["PaymentRequest"] = None,
) -> None:
self.address_n: Sequence["int"] = address_n if address_n is not None else []
self.network_passphrase = network_passphrase
@@ -7313,6 +7315,7 @@ class StellarSignTx(protobuf.MessageType):
self.memo_text = memo_text
self.memo_id = memo_id
self.memo_hash = memo_hash
+ self.payment_req = payment_req
class StellarTxOpRequest(protobuf.MessageType):
diff --git a/rust/trezor-client/src/protos/generated/messages_stellar.rs b/rust/trezor-client/src/protos/generated/messages_stellar.rs
index 36587bea..4785ee3a 100644
--- a/rust/trezor-client/src/protos/generated/messages_stellar.rs
+++ b/rust/trezor-client/src/protos/generated/messages_stellar.rs
@@ -721,6 +721,8 @@ pub struct StellarSignTx {
pub memo_hash: ::std::option::Option<::std::vec::Vec<u8>>,
// @@protoc_insertion_point(field:hw.trezor.messages.stellar.StellarSignTx.num_operations)
pub num_operations: ::std::option::Option<u32>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.stellar.StellarSignTx.payment_req)
+ pub payment_req: ::protobuf::MessageField<super::messages_common::PaymentRequest>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.stellar.StellarSignTx.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@@ -1018,7 +1020,7 @@ impl StellarSignTx {
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
- let mut fields = ::std::vec::Vec::with_capacity(12);
+ let mut fields = ::std::vec::Vec::with_capacity(13);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
"address_n",
@@ -1080,6 +1082,11 @@ impl StellarSignTx {
|m: &StellarSignTx| { &m.num_operations },
|m: &mut StellarSignTx| { &mut m.num_operations },
));
+ fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, super::messages_common::PaymentRequest>(
+ "payment_req",
+ |m: &StellarSignTx| { &m.payment_req },
+ |m: &mut StellarSignTx| { &mut m.payment_req },
+ ));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<StellarSignTx>(
"StellarSignTx",
fields,
@@ -1116,6 +1123,11 @@ impl ::protobuf::Message for StellarSignTx {
if self.num_operations.is_none() {
return false;
}
+ for v in &self.payment_req {
+ if !v.is_initialized() {
+ return false;
+ }
+ };
true
}
@@ -1161,6 +1173,9 @@ impl ::protobuf::Message for StellarSignTx {
112 => {
self.num_operations = ::std::option::Option::Some(is.read_uint32()?);
},
+ 122 => {
+ ::protobuf::rt::read_singular_message_into_field(is, &mut self.payment_req)?;
+ },
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@@ -1209,6 +1224,10 @@ impl ::protobuf::Message for StellarSignTx {
if let Some(v) = self.num_operations {
my_size += ::protobuf::rt::uint32_size(14, v);
}
+ if let Some(v) = self.payment_req.as_ref() {
+ let len = v.compute_size();
+ my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
+ }
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@@ -1251,6 +1270,9 @@ impl ::protobuf::Message for StellarSignTx {
if let Some(v) = self.num_operations {
os.write_uint32(14, v)?;
}
+ if let Some(v) = self.payment_req.as_ref() {
+ ::protobuf::rt::write_message_field_with_cached_size(15, v, os)?;
+ }
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@@ -1280,6 +1302,7 @@ impl ::protobuf::Message for StellarSignTx {
self.memo_id = ::std::option::Option::None;
self.memo_hash = ::std::option::Option::None;
self.num_operations = ::std::option::Option::None;
+ self.payment_req.clear();
self.special_fields.clear();
}
@@ -1297,6 +1320,7 @@ impl ::protobuf::Message for StellarSignTx {
memo_id: ::std::option::Option::None,
memo_hash: ::std::option::Option::None,
num_operations: ::std::option::Option::None,
+ payment_req: ::protobuf::MessageField::none(),
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@@ -6311,108 +6335,110 @@ impl StellarAssetType {
}
static file_descriptor_proto_data: &'static [u8] = b"\
- \n\x16messages-stellar.proto\x12\x1ahw.trezor.messages.stellar\"|\n\x0cS\
- tellarAsset\x12@\n\x04type\x18\x01\x20\x02(\x0e2,.hw.trezor.messages.ste\
- llar.StellarAssetTypeR\x04type\x12\x12\n\x04code\x18\x02\x20\x01(\tR\x04\
- code\x12\x16\n\x06issuer\x18\x03\x20\x01(\tR\x06issuer\"o\n\x11StellarGe\
- tAddress\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12!\n\x0c\
- show_display\x18\x02\x20\x01(\x08R\x0bshowDisplay\x12\x1a\n\x08chunkify\
- \x18\x03\x20\x01(\x08R\x08chunkify\"<\n\x0eStellarAddress\x12\x18\n\x07a\
- ddress\x18\x01\x20\x02(\tR\x07address\x12\x10\n\x03mac\x18\x02\x20\x01(\
- \x0cR\x03mac\"\xa6\x04\n\rStellarSignTx\x12\x1b\n\taddress_n\x18\x02\x20\
- \x03(\rR\x08addressN\x12-\n\x12network_passphrase\x18\x03\x20\x02(\tR\
- \x11networkPassphrase\x12%\n\x0esource_account\x18\x04\x20\x02(\tR\rsour\
- ceAccount\x12\x10\n\x03fee\x18\x05\x20\x02(\rR\x03fee\x12'\n\x0fsequence\
- _number\x18\x06\x20\x02(\x04R\x0esequenceNumber\x12)\n\x10timebounds_sta\
- rt\x18\x08\x20\x02(\rR\x0ftimeboundsStart\x12%\n\x0etimebounds_end\x18\t\
- \x20\x02(\rR\rtimeboundsEnd\x12V\n\tmemo_type\x18\n\x20\x02(\x0e29.hw.tr\
- ezor.messages.stellar.StellarSignTx.StellarMemoTypeR\x08memoType\x12\x1b\
- \n\tmemo_text\x18\x0b\x20\x01(\tR\x08memoText\x12\x17\n\x07memo_id\x18\
- \x0c\x20\x01(\x04R\x06memoId\x12\x1b\n\tmemo_hash\x18\r\x20\x01(\x0cR\
- \x08memoHash\x12%\n\x0enum_operations\x18\x0e\x20\x02(\rR\rnumOperations\
- \"C\n\x0fStellarMemoType\x12\x08\n\x04NONE\x10\0\x12\x08\n\x04TEXT\x10\
- \x01\x12\x06\n\x02ID\x10\x02\x12\x08\n\x04HASH\x10\x03\x12\n\n\x06RETURN\
- \x10\x04\"\x14\n\x12StellarTxOpRequest\"\xc2\x01\n\x10StellarPaymentOp\
- \x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12/\n\x13d\
- estination_account\x18\x02\x20\x02(\tR\x12destinationAccount\x12>\n\x05a\
- sset\x18\x03\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\x05\
- asset\x12\x16\n\x06amount\x18\x04\x20\x02(\x12R\x06amount\"\x8b\x01\n\
- \x16StellarCreateAccountOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\
- \rsourceAccount\x12\x1f\n\x0bnew_account\x18\x02\x20\x02(\tR\nnewAccount\
- \x12)\n\x10starting_balance\x18\x03\x20\x02(\x12R\x0fstartingBalance\"\
- \xa5\x03\n!StellarPathPaymentStrictReceiveOp\x12%\n\x0esource_account\
- \x18\x01\x20\x01(\tR\rsourceAccount\x12G\n\nsend_asset\x18\x02\x20\x02(\
- \x0b2(.hw.trezor.messages.stellar.StellarAssetR\tsendAsset\x12\x19\n\x08\
- send_max\x18\x03\x20\x02(\x12R\x07sendMax\x12/\n\x13destination_account\
- \x18\x04\x20\x02(\tR\x12destinationAccount\x12U\n\x11destination_asset\
- \x18\x05\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\x10dest\
- inationAsset\x12-\n\x12destination_amount\x18\x06\x20\x02(\x12R\x11desti\
- nationAmount\x12>\n\x05paths\x18\x07\x20\x03(\x0b2(.hw.trezor.messages.s\
- tellar.StellarAssetR\x05paths\"\xa2\x03\n\x1eStellarPathPaymentStrictSen\
- dOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12G\n\n\
- send_asset\x18\x02\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAsse\
- tR\tsendAsset\x12\x1f\n\x0bsend_amount\x18\x03\x20\x02(\x12R\nsendAmount\
- \x12/\n\x13destination_account\x18\x04\x20\x02(\tR\x12destinationAccount\
- \x12U\n\x11destination_asset\x18\x05\x20\x02(\x0b2(.hw.trezor.messages.s\
- tellar.StellarAssetR\x10destinationAsset\x12'\n\x0fdestination_min\x18\
- \x06\x20\x02(\x12R\x0edestinationMin\x12>\n\x05paths\x18\x07\x20\x03(\
- \x0b2(.hw.trezor.messages.stellar.StellarAssetR\x05paths\"\xc2\x02\n\x18\
- StellarManageSellOfferOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rs\
- ourceAccount\x12M\n\rselling_asset\x18\x02\x20\x02(\x0b2(.hw.trezor.mess\
- ages.stellar.StellarAssetR\x0csellingAsset\x12K\n\x0cbuying_asset\x18\
- \x03\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\x0bbuyingAs\
- set\x12\x16\n\x06amount\x18\x04\x20\x02(\x12R\x06amount\x12\x17\n\x07pri\
- ce_n\x18\x05\x20\x02(\rR\x06priceN\x12\x17\n\x07price_d\x18\x06\x20\x02(\
- \rR\x06priceD\x12\x19\n\x08offer_id\x18\x07\x20\x02(\x04R\x07offerId\"\
- \xc1\x02\n\x17StellarManageBuyOfferOp\x12%\n\x0esource_account\x18\x01\
- \x20\x01(\tR\rsourceAccount\x12M\n\rselling_asset\x18\x02\x20\x02(\x0b2(\
- .hw.trezor.messages.stellar.StellarAssetR\x0csellingAsset\x12K\n\x0cbuyi\
- ng_asset\x18\x03\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\
- \x0bbuyingAsset\x12\x16\n\x06amount\x18\x04\x20\x02(\x12R\x06amount\x12\
- \x17\n\x07price_n\x18\x05\x20\x02(\rR\x06priceN\x12\x17\n\x07price_d\x18\
- \x06\x20\x02(\rR\x06priceD\x12\x19\n\x08offer_id\x18\x07\x20\x02(\x04R\
- \x07offerId\"\xae\x02\n\x1fStellarCreatePassiveSellOfferOp\x12%\n\x0esou\
- rce_account\x18\x01\x20\x01(\tR\rsourceAccount\x12M\n\rselling_asset\x18\
- \x02\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\x0csellingA\
- sset\x12K\n\x0cbuying_asset\x18\x03\x20\x02(\x0b2(.hw.trezor.messages.st\
- ellar.StellarAssetR\x0bbuyingAsset\x12\x16\n\x06amount\x18\x04\x20\x02(\
- \x12R\x06amount\x12\x17\n\x07price_n\x18\x05\x20\x02(\rR\x06priceN\x12\
- \x17\n\x07price_d\x18\x06\x20\x02(\rR\x06priceD\"\xdd\x04\n\x13StellarSe\
- tOptionsOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\
- \x12B\n\x1dinflation_destination_account\x18\x02\x20\x01(\tR\x1binflatio\
- nDestinationAccount\x12\x1f\n\x0bclear_flags\x18\x03\x20\x01(\rR\nclearF\
- lags\x12\x1b\n\tset_flags\x18\x04\x20\x01(\rR\x08setFlags\x12#\n\rmaster\
- _weight\x18\x05\x20\x01(\rR\x0cmasterWeight\x12#\n\rlow_threshold\x18\
- \x06\x20\x01(\rR\x0clowThreshold\x12)\n\x10medium_threshold\x18\x07\x20\
- \x01(\rR\x0fmediumThreshold\x12%\n\x0ehigh_threshold\x18\x08\x20\x01(\rR\
- \rhighThreshold\x12\x1f\n\x0bhome_domain\x18\t\x20\x01(\tR\nhomeDomain\
- \x12b\n\x0bsigner_type\x18\n\x20\x01(\x0e2A.hw.trezor.messages.stellar.S\
- tellarSetOptionsOp.StellarSignerTypeR\nsignerType\x12\x1d\n\nsigner_key\
- \x18\x0b\x20\x01(\x0cR\tsignerKey\x12#\n\rsigner_weight\x18\x0c\x20\x01(\
- \rR\x0csignerWeight\"8\n\x11StellarSignerType\x12\x0b\n\x07ACCOUNT\x10\0\
- \x12\x0c\n\x08PRE_AUTH\x10\x01\x12\x08\n\x04HASH\x10\x02\"\x93\x01\n\x14\
- StellarChangeTrustOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourc\
- eAccount\x12>\n\x05asset\x18\x02\x20\x02(\x0b2(.hw.trezor.messages.stell\
- ar.StellarAssetR\x05asset\x12\x14\n\x05limit\x18\x03\x20\x02(\x04R\x05li\
- mit\"\xf6\x01\n\x13StellarAllowTrustOp\x12%\n\x0esource_account\x18\x01\
- \x20\x01(\tR\rsourceAccount\x12'\n\x0ftrusted_account\x18\x02\x20\x02(\t\
- R\x0etrustedAccount\x12K\n\nasset_type\x18\x03\x20\x02(\x0e2,.hw.trezor.\
- messages.stellar.StellarAssetTypeR\tassetType\x12\x1d\n\nasset_code\x18\
- \x04\x20\x01(\tR\tassetCode\x12#\n\ris_authorized\x18\x05\x20\x02(\x08R\
- \x0cisAuthorized\"o\n\x15StellarAccountMergeOp\x12%\n\x0esource_account\
- \x18\x01\x20\x01(\tR\rsourceAccount\x12/\n\x13destination_account\x18\
- \x02\x20\x02(\tR\x12destinationAccount\"d\n\x13StellarManageDataOp\x12%\
- \n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12\x10\n\x03key\
- \x18\x02\x20\x02(\tR\x03key\x12\x14\n\x05value\x18\x03\x20\x01(\x0cR\x05\
- value\"W\n\x15StellarBumpSequenceOp\x12%\n\x0esource_account\x18\x01\x20\
- \x01(\tR\rsourceAccount\x12\x17\n\x07bump_to\x18\x02\x20\x02(\x04R\x06bu\
- mpTo\"f\n\x1eStellarClaimClaimableBalanceOp\x12%\n\x0esource_account\x18\
- \x01\x20\x01(\tR\rsourceAccount\x12\x1d\n\nbalance_id\x18\x02\x20\x02(\
- \x0cR\tbalanceId\"N\n\x0fStellarSignedTx\x12\x1d\n\npublic_key\x18\x01\
- \x20\x02(\x0cR\tpublicKey\x12\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\tsi\
- gnature*=\n\x10StellarAssetType\x12\n\n\x06NATIVE\x10\0\x12\r\n\tALPHANU\
- M4\x10\x01\x12\x0e\n\nALPHANUM12\x10\x02B;\n#com.satoshilabs.trezor.lib.\
- protobufB\x14TrezorMessageStellar\
+ \n\x16messages-stellar.proto\x12\x1ahw.trezor.messages.stellar\x1a\x15me\
+ ssages-common.proto\x1a\roptions.proto\"|\n\x0cStellarAsset\x12@\n\x04ty\
+ pe\x18\x01\x20\x02(\x0e2,.hw.trezor.messages.stellar.StellarAssetTypeR\
+ \x04type\x12\x12\n\x04code\x18\x02\x20\x01(\tR\x04code\x12\x16\n\x06issu\
+ er\x18\x03\x20\x01(\tR\x06issuer\"o\n\x11StellarGetAddress\x12\x1b\n\tad\
+ dress_n\x18\x01\x20\x03(\rR\x08addressN\x12!\n\x0cshow_display\x18\x02\
+ \x20\x01(\x08R\x0bshowDisplay\x12\x1a\n\x08chunkify\x18\x03\x20\x01(\x08\
+ R\x08chunkify\"<\n\x0eStellarAddress\x12\x18\n\x07address\x18\x01\x20\
+ \x02(\tR\x07address\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"\xf8\
+ \x04\n\rStellarSignTx\x12\x1b\n\taddress_n\x18\x02\x20\x03(\rR\x08addres\
+ sN\x12-\n\x12network_passphrase\x18\x03\x20\x02(\tR\x11networkPassphrase\
+ \x12%\n\x0esource_account\x18\x04\x20\x02(\tR\rsourceAccount\x12\x10\n\
+ \x03fee\x18\x05\x20\x02(\rR\x03fee\x12'\n\x0fsequence_number\x18\x06\x20\
+ \x02(\x04R\x0esequenceNumber\x12)\n\x10timebounds_start\x18\x08\x20\x02(\
+ \rR\x0ftimeboundsStart\x12%\n\x0etimebounds_end\x18\t\x20\x02(\rR\rtimeb\
+ oundsEnd\x12V\n\tmemo_type\x18\n\x20\x02(\x0e29.hw.trezor.messages.stell\
+ ar.StellarSignTx.StellarMemoTypeR\x08memoType\x12\x1b\n\tmemo_text\x18\
+ \x0b\x20\x01(\tR\x08memoText\x12\x17\n\x07memo_id\x18\x0c\x20\x01(\x04R\
+ \x06memoId\x12\x1b\n\tmemo_hash\x18\r\x20\x01(\x0cR\x08memoHash\x12%\n\
+ \x0enum_operations\x18\x0e\x20\x02(\rR\rnumOperations\x12P\n\x0bpayment_\
+ req\x18\x0f\x20\x01(\x0b2).hw.trezor.messages.common.PaymentRequestR\npa\
+ ymentReqB\x04\xc8\xf0\x19\x01\"C\n\x0fStellarMemoType\x12\x08\n\x04NONE\
+ \x10\0\x12\x08\n\x04TEXT\x10\x01\x12\x06\n\x02ID\x10\x02\x12\x08\n\x04HA\
+ SH\x10\x03\x12\n\n\x06RETURN\x10\x04\"\x14\n\x12StellarTxOpRequest\"\xc2\
+ \x01\n\x10StellarPaymentOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\
+ \rsourceAccount\x12/\n\x13destination_account\x18\x02\x20\x02(\tR\x12des\
+ tinationAccount\x12>\n\x05asset\x18\x03\x20\x02(\x0b2(.hw.trezor.message\
+ s.stellar.StellarAssetR\x05asset\x12\x16\n\x06amount\x18\x04\x20\x02(\
+ \x12R\x06amount\"\x8b\x01\n\x16StellarCreateAccountOp\x12%\n\x0esource_a\
+ ccount\x18\x01\x20\x01(\tR\rsourceAccount\x12\x1f\n\x0bnew_account\x18\
+ \x02\x20\x02(\tR\nnewAccount\x12)\n\x10starting_balance\x18\x03\x20\x02(\
+ \x12R\x0fstartingBalance\"\xa5\x03\n!StellarPathPaymentStrictReceiveOp\
+ \x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12G\n\nsen\
+ d_asset\x18\x02\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\
+ \tsendAsset\x12\x19\n\x08send_max\x18\x03\x20\x02(\x12R\x07sendMax\x12/\
+ \n\x13destination_account\x18\x04\x20\x02(\tR\x12destinationAccount\x12U\
+ \n\x11destination_asset\x18\x05\x20\x02(\x0b2(.hw.trezor.messages.stella\
+ r.StellarAssetR\x10destinationAsset\x12-\n\x12destination_amount\x18\x06\
+ \x20\x02(\x12R\x11destinationAmount\x12>\n\x05paths\x18\x07\x20\x03(\x0b\
+ 2(.hw.trezor.messages.stellar.StellarAssetR\x05paths\"\xa2\x03\n\x1eStel\
+ larPathPaymentStrictSendOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\
+ \rsourceAccount\x12G\n\nsend_asset\x18\x02\x20\x02(\x0b2(.hw.trezor.mess\
+ ages.stellar.StellarAssetR\tsendAsset\x12\x1f\n\x0bsend_amount\x18\x03\
+ \x20\x02(\x12R\nsendAmount\x12/\n\x13destination_account\x18\x04\x20\x02\
+ (\tR\x12destinationAccount\x12U\n\x11destination_asset\x18\x05\x20\x02(\
+ \x0b2(.hw.trezor.messages.stellar.StellarAssetR\x10destinationAsset\x12'\
+ \n\x0fdestination_min\x18\x06\x20\x02(\x12R\x0edestinationMin\x12>\n\x05\
+ paths\x18\x07\x20\x03(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\
+ \x05paths\"\xc2\x02\n\x18StellarManageSellOfferOp\x12%\n\x0esource_accou\
+ nt\x18\x01\x20\x01(\tR\rsourceAccount\x12M\n\rselling_asset\x18\x02\x20\
+ \x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\x0csellingAsset\x12\
+ K\n\x0cbuying_asset\x18\x03\x20\x02(\x0b2(.hw.trezor.messages.stellar.St\
+ ellarAssetR\x0bbuyingAsset\x12\x16\n\x06amount\x18\x04\x20\x02(\x12R\x06\
+ amount\x12\x17\n\x07price_n\x18\x05\x20\x02(\rR\x06priceN\x12\x17\n\x07p\
+ rice_d\x18\x06\x20\x02(\rR\x06priceD\x12\x19\n\x08offer_id\x18\x07\x20\
+ \x02(\x04R\x07offerId\"\xc1\x02\n\x17StellarManageBuyOfferOp\x12%\n\x0es\
+ ource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12M\n\rselling_asset\
+ \x18\x02\x20\x02(\x0b2(.hw.trezor.messages.stellar.StellarAssetR\x0csell\
+ ingAsset\x12K\n\x0cbuying_asset\x18\x03\x20\x02(\x0b2(.hw.trezor.message\
+ s.stellar.StellarAssetR\x0bbuyingAsset\x12\x16\n\x06amount\x18\x04\x20\
+ \x02(\x12R\x06amount\x12\x17\n\x07price_n\x18\x05\x20\x02(\rR\x06priceN\
+ \x12\x17\n\x07price_d\x18\x06\x20\x02(\rR\x06priceD\x12\x19\n\x08offer_i\
+ d\x18\x07\x20\x02(\x04R\x07offerId\"\xae\x02\n\x1fStellarCreatePassiveSe\
+ llOfferOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\
+ \x12M\n\rselling_asset\x18\x02\x20\x02(\x0b2(.hw.trezor.messages.stellar\
+ .StellarAssetR\x0csellingAsset\x12K\n\x0cbuying_asset\x18\x03\x20\x02(\
+ \x0b2(.hw.trezor.messages.stellar.StellarAssetR\x0bbuyingAsset\x12\x16\n\
+ \x06amount\x18\x04\x20\x02(\x12R\x06amount\x12\x17\n\x07price_n\x18\x05\
+ \x20\x02(\rR\x06priceN\x12\x17\n\x07price_d\x18\x06\x20\x02(\rR\x06price\
+ D\"\xdd\x04\n\x13StellarSetOptionsOp\x12%\n\x0esource_account\x18\x01\
+ \x20\x01(\tR\rsourceAccount\x12B\n\x1dinflation_destination_account\x18\
+ \x02\x20\x01(\tR\x1binflationDestinationAccount\x12\x1f\n\x0bclear_flags\
+ \x18\x03\x20\x01(\rR\nclearFlags\x12\x1b\n\tset_flags\x18\x04\x20\x01(\r\
+ R\x08setFlags\x12#\n\rmaster_weight\x18\x05\x20\x01(\rR\x0cmasterWeight\
+ \x12#\n\rlow_threshold\x18\x06\x20\x01(\rR\x0clowThreshold\x12)\n\x10med\
+ ium_threshold\x18\x07\x20\x01(\rR\x0fmediumThreshold\x12%\n\x0ehigh_thre\
+ shold\x18\x08\x20\x01(\rR\rhighThreshold\x12\x1f\n\x0bhome_domain\x18\t\
+ \x20\x01(\tR\nhomeDomain\x12b\n\x0bsigner_type\x18\n\x20\x01(\x0e2A.hw.t\
+ rezor.messages.stellar.StellarSetOptionsOp.StellarSignerTypeR\nsignerTyp\
+ e\x12\x1d\n\nsigner_key\x18\x0b\x20\x01(\x0cR\tsignerKey\x12#\n\rsigner_\
+ weight\x18\x0c\x20\x01(\rR\x0csignerWeight\"8\n\x11StellarSignerType\x12\
+ \x0b\n\x07ACCOUNT\x10\0\x12\x0c\n\x08PRE_AUTH\x10\x01\x12\x08\n\x04HASH\
+ \x10\x02\"\x93\x01\n\x14StellarChangeTrustOp\x12%\n\x0esource_account\
+ \x18\x01\x20\x01(\tR\rsourceAccount\x12>\n\x05asset\x18\x02\x20\x02(\x0b\
+ 2(.hw.trezor.messages.stellar.StellarAssetR\x05asset\x12\x14\n\x05limit\
+ \x18\x03\x20\x02(\x04R\x05limit\"\xf6\x01\n\x13StellarAllowTrustOp\x12%\
+ \n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12'\n\x0ftruste\
+ d_account\x18\x02\x20\x02(\tR\x0etrustedAccount\x12K\n\nasset_type\x18\
+ \x03\x20\x02(\x0e2,.hw.trezor.messages.stellar.StellarAssetTypeR\tassetT\
+ ype\x12\x1d\n\nasset_code\x18\x04\x20\x01(\tR\tassetCode\x12#\n\ris_auth\
+ orized\x18\x05\x20\x02(\x08R\x0cisAuthorized\"o\n\x15StellarAccountMerge\
+ Op\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12/\n\
+ \x13destination_account\x18\x02\x20\x02(\tR\x12destinationAccount\"d\n\
+ \x13StellarManageDataOp\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rso\
+ urceAccount\x12\x10\n\x03key\x18\x02\x20\x02(\tR\x03key\x12\x14\n\x05val\
+ ue\x18\x03\x20\x01(\x0cR\x05value\"W\n\x15StellarBumpSequenceOp\x12%\n\
+ \x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12\x17\n\x07bump_\
+ to\x18\x02\x20\x02(\x04R\x06bumpTo\"f\n\x1eStellarClaimClaimableBalanceO\
+ p\x12%\n\x0esource_account\x18\x01\x20\x01(\tR\rsourceAccount\x12\x1d\n\
+ \nbalance_id\x18\x02\x20\x02(\x0cR\tbalanceId\"N\n\x0fStellarSignedTx\
+ \x12\x1d\n\npublic_key\x18\x01\x20\x02(\x0cR\tpublicKey\x12\x1c\n\tsigna\
+ ture\x18\x02\x20\x02(\x0cR\tsignature*=\n\x10StellarAssetType\x12\n\n\
+ \x06NATIVE\x10\0\x12\r\n\tALPHANUM4\x10\x01\x12\x0e\n\nALPHANUM12\x10\
+ \x02B;\n#com.satoshilabs.trezor.lib.protobufB\x14TrezorMessageStellar\
";
/// `FileDescriptorProto` object which was a source for this generated file
@@ -6429,7 +6455,9 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
static file_descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::FileDescriptor> = ::protobuf::rt::Lazy::new();
file_descriptor.get(|| {
let generated_file_descriptor = generated_file_descriptor_lazy.get(|| {
- let mut deps = ::std::vec::Vec::with_capacity(0);
+ let mut deps = ::std::vec::Vec::with_capacity(2);
+ deps.push(super::messages_common::file_descriptor().clone());
+ deps.push(super::options::file_descriptor().clone());
let mut messages = ::std::vec::Vec::with_capacity(20);
messages.push(StellarAsset::generated_message_descriptor_data());
messages.push(StellarGetAddress::generated_message_descriptor_data());
diff --git a/tests/device_tests/stellar/test_stellar.py b/tests/device_tests/stellar/test_stellar.py
index fb7664cd..02d448b4 100644
--- a/tests/device_tests/stellar/test_stellar.py
+++ b/tests/device_tests/stellar/test_stellar.py
@@ -54,17 +54,24 @@ from base64 import b64encode
import pytest
-from trezorlib import messages, protobuf, stellar
+from trezorlib import btc, messages, misc, protobuf, stellar
from trezorlib.debuglink import SessionDebugWrapper as Session
+from trezorlib.exceptions import TrezorFailure
from trezorlib.tools import parse_path
from ...common import parametrize_using_common_fixtures
from ...input_flows import InputFlowShowAddressQRCode
+from ..payment_req import (
+ CoinPurchaseMemo,
+ RefundMemo,
+ TextDetailsMemo,
+ make_payment_request,
+)
pytestmark = [pytest.mark.altcoin, pytest.mark.stellar]
-def parameters_to_proto(parameters):
+def parameters_to_proto(session, parameters):
tx_data = parameters["tx"]
ops_data = parameters["operations"]
@@ -72,6 +79,43 @@ def parameters_to_proto(parameters):
tx_data["network_passphrase"] = parameters["network_passphrase"]
tx_data["num_operations"] = len(ops_data)
+ if parameters.get("payment_request"):
+ purchase_memo = CoinPurchaseMemo(
+ amount="0.00001 BTC",
+ coin_name="Bitcoin",
+ slip44=0,
+ address_n=parse_path("m/44h/0h/0h/0/0"),
+ )
+ purchase_memo.address_resp = btc.get_authenticated_address(
+ session, purchase_memo.coin_name, purchase_memo.address_n
+ )
+ refund_memo = RefundMemo(address_n=parse_path("m/44h/148h/1h"))
+ refund_memo.address_resp = stellar.get_authenticated_address(
+ session, refund_memo.address_n, False
+ )
+ text_details_memo = TextDetailsMemo(
+ title="Are you sure...",
+ text="... you want to swap your valuable tokens for some sats?",
+ )
+ memos = [purchase_memo, refund_memo, text_details_memo]
+ nonce = misc.get_nonce(session)
+ payment_request = make_payment_request(
+ session,
+ recipient_name="trezor.io",
+ slip44=148,
+ outputs=[
+ (
+ o["amount"],
+ o["destination_account"],
+ )
+ for o in parameters["operations"]
+ ],
+ memos=memos,
+ nonce=nonce,
+ )
+ else:
+ payment_request = None
+
def make_op(operation_data):
type_name = operation_data["_message_type"]
assert type_name.startswith("Stellar") and type_name.endswith("Op")
@@ -79,23 +123,38 @@ def parameters_to_proto(parameters):
return protobuf.dict_to_proto(cls, operation_data)
tx = protobuf.dict_to_proto(messages.StellarSignTx, tx_data)
+ if payment_request:
+ tx.payment_req = payment_request
operations = [make_op(op) for op in ops_data]
return tx, operations
@parametrize_using_common_fixtures("stellar/sign_tx.json")
def test_sign_tx(session: Session, parameters, result):
- tx, operations = parameters_to_proto(parameters)
- response = stellar.sign_tx(
- session, tx, operations, tx.address_n, tx.network_passphrase
- )
- assert response.public_key.hex() == result["public_key"]
- assert b64encode(response.signature).decode() == result["signature"]
+ tx, operations = parameters_to_proto(session, parameters)
+
+ if "signature" in result:
+ response = stellar.sign_tx(
+ session,
+ tx,
+ operations,
+ tx.address_n,
+ tx.network_passphrase,
+ )
+ assert response.public_key.hex() == result["public_key"]
+ assert b64encode(response.signature).decode() == result["signature"]
+ elif "error_message" in result:
+ with pytest.raises(TrezorFailure, match=result["error_message"]):
+ stellar.sign_tx(
+ session, tx, operations, tx.address_n, tx.network_passphrase
+ )
+ else:
+ assert False, "Invalid expected result"
@parametrize_using_common_fixtures("stellar/sign_tx.json")
@pytest.mark.skipif(not stellar.HAVE_STELLAR_SDK, reason="requires Stellar SDK")
-def test_xdr(parameters, result):
+def test_xdr(session: Session, parameters, result):
from stellar_sdk import TransactionEnvelope
envelope = TransactionEnvelope.from_xdr(
@@ -103,7 +162,7 @@ def test_xdr(parameters, result):
)
tx, operations = stellar.from_envelope(envelope)
tx.address_n = parse_path(parameters["address_n"])
- tx_expected, operations_expected = parameters_to_proto(parameters)
+ tx_expected, operations_expected = parameters_to_proto(session, parameters)
assert tx == tx_expected
for expected, actual in zip(operations_expected, operations):
assert expected == actual
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 44247d3e..3c29f05e 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -2441,7 +2441,10 @@
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "b462e54e36a4ffd1a1d94f0d94cf20a9b89d4b8e067250ac0c00ea567b0a2f52",
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "6d238203bba7762424a175a19ee0aa5aa87ed353e7f6f3fc0e295b6372e1e30c",
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "88a73348b8eb0ab48b01e959d7d176a35af2da8520e2a7cc19cd4df9fd6914fb",
+"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "33bbbf6c914fb43278baf6f38c7de5cf823ae64745fb52c1e4e63ac8220fd0af",
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "37e1fa098b76186653e0bab85b1c176ab171b32c34a90b4454c335b3529649af",
+"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "30a55067210123f6f9dbf09d3b43dc9785d93fa719c88a7b813b6fcfe3ecb29b",
+"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "fb0c62696a89d0890023d02aa06e168b4d33c932013d44790143524cadda592b",
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "ba671e7a110f6373cc3315594a38ae7fe3967e77c8b764d728a5a237f35d0e8c",
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "dd619840369281686e186a831a953df4f8f8645b35bbf03f6070437e88114e83",
"T2T1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "de9a994494ea04eb86b187b5a78c6d2f5a28b54245e9134520246fb1d38fcdd4",
@@ -3980,7 +3983,10 @@
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "3d912c8148e0155b19331fb0c9533057e3d05f88963e7ed70745e9b81c6d3f59",
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "0ae328a5cb57dba3ff9200682242c0f49158b360fb77de25999a939d5d2fbbb3",
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "515bb2ed06cfa4b9f5f2c58ab2df8236329444372a9a57c2f237018a98442e19",
+"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "fb357a023a04f411942bb02749389f373e203caf2179e1a421dac9de9f8a8ed2",
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "06f2678b01690883d6eaf957d1099745f431470e8a1a403a18d916d5c65633b5",
+"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "2d872ba7641dbb338c568748a379dad5590695b6b0f87edbd3bca3544694ccb1",
+"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "44c1b4b615cd6cfde3de613b32e42c08b451a798305f89e246088fdb8b8bf6d3",
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "8c1103ba51bbcf99c20fa06368df0c86fa53d121b2ed6d71f1b7353608b3b7e4",
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "5a323557efc6bcbfe522b152652abfaa045865abfb2aea0e4913090d9dd62e34",
"T2T1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "9b630210f14fa2d50e6716622bf456fae168ff8efcfca8cbc01111fc3b19c6ad",
@@ -5519,7 +5525,10 @@
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "2808b541c3eba206b9413a2c0b4e6ceba7d8e5d94ef10d34dfb21a65d5ba4eb1",
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "d31e90d0c50b553a95ed3e607ff2f1bfd85c216b842462713e55d14d01b02b68",
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "b429cc5d4ee40773a5b413e5984804131c145313b8152ce0fe3f4c9be2006422",
+"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "31dc5c1b267afc5fbe6eac0adf65473e2a04558dd1e835eb08288de7e80c6831",
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "c436b0ea803e0f2e784f0885dd6dae79768c0f85928467551cb29e089a17c749",
+"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "daa329291abe80db036c053e4f5dbd40119d04b3dc5afdb503e91377e98ea20b",
+"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "1929c304cc59420321294c21fcd510ce311b5f785ccaba877d8526b2ac2e6e7a",
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "0f330d9c089ff3b09542a4775daf15625c0a9933df59a84c3c0ecdf5f547df02",
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "54ed2f3dbaa32ed479361e562bc42e86663190e173e02970985e9f768712ec4f",
"T2T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "b7149560532be8a98209ed107c82440162dabbd235989f13d67fc90dda27e4bf",
@@ -7076,7 +7085,10 @@
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "1e836c230bc8b7460e3c1aee659ba0b022ce0b84d732c412601434d2f9809237",
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "39967cb9e2621432391084afa53eb4a8b2be8f09dacd7058601ea74845df99ff",
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "902aa0caf6a1d8ef9fa316805f5ee80d39516dddcf844d935b5ad57dec2b8ebc",
+"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "0756264ce7cf60a848f03026e1e0b3043f9e43662956906a578da2056351ee6d",
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "481b81501bbe31805db25f30d2de8009d63644c0bfea50b2c19bee930bac4978",
+"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "1d91ef002b68a78dc1de692caf48d78a002f6e565a57a266eeada0f448cd0da6",
+"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "99cbeb1fb078fb95dd26ca97987681b6250d2f6dc05ed9fd989675c41d1825db",
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "e98b1fb81193f67c32b9b48c0c1c77083461e4a1a4d42baada58c5840647d221",
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "10b712ffc6626287af5fa0ceab8779f98f1659322d7b8e5da255cd43e9eab28e",
"T2T1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "07c6b56ff9101b7bc34d2022bb5a10b5a691584fe35f53a42e60de6c67b298a2",
@@ -8615,7 +8627,10 @@
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "36b3127f96c0b9aff211ba51e8d2f4844cf048df245f386c34fb757bf9b3bf1c",
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "21d9ad3958269d628493c6f826b11202a99b916379a72e7ba923fcfedff930c7",
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "7fc0c718dee14dac5a3a76a343f34816b13026901709344eb1754d25c3805e03",
+"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "c5ed2242e20b9d52ab2d2760a142d8f71bb0b5b4e1b7b145c4e81f48385ee84f",
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "03c865167d69671bfe19aadd5c57cfa1ffc182bf4855aea5604dc4167a1df8ce",
+"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "39b677adaa42b9595eeeba8d0bf3ced8bb6e5aa4bfeeae2d57e8025c76a6d97d",
+"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "34d6a33a61bb0f43d2c2ecedf51edd1a7d1a07378bc4876dabffad0f94077953",
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "14337eaaad381cd657892cedff765da6ca9e1e41c994999febb61b7a6f0f5a87",
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "30a96dc444d9627cce80c0d4a0b683601888b6066f8bf4be6b72f5bdd8201a51",
"T2T1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "d63d07727180fd30e9e0f1ed06ee341a7ecd4e7eb42fb3baaec0ca73a335f951",
@@ -10154,7 +10169,10 @@
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "f826ff8c6b97b5212e5d958c1154044a3bd2847797e2958b58c08dd2665ce93d",
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "71873faac7e4bbf36dd1e2ebbdd58746a82207cc417e5a0ea23554db582c8aa9",
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "470e68c7c9aca40af16cfa8710c03a2abd38bd1e51fc0f0fcc38a82a383f2bbe",
+"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "c74d9cc5f9c4a7da7b13bc95f515b1adaa13ff0619f125987d937169b2f3162c",
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "ff5898789378660c6afc006436c3c41cc50a823c1efb03fda81c9cd70c92029f",
+"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "0a4518089f11b78c40935c4fbd11f39e7d398021e2baa438431be57b12abb80f",
+"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "87ef7c388ccc08826a3dd3f9abda894575109d7a5b7f825f3ff3bf0cdf07231c",
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "5418efa28f122246e6b9af33dd0772d7c2ea1a62a2c059544cc5e7fa1873d63c",
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "b13a0841fb68907c7a75f65cdf6fd0db6383456620f9e6c48fa5994965aa4fc0",
"T2T1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "88d1cfa8340bd057bb2e6cc26d7f19dfc9a34559453e822e4e7f38367a68b155",
@@ -11922,7 +11940,10 @@
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "a3983a1aa64eba35bab7db1846803fca323c75271bb1d2d1ca572ca8b473219c",
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "3eb62cdf8fdd0434521a2445ac16eada2c19407ba0b31ba198e1104d80d43435",
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "154dce2a32641bea1b17fcbb415f2782a5022f31b4a4e5a91934a825b0cdfbba",
+"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "2f76e5a36338355c27e9eb49259e66738d84d45214e5ef532208159c217b18ab",
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "b675cac479c7e000c638cf985a444eea763d13d6b85c0a3dff77aa66f673a77c",
+"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "fb2c1fe784d109cfd982a73bbdeb2a18dab4884e8f7bc18535da413fbf171308",
+"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "c0f0429b3c211fec94e2b0aa7d711b868a3cb3fa7eaef4d974a7861266e8196d",
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "a6867e7b4d3d9f2efd165c70d63c83f93a4e346400e966ab0901cddd0faf16d9",
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "4c6af851b266dff118ea9088d6629148b8e583d08ff3a06b04c2b4edd10b229a",
"T3B1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "ad5d765f9b7e41787f92e18d0b3bbac43f0c25aa084c85af170c08594a64bb49",
@@ -13378,7 +13399,10 @@
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "cbd10539b89cdea9a94b5f7fe16a0d27135c79e8598ea59c01216a1f773fa10f",
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "4e5d2ee9ac0342e2d21fdceb47ad204d963469ab2899e0a7e167c4ef51ce1a5d",
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "73c43f709b14b746d702e567ce2c7e940f6ff40a4f9f99ff8519956954c80fbe",
+"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "fe3a7b988ed5853fc1b9b017edc6845cc0a3fbc4b0562d734bdb94ecdd25ed49",
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "df6017068ab8f2c6dd26ba13c9912dfdf91c2a41dbe22297df4480ecb28c0f82",
+"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "f931c94b94adb57f3026762e06e85849e4f1a95b1a5a35356b3fc77593a58fea",
+"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "934c9ee2e57b834aed945d90176b26268b890cc61f12327755fda22025063bc3",
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "1ca88cde2f3205d3bbbd3ef802627c5e475f8587de555ba3f3d7352f75a1abc5",
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "3dacb57b120612ef0aa571292c77f6711eac768993477a9df816470dcc54d997",
"T3B1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "c5c7b80e5bc73d1b5a151f4a8f2b6462e3a5a88e0a392ddcfb26ef7a3bd09efb",
@@ -14834,7 +14858,10 @@
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "e1cf34fc671a44fe4a859b725426639555b51ce43f4fdf5143b939542a26141a",
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "4f7f1fc18d5c4af702e55242c101d4bd6982193402e050722018f4a04d7ae0be",
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "ae79d4016e0c71533e6966245c9e5347346e4fe393478d976ab01fb23a4391e2",
+"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "cb264e035c27ccf3b7b93b33a880c630da862dfad464baf90c52dec4ea860e99",
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "dedd0750d55e6ee6d460a776b0829bd02a4ed0853354fea3c741386a59d09f19",
+"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "c41f8adf629ec3e8eda11611668515cb06b3f56d680980257731d4f7be307290",
+"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "d2c080acdbaa5434c9b7d6de9e2eb7d10718e3c028a9e2742655700e7546df12",
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "afd11cb401d109ffa18b22588a3d2f65b60b4e4bc5fbf4b4775a346b9795f05a",
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "5ca2dd1d1c543f9634754b7e3f04f9988ccf57350ae9a37bf8e0529942c6b9d2",
"T3B1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "f818ed0bfdb190f0d372ba64313a9b3a8ffa57c40ac7c8272b8518ac4b06d3ab",
@@ -16290,7 +16317,10 @@
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "3ef215d0ec20e3b7e94032f6b01d515305845979a96c929493a37b6ee0c46cbc",
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "35551212b28dfd6cc3ef66f747c55bc165b54fe9a8be78a56e2e14ad859290c0",
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "1721258b4314da9b4d56341ebc2b2e02e788fc46552024b63ebcef8216b19cf9",
+"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "f90735ad0437a634e7b8f43edde9f94e7ef1148648c1225a219ce3774a06b9d2",
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "553fe2df163623e76fb513e85108170f7de1c5203ed811d277852c7c51cc1919",
+"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "cdb21c9d7c08cecb12837215726f0ce9fd1b38a8f2afc90f68c25247a632e12a",
+"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "938df6d9dc580ae854ecbe454a3a91837981a1be8b6aff98eedcb1445c1cbc4e",
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "51a37ef873ae76091c1613823239257984cdaffe0c0958de0280cd4383de01d5",
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "7db8c50b9dde97958d3e20c067607733f386af095ee51f5e78f426eb831cc9f8",
"T3B1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "5987fadd592d1a9a771ba2f82f40ec5b97e3300fbeb968e7478f78d534cb717e",
@@ -17746,7 +17776,10 @@
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "52f2c89572eff45f28d4c6bc18ae64d734b22071aa6224b28d0ab5db0b03a50a",
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "c98b9395e998d7f2e74ad3f800f30cb6ebc22aa47d0e34a5ebbc4a7a3b81e44f",
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "6fb6833bc87f795916a264a224516e8136fb1fdecd94f7ea8c42783e2a7b8ddc",
+"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "fdb74a47da7c586b29521914f1dba59374babe3ae8004fefda9fc3426780429a",
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "2c426a4d31c3dac535f2d2677e4b9fcbcf1bacad017b6bb34491f4ba929f24b1",
+"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "2022b3db78ae165460e20c60c3d511696c179d44354a07b95f1189c291e06117",
+"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "83dd5c68f23f6bd0e1621171086c5617c6f4d558f94264e17aa0bb05c32607fa",
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "2983323a97b658c9b7e9c901c33ebf00317511b6f328cf14eac6114f510f80d7",
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "6172430695443820912b5596f448e889b91abfc526f0ecf817cdcb0d7d7a4495",
"T3B1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "82c5a364938929997150861e0c5c1505839edb87b9b8036d2012a87b7a68af2d",
@@ -19202,7 +19235,10 @@
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "eeb64064af645914c051f416f1b521cb8029cf5230ff8a1ba5598a49d72a5da7",
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "2500bfcf2199fe2da4ad2450c79436446a4d623cab625c56325af9f54b619ce9",
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "afb7011be1703419442cc88b22a822a4d6dd3a800fe8cd34a26602d9aacc94a5",
+"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "628fc6a275aa98135ca6a77e292ac8e0635b27f8eae22c8d15bfd77b180ea849",
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "93598c232b6ab049b62e864860f2f0efca04f1d6576207b4fe0b46fedc068c6a",
+"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "1768cdee621af1b83a2251e17b4e2832360fe154051eefa0de8264f8358a67e1",
+"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "2b304b680a2bb57bd11a3edbb97c63ff781982e8543e48bbce44ad8a6fcd45fa",
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "2daf749d43752758ee0fbc0ca3b88283d51682b8830b2edde65a5abf7405b3f7",
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "8c8f4005d1e55475fa3843eb257e9be36e76869b5ad715efb7daed997e080c9d",
"T3B1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "f5a680aa5d729e88b36e38cf7579dcd28dab4bbce6f7db73ec80ba71ff17fa27",
@@ -21053,7 +21089,10 @@
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "246f7df5718a9d328797ee828e42cbecf7145d1f1310131465a164e1a5d665f3",
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "7b6d61c6cfb0d3abccf51a61ee52db680e2320418107314903f9ed58fcc06d8d",
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "8e76de93245696238e31f270017857af0ead0dc04c2f7de08e37bf62e38fc343",
+"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "dc236dd9c70edf2fcbed59f2e1142a7cfa455ca4cc5c1853d2c6d32ac33d1949",
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "ce272fa0a9e9425b3c44872d05acbc6a8775a3f3c92fff9189bc8b6bf427238d",
+"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "ebea0d04d733f8ddc8270cfeb0ee567a1208723bf5a20b92b5ff4c71153e0605",
+"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "428c6052923923ed65f34a0dfd729108431a6aa3f648e813a670306a18cbc9e5",
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "c2dad4887d056eb0e6699d6b987721695ade337a5b1d1c5fa51df7c5f3ca2034",
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "c72c11f890508be131958024354c9976430d40f250f133f92b9132b9f8f390bf",
"T3T1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "10414e620a955ee32d86a6357409a05f453b098cba1c082c65b11a56c73ab976",
@@ -22540,7 +22579,10 @@
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "c0f0abdbb6d59693889bffe5416f594fa7fe1f74d1f6dc4764ce3814b938d11f",
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "f24f3d23ade1d69a0d8b4b2b98b0d5938256a8d492e8ad37d668e9fe02579702",
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "ab94a1835f8e21fed76559d46d3f9713f66988bd0c7a31dd25a37590bc2d585f",
+"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "215ca5f49e1459463bbccf01ed12e6e0796894dbf9b9d4dbbc7a7fe5fe6dd7bd",
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "75fc866b9b44f2ee938e623b013251d2dca8e2e3817fcf0f73ee5736fac55505",
+"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "e7080a3993a480f925a369bf5fa7bfab6f734c7703720613a290e82d7869ab80",
+"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "30b034b992324d11d1f39f01e0d188200611788c6cb4c065449f0eb752532cee",
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "b775a4a4b93de1f591933eff63f0dc11d37356817dde6eab6677e39deac056e3",
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "70bf55051208ce6e086867ecf8999c54e73ebb75a4b5efaf04b62781b887d978",
"T3T1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "064fc37e1ad10ad7b1d0a3b031503c6cc6fdbdd91ef81adb033e2475e0dbc454",
@@ -24027,7 +24069,10 @@
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "19094b8f0ba4cbdba33d2aacaea286e98ab56d798ad4441ed6fe9b6515790472",
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "f2b936dd6ef85c7b36dd31dd5437838f81ff2eb11ea31eec8207d1dbe857c579",
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "7cdb3bfdf2db6e8bc07815379f4109ec65947124a944bc5b65b2d60c0d3e87af",
+"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "bbb6439fb36a7ea6cd0b19c88e0d3a86c3753c031d412f474c6388c56c30effc",
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "602c36a0416f111221bfa7e96f740f90d363751c30712d0c1208a013975160a8",
+"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "51dba3ce7e48c5780453d192289ffd172de25c8dd2097499e5d349bdc63c473c",
+"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "ac09b79429f1531915d007f793601da0b6cd6f6f275ff48138c5ae63bc6fa3ab",
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "71f50e4f8b83de6cf5dd41a8c11c02dd985ecd0d2b44354ec0dd8ea5d1d76393",
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "11985ff5e2f8c11f061a6e0799304c907a80a73239772a68cd5a3732e7cff99a",
"T3T1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "9addd0303f76757b081c79328667d4adacfec739fb14f487a60e188a55b43e00",
@@ -25514,7 +25559,10 @@
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "05629c424df0894e47af168947fe87a19b04340262a960b6bba316c6f1326d89",
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "89454561d991a056e642e6e636d33f0155e188e46d05adf44dec7c6c1860a64d",
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "e188ee6b9c8343c16fb81a602f7fa953c6f4a88323e63faa06fa678b4c63d0a4",
+"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "d2c04ea0bf872a4451b7ea55908cbb2783be579d7c79ae8fcec8592992d40373",
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "94abdab81a69f317cd26078cd6ab67ac876c3320fd2fec3185e606315951524d",
+"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "b6065538ea64580b41f5d7ad119ec9582f296a6a2684287f541aa4c7af06e163",
+"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "7b3bc2b764edf34239f5b54cbdd11177e63951a2621cc44deacd466e7e21b268",
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "38c1c45ac3c62114a3ae2f23c13c32b9c611558aa924596c2866d018850d81f9",
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "aa6d7da831f4e6230ec37458cbdec6ef448e67f2440072b66165da00c36177b9",
"T3T1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "b498d20532d8b93bd29f2467904323405f6dbae9f3831ed3e582faed15ee5551",
@@ -27001,7 +27049,10 @@
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "14251b20c9a7615f29562569eea91acd5a354354004e9526ad31c51ef420a074",
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "50949c25a1775822f829a1ec72a15dfa1e3c6e999f4b97e5958732d283d44ce7",
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "e5e66aa1c2cd2c8f3384b65e5e565dee594cc5cf26047fb554f751de29ac9d6f",
+"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "b7d22e6b51161cc9e85574b2b043038b38d2d63c5cf9086d548ebe9e3df53be5",
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "99bac837af3804dfe686a9f51eac2748a17fe63a299b95828d7c95b9fa8202a8",
+"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "04a760fb5fe02b911f5753289094402ad1bde00e9998ad5210774df013efbe4e",
+"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "43110f8eef682bf1c4b36b7728cb47e227147bb7f029efc1b57c7e7326141f3b",
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "9719d07d9fde26b9a7805dbfd7bf8d9f811e0a11251269335d94f5d0fb4d3ef9",
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "f838f58f32bfa77e129e2f6996fbb91f7cd5f61001db74fdbcea8db9392dd569",
"T3T1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "7f5b56f2db3580ae92552ba0eb863a7dbc9d9f6e86d5e9389864f0fc9f1b6ab7",
@@ -28488,7 +28539,10 @@
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "88ca51e731a0a455a798406303db248ebcf90189e50404cf9310f4670786ecc3",
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "d3a991f65610dbb592c6d4c52734f665583bc840f39130f84057da052fd21665",
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "0a4e9d836e7d6d5d930f945663033ae02832fc3a9bdcaa645325b9bf9eed2583",
+"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "87dfa60a0f2f04b382aa37e4f244988a3aa757c36144559f31fbe2f065826067",
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "3438730a9b067ff5c04ab6ee885917f1d71a4385c1746829e3ff23d954fbcca5",
+"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "2a8d72819cef63f28e9ffe3bf4ed3a07669cfe74443f8ff6c5d5531342037f0f",
+"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "6b507a59f0c47cd570a6c94c10ddfaa31f1fc118b67e4e9c629da53e9c0d9746",
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "ef0c9df41d8f0e667c82ba48ccdeafb66d59a788ac7058752c7fbcdd8e3f7153",
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "55741f4fd46700cfb78ddfcc9a27bcabedece4dd798d421b63098c05bcd8d11e",
"T3T1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "be1d862c789091c617882929e3d1156f026728a42524e92bcbbe5e66ee1efc68",
@@ -30340,7 +30394,10 @@
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "f54e1922bcbb11c6c91cbf4f96cc0e60f80bfc0bfe0aa254dbf962c6398f8d0e",
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "bcd5378185c41fed10a4797a7bed09b94265f2f16729063b43171b4562de2175",
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "a2dfe9339168c10701c8a7f78428cb771c98b0ec35fbb865234f9ecdb5dea25c",
+"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "7619a9eec37196c46d3a287de57e3231f9668a8da4bbd014cd5eb1a3a87b419a",
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "88de37b9e085e54c82fecacd489394e68b04183049c72b4d313179b367bc3d0c",
+"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "19b6bbce297e7571c8176749e36cb9e42c8ba1b7f07c39acd0772804f017add0",
+"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "96f15ae83fb5a2fd6f2a53c6cd04d5a6a595d7609d2aa4663500125818b3ed2d",
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "efa102387266306e95e4ef40393751f15b0068aa32e6f9aba86d4d164a373591",
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "cd0f8de03b982b51009305fb346edaac05bd2ef73974f38b38c82e403716e8d6",
"T3W1_cs_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "d94e63d025d965e675c82346f91e19b1a8eb4d0223ea6f50a5ec9165b9914001",
@@ -31818,7 +31875,10 @@
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "1adb9b4b3bad829a6eb16de9ea0fcd6b30ee3976c501980306d3c21e7e0949d3",
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "7078f9158099d695076c15ac047552f4aee3932467ac9feb26087c9cf8036681",
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "92aef69ade70a0fc23c6426037f240b4aeeecd965f742bc58ad30c4b000955e3",
+"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "55fa982d6d90b18d680b4fd9b09c9e725c6c4ff1b3de8b9bdba6733384630611",
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "7a4d5742a1cb90ddae04b9c85f4bb2fb139af60a1e5d2ba50754ad7eca14f176",
+"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "30a3b2a0304c71bf95acf735e8d8713aab1f54800c2dd0413c2b2210354559fd",
+"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "5bf2cec7bed4ea8494ad84c08c0edad962386260319e99876f62e1c2b780f966",
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "8dffad41ce0e884be5970d59201bb3fda8267f4d40fed6e92277c9d67822d147",
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "5f99cabe3bf6d523711bc168eabe59bddbe09e0ddc3be40ed6408364b76a077f",
"T3W1_de_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "3cadebbcdd6c849bba5624b07b802d0deeee8acfc36cafbcfb5eac1fa284c8d1",
@@ -33296,7 +33356,10 @@
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "9f35e5dca5cc6fc9799b7a261cbf422f7784dde428845f7ea9f5ddcbed39aa00",
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "88038cdc4cb70786de3cc9644707e0dedc139a0e2a051861cc06fca53554cd66",
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "90aa098e417e04a469eebd8d865c8f1c370fe8fe924689ba2b1f7428ab8d591f",
+"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "dd31e5aaf8a323b15dafc34232659ba513211786a98cd6a9bb0bf9ea2363ca6b",
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "b04cf965ff39901d9e1694863171da411a2de51bb92fb3056165a1417617b217",
+"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "864396c57c5c83183aede47f0b5a9cb9c08e301c9c4685682d66636d820433f1",
+"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "571947380faf1a3ff903ebb78df48e11c9c7affa93c2803945580c4359672bac",
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "d06f196e8d7996719ec09cd71cbc994d9048610ea6d1838488e3bd81ef19d25e",
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "6fb5d4ee1fa6ed2fecd7907e33d4f4dcbfd8f210f21820176ee49a5d51b65a8e",
"T3W1_en_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "2cfeef11466e705564bb9afca5755f0006c2ec6a9e2c43e7d95eaba4f93d3c36",
@@ -34774,7 +34837,10 @@
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "64d9190d4bda23ae2997283722e9dfa5168c900ded489a68cd0942327841581a",
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "469409889f46b040b102472cab8e8ae5350a870e2ad19cf158c233d8f43ad7c7",
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "b21f1895fd5815e3a4a3eaa15ae7509bd117597ebdc6db7f0cc4d2fecd8492ea",
+"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "9c43720a84c2a346596f98416b52a3ca250477be79bdbcd4f552499d69891aa3",
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "47a9f88c9ebeef225e99343ed3b90029334d83da56b73f3576ea3e917de3fdd7",
+"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "6bb02c204057294668e8f93310d537a782b0248f7bc527b3a7be882669663517",
+"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "2570cce526786c4986f0b97e75301aff81bc22131cd3f7e17a21920cb89ea1c8",
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "3f05ee87985e3067a0aaae704baf3d8fd83f4dd26a068527546671c972145f84",
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "fdd7db292b4b6443a7141893334d7ade440b109de72afe0d41c2607f233b905e",
"T3W1_es_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "559f1139529d57c9e14624acba8c9f3086818420d5840973f604703f11d3e855",
@@ -36252,7 +36318,10 @@
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "ea55d1167284006d4f2ada96bbf043bad3649a947189d9e6bfa25203bc568311",
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "a743c6e32c940eca6c9c5eb0d3592b9dcb44625e0c4559d70b6fcb22678ab4a4",
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "3488986b0c934322de2a10ac123d9e9a4259117817ea3ab072465ef873a36987",
+"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "0ccce7852d84c64624e631068f60460412783f4a93e7cac402d3a297105fa922",
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "eb4da6dc58876c714493cdbd003ad9d20b59d5c6e419e47b556c01a756e052ed",
+"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "1feb54ee76532771bd50a50868f8086cd8d18c502bfff8f7f5a2af8ece11bfa6",
+"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "abb11d68814059ef0e2b61fb2971a65b391d3ebf97de131fe72f738472033d7a",
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "22c6fb7dd2b11b74b4652e47243b19158a9ca354d68a7c905c68b1efd5538283",
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "c253f9b2fce7e1110385197a403072f83f31e4f7851da66c16d2f7f2629eb31b",
"T3W1_fr_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "301db07265de4e58d64b5ca46ed0a3b592750b7babce3ffab0346430861961ef",
@@ -37730,7 +37799,10 @@
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPathPaymentStrictSendOp]": "33bf10a41d76be920bf4d47f53a722875fb08f302c49ee9dcfddedf70372ceff",
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset12]": "3634518a4f0d36e4f6239af2cf774533f273454bdc40c91042da608d00a6f7fd",
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-asset4]": "6472a92353368f299294293f859d576a5ce608676b173f59d49d76b4a0c1a9b8",
+"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-memo-and-payment-request]": "eedcbf78908c96e8444a0a909cb5004ca8826239f7fa0789f5293bf30ffb75e8",
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-native_asset]": "016aedc5be64870c6a516fcb87f2464ae4ba213bb0073ba409bd497983cd2cee",
+"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request-multiple-operations]": "c9e7cd134a4f12eebb3e3ed5eb199657892fe776cd7861e98cc20699edea4b91",
+"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarPaymentOp-payment-request]": "ff4adcc0d8b653f5fb60de66433d678ae5d04f6d167307a8878cc184675fd726",
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-all]": "5994e99cd2dde6c138e88b86a92cb65c9d5553e8107288db15d915d15fa4e785",
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-one]": "7def82d61e351a5ac5a45e98b7ebca906c25423ae5348102f80d5a32a5397eca",
"T3W1_pt_stellar-test_stellar.py::test_sign_tx[StellarSetOptionsOp-some]": "d6cad023682078c3faa1703131f13117b1c3da74bfc612a6f6d42dde1d19975e",
Why this scored 35/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.