1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-05-05 16:39:08 +00:00

feat(test): Test payment requests in Ripple.

This commit is contained in:
Andrew Kozlik 2025-04-24 17:12:38 +02:00
parent 0cdcfa5e25
commit a801befc31

View File

@ -122,3 +122,88 @@ def test_ripple_sign_invalid_fee(client: Client):
match="ProcessError: Fee must be in the range of 10 to 10,000 drops", match="ProcessError: Fee must be in the range of 10 to 10,000 drops",
): ):
ripple.sign_tx(client, parse_path("m/44h/144h/0h/0/2"), msg) ripple.sign_tx(client, parse_path("m/44h/144h/0h/0/2"), msg)
@pytest.mark.experimental
@pytest.mark.models("core", reason="T1 does not support payment requests")
def test_signtx_payment_req(client: Client):
from trezorlib import ethereum, misc
from ..payment_req import CoinPurchaseMemo, make_payment_request
memo = CoinPurchaseMemo(
amount="6.36 ETH",
coin_name="Ethereum",
slip44=60,
address_n=parse_path("m/44h/60h/0h"),
)
memo.address_resp = ethereum.get_authenticated_address(client, memo.address_n)
msg = ripple.create_sign_tx_msg(
{
"TransactionType": "Payment",
"Payment": {
"Amount": 100000000,
"Destination": "rBKz5MC2iXdoS3XgnNSYmF69K1Yo4NS3Ws",
},
"Flags": 0x80000000,
"Fee": 100000,
"Sequence": 25,
}
)
nonce = misc.get_nonce(client)
payment_req = make_payment_request(
client,
recipient_name="trezor.io",
slip44=144,
outputs=[(msg.payment.amount, msg.payment.destination)],
memos=[memo],
nonce=nonce,
)
resp = ripple.sign_tx(
client, parse_path("m/44h/144h/0h/0/0"), msg, payment_req=payment_req
)
assert (
resp.signature.hex()
== "3045022100e243ef623675eeeb95965c35c3e06d63a9fc68bb37e17dc87af9c0af83ec057e02206ca8aa5eaab8396397aef6d38d25710441faf7c79d292ee1d627df15ad9346c0"
)
assert (
resp.serialized_tx.hex()
== "12000022800000002400000019614000000005f5e1006840000000000186a0732102131facd1eab748d6cddc492f54b04e8c35658894f4add2232ebc5afe7521dbe474473045022100e243ef623675eeeb95965c35c3e06d63a9fc68bb37e17dc87af9c0af83ec057e02206ca8aa5eaab8396397aef6d38d25710441faf7c79d292ee1d627df15ad9346c081148fb40e1ffa5d557ce9851a535af94965e0dd098883147148ebebf7304ccdf1676fefcf9734cf1e780826"
)
msg = ripple.create_sign_tx_msg(
{
"TransactionType": "Payment",
"Payment": {
"Amount": 100000009,
"Destination": "rNaqKtKrMSwpwZSzRckPf7S96DkimjkF4H",
"DestinationTag": 123456,
},
"Flags": 0,
"Fee": 100,
"Sequence": 100,
"LastLedgerSequence": 333111,
}
)
nonce = misc.get_nonce(client)
address = f"{msg.payment.destination}?dt={msg.payment.destination_tag}"
payment_req = make_payment_request(
client,
recipient_name="trezor.io",
slip44=144,
outputs=[(msg.payment.amount, address)],
memos=[memo],
nonce=nonce,
)
resp = ripple.sign_tx(
client, parse_path("m/44h/144h/0h/0/2"), msg, payment_req=payment_req
)
assert (
resp.signature.hex()
== "30450221008770743a472bb2d1c746a53ef131cc17cc118d538ec910ca928d221db4494cf702201e4ef242d6c3bff110c3cc3897a471fed0f5ac10987ea57da63f98dfa01e94df"
)
assert (
resp.serialized_tx.hex()
== "120000228000000024000000642e0001e240201b00051537614000000005f5e109684000000000000064732103dbed1e77cb91a005e2ec71afbccce5444c9be58276665a3859040f692de8fed2744730450221008770743a472bb2d1c746a53ef131cc17cc118d538ec910ca928d221db4494cf702201e4ef242d6c3bff110c3cc3897a471fed0f5ac10987ea57da63f98dfa01e94df8114bdf86f3ae715ba346b7772ea0e133f48828b766483148fb40e1ffa5d557ce9851a535af94965e0dd0988"
)