diff --git a/common/tests/fixtures/solana/sign_tx.staking_transactions.json b/common/tests/fixtures/solana/sign_tx.staking_transactions.json index c2c11b937d..0439ea5d8c 100644 --- a/common/tests/fixtures/solana/sign_tx.staking_transactions.json +++ b/common/tests/fixtures/solana/sign_tx.staking_transactions.json @@ -92,6 +92,94 @@ "expected_signature": "d38bf15aefa994ec712ae801ce35c6ebd54ef1df46a52e8577376baefefb4e842261e7d4c39f465a38caf9520cbbbd59a94313ccbe4c55ca16721f2f0674af0d" } }, + { + "description": "Stake instructions with warning", + "parameters": { + "address": "m/44'/501'/0'/0'", + "construct": { + "version": null, + "header": { + "signers": 1, + "readonly_signers": 0, + "readonly_non_signers": 2 + }, + "accounts": [ + "14CCvQzQzHCVgZM3j9soPnXuJXh1RmCfwLVUcdfbZVBS", + "ATFXMD5cYiw9yHkvexgx3nf9LNSouEViB5BZBsgwunAv", + "ETxHeBBcuw9Yu4dGuP3oXrD12V5RECvmi8ogQ9PkjyVF", + "Stake11111111111111111111111111111111111111", + "SysvarC1ock11111111111111111111111111111111", + "ComputeBudget111111111111111111111111111111", + "11111111111111111111111111111111", + "SysvarRent111111111111111111111111111111111", + "SysvarStakeHistory1111111111111111111111111", + "StakeConfig11111111111111111111111111111111" + ], + "blockhash": "2p4rYZAaFfV5Uk5ugdG5KPNty9Uda9B3b4gWB8qnNqak", + "instructions": [ + { + "program_index": 5, + "accounts": {}, + "data": { + "instruction_id": 3, + "lamports": 8000 + } + }, + { + "program_index": 6, + "accounts": { + "funding_account": 0, + "created_account": 1 + }, + "data": { + "instruction_id": 3, + "base": "14CCvQzQzHCVgZM3j9soPnXuJXh1RmCfwLVUcdfbZVBS", + "seed": { + "length": 6, + "chars": "seed:1" + }, + "lamports": 20000000, + "space": 0, + "owner": "11111111111111111111111111111111" + } + }, + { + "program_index": 3, + "accounts": { + "uninitialized_stake_account": 1, + "rent_sysvar": 7 + }, + "data": { + "instruction_id": 0, + "staker": "14CCvQzQzHCVgZM3j9soPnXuJXh1RmCfwLVUcdfbZVBS", + "withdrawer": "AeDJ1BqA7ruBbd6mEcS1QNxFbT8FQbiBVuN9NqK94Taq", + "unix_timestamp": 0, + "epoch": 0, + "custodian": "11111111111111111111111111111111" + } + }, + { + "program_index": 3, + "accounts": { + "initialized_stake_account": 1, + "vote_account": 2, + "clock_sysvar": 4, + "stake_history_sysvar": 8, + "config_account": 9, + "stake_authority": 0 + }, + "data": { + "instruction_id": 2 + } + } + ], + "luts": [] + } + }, + "result": { + "expected_signature": "e4bbe5bec49dbc9d3cdeaa00612facb67e7b1d1b2446600d6c0cddc61a89da4343d62be788ea72734b4a6818471eaf1a37fbbad34b33e7b6cdfe8c705c8c8701" + } + }, { "description": "Unstake instructions", "parameters": { @@ -189,6 +277,58 @@ "result": { "expected_signature": "4edf71d1b4d075c6717617ef43cd896a80153f418dbe4cca5e66ee9f27bd5652bec67d30ee9a14e3bd7062dd72ed619cf238e6f5538b150dae34d24bee650303" } + }, + { + "description": "Claim instructions with warning", + "parameters": { + "address": "m/44'/501'/0'/0'", + "construct": { + "version": null, + "header": { + "signers": 1, + "readonly_signers": 0, + "readonly_non_signers": 3 + }, + "accounts": [ + "14CCvQzQzHCVgZM3j9soPnXuJXh1RmCfwLVUcdfbZVBS", + "ATFXMD5cYiw9yHkvexgx3nf9LNSouEViB5BZBsgwunAv", + "Stake11111111111111111111111111111111111111", + "SysvarC1ock11111111111111111111111111111111", + "ComputeBudget111111111111111111111111111111", + "AeDJ1BqA7ruBbd6mEcS1QNxFbT8FQbiBVuN9NqK94Taq" + ], + "blockhash": "2p4rYZAaFfV5Uk5ugdG5KPNty9Uda9B3b4gWB8qnNqak", + "instructions": [ + { + "program_index": 4, + "accounts": {}, + "data": { + "instruction_id": 3, + "lamports": 8000 + } + }, + { + "program_index": 2, + "accounts": { + "stake_account": 1, + "recipient_account": 5, + "clock_sysvar": 3, + "stake_history_sysvar": 4, + "withdrawal_authority": 0, + "lockup_authority": 0 + }, + "data": { + "instruction_id": 4, + "lamports": 1000000 + } + } + ], + "luts": [] + } + }, + "result": { + "expected_signature": "53e953033988f8ce3cca4f7d1f94da41d8f3d1467724785f5cd9c4d16250198429a5d27bc474a66d4c1bf4a936c680f51973d54a3b16a2b73e62ecbb1f062104" + } } ] } diff --git a/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs b/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs index ac87edb777..4e4a74fc5a 100644 --- a/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs +++ b/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs @@ -551,11 +551,11 @@ impl FirmwareUI for UICaesar { let mut ops = OpTextLayout::new(theme::TEXT_MONO) .text(amount_label, fonts::FONT_BOLD) .newline() - .text(amount, fonts::FONT_MONO) - .newline(); + .text(amount, fonts::FONT_MONO); if !fee_label.is_empty() || !fee.is_empty() { ops = ops + .newline() .newline() .text(fee_label, fonts::FONT_BOLD) .newline() diff --git a/core/src/apps/solana/layout.py b/core/src/apps/solana/layout.py index ce9455af67..35560ef7ba 100644 --- a/core/src/apps/solana/layout.py +++ b/core/src/apps/solana/layout.py @@ -399,19 +399,12 @@ async def confirm_stake_transaction( ) -> None: from trezor.ui.layouts import confirm_solana_staking_tx - KNOWN_ACCOUNTS = { - "9QU2QSxhb24FUX3Tu2FpczXjpK3VYrvRudywSZaM29mF": "Everstake", - } - - vote_account = base58.encode(delegate.vote_account[0]) - vote_account = KNOWN_ACCOUNTS.get(vote_account, vote_account) - await confirm_solana_staking_tx( title=TR.solana__stake, - message=TR.solana__stake_question, + description=TR.solana__stake_question, account=_format_path(signer_path), account_path=address_n_to_str(signer_path), - vote_account=vote_account, + vote_account=base58.encode(delegate.vote_account[0]), stake_item=( TR.solana__stake_account, base58.encode(delegate.initialized_stake_account[0]), @@ -423,7 +416,6 @@ async def confirm_stake_transaction( fee_item=_fee_summary(fee), fee_details=_fee_details(fee), blockhash_item=(TR.words__blockhash, base58.encode(blockhash)), - br_name="confirm_stake_transaction", ) @@ -437,7 +429,7 @@ async def confirm_unstake_transaction( await confirm_solana_staking_tx( title=TR.solana__unstake, - message=TR.solana__unstake_question, + description=TR.solana__unstake_question, account=_format_path(signer_path), account_path=address_n_to_str(signer_path), vote_account="", @@ -445,11 +437,10 @@ async def confirm_unstake_transaction( TR.solana__stake_account, base58.encode(deactivate.delegated_stake_account[0]), ), - amount_item=("", ""), - fee_item=_fee_summary(fee), + amount_item=_fee_summary(fee), + fee_item=("", ""), fee_details=_fee_details(fee), blockhash_item=(TR.words__blockhash, base58.encode(blockhash)), - br_name="confirm_unstake_transaction", ) @@ -463,7 +454,7 @@ async def confirm_claim_transaction( await confirm_solana_staking_tx( title=TR.solana__claim, - message=TR.solana__claim_question, + description=TR.solana__claim_question, account=_format_path(signer_path), account_path=address_n_to_str(signer_path), vote_account="", @@ -478,7 +469,6 @@ async def confirm_claim_transaction( fee_item=_fee_summary(fee), fee_details=_fee_details(fee), blockhash_item=(TR.words__blockhash, base58.encode(blockhash)), - br_name="confirm_claim_transaction", ) diff --git a/core/src/trezor/ui/layouts/bolt/__init__.py b/core/src/trezor/ui/layouts/bolt/__init__.py index 61bba8ac68..f68e49fbb5 100644 --- a/core/src/trezor/ui/layouts/bolt/__init__.py +++ b/core/src/trezor/ui/layouts/bolt/__init__.py @@ -952,7 +952,7 @@ if not utils.BITCOIN_ONLY: async def confirm_solana_staking_tx( title: str, - message: str, + description: str, account: str, account_path: str, vote_account: str, @@ -961,14 +961,15 @@ if not utils.BITCOIN_ONLY: fee_item: tuple[str, str], fee_details: Iterable[tuple[str, str]], blockhash_item: tuple[str, str], - br_name: str, + br_name: str = "confirm_solana_staking_tx", + br_code: ButtonRequestType = ButtonRequestType.SignTx, ) -> None: (amount_label, amount) = amount_item (fee_label, fee) = fee_item confirm_layout = trezorui_api.confirm_value( title=title, - description=message, + description=description, extra=f"{TR.solana__stake_provider}:" if vote_account else None, value=vote_account, verb=TR.buttons__continue, @@ -986,7 +987,7 @@ if not utils.BITCOIN_ONLY: horizontal=True, ) - await with_info(confirm_layout, info_layout, br_name, ButtonRequestType.SignTx) + await with_info(confirm_layout, info_layout, br_name, br_code) await _confirm_summary( amount=amount, @@ -998,7 +999,7 @@ if not utils.BITCOIN_ONLY: extra_title=TR.confirm_total__title_fee, extra_items=fee_details, br_name=br_name, - br_code=ButtonRequestType.SignTx, + br_code=br_code, ) def confirm_cardano_tx( diff --git a/core/src/trezor/ui/layouts/caesar/__init__.py b/core/src/trezor/ui/layouts/caesar/__init__.py index c97819fd8f..dd719253d4 100644 --- a/core/src/trezor/ui/layouts/caesar/__init__.py +++ b/core/src/trezor/ui/layouts/caesar/__init__.py @@ -928,7 +928,7 @@ if not utils.BITCOIN_ONLY: async def confirm_solana_staking_tx( title: str, - message: str, + description: str, account: str, account_path: str, vote_account: str, @@ -937,7 +937,8 @@ if not utils.BITCOIN_ONLY: fee_item: tuple[str, str], fee_details: Iterable[tuple[str, str]], blockhash_item: tuple[str, str], - br_name: str, + br_name: str = "confirm_solana_staking_tx", + br_code: ButtonRequestType = ButtonRequestType.SignTx, ) -> None: (amount_label, amount) = amount_item (fee_label, fee) = fee_item @@ -948,17 +949,21 @@ if not utils.BITCOIN_ONLY: stake_item, blockhash_item, ) + if vote_account: + description = f"{description}\n{TR.solana__stake_provider}:" + else: + description = f"\n\n{description}" await raise_if_not_confirmed( trezorui_api.confirm_summary( - amount="", - amount_label=message, - fee=vote_account, - fee_label=f"{TR.solana__stake_provider}:" if vote_account else "", + amount=vote_account, + amount_label=description, + fee="", + fee_label="", extra_title=title, extra_items=items, ), br_name, - ButtonRequestType.SignTx, + br_code, ) await raise_if_not_confirmed( @@ -973,7 +978,7 @@ if not utils.BITCOIN_ONLY: extra_items=fee_details, ), br_name, - ButtonRequestType.SignTx, + br_code, ) def confirm_cardano_tx( diff --git a/core/src/trezor/ui/layouts/delizia/__init__.py b/core/src/trezor/ui/layouts/delizia/__init__.py index 1e970b3839..af5c3eaa86 100644 --- a/core/src/trezor/ui/layouts/delizia/__init__.py +++ b/core/src/trezor/ui/layouts/delizia/__init__.py @@ -868,7 +868,7 @@ if not utils.BITCOIN_ONLY: async def confirm_solana_staking_tx( title: str, - message: str, + description: str, account: str, account_path: str, vote_account: str, @@ -877,12 +877,11 @@ if not utils.BITCOIN_ONLY: fee_item: tuple[str, str], fee_details: Iterable[tuple[str, str]], blockhash_item: tuple[str, str], - br_name: str, + br_name: str = "confirm_solana_staking_tx", + br_code: ButtonRequestType = ButtonRequestType.SignTx, ) -> None: - description = message if vote_account: - description = f"{message}\n{TR.solana__stake_provider}:" - + description = f"{description}\n\n{TR.solana__stake_provider}:" await raise_if_not_confirmed( trezorui_api.flow_confirm_output( title=title, @@ -894,14 +893,14 @@ if not utils.BITCOIN_ONLY: text_mono=True, account=account, account_path=account_path, - br_code=ButtonRequestType.SignTx, + br_code=br_code, br_name=br_name, address_item=stake_item, extra_item=blockhash_item, fee_items=fee_details, summary_title=title, summary_items=(amount_item, fee_item), - summary_br_name="confirm_solana_staking_tx_total", + summary_br_name="confirm_total", summary_br_code=ButtonRequestType.SignTx, cancel_text=TR.buttons__cancel, ), diff --git a/tests/device_tests/solana/test_sign_tx.py b/tests/device_tests/solana/test_sign_tx.py index 67e67e01b9..3cf1d69f8f 100644 --- a/tests/device_tests/solana/test_sign_tx.py +++ b/tests/device_tests/solana/test_sign_tx.py @@ -22,6 +22,7 @@ from trezorlib.solana import sign_tx from trezorlib.tools import parse_path from ...common import parametrize_using_common_fixtures +from ...input_flows import InputFlowConfirmAllWarnings from .construct.instructions import PROGRAMS, UnknownInstruction from .construct.transaction import Message, RawInstruction @@ -48,28 +49,31 @@ def test_solana_sign_tx(client: Client, parameters, result): serialized_tx = _serialize_tx(parameters["construct"]) - actual_result = sign_tx( - client, - address_n=parse_path(parameters["address"]), - serialized_tx=serialized_tx, - additional_info=( - messages.SolanaTxAdditionalInfo( - token_accounts_infos=[ - messages.SolanaTxTokenAccountInfo( - base_address=token_account["base_address"], - token_program=token_account["token_program"], - token_mint=token_account["token_mint"], - token_account=token_account["token_account"], - ) - for token_account in parameters["additional_info"][ - "token_accounts_infos" + with client: + IF = InputFlowConfirmAllWarnings(client) + client.set_input_flow(IF.get()) + actual_result = sign_tx( + client, + address_n=parse_path(parameters["address"]), + serialized_tx=serialized_tx, + additional_info=( + messages.SolanaTxAdditionalInfo( + token_accounts_infos=[ + messages.SolanaTxTokenAccountInfo( + base_address=token_account["base_address"], + token_program=token_account["token_program"], + token_mint=token_account["token_mint"], + token_account=token_account["token_account"], + ) + for token_account in parameters["additional_info"][ + "token_accounts_infos" + ] ] - ] - ) - if "additional_info" in parameters - else None - ), - ) + ) + if "additional_info" in parameters + else None + ), + ) assert actual_result == bytes.fromhex(result["expected_signature"]) diff --git a/tests/input_flows.py b/tests/input_flows.py index 5896523ce7..7f28ea7f6d 100644 --- a/tests/input_flows.py +++ b/tests/input_flows.py @@ -2274,6 +2274,7 @@ class InputFlowConfirmAllWarnings(InputFlowBase): # hi priority warning hi_prio = ( TR.ethereum__unknown_contract_address, + TR.solana__stake_withdrawal_warning, TR.addr_mismatch__wrong_derivation_path, TR.send__receiving_to_multisig, "witness path", diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index dfb4b3930a..172c024bbc 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -5133,7 +5133,8 @@ "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "7ae3abe87dcc439d593fff1b5eb49a20ffbd962ef52acc0d1ea6c467c0b2cba0", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "8017c70cb7ca945b985210e05195e0b29689527a0bd233ef65e6972a9a5bac20", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "7640124cb84555d1ed5abbfcf4098dfb0dbd4cd5461f9694de6518c14fe668c9", -"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "9c82dde84b33161503de2464e1c890c65c242b54898b67e4662807e4c458603d", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "5d4c657a9d6d2dd260748c452e85657a9c013a15c09a416da054b4f806fd929b", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "d6eea8bcac8bc3ee38a2dfb65e4968f211d62ba86de730af6dc0e55cddd2fb0a", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "c003994e4b5f3d8fb3d3273d2db57239aec8dc1e6231ab3d1a2d46e99ce1a575", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "694eca79abd20df9110c32ecb14adc778ffef4e9d4cc8f8553eaa4643e60220b", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "48574562182de66e96b7e2e7cf47d97db60b979ce69331176ac42aec5ecdb631", @@ -5171,7 +5172,8 @@ "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_-_with_epoch_only]": "f1c4985080e51dcd6889fc2b2a5ea2502ba44bb4af9fb47656eb2c301395caf5", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_checked]": "6eb89719cacab2d73b0b91484f6f065e2a3445a24d58f1874702981e6ba45707", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[split]": "6068df82ab79eff5dfdf5e57dc8156e50031ee469934ee63a8d5a38e45aa63ac", -"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions]": "0093adde4ba3e9b0374ee330ebccd360582dd53227a828ce7fcd272ada59a321", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions]": "0a1b9a510f656249a552434fe3b30067e61382a24066ace44e100f488eab2366", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions_with_warning]": "61ce8b6a0e90dfbcd4f9a05b0398b8229df90d71807a9eef027160758a8df6c0", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[sync_native]": "5a5cc506048b5025bac6cf82ef63d6d81be36fa01cef471eb69f9cd526787f96", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account]": "0312b269438961cac1d5f8d05414f7a318318c390a235402446788fb59ab26a2", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account_-_multisig]": "4613157fbf5d5b48ee47d638a68d814f88bcfa41e88d09e189017fcdeb9fa5f7", @@ -5186,7 +5188,7 @@ "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "8845c8f61d4d2fe2d5d68cf8468ae2effdd2f1c4cadad65df1e676066bdb4395", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "6d3c2e590a0b91a39e294a6c0d13490f4c6c541617f7b98e0ba241e7dfc76693", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "f1e96601a1b72ea0a7b0b02d590ba1cdf7c73a9b4b776569a3e2a14632169dcb", -"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "105bc5df069c2673da8a1746843ff5457044b75e221542c310b166197dbfadfb", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "cf1b187032adf39e2289dbd87c2e8cc2629c9c691382b6c3c3fd46bf649217bf", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "c5046158a24f6ef8ca43a58d3914a3a3da3fcafd94bdcaaf3cd53c77fa37d0e7", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "9a1e4083290937d22ed9d2a85b757e495b26a8e9fc37cf501b3450bf5217183b", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "25db9577893e79a0823d88eda0b8bfa70ee0125cd574bab912b116f506dbb9c1", @@ -13962,7 +13964,8 @@ "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "0e61b22a03de7857d11771e71d4c9aa9d3c538e86ca784213e653faf0d5e8883", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "f13824278d5cfb30b5154e2bb5a83ccb3dd420ee9aa369b9f303b0fbcf992bf4", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "4764b77eac8dfc5ca2a0c90fcb073fbfc187c3f49ad3815737989c9ff17c0090", -"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "42f916fd2622211058ed7c2f63dea6616843440b8aa22291e964502aaabd7112", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "ce5329dfe7543d9ff0f6c7402885c3ed28616973f66271231cbec2b95f044c91", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "2dbe711e39dcca5a7585c8d7c23a28b7b55018f417d679e3d578aa17d43d4129", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "4e60a1f2fd7c2a555aabdb380cd5e3e42238ffb0470908fa69c88741c4837e88", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "f5f8683aa05fbb3a5a157c2faea5d2b19e19c48e78c82bf77210f7cf4b0d3c89", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "534ceb09bd4bcd999be21bde9aa76d5dd1daae339154c0c135231d05d7a86032", @@ -14000,7 +14003,8 @@ "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_-_with_epoch_only]": "a1581f15d3de981f3df17feb8e127f2e6c2b16cd3f17a6badfd0c39b14e38033", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_checked]": "644939a485c7005abc6a85f08d76a5cd90690c0b8c62692834a09b42f5b9b1ba", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[split]": "2fecaa57d3448d40d685019aa7b6053706a17e12dc1717f16ca0eaca8324fd85", -"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions]": "a9a13a7451fb3c33ca491f3986567ff5108fac4d0e4f8689e2de535c10d7ea1f", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions]": "306bdc6bb9e68d77c4987a29c25cf32fe73dc8d06c41187e04489c156026aaec", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions_with_warning]": "55e79d034d7019f53e49f4787db161227cc51ccdc8fbecf76e2510d736ad1dbc", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[sync_native]": "43c5e4cfdbbc29456197ba924c44d082d5153a1188607d5e95f186304c734881", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account]": "b1df488b46ad1db517c75d7b4eecc97da4a49c85d0545658331cb830b5cda9e7", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account_-_multisig]": "7a800abac1a122b118a78f01a39b3c0079f8dbd3a05048c7beb6c6a491b70af8", @@ -14015,7 +14019,7 @@ "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "4cda28586c4c33b0c75087923507838c7f8916f4749076c4d737de5bc09f5434", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "e305c57526dc4d8d9d31d2403b751851d1630f457a23e2602e1ac685334ed7f4", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "3fb9f9929ba7539aca6007e9f7cc7fb2d5527df24949d591a484f30aba475c5d", -"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "b83b4312855e9a75fddd4fa891a1bad4b74bffcba1c2ddf86b9b73f40b5adb8e", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "04f2df8f1b09141244c2daafe1c3bba2ed95b041c0cd4bff3cf36e7d5bc1353b", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "99e7087efd53509b067134fb4b9c82dfcf05c9bb8f0bc2e2ad5caa008946ee2d", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "5bca29906bf6422cad691df82e844a50e639d9186a565fca945b64b1b179ad58", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "fa6ec1c23d35127a15f9aae1d36a7ea2472c55339ac15653b89346a2a6b09b49", @@ -22630,7 +22634,8 @@ "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "efb38859a134aa88820b2004d7f5924ad82103611455182a658cb0bf4bf61d25", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "9c9c177956102a54655029b26b4d7445ba1a2fdc245449c06a81c185bbe67e65", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "5d2e96e4a827cd7d51ac88cb2e47718bf2f35df0f587588aec5deeaaea2082c6", -"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "a65e5c5d6286592b86e52b8b29c0145b34382e111ea7c53de9d4e350eaa901f5", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "22c607b61c5dcaf4b85063d505afaa89b41ada761667413aca6a2aa4e535239c", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "d24749e2042ab04ab74a5acf92f90d4d4556bbd6a71de0fa0e8642e6366647bb", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "7fb521f59a4b7f4f367766b500477b648b3b14498bce600c61da754f4a44e2e2", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "ae7e0b3ab1a8c52046db8ce51438e4fda6a92a535d87b28bcdf16aea1a1800e2", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "f22cebb39308d26d57d9e9ee3a2658bb18d61f0c6149de164798c86b6ff18acd", @@ -22668,7 +22673,8 @@ "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_-_with_epoch_only]": "8fa9a9434ace91ac1df213b4cf37f3aa2b73a1dc7ef4e0218afa29383d7e34a4", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_lockup_checked]": "9de53632cbfe2ef5198cb5da00335cf42fdfb4b859f879d0ec1d78ed7a5e7106", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[split]": "f4d4c5cfaec18fc8d8fe324c4443f39656911d0653d8812057147be65d2a19f8", -"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions]": "56630eb27772c73da7b3e0f8bdd5fdf3014e5f8e6135955df11c77e7f05c9d60", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions]": "5aeb536218701ecff849773ae202ecedc976720f43ab8f280d29b2f371b19889", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[stake_instructions_with_warning]": "833e6a02e4ba228c4a87dc90032bfe50a27ca123697750b67bf3dcbae2883afc", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[sync_native]": "d7c5f749cedc8aff3cab16c85da4a483e8fa8dfa6fb4999cfb62aeeb48ac600f", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account]": "0f6339a9a903d36dcc2142ca2ed5909a9794bc9b9d7189f3144a41b67d36f96d", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[thaw_account_-_multisig]": "fa87184a580a5bfbb6de960d844739a8e89dd7aa67472507fff1416c85471fb9", @@ -22683,7 +22689,7 @@ "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "92857737c3c221d4486ffa12b0d8668191b7ec473d9060077e104f027a6ae4b6", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "648374bd6ebf21edcaae603a53f5d435536065f0988d34b24280d25c4ffee791", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "2aec3d7f064bb0a43cfdfa17514d9e5e62db98b82842624b9b555ff8d3117c91", -"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "3a6f7371fa663f400954ab4138c165bebff1cba9942ea9f037c09f3659358902", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "8504de9387dcc3f68633d5f49f71702a7f6c0aae0153ec9e952c93ba84b3acca", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "68bfd9b9a175c028d78631779bc8ce486b1d17a6d255a2bc66f47a4cc604273b", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "64230ba3efa3adab7148bc1b3dfb2d1ef270d5a502f3413268ff7ffa3d9a99f2", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "3ebe9fbb3e26038c18360bb46fe92665b68c052b3436ce613ad4d11bfb00d068",