What changed, and why it matters
This commit adds support for native Solana (SOL) payment requests using the SLIP-24 standard on Trezor hardware wallets. It extends existing token payment-request logic to also cover plain SOL transfers, and updates tests and UI fixtures accordingly. There is no direct evidence in the commit of a security vulnerability, but any change to payment verification and confirmation flows carries a low level of implementation risk.
Treat as a routine feature commit. Reviewers should verify that PaymentRequestVerifier correctly handles native SOL outputs, that the new confirmation path cannot be bypassed, and that the generalized unit parameter cannot be abused to mislabel tokens. No immediate security response is indicated by the diff alone.
Security signals we found
Payment-request verification path modified for native SOL transfers
Confirmation UI path changed when verified_payment_request is present
New helper get_native_transfer_instructions introduced and used before token fallback
Unit display generalized from token.symbol to arbitrary string in confirm_payment_request
No explicit bounds checks or validation changes visible in the diff beyond existing verifier usage
Evidence from the diff
The patch extends Solana transaction signing so that SLIP-24 payment requests can be verified for native SOL system transfers, not just SPL token transfers. Key changes: (1) sign_tx.py now extracts native transfer instructions and registers their lamport amounts and recipient addresses with PaymentRequestVerifier before falling back to token transfers; (2) layout.py’s confirm_system_transfer now accepts a verified_payment_request and, when present, shows the SLIP-24 payment-request confirmation screen instead of the generic recipient/blockhash/custom-transaction flow; (3) confirm_payment_request is generalized to take a unit string rather than a SolanaTokenInfo object; (4) predefined_transaction.py adds a helper to collect SystemProgramTransferInstruction instances and wires it into the confirmation path; (5) test fixtures and UI hashes are updated for a new ‘native_sol_payment_request’ case. The change is additive and relies on the existing PaymentRequestVerifier infrastructure.
Changed components
core/src/apps/solana/sign_tx.pycore/src/apps/solana/layout.pycore/src/apps/solana/predefined_transaction.pycommon/tests/fixtures/solana/sign_tx.payment_request.jsontests/device_tests/solana/test_sign_tx.pytests/ui_tests/fixtures.jsonInspect captured patch +132 / −24
diff --git a/common/tests/fixtures/solana/sign_tx.payment_request.json b/common/tests/fixtures/solana/sign_tx.payment_request.json
index 4c8c7fa1..7b152128 100644
--- a/common/tests/fixtures/solana/sign_tx.payment_request.json
+++ b/common/tests/fixtures/solana/sign_tx.payment_request.json
@@ -120,7 +120,45 @@
"result": {
"error_message": "Multiple transfers not supported"
}
+ },
+ {
+ "experimental": true,
+ "description": "Native SOL Payment request",
+ "parameters": {
+ "payment_req": true,
+ "address": "m/44'/501'/0'/0'",
+ "construct": {
+ "version": null,
+ "header": {
+ "signers": 1,
+ "readonly_signers": 0,
+ "readonly_non_signers": 1
+ },
+ "accounts": [
+ "14CCvQzQzHCVgZM3j9soPnXuJXh1RmCfwLVUcdfbZVBS",
+ "ETxHeBBcuw9Yu4dGuP3oXrD12V5RECvmi8ogQ9PkjyVF",
+ "11111111111111111111111111111111"
+ ],
+ "blockhash": "2p4rYZAaFfV5Uk5ugdG5KPNty9Uda9B3b4gWB8qnNqak",
+ "instructions": [
+ {
+ "program_index": 2,
+ "accounts": {
+ "funding_account": 0,
+ "recipient_account": 1
+ },
+ "data": {
+ "instruction_id": 2,
+ "lamports": 200000
+ }
+ }
+ ],
+ "luts": []
+ }
+ },
+ "result": {
+ "expected_signature": "7d9b551808a878b6dd6255c7b775b7afcd2edb011a1918611d9b72c3fd2f5fe89d8bf30ea41fa6dc91f33e20e9eb07527aadf1e082eb746880167d102a76270c"
+ }
}
-
]
}
diff --git a/core/src/apps/solana/layout.py b/core/src/apps/solana/layout.py
index c2eb586d..3dc74641 100644
--- a/core/src/apps/solana/layout.py
+++ b/core/src/apps/solana/layout.py
@@ -308,15 +308,28 @@ async def confirm_unsupported_program_confirm(
async def confirm_system_transfer(
transfer_instruction: SystemProgramTransferInstruction,
fee: Fee,
+ signer_path: list[int],
blockhash: bytes,
+ verified_payment_request: PaymentRequest | None,
) -> None:
- await confirm_solana_recipient(
- recipient=base58.encode(transfer_instruction.recipient_account[0]),
- title=TR.words__recipient,
- items=[(TR.words__blockhash, base58.encode(blockhash), True)],
- )
+ if verified_payment_request:
+ await confirm_payment_request(
+ provider_address=base58.encode(transfer_instruction.recipient_account[0]),
+ address_n=signer_path,
+ amount=transfer_instruction.lamports,
+ decimals=9,
+ unit="SOL",
+ fee=fee,
+ verified_payment_request=verified_payment_request,
+ )
+ else:
+ await confirm_solana_recipient(
+ recipient=base58.encode(transfer_instruction.recipient_account[0]),
+ title=TR.words__recipient,
+ items=[(TR.words__blockhash, base58.encode(blockhash), True)],
+ )
- await confirm_custom_transaction(transfer_instruction.lamports, 9, "SOL", fee)
+ await confirm_custom_transaction(transfer_instruction.lamports, 9, "SOL", fee)
async def confirm_token_transfer(
@@ -535,14 +548,14 @@ async def confirm_payment_request(
address_n: list[int],
amount: int,
decimals: int,
- token: SolanaTokenInfo,
+ unit: str,
fee: Fee,
verified_payment_request: PaymentRequest,
) -> None:
from trezor.ui.layouts import confirm_payment_request
from trezor.ui.layouts.slip24 import Refund, Trade
- total_amount = format_amount_unit(format_amount(amount, decimals), token.symbol)
+ total_amount = format_amount_unit(format_amount(amount, decimals), unit)
texts: list[tuple[str | None, str]] = []
refunds = []
diff --git a/core/src/apps/solana/predefined_transaction.py b/core/src/apps/solana/predefined_transaction.py
index 3d29915e..ee44cf13 100644
--- a/core/src/apps/solana/predefined_transaction.py
+++ b/core/src/apps/solana/predefined_transaction.py
@@ -8,6 +8,7 @@ from .transaction.instructions import (
_SYSTEM_PROGRAM_ID,
AssociatedTokenAccountProgramCreateInstruction,
Instruction,
+ SystemProgramTransferInstruction,
Token2022ProgramTransferCheckedInstruction,
TokenProgramTransferCheckedInstruction,
)
@@ -26,6 +27,16 @@ if TYPE_CHECKING:
)
+def get_native_transfer_instructions(
+ instructions: list[Instruction],
+) -> list[SystemProgramTransferInstruction]:
+ return [
+ instruction
+ for instruction in instructions
+ if SystemProgramTransferInstruction.is_type_of(instruction)
+ ]
+
+
def get_token_transfer_instructions(
instructions: list[Instruction],
) -> list[TransferTokenInstruction]:
@@ -173,7 +184,7 @@ async def try_confirm_token_transfer_transaction(
signer_path,
total_token_amount,
transfer_token_instructions[0].decimals,
- token,
+ token.symbol,
fee,
verified_payment_request,
)
@@ -216,7 +227,9 @@ async def try_confirm_predefined_transaction(
if instructions_count == 1:
if SystemProgramTransferInstruction.is_type_of(instructions[0]):
- await confirm_system_transfer(instructions[0], fee, blockhash)
+ await confirm_system_transfer(
+ instructions[0], fee, signer_path, blockhash, verified_payment_request
+ )
return True
if await try_confirm_staking_transaction(
diff --git a/core/src/apps/solana/sign_tx.py b/core/src/apps/solana/sign_tx.py
index 94d2a553..8101f7c0 100644
--- a/core/src/apps/solana/sign_tx.py
+++ b/core/src/apps/solana/sign_tx.py
@@ -32,6 +32,7 @@ async def sign_tx(
from .layout import confirm_transaction
from .predefined_transaction import (
+ get_native_transfer_instructions,
get_token_transfer_instructions,
try_confirm_predefined_transaction,
)
@@ -75,15 +76,26 @@ async def sign_tx(
if msg.payment_req:
from apps.common.payment_request import PaymentRequestVerifier
- transfer_token_instructions = get_token_transfer_instructions(
- transaction.get_visible_instructions()
- )
verifier = PaymentRequestVerifier(msg.payment_req, SLIP44_ID, keychain)
- for transfer_token_instruction in transfer_token_instructions:
- verifier.add_output(
- transfer_token_instruction.amount,
- base58.encode(transfer_token_instruction.destination_account[0]),
+
+ visible_instructions = transaction.get_visible_instructions()
+ transfer_instructions = get_native_transfer_instructions(visible_instructions)
+ if transfer_instructions:
+ for transfer_instruction in transfer_instructions:
+ verifier.add_output(
+ transfer_instruction.lamports,
+ base58.encode(transfer_instruction.recipient_account[0]),
+ )
+ else:
+ token_transfer_instructions = get_token_transfer_instructions(
+ visible_instructions
)
+ for transfer_token_instruction in token_transfer_instructions:
+ verifier.add_output(
+ transfer_token_instruction.amount,
+ base58.encode(transfer_token_instruction.destination_account[0]),
+ )
+
verifier.verify()
if not await try_confirm_predefined_transaction(
diff --git a/tests/device_tests/solana/test_sign_tx.py b/tests/device_tests/solana/test_sign_tx.py
index ce3327be..8f2eac15 100644
--- a/tests/device_tests/solana/test_sign_tx.py
+++ b/tests/device_tests/solana/test_sign_tx.py
@@ -37,6 +37,19 @@ from .construct.transaction import Message, RawInstruction
pytestmark = [pytest.mark.altcoin, pytest.mark.solana, pytest.mark.models("core")]
+def get_amount_and_destination(parameters, instruction):
+ if "lamports" in instruction["data"]:
+ # native SOL transfer
+ amount = instruction["data"]["lamports"]
+ destination = instruction["accounts"]["recipient_account"]
+ else:
+ # token transfer
+ amount = instruction["data"]["amount"]
+ destination = instruction["accounts"]["destination_account"]
+
+ return amount, parameters["construct"]["accounts"][destination]
+
+
@parametrize_using_common_fixtures(
"solana/sign_tx.system_program.json",
"solana/sign_tx.stake_program.json",
@@ -106,12 +119,7 @@ def test_solana_sign_tx(session: Session, parameters, result):
recipient_name="trezor.io",
slip44=501,
outputs=[
- (
- i["data"]["amount"],
- parameters["construct"]["accounts"][
- i["accounts"]["destination_account"]
- ],
- )
+ get_amount_and_destination(parameters, i)
for i in parameters["construct"]["instructions"]
],
memos=memos,
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index 16cd6921..d1ac7cb0 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -2430,6 +2430,7 @@
"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "6fa5c24b9e2f47ac1d9dee332f1e62dc7d67d7e234074d1abcd8f8532a86bc6d",
"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "4f4849342fec27680017d057e209a459613ad247478ff5f8ebee8eee648cde7d",
"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "f2eaca5ecb04ec945e8fa33f1d08e720388639bc88da7834a54aea9d430360b4",
+"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "fcef95989db39cd9cc7069cfcb33a3d9bf8474974ead42fdfd5966dbb395881b",
"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "155e2ae08c24a6d310e8c9194775f784625d7596ade19d21e909d292488c0ab3",
"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "32d380b2c0942f8a2ab6a32e0e4c8a2ad2ab6750ee39c6fa4d4f0bacf59a4b7c",
"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "46557731e8514bf9e2b756820d016330a4d69334b707b88a1139161b89e92f33",
@@ -4051,6 +4052,7 @@
"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "0e7d4461ffdf317f570b7a7331b29acd3f9f4f76b7d102dc6e498b7d2306fd51",
"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "d6bfe4fc9ab7df57c671368085ff4d4a029f544daec0fef0a00b334a9a66d973",
"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "0a5c645791cdef6ff7e4d56907ed550c9425bf69bea1228d8fad0e9b1c3c263f",
+"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "cffd743de64e51eff30f09b9b506c366f5de708e7f7cc6a0c958a08e01fd483f",
"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "6e749180979d4fc67621a2e040057294e276cf1561608e28f71573236dc2972b",
"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "a3edf3ced8fa1fa6b9f67f869a28bc880ce5e214b0adfaf839cd867875845912",
"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "64a96bdc9d23eb88a64d1c20cdf9fc8d928778e3db3c6987cf116497a15abe33",
@@ -5672,6 +5674,7 @@
"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "57f002a8882588f447766ce9c0db201bd8bbd7de81bc783e752a00ae4f46f01f",
"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "42c0428c8cf84e6729421bfb97ee4aba65ebfde9c6e35bf23a0c3137f19cefb7",
"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "edeb8279ad71a60b05ec304a70adff90f940d2df57a4525da20a5c04ff8326eb",
+"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "56a38954b29e39490fc9b00524886d2489d8d21b884a32aa9890a86a3b82aadb",
"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "2138d3baa4a9f78692c7e533ea2795c9f3f70e7b726ab112dc46d140bd2b464c",
"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75",
"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "8898613ae9614b5f42234481de5cc1cd5dfce49d29ba38b471757e10fdc286d9",
@@ -7311,6 +7314,7 @@
"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "9d757452b6035c238de1391045bf08f4c963b80dbb7dccfd06ae4d5fea21cdda",
"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "2401d7979d1e91e4a6094b41742ae8584a6a39cf23660037242e25090dd3b9c9",
"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "a199d7aa4e78c805d823bcd4aa66c9073b477bca4204742d6acde5c3aa2bdc4e",
+"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "3e963f6d75a4d7f4577173d6277d3dc85607234dc316084b73273e7e2471c8fa",
"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "d7f7fef4f1cf97e8053ec202136bfb24b38cb94ac50fcaf5a82a080917033417",
"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "1775658fa541fff7933453c1d346449c492079a39341e07135ac9e7662b3bbd3",
"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "14522dc9b8988248b84e0a61ea15edea8d79d951a4aaaa00b420ec9936f6f6d3",
@@ -8932,6 +8936,7 @@
"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "724d6eeac4847c1939b258f6a179f2a65c43c0c8a72474d295d56124cb0819bf",
"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "4c643c7a20ade31557ceee27332eb416404fc7a04db3b88d76fa68d423c5724a",
"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "1eb13938264fe6b0430a6c3d6fce0c4e96ca2362a5b9ecd2166660e759bd9623",
+"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "13086cae1b96a12598d45de1d4236342d72668c9553344fea60fa13316effe7a",
"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "368f78ce8ff7cd6b00d5f15568c631a4b79eadc6bd7c2d44e8bd3557551b0c0b",
"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "94d3ba1cba15b836e6ebc48ab307aeea71275ef2d9849aaabc8e883df555ce3f",
"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "8da74647292eac2477f2525038163aea8128616451d82d03c8cd556e3e10e8d7",
@@ -10553,6 +10558,7 @@
"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "b55dbd0cc637e0bd8fd7af328ad7c8b27be84a068491e4664d033ac3ee721b07",
"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "3bd6eb1a1b0f52cec86e63641c39e632291c361dc454286111e3ccb932db5aff",
"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "42cc86f37cb32915a7d42c81c951c064353c59b919e97ffa377a722cc4b64410",
+"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "a010947077e73886c2045be1f0785de5cd6767bdd932765fd80e20893d8fb265",
"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "4002712c7854a249091b9e0470d33e89aa88ce2d0b6323a99751cbcc61b161e5",
"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "e9e80e1bfd347b598699a7a84deb8932eff90fc5fb8b56771453e06fe3c4c216",
"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "a572be43666a7ceaf7109e73e81edd3d1b26b625548f11ffa911b30d916f8ad4",
@@ -12409,6 +12415,7 @@
"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "0125460608207fdf8112ae80a75d8641f25ae4c449eb2e5f68d1e60f81c230d1",
"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "4630eb45f9e0aed553c15e68c62cd5f0e378e16b8cf9d3b25888dc8f6a2e2d28",
"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "67d79c7e9a17741f57af095853f07ba671094fd3ad8c8b5e1c831d069807e739",
+"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "7d8db16dcda3f0ddba8e7ebe6bd38fd80b420954eb4ebcc88a4a9bf9a74fb916",
"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "cd7e3649d946b7fd0eaf3333df5cb090d0a02198a9263341a47c9530ba65ee8a",
"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "92840d4624bb07440bb1ab5cb4b57251c9950388accbc8334a9a7d609ededb01",
"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "bc457c0f56cf1b102591f1cf1dcae456e493976e61d239e3776859865c26af92",
@@ -13953,6 +13960,7 @@
"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "e87a36e07de47f99a5c716764f712ec4131882ce428106e67404453822acb70c",
"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "d79950f9a24ecf5a36eea000a194501581fca20eaffe18f272440d42199b7f01",
"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "4c027ed41c4b8866d81a2b2763103f994576a5947cdbab71991dacf31e6adf4c",
+"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "23edcf8c896809bfc92f2ee6134e3de530a8009e4c81485021410c55af475aa0",
"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "40ac7f492941dee6f53b8096540bdde37cd1a6b58049a1df8038ad28d0b456ee",
"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "c92ee4e050daadcfc7cc95657b00deed76bb463d486eefcc66455bdbe60faa33",
"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "9538bc77298a921bc99e7cf719f0b8c1e6951090dc588dc7522487510d7f6dd7",
@@ -15497,6 +15505,7 @@
"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "281421c9a179ef2441cc0e07b71dff4df0490b0a8362890024ce84d6a2d6b0d8",
"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "b3658e04e89344c0d0f7f37228491952c85a1c91e7f6f52209820dcd6fea8492",
"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "e11934f4bf5dca999dd18d7e88ef36eaaac835fc7d899143cc60105d9797bcfa",
+"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "babd78191531dff2d16cb798d7d8918e50105417245d889539b62af5b94668f5",
"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "32a006d1e8c0b17479b3b69c2a02688ea293d7bd4c895f39914273f878d24d10",
"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3",
"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "5e37eb959832b58c57d6e665fdfb13cbc28d217324b788fb392fac217b841391",
@@ -17041,6 +17050,7 @@
"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "9dd4392393b8c9a70003b4cfec10f8fdc4f64ed9e31bff952b395c0ee3774839",
"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "49c8566dd90a453dfa9f83946ec8749a5e123a31bd2b00a1a2199c299b775aa3",
"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "88acf8a9e70a7346fa016f4407ae4b9231ec7097cf1b7d5776aa220659b39d7b",
+"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "353e63e6f2e82db3c270deaa27b5a2b13065842eb371f0ecfa4e758db1027e4c",
"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "2b5e3e18884813f58db27fc65975647805dea2fb445130cd76b8c2d4deb96774",
"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "211e7c3419bd48ceefc570971fc522f809b39614563be948fd1e545366506dee",
"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "f951e6f6530a1a0890599ebfa5bdc73a24ff4091c660bf0c8c35188b8f9d6474",
@@ -18585,6 +18595,7 @@
"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "5c49e5addf13ddcbf2e3a11251b2c912cdc5b4edb0132f3f269bdd64f02acd95",
"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "3ec7480089d5e1d4070df8470b4c3e1a75a8da8c00c40add4bb818a5dae31b35",
"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "baa7eb17b0006a80fd9ef5d9be78f646e200356ad0fe1a91697ec2a7a7c892e2",
+"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "b05c95c0e3b2c16f202fb4d0cca476804928a9858fc7ac24df57e34d892ad9e6",
"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "6c478419e916a7b5d4503b4eaef6d2ef4745f5409ab538dd6fbb20fff47a4463",
"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "35c9c9529c59ca5c386ac05856f7452f26cde732203b5b61ec9321230b52df89",
"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "4b9ff65386b4fd484107df77081226c10ea80f6cf38d24068b11da0daf19baf1",
@@ -20129,6 +20140,7 @@
"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "c96cb3f5fcf92904bf919917bb94f51e1ef8a947f95cc9418c1a5611f7fda2e8",
"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "fa2055e187559a404e2eb46b6d1bd1316efbe0e89e401feb157649f61ba070e6",
"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "d04a60cc5d1075fb9bc59d98ba497788e3ee4376498a945fe43e58a3de6d59fc",
+"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "6775fbc18887422a6729f8ce16be28ef87ad03b21f11a665879c86f77d8707cb",
"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "8825b033f487e5ccaf1f6586ae299a8bb09cf0967fdd089923384855fefecc01",
"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "6ba5ca7223cd8ad675e081407f186acdfc8420304eea96de0fde5eda45ef0a57",
"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "d114423c64c26a5804da92c301148043d45ec78389ad932af89f9adbc613f245",
@@ -22070,6 +22082,7 @@
"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "cea4e7f58a102c78ce3c2fb771beabccef7f55cf18263c38bac579a0e3a7d217",
"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "ef80225e75076d6f2a6e7fa080453590cc41dc624927efc7d72f6f7cdd34db7f",
"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "1ab00e63a729e42fc68654f1b75795b7d639df3bf22d37b3c69827ffcb63de3d",
+"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "899eb5d8c8d689f2db324910e0b1fb533da37a5318115e5dc08d6d35751f931b",
"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "ccd630bdd7285496f6127ec51b8f54f576d49501e37742cc772c568c5d989174",
"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "592adf9c06f8f39132298b46037dd524fac99e58237a0c023197bf47df67d632",
"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "fb57fed8cf3c4e23be1388c7f0085e952a07ac688af2a8d7b1c09e0e1760d2ec",
@@ -23647,6 +23660,7 @@
"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "28d068048a51264f229b39a529c5ffc4b3bdabddc9f6d9ce5cc04b274ec8b973",
"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "28ae74649afa1a8fde4453ae050119a259effdae00df6848a9c43b3ee08aeda9",
"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "6fc86cf75d11ec17c5b0f95b021bb750a17cf25d5fd476610b87d10284df4ea9",
+"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "7406ea4988460bb57de4dd8d4b03123ce8fe5bdc9be26813bc6e3c5678ff5be8",
"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "42cd43f4eafd5e5006118ab9a263158c8f832a8297794f79910aaa1fd2d4e7d6",
"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "f2fcbbd7ad83aff9adc0ee97fe98e7272d8bcfcc4a023798e2ab1c9895fda70f",
"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "07e7e970ea479c98df8381ebb5d51af3aaa7375a82b6339ce26a669329bfd339",
@@ -25224,6 +25238,7 @@
"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "a14845b6bcbf0edc2ffbdfa381c841e5954435b4e4e0e095c1467d72f7ec66ac",
"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "574c4ce3d7e76079deff50d31afa213036fce7211e0f956df62aecafe56a593b",
"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "be553e80e9db7689f95c1ddf5afefbf129a100215f79b1f18a6f0106e6fe6001",
+"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "f29ce47ced122e243173a4df4b98b010312dd52573a9ca6e57a382df707774e9",
"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "007a990a9ac825261cd3c23ca7ed6736b662657c1f015179a7d65f869c035be0",
"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984",
"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "649d293fbf8d4595a519f21a3fd7c43b9e6d05397de50557266127713ce6198f",
@@ -26801,6 +26816,7 @@
"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "27d92c93c6a745166e8008e330677e30f4697f0f98577494bcc335844780bbc0",
"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "dcd31c56cdd159bf677765f38d72d2f11527261184a97b168f22348ff6998e97",
"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "b3ecd1465963abcc7afde0c28c1698c165d19124a28925c22e2a9ae62d92b59f",
+"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "ed58ff3f7938383119765b5726be79dc9864e92fe4578ba6d895bda2d62ae4af",
"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "e6b438b9f32d1b1692edd14c1e4bbf5a7199185077889a4d763494ee5cbf0668",
"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "c568b82943d9f63ad6b29b7dee6f5ed9dca78fc9610d4fa7f12bb8a061a6882a",
"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "65714cabf9c26d5cb95eba4d9d435045beaa596c46b9047ba084851416985150",
@@ -28378,6 +28394,7 @@
"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "5c005c3dc25dc6c707428e269934ec6d7cdb1c8f6a86b5b76edbb67a2bd3d3b5",
"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "3124f9c279821c119907d3f1d4204d424d12b4f0a0586390c9c4fb1163f2ea09",
"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "de6b6fc3da5b9a3c21123d9f4c0acb29d777c5cec104af5afe423a905358060d",
+"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "a0a0b8cbed40ee995fa22509c2defc260eea6b74a5bdc5b1359914a966208ea4",
"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "389604f8faff22325f1c2b461a3d637bdb063e4a0b401288bec4aa9e32bdd3a7",
"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "fdf4909aff89183fa79899fde974115e687a71e0cf09dea210e8aa60ba54c906",
"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "88aaade51dbfffcca5edecdf00deb7e679465e5a8909ff5e0179901ccb8c6f32",
@@ -29955,6 +29972,7 @@
"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "08fecca85ba2cab6379ca4072ba8c022a11fd4fe367302b2ea1298b34bcd7509",
"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "34977d21f101de2bcc16fb49578fae874cff7ca62b50a3beefffca2959c753f7",
"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "f168a56086e08b913ed5986830abdcecc1e09abe6ed302233cbf2c6852331991",
+"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "36910db97ded1d7141878a5c622ed67ee3c006750f6928bdac1daf18ce6290fe",
"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "9b8e27edad05045f91b3f29b6f96f9ac0a812a9460ef0318e3292e88525d0ba1",
"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "c15216b8aa033bd81f0a8fb6415c6728320b0c30fe3150eeb8a1749ae0a1a83c",
"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "d7ea0dfdf3a7dbfa9a5ebf2db515d17ccaf3278dd6779cc1c040c94b059d8fe2",
@@ -32181,6 +32199,7 @@
"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "07733e16ee4acae60ebb54067ac65446566f16b1e6c354ae4b703f5bbc424e42",
"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "222d9185289e0bcec0e3aa6e693be2e065160e19be5aa9c3bdd6ed8fb9a40201",
"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "8b2a920626e0437c5bb1e1850450f3853d43dbda0e5a6853f832847ae537b52b",
+"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "bee2f3182aa3a11b31a361b2efa48ea3b48173a649dff2eac3f38519d37a85a6",
"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "05b916bae52b2055a7441c98d674f9f059ebaf8ac7cec35064a97e58716e565a",
"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "c24521e569c08e3605b164212c876f8ac57c5eef6cca6f2ca53a635a883ebc4b",
"T3W1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "859bfa89ff07b7576d23a1b56f8c597863a4611b41eb6b0fe491d2343e0968c8",
@@ -33766,6 +33785,7 @@
"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "5aa1b899327029077cf16500739e15dd62150dd59aa860d3b9b8e15ad10f7c79",
"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "7a8edb0482ce49ba927bc557be9197be4c86c3bca460a031b361bc2e9c63e6fa",
"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "e5b6ac3888c7580973a48e515cbac0e68c4eb3ab1ed3ce36e8945c316d4d461c",
+"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "861815a5fb3813d2ce0b9ce175934d751b239e7095a914b51d27f31bb99541cd",
"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "b46f8dd50cf2627004519cd61026528511a5e32b4e943f7e9ab9e3ce46c30e93",
"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "b3ce10e1620297758d6f2b235127f1dd0d61804c8cc32bc6664db5c3a9d81dde",
"T3W1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "baa827a49703a5ab1d1fb1238fd2cb534ff40b087860c2cc1c825ec023186b05",
@@ -35351,6 +35371,7 @@
"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "92b950b71ae59ff65c4aafcbcf8a579aa57275237b1951203050f3896f48707b",
"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "f51ec59bbd226fb0a7d5899e3cbec70e07189b490ab36243de15a6a2e8d0f8e7",
"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "7efd396ac6b49b494e80be69c3a21c3ee6405814658b19ab1a08f1773c6180d1",
+"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "d86afb46637d6b9582036b9c50d814b77f32000eabc374a167d7ea8a2b9b20c8",
"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "69c175a9a96552b8a6a8cf544123ab6e9330014d43abd18210c9e156e2ca8a4e",
"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "931d9afceb0ba1e4faae891775819277242d889644d5c0c5863fc8c9fcf859b1",
"T3W1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "f2f3cffa97b424af26ba8eed1683cd88296bcfe75b52c8185c60022d8f3319cb",
@@ -36936,6 +36957,7 @@
"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "9e28c429dee2c3a19c802c7a4fb1400c835704c0b5760e01bd36ce1e16227261",
"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "23ed7c9c81516ab79222ac04bb79d3d99c519aee4bf64ce3627d23c9723319ba",
"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "fa1a778ad3ea3f6c6a15bd1ec06df76ce9a062edc30bca7ddc21a139aea55e79",
+"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "3b9b32477dde5c736dc3f9dce8f50e5526f1d414c89d1306ee288334473abc56",
"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "8352fbec265da7eee0ded8ed512ddc7a543d571fd5c702ab8e909a0b7463c629",
"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "56536ae9cd7c4ff8022def4ec3350031d3614064d961f53a2850f2be425af201",
"T3W1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "3eb1abb2b3a92d7bf9139048f9290885178bc04a272347fff269c4bf78f99b16",
@@ -38521,6 +38543,7 @@
"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "0ceebc9f60ae02df889ae96b3df5f1d9561dd20ce72a80c307d32461556946f3",
"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "354598c8d159d58bf32fd099601643a7a8b6a590686516790f0256a5a49b22c7",
"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "96b730556c6a59d1c29186a95b32093add635c537556c3e356381f3cbfa1dff9",
+"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "819cefc381213dcae628309378a6ec5c35bde8626e98949906d9db5f37e143e0",
"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "2d5e845961dc7a992ee3dd4eb15fe50c26e5dfecd7bd6b4f0551e5d9f796a60d",
"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "e8156cf4eda1d29060f05b4a18d50032b0b344230609b7de7cababfe0a86b20b",
"T3W1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "f453bd4a26dce17ac419bc0b3504c3d5c2ceb26ca2b286b7c356c9e7b7a63a96",
@@ -40111,6 +40134,7 @@
"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_with_token_definition]": "87b4266d1a028832d1f05505b03df34cb5e9081a21d856533c2fba6826b23049",
"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "1c4bf71e9a65e3363e8b8f6a66818646375d46180f5ec00aec6e38a7daa132be",
"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "57193586f6441afd15e664b9948a88f43b92ab32f7b9b3128bac5bdc3a93bd16",
+"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[native_sol_payment_request]": "7a170f0871e6724a265f72beb1fb79ade85f5f2796b3cabd8dd3ce9a008b54a1",
"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request]": "bb0f15b052e95346ff7e0fbaf9993fe6a88db9f5f586b78b8ebc355a4e0e3dda",
"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[payment_request_-_multiple_transfers]": "1c74667c078e25e7e0d37c7b2aa35f7c8ab02cd88e74695ecb355c82a293b0cc",
"T3W1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "23533b129a075db39ce812b31a95cae447ae73bc00030231242a9d453ef083dc",
Why this scored 30/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.