What changed, and why it matters
This commit adds a new on-screen confirmation flow for Ripple payment requests on newer Trezor hardware wallets. It replaces a placeholder TODO with a proper user-interface that shows the recipient, memos, refund details, and trade details before signing. There is no obvious security bug in the change; it is a feature implementation that improves transparency for users.
No immediate action required. Treat as a normal feature commit. If reviewing for security, verify that `confirm_payment_request` correctly renders all passed memo fields and that the `assert verified_payment_request.amount is not None` assumption holds for all non-CoinJoin Ripple payment requests.
Security signals we found
New user confirmation flow for signed payment data
Replaces a TODO comment that previously omitted memo display
Adds input validation (DataError on unrecognized memo type)
No cryptographic, parsing, or authorization logic changed
Evidence from the diff
The change introduces require_confirm_payment_request() in core/src/apps/ripple/layout.py and wires it into sign_tx.py instead of the previous minimal require_confirm_tx(msg.payment_req.recipient_name, payment.amount). The new function parses verified_payment_request.memos and passes text memos, refund memos, and coin-purchase memos to the generic confirm_payment_request UI layout. It raises wire.DataError on unrecognized memo types. Tests and UI fixtures are updated accordingly, including skipping the test on T2T1 because payment-request UI is not implemented there.
Changed components
core/src/apps/ripple/layout.pycore/src/apps/ripple/sign_tx.pytests/device_tests/ripple/test_sign_tx.pytests/ui_tests/fixtures.jsonInspect captured patch +92 / −27
diff --git a/core/.changelog.d/5450.added.1 b/core/.changelog.d/5450.added.1
new file mode 100644
index 00000000..2353cc19
--- /dev/null
+++ b/core/.changelog.d/5450.added.1
@@ -0,0 +1 @@
+[T2B1,T3B1,T3T1] New payment requests UI for Ripple.
diff --git a/core/src/apps/ripple/layout.py b/core/src/apps/ripple/layout.py
index 4ef4359d..0e82910d 100644
--- a/core/src/apps/ripple/layout.py
+++ b/core/src/apps/ripple/layout.py
@@ -1,9 +1,17 @@
+from typing import TYPE_CHECKING
+
+from trezor import TR, wire
from trezor.enums import ButtonRequestType
from trezor.strings import format_amount
from trezor.ui.layouts import confirm_metadata, confirm_total
from .helpers import DECIMALS
+if TYPE_CHECKING:
+ from trezor.messages import PaymentRequest
+
+ from apps.common.paths import Bip32Path
+
async def require_confirm_total(total: int, fee: int) -> None:
await confirm_total(
@@ -28,3 +36,60 @@ async def require_confirm_tx(to: str, value: int, chunkify: bool = False) -> Non
from trezor.ui.layouts import confirm_output
await confirm_output(to, format_amount(value, DECIMALS) + " XRP", chunkify=chunkify)
+
+
+async def require_confirm_payment_request(
+ provider_address: str,
+ verified_payment_request: PaymentRequest,
+ address_n: Bip32Path | None,
+) -> None:
+ from trezor.ui.layouts import confirm_payment_request
+
+ from apps.common.paths import address_n_to_str
+
+ assert verified_payment_request.amount is not None # required for non-CoinJoin
+ total_amount = format_amount(verified_payment_request.amount, DECIMALS) + " XRP"
+
+ texts = []
+ refunds = []
+ trades = []
+ 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,
+ )
diff --git a/core/src/apps/ripple/sign_tx.py b/core/src/apps/ripple/sign_tx.py
index 7cd71b3b..2320c6c2 100644
--- a/core/src/apps/ripple/sign_tx.py
+++ b/core/src/apps/ripple/sign_tx.py
@@ -56,8 +56,9 @@ async def sign_tx(msg: RippleSignTx, keychain: Keychain) -> RippleSignedTx:
address += f"?dt={payment.destination_tag}"
verifier.add_output(payment.amount, address)
verifier.verify()
- # TODO Show payment request memos.
- await layout.require_confirm_tx(msg.payment_req.recipient_name, payment.amount)
+ await layout.require_confirm_payment_request(
+ address, msg.payment_req, msg.address_n
+ )
else:
if payment.destination_tag is not None:
await layout.require_confirm_destination_tag(payment.destination_tag)
diff --git a/tests/device_tests/ripple/test_sign_tx.py b/tests/device_tests/ripple/test_sign_tx.py
index a6829af7..aab0155c 100644
--- a/tests/device_tests/ripple/test_sign_tx.py
+++ b/tests/device_tests/ripple/test_sign_tx.py
@@ -121,7 +121,11 @@ def test_ripple_sign_invalid_fee(session: Session):
@pytest.mark.experimental
-@pytest.mark.models("core", reason="T1 does not support payment requests")
+@pytest.mark.models(
+ "core",
+ skip="t2t1",
+ reason="T1 does not support payment requests. Payment requests not yet implemented on model T.",
+)
def test_signtx_payment_req(session: Session):
from trezorlib import ethereum, misc
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 272c5afd..9c60eef9 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -2268,7 +2268,6 @@
"T2T1_cs_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "32d380b2c0942f8a2ab6a32e0e4c8a2ad2ab6750ee39c6fa4d4f0bacf59a4b7c",
"T2T1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "1e667e448398e4e91e9721d6f97dee7eec37374e5c45e1bf9b2b96b2deece4a8",
"T2T1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "db03b21f6fe1bcf7b11c09c9d931dc9271ded9367fb126f27512f2d496b49b23",
-"T2T1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "b56c91225b8e66dd0fab3509e05e77805ed533e00adad6341c839eb7a9fff01a",
"T2T1_cs_solana-test_address.py::test_solana_get_address[parameters0-result0]": "232286887ed2307a770005164002f6864e7437c19a7d970c95d128cda6299a9b",
"T2T1_cs_solana-test_address.py::test_solana_get_address[parameters1-result1]": "0a7d0ac0cf71f5ae06be7382c1061045bc20d915fb83b1db9f532e961491ddbf",
"T2T1_cs_solana-test_address.py::test_solana_get_address[parameters2-result2]": "c78eac68a7ff2f432312eafd8509ecc6d77970de5e1c16084b1656bf9bf6d036",
@@ -3761,7 +3760,6 @@
"T2T1_de_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "a3edf3ced8fa1fa6b9f67f869a28bc880ce5e214b0adfaf839cd867875845912",
"T2T1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "35eb6ff2555bf2a161c03ff9692da095019b2d1a8559946d46a03578beac1ef0",
"T2T1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "2db564b592a4e5a7b27d8a42ecc512987542b4a4541a2be3f38502b57a3bc9b5",
-"T2T1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "91ddcb2bc4a871befcf6b05c6a16a0397f9be38778ee190b905d4d4652f58a49",
"T2T1_de_solana-test_address.py::test_solana_get_address[parameters0-result0]": "49a333c628aa3e008c749b7bd03555e3d4c0755846e03e0cafc2ba7c282fec8c",
"T2T1_de_solana-test_address.py::test_solana_get_address[parameters1-result1]": "d250f2f005bb621428433c34933db8403eab0cba54944ecc871235e56ef5df23",
"T2T1_de_solana-test_address.py::test_solana_get_address[parameters2-result2]": "68ae8fc36445c2eddda1e1b98f11759d821aee07018b720abb88412f3c6be5d3",
@@ -5254,7 +5252,6 @@
"T2T1_en_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75",
"T2T1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "c1bb0858eb666245b78b4d2d01b89a0f6706d6ebd0de54a51c7f50cd2511be2c",
"T2T1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "3a6be96991383d61b9651372c8085211e73e63dd375e51c99c4f92c72cc3d013",
-"T2T1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "d988bae7c8fd031482830de2e57f388f5c2c4ff21273d5c3019142e0aa625f1d",
"T2T1_en_solana-test_address.py::test_solana_get_address[parameters0-result0]": "5deb34610c45ca0729df7628fa170dc5efc49cf6e2e2176299dcb2ec8f3d969e",
"T2T1_en_solana-test_address.py::test_solana_get_address[parameters1-result1]": "df6efee54f89c3dfbae6dd66dd49c44d72e81b2fd209a50b0dc17fb7fbec42f1",
"T2T1_en_solana-test_address.py::test_solana_get_address[parameters2-result2]": "c55c78efe9bc466f915b5eaba29693d3441ef1779e5331fb5db69d70a0b000c8",
@@ -6765,7 +6762,6 @@
"T2T1_es_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "1775658fa541fff7933453c1d346449c492079a39341e07135ac9e7662b3bbd3",
"T2T1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "75688c057a17b339ca13aaa5f1dbdd6d52843cf8114646ff156c942b8c6b79f4",
"T2T1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "0eb3a69069e4ef2656c06374cbefb4cab46a427901a99bec4aa2b63da858be52",
-"T2T1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "12aa2e2e77701655d42aba621ff3a68df41a41bbc00080307dbf8047dbdce06f",
"T2T1_es_solana-test_address.py::test_solana_get_address[parameters0-result0]": "146263f5642946854986d96528a1e261c620d5f1b34e579766b0da3592dd66c7",
"T2T1_es_solana-test_address.py::test_solana_get_address[parameters1-result1]": "faadd574d058920e1aacddb4ca875749bf346e670dd7e25d98153b4ab4e5d309",
"T2T1_es_solana-test_address.py::test_solana_get_address[parameters2-result2]": "505308883c325bfedf9850e0d67d2677ae21284896789516cd5828f310bc8380",
@@ -8258,7 +8254,6 @@
"T2T1_fr_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "94d3ba1cba15b836e6ebc48ab307aeea71275ef2d9849aaabc8e883df555ce3f",
"T2T1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "f7b19a5295fb666265fdf058c783f732603cc6487647d070d63804a859d31d4a",
"T2T1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "79e4486c6c6ac4ba23a69c50909ed0df804fb3808ca4152e07320db1bcfe809b",
-"T2T1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "f3c32f7a21aa52bb2bc0f90e995ae11a1e4fdc4879dbda09826d20d5580e7c39",
"T2T1_fr_solana-test_address.py::test_solana_get_address[parameters0-result0]": "da29404685a7c4e18cd95b021b5961c8d71dd5249848fee9b4bd75622989b917",
"T2T1_fr_solana-test_address.py::test_solana_get_address[parameters1-result1]": "c93742038d33afc973b0610547aa54494d815857a8382ad5797915baa0e0bb76",
"T2T1_fr_solana-test_address.py::test_solana_get_address[parameters2-result2]": "30365a3b02a2414ed1539f3542cd48d5f16016d494e8c918b08c155099186909",
@@ -9751,7 +9746,6 @@
"T2T1_pt_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "e9e80e1bfd347b598699a7a84deb8932eff90fc5fb8b56771453e06fe3c4c216",
"T2T1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "237cc1f59d5fe21b07e24a40dffd8442d8bf7e6c2143aaf9d63a90457931c011",
"T2T1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "434a2ddbb7e38eef48c51fcb53e205b5664c901cf6c49e59016baa35796f73ac",
-"T2T1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "bc7667437e4aed08395f044b3c40cc21012753d31e8887d59e338dea91b55753",
"T2T1_pt_solana-test_address.py::test_solana_get_address[parameters0-result0]": "85cf8954203a6da1705795f82945ba90ca4313b3141cf5292cd82ade058f85be",
"T2T1_pt_solana-test_address.py::test_solana_get_address[parameters1-result1]": "b342f12ea8fedbfff455230f33dfcea45cb0a7bdef77e9e0a85c25aed7885d7e",
"T2T1_pt_solana-test_address.py::test_solana_get_address[parameters2-result2]": "f83b6aed898313400cbc8ddafbe409d1aae53b44faf38f514d5d89eb5e642e1d",
@@ -11497,7 +11491,7 @@
"T3B1_cs_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "92840d4624bb07440bb1ab5cb4b57251c9950388accbc8334a9a7d609ededb01",
"T3B1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "9e61eb844c2bc025d99e49da1221ec9e8b218bbeab30a4dbb53ff6e66590b42d",
"T3B1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "d937e39dfcdf28b7d3d1c9d478d4c2a92f87e29cde51999f72f113fc5f6e0574",
-"T3B1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "64282d16c0432ab114789c095ec91a5db0ba86d4f2f6e532e8c3870adc8926db",
+"T3B1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "9933dd7c0fe255b579dd3b3e4fc024706ba1a149d0989edc5e4642b9ed3eeaa0",
"T3B1_cs_solana-test_address.py::test_solana_get_address[parameters0-result0]": "76099baa32877cd35bc9c95e71779b013c5c76ac144c29eb8f6b1e60dee258f9",
"T3B1_cs_solana-test_address.py::test_solana_get_address[parameters1-result1]": "8fa242a1837c91c8f6f91f58d26324118672c7d06b3013bb00dbc0e8aa56066a",
"T3B1_cs_solana-test_address.py::test_solana_get_address[parameters2-result2]": "60a7732d1f0b1119595f40806001ae769250b41a161f4ae0eb7af30b5a70ff7d",
@@ -12931,7 +12925,7 @@
"T3B1_de_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "c92ee4e050daadcfc7cc95657b00deed76bb463d486eefcc66455bdbe60faa33",
"T3B1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "e7f73c9429934cbce8c6367b9a92939a7544be04ec4c5740f25485d37a7af460",
"T3B1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "a3e4da50d27a5bb6a9bba615e5ec51dea148187497e2d57744b6a084198970d8",
-"T3B1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "077f4478b1b927b193f146924cfb67a2ec18575fda6b85efd96a9a6f1b50760e",
+"T3B1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "c5d8bfc06d65fa6540da3a6ab14427872311f6a5b3ff25087f4f990dfa87af33",
"T3B1_de_solana-test_address.py::test_solana_get_address[parameters0-result0]": "7d37d8fddc401d475e175df7a082e0d4c0271b51f2f90192d58473d2924d555e",
"T3B1_de_solana-test_address.py::test_solana_get_address[parameters1-result1]": "e4a0d49a652d7e24c751f2751a6eda24fe33943488b7255fb6dfa887faadd84c",
"T3B1_de_solana-test_address.py::test_solana_get_address[parameters2-result2]": "d933d01c8852322c935987a6232d596d2b118d4fd5e30483f296a6ba727dd762",
@@ -14365,7 +14359,7 @@
"T3B1_en_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3",
"T3B1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "8a6b6f917a9000ced3f6ed5a353f39d63138b76e9b59e83d3274bf607b7d737f",
"T3B1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "d3b021695db9257819266b19c629b256e47fb6754c67372a3f42e0df155b9b04",
-"T3B1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "1318cd1e1f4814f357ecbeeea453de2f83f5747d8597f4412c593af414839b8e",
+"T3B1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "f4847c472c42ee9969571eec56eadf4f7b15ecd6279713c177f1b9a665b854b5",
"T3B1_en_solana-test_address.py::test_solana_get_address[parameters0-result0]": "b7f3bfa51442b51137393a264db84545c48c5c1a275f4e75e2a9d85bd489ca76",
"T3B1_en_solana-test_address.py::test_solana_get_address[parameters1-result1]": "ba8de23e81f148f02e10a92df3784b458bf35ae8c7944910267c9517fb9329de",
"T3B1_en_solana-test_address.py::test_solana_get_address[parameters2-result2]": "97fa72d8573a45d5c69de88e4c507ebe38e8ca0ce58e3919bd3ade29defb3d28",
@@ -15799,7 +15793,7 @@
"T3B1_es_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "211e7c3419bd48ceefc570971fc522f809b39614563be948fd1e545366506dee",
"T3B1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "092d123d3c2447e809d58761906d5756d8d8b8d6ca70eff721984956fca1cc12",
"T3B1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "130390661d9844e1c14e00d6b5d9e7191338030d9f2d61009b9bdb391f74e053",
-"T3B1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "8650f618c9b29268e3f945e32119f4319d981907158869938318ed634f596708",
+"T3B1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "c61cc8b38206d46b6ba2a319f2bb3f239b6d42453287c839668ebc6a1d81cd92",
"T3B1_es_solana-test_address.py::test_solana_get_address[parameters0-result0]": "3c6126ebc0d41b5d731b13a9c902d62d8c6850379d0806602210376e1e910fcf",
"T3B1_es_solana-test_address.py::test_solana_get_address[parameters1-result1]": "1026d49f6bd47d10b3cf3539743e86a9eeb63d57e34c06c925f5a408a3dc79d1",
"T3B1_es_solana-test_address.py::test_solana_get_address[parameters2-result2]": "a1b082f59f5e874ee73b2a9f891a9af08ff836b9d2ffcbd7f6e3bf7cb349f217",
@@ -17233,7 +17227,7 @@
"T3B1_fr_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "35c9c9529c59ca5c386ac05856f7452f26cde732203b5b61ec9321230b52df89",
"T3B1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "883ae73e0246faa3aebf4815683e77f01f296fd05f7907f1417687db07f45b54",
"T3B1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "c6329f9b9dd881e1792343c059c5b4d664c20ff5bb1cec963cdc7c0e277f118c",
-"T3B1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "2f5f47f288468f00c4affcdaa196379ca61105da66f0a08231538d3f6e0c66f3",
+"T3B1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "e2c441ce1515706297ecb48328c307c51fc7e561dc8f7f2b16d0e466878c3583",
"T3B1_fr_solana-test_address.py::test_solana_get_address[parameters0-result0]": "e48e5d4a4b427d16a5b2214e2df5d785131c7ff866fdece652a5e246cb7664ee",
"T3B1_fr_solana-test_address.py::test_solana_get_address[parameters1-result1]": "ae152ed5f2d70a608a6e4ab60189223d570e05d568afc9fa41698a6acef96d3f",
"T3B1_fr_solana-test_address.py::test_solana_get_address[parameters2-result2]": "09e23480fa84209c21b9ea86cf31254652b9b5ef5f2eb4b5934e983e27905ec5",
@@ -18667,7 +18661,7 @@
"T3B1_pt_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "6ba5ca7223cd8ad675e081407f186acdfc8420304eea96de0fde5eda45ef0a57",
"T3B1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "bd825820db2d8e02aeec1c0333c70113618dbc5530976def507f1baa7cef79a1",
"T3B1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "d3ba83b2df16a4dc985dd1f4f6f752db9ca10d4498c0c1e4f02fd755567cb89b",
-"T3B1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "b100c3687426239bf8851401ca7d0c9bf12b5fd75327ed7f77e327ad7cad0801",
+"T3B1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "aa8872ab034189d00b0b974d4d02a052cb606cb9800dbee90333d5d3d66305d1",
"T3B1_pt_solana-test_address.py::test_solana_get_address[parameters0-result0]": "a89ced005085a1442058e23bfc8b7ebfe3f15f76acb6dbf9d2c6be317690494a",
"T3B1_pt_solana-test_address.py::test_solana_get_address[parameters1-result1]": "6b413d54ed6a57930018f1ccc53d9370fcd4a2bb385a3fe6d58c50c5a94abcc9",
"T3B1_pt_solana-test_address.py::test_solana_get_address[parameters2-result2]": "f357f308060ca5e4257cbd1685bd28b495dff83c7e696a1cc3b8479108063c7c",
@@ -20496,7 +20490,7 @@
"T3T1_cs_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "592adf9c06f8f39132298b46037dd524fac99e58237a0c023197bf47df67d632",
"T3T1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "400c9031f6210549b30c2d28bbf6952f4c9010e1066f60ffeae17e248ec6d1c8",
"T3T1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "d49412660c870df93876bf747969f85ff05cca26b42d86adb391a7e812c25c4d",
-"T3T1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "6c75a390f9a45916eb5670c48d3632f3fe389e60c7f242690fae2b87310ac726",
+"T3T1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "eb524aadfd3ff8a71f2a06193b7243fd1acb4fc3652854d4f2c6958acaab05e5",
"T3T1_cs_solana-test_address.py::test_solana_get_address[parameters0-result0]": "7bdb593a30298f9c8a79521f1caf6208a38d4985e95f77a6114b5fdf65339550",
"T3T1_cs_solana-test_address.py::test_solana_get_address[parameters1-result1]": "0e58f37d5939a77aad22ad079e94242c68c2943e83c05c9dbd67a6e244beb260",
"T3T1_cs_solana-test_address.py::test_solana_get_address[parameters2-result2]": "04eff9b172e21b3d0edf541966f6a4c09e86b84756bc27b021c7655b229607b9",
@@ -21961,7 +21955,7 @@
"T3T1_de_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "f2fcbbd7ad83aff9adc0ee97fe98e7272d8bcfcc4a023798e2ab1c9895fda70f",
"T3T1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "27b1770c7a0a541f6419f36678cf339631c62693227eb0a20dbd667ff0a99caf",
"T3T1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "5dd63095fc604fc8937252cf0e549056653276b715f27e2209b307d5a82b0043",
-"T3T1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "624f71ff63f255d490975dc1d6eec964ede906db3214d25ef8f27f3d1f2cc17a",
+"T3T1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "d7853204ecfd65a3a69d47aeca761dbcb13af6f8c9de325485a6cd58177699b5",
"T3T1_de_solana-test_address.py::test_solana_get_address[parameters0-result0]": "6eb9c09db25b95adb6523e06af957a9a2d2bbeaa0fe757e3cceebb71cadc781a",
"T3T1_de_solana-test_address.py::test_solana_get_address[parameters1-result1]": "d6ae59dfa2a19a1459337ec33b7cdba4c6c1d371b7637da9bcb703c5e829bb61",
"T3T1_de_solana-test_address.py::test_solana_get_address[parameters2-result2]": "494d4231e62d2b6727af1dcfe1ba30bc26914fbe11895ea1f4bd2e58927582d7",
@@ -23426,7 +23420,7 @@
"T3T1_en_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984",
"T3T1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "89da0f5666c5a80b093fd7313b7171b826a280220d56d65c56b102b9026f0f14",
"T3T1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "2d155684b3f14247d60a9c85afc4e30eb65027da60782515e87a39d45e88687a",
-"T3T1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "0211c46efcd3697efce70ff23de4697c79fa91ee2c9e6d2585d2dc6941be571e",
+"T3T1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "9357b593196ccda565cce3c6a47b5536c13f8720b51b7b23bb22b117a3986f5f",
"T3T1_en_solana-test_address.py::test_solana_get_address[parameters0-result0]": "c1c24157ab792f72a32c8c64e786ccccc2891fabacddafc8ef621da487002d6e",
"T3T1_en_solana-test_address.py::test_solana_get_address[parameters1-result1]": "434de6c71b8fb65130089b3bd4be6a6c56c684218c4b2afb52d0b8cd0b31a59b",
"T3T1_en_solana-test_address.py::test_solana_get_address[parameters2-result2]": "1a6d5d03af25632d57ab748402526bc78ccc49d2cdd77322df61e27163e9f8ce",
@@ -24891,7 +24885,7 @@
"T3T1_es_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "c568b82943d9f63ad6b29b7dee6f5ed9dca78fc9610d4fa7f12bb8a061a6882a",
"T3T1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "54fa94b589c013332730c90e9e75d9e6b2b2ea4b9bb28867393bf2ded1ed4305",
"T3T1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "f028a0b4b907224fbac05f9430f13c5d489f172727cc32187f27a484e9ced74f",
-"T3T1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "aedbe407a419af7d4b7dd604f60fe4dba3c7efded5c25a58fc9533389b8ff411",
+"T3T1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "dbb9794333f52421f41100921e5d4523b4390874fb51ec2e019af4a18ec13d43",
"T3T1_es_solana-test_address.py::test_solana_get_address[parameters0-result0]": "b851500d3e750172c76ec36e46ba0d4e184e4331f4a32f01037396f62e1aa55b",
"T3T1_es_solana-test_address.py::test_solana_get_address[parameters1-result1]": "0ec2831730fb7e27deb20fcb6d499c597f88b87cdeb15b19afe57c8fb1c6a254",
"T3T1_es_solana-test_address.py::test_solana_get_address[parameters2-result2]": "36433fccf85fed3baffc3a2681d544b988feeded6291f3545a33dd2aa19837e7",
@@ -26356,7 +26350,7 @@
"T3T1_fr_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "c4dffa9195d175f9bc4a23e9e0f80b92f7c6687128918a5a70c14b4a6e7e3694",
"T3T1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "644d2cfbaf48739c82941f1e53afe81f3b60519ea8079e8960f26a73e8dd9886",
"T3T1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "929942b82175e3d8b5877c2ec8766e3f1e3b8fab4b9f7ef1e8d5ad6751573cf5",
-"T3T1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "7d8729e1ed092bfa31bd8f153b4c16cba041e2a87087ddb0710a49caad7b0326",
+"T3T1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "4673d4767321d7fc580b509a72f1eb1a308034f1999c2e11ab4b4ac16432d571",
"T3T1_fr_solana-test_address.py::test_solana_get_address[parameters0-result0]": "de1187772ae06581a38e095c0c400541897dd1769e1d6ef412a31794d4842563",
"T3T1_fr_solana-test_address.py::test_solana_get_address[parameters1-result1]": "416504b4792ac4272f11bf5565a9be3c3e7a50e2ddefccf6c4c22e5ab9f0a9f5",
"T3T1_fr_solana-test_address.py::test_solana_get_address[parameters2-result2]": "ac32bc8de782c97fd11f1408babb623ba1f6ea5c91b5a7cc4407b024fa50e9ca",
@@ -27821,7 +27815,7 @@
"T3T1_pt_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "c15216b8aa033bd81f0a8fb6415c6728320b0c30fe3150eeb8a1749ae0a1a83c",
"T3T1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "0270cbfd77602f99a5ec836fe0fa4b61acfeae668b2881b100c465bc3c5c2042",
"T3T1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "1c82a0fd916fe7adbb3c63d808e4f3c8b419568480824a06ea8103ca6d9d6226",
-"T3T1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "5febf6290e62e775632f4d806d704f53bba9ddf3c69fa1edb045e8a67727e506",
+"T3T1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "6255c9727466e450967a27a309c7ed1589dae012b6618393927d873155349a84",
"T3T1_pt_solana-test_address.py::test_solana_get_address[parameters0-result0]": "4efb3b4f19f442cd2bb6b8bc649a9c10c6a27ae983266b1e9f0f5a1955b8e02c",
"T3T1_pt_solana-test_address.py::test_solana_get_address[parameters1-result1]": "45e62286eb5a2bcf25d550aa497ddaf90d9da7829d7c365cc0058ecade214322",
"T3T1_pt_solana-test_address.py::test_solana_get_address[parameters2-result2]": "2a9c566f36cba90116815b17dd1886663ef1eeb4985a41a79fee691b06c4b560",
@@ -29651,7 +29645,7 @@
"T3W1_cs_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "535037bfe5f1459cfdf305915835d8bf2a9a427c3f60264a8cc3ca6f306a61b1",
"T3W1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "f131297a1f74ce51f79bf9e70d879ee3bd555c04670baa9e7065a4d6d0787c47",
"T3W1_cs_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "4506df92b8d7ccb44d46fb70b6d10b92c03e16d86df5504ecee5ef20552eb70d",
-"T3W1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "0498202acbce4dc7e7cd103d427b3b67e2a842c93016f4f6035faca9850f1968",
+"T3W1_cs_ripple-test_sign_tx.py::test_signtx_payment_req": "60dc6e20a0ebc661fb7119788394edde1eab33b6ceee11a85f667e6f0e39de0f",
"T3W1_cs_solana-test_address.py::test_solana_get_address[parameters0-result0]": "1362bac9b34ba90f31704ae3406bf51945562dc424d7cf5fcce1ab4b768b4116",
"T3W1_cs_solana-test_address.py::test_solana_get_address[parameters1-result1]": "3fb055caa934f87d6ffbabe575c8c6f47a47630d5a1fe84aff7bb1a0b94d777c",
"T3W1_cs_solana-test_address.py::test_solana_get_address[parameters2-result2]": "aba538c8a4623f45687effb998ed1d28afd129e3ec379d161d7f3a7402d4a633",
@@ -31107,7 +31101,7 @@
"T3W1_de_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "2bf2200d3f158d1cffae639cd632a3b651fe53af5942b65eb881cfce12817592",
"T3W1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "1270eb104d0bd6a90a33965050280e8028da049d9e8b422ded207eeda0f17ad1",
"T3W1_de_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "80d09d4bb60edb5506cc6ef61282a490afe6ae3d1d0e9ddfb568d1095e25e26b",
-"T3W1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "231e8647d19513213c92c7851fc397b8dd7617574d08a63ea92ca22485c1490a",
+"T3W1_de_ripple-test_sign_tx.py::test_signtx_payment_req": "b911c4622d6dfb514a99f9dab485a45898b91f9a3452f6cbebc05597fe9dfeb7",
"T3W1_de_solana-test_address.py::test_solana_get_address[parameters0-result0]": "42d388572a105fa469d9c967a1553d570f68e36b2f85f3d41e2ab063411691ba",
"T3W1_de_solana-test_address.py::test_solana_get_address[parameters1-result1]": "e9485b713f4969eac054a918db4ca3edf17a3e2a8e8140bbf69eac7f2a91d5aa",
"T3W1_de_solana-test_address.py::test_solana_get_address[parameters2-result2]": "3b740daa20375a0639c4fde3b4e4507baf55a80438984e62fbd29839c337642f",
@@ -32563,7 +32557,7 @@
"T3W1_en_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "2b19d878184abddf53159d4acb504a1e86a7c2d5fd15de433495742ba7df9cc8",
"T3W1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "ee4d2261e4e067ed304eabb9ad211e52c2475f34df824766d9f8f4c3843cd4c2",
"T3W1_en_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "fd2a82821e6f9bc319b01ef476ec8a2b69c5091308cd593148f6c9aa5c8534ed",
-"T3W1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "881ce3da6472b66ac8db57fbad65caec04a35087dab02c25e06c9bebb4e1b688",
+"T3W1_en_ripple-test_sign_tx.py::test_signtx_payment_req": "f6783f5377a08257361de574d40cf098af624a72388bc1768686361d74ddf1e1",
"T3W1_en_solana-test_address.py::test_solana_get_address[parameters0-result0]": "a43c82b8bcf506c5871d4cb10d6d770d8caecbd1f32235fa025811f3486b680e",
"T3W1_en_solana-test_address.py::test_solana_get_address[parameters1-result1]": "dda4e28d827b25e438fe4ff8daf0e897758bcea20225c448caa56915a57e735f",
"T3W1_en_solana-test_address.py::test_solana_get_address[parameters2-result2]": "0cbf8a5a4b8f4134cba0060bb4dcfb9b44e8479444a1f8b5453d62890fed127d",
@@ -34019,7 +34013,7 @@
"T3W1_es_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "991c2fedae415c4284948d276edc08daeea466ca5849934ed2784cc8884ee589",
"T3W1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "643e4f462fce7a04404485de01ee384595c65113b2302709b53afe24e45a9883",
"T3W1_es_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "b584355b149a21cf4098691473003aca82e390ef7ac047db266515681daa51a4",
-"T3W1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "009000c1795c4af831b0f2f9c2411dd4da21ba4434b5dfce1bd7e2deebee0f28",
+"T3W1_es_ripple-test_sign_tx.py::test_signtx_payment_req": "cb2172977eaccb41ee1932b0c510933740f2f13c768c05fbab7ae18f537a5d50",
"T3W1_es_solana-test_address.py::test_solana_get_address[parameters0-result0]": "76dd02bb7c958951cdff3281aed6aacdd8e116b0347a0942aaf5f79e7c48ea5d",
"T3W1_es_solana-test_address.py::test_solana_get_address[parameters1-result1]": "b5a49fe0a93efd02b6b11978b6a93f8352ffa32aff74e86ad85dd31b7d26d57b",
"T3W1_es_solana-test_address.py::test_solana_get_address[parameters2-result2]": "496d497d9665b00ad86e2bd77fbbb3f013df8f23da7d2cb68f966512fb4acdea",
@@ -35475,7 +35469,7 @@
"T3W1_fr_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "250f727140e1737e1e25e4620b4557d886c40e53f8205987dacb8904050dc474",
"T3W1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "119f271946a836a20a08f7be9b02ac145755288e2ef10113d52dc80543b29684",
"T3W1_fr_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "42be2a1f7c94f4510f5ace6e9def4cc3fdc199ff6d71a17061c02195843a427b",
-"T3W1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "cddcb4267728f0b9be5b77c2c76a901a9a9c63ada434f1c72445fb3dcb910298",
+"T3W1_fr_ripple-test_sign_tx.py::test_signtx_payment_req": "6f3b8cd29b03a171515501acb0d4db9c158f2dbb2bf20b05223fc8b154e4e944",
"T3W1_fr_solana-test_address.py::test_solana_get_address[parameters0-result0]": "22ab173172f73dd672965c22358238f8be1540624b2c6c9d08148e01ebe954d2",
"T3W1_fr_solana-test_address.py::test_solana_get_address[parameters1-result1]": "a85359af1634a997917ff0f38f8f25a2246644468261f247f1f49f1473a99487",
"T3W1_fr_solana-test_address.py::test_solana_get_address[parameters2-result2]": "2022950b904a8facda03c90486f25435f50a77932ec28c839c893c74620f6a62",
@@ -36931,7 +36925,7 @@
"T3W1_pt_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "637658c0c6bbf3267f67895c12aeea91280f0471133d7865e4b0d19bdd1da874",
"T3W1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[False]": "cd6586844c4b4e63dfa596b87faaa2fa2aaf913a2aa36fee429e5628675b38dc",
"T3W1_pt_ripple-test_sign_tx.py::test_ripple_sign_simple_tx[True]": "64f5c104243e7a99851be19574719f63a090426e5e314ca35ad5fb85995a3ae4",
-"T3W1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "c90229749c273b59ac8f69363876bd23338faa6534c98afefe7d566a19101ff9",
+"T3W1_pt_ripple-test_sign_tx.py::test_signtx_payment_req": "8b17b3bbb2b9f9a5e3ecc1d9835fb94232d80e0b68df5023fb448f1327a2088f",
"T3W1_pt_solana-test_address.py::test_solana_get_address[parameters0-result0]": "3dd922e288ab8f1f9be8f3fada873db7708d5ee4fb6c77ebbced8055ac8f63b0",
"T3W1_pt_solana-test_address.py::test_solana_get_address[parameters1-result1]": "0b93cd51d756451483ecb62d7480cf004b07ef8e60e72594d1a4684700bc870c",
"T3W1_pt_solana-test_address.py::test_solana_get_address[parameters2-result2]": "0e787f3cb317b6d5f322fd3c0fbf6e5fe279490f911cfdc235e2bd0598e26972",
Why this scored 20/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.