From 331f71dc914f71ab15ebee33d3983089068b7dd4 Mon Sep 17 00:00:00 2001 From: obrusvit Date: Wed, 26 Feb 2025 01:24:30 +0100 Subject: [PATCH 01/13] chore(common): set definitions timestamp --- common/defs/ethereum/released-definitions-timestamp.txt | 2 +- core/src/apps/ethereum/definitions_constants.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/defs/ethereum/released-definitions-timestamp.txt b/common/defs/ethereum/released-definitions-timestamp.txt index 3a9f883162..ef8fc1c099 100644 --- a/common/defs/ethereum/released-definitions-timestamp.txt +++ b/common/defs/ethereum/released-definitions-timestamp.txt @@ -1 +1 @@ -2025-01-09T11:48:42+00:00 +2025-02-07T18:39:08+00:00 diff --git a/core/src/apps/ethereum/definitions_constants.py b/core/src/apps/ethereum/definitions_constants.py index 0153c883b0..b220040a15 100644 --- a/core/src/apps/ethereum/definitions_constants.py +++ b/core/src/apps/ethereum/definitions_constants.py @@ -9,7 +9,7 @@ PUBLIC_KEYS = ( b"\xb8\xd2\xb2\x1d\xe2\x71\x24\xf0\x51\x1f\x90\x3a\xe7\xe6\x0e\x07\x96\x18\x10\xa0\xb8\xf2\x8e\xa7\x55\xfa\x50\x36\x7a\x8a\x2b\x8b", ) -MIN_DATA_VERSION = 1736423322 +MIN_DATA_VERSION = 1738953548 FORMAT_VERSION = b"trzd1" if __debug__: From f88ce9ac9a156164c9c730dbdf4600aec4c6de07 Mon Sep 17 00:00:00 2001 From: obrusvit Date: Wed, 26 Feb 2025 01:42:27 +0100 Subject: [PATCH 02/13] docs(core): changelog for 2.8.9 - command: ./tools/changelog.py generate --date "19th March 2025" core 2.8.9 --- core/.changelog.d/+01658739.added | 1 - core/.changelog.d/3503.added | 1 - core/.changelog.d/3503.fixed | 1 - core/.changelog.d/3536.added | 1 - core/.changelog.d/4541.added | 1 - core/.changelog.d/4560.added | 1 - core/.changelog.d/4571.changed | 1 - core/CHANGELOG.T2B1.md | 22 ++++++++++++++++++--- core/CHANGELOG.T2T1.md | 26 ++++++++++++++++++++++-- core/CHANGELOG.T3B1.md | 33 ++++++++++++++++++------------- core/CHANGELOG.T3T1.md | 20 ++++++++++++++++++- core/CHANGELOG.md | 20 +++++++++++++++++++ 12 files changed, 101 insertions(+), 27 deletions(-) delete mode 100644 core/.changelog.d/+01658739.added delete mode 100644 core/.changelog.d/3503.added delete mode 100644 core/.changelog.d/3503.fixed delete mode 100644 core/.changelog.d/3536.added delete mode 100644 core/.changelog.d/4541.added delete mode 100644 core/.changelog.d/4560.added delete mode 100644 core/.changelog.d/4571.changed diff --git a/core/.changelog.d/+01658739.added b/core/.changelog.d/+01658739.added deleted file mode 100644 index 24935faf2b..0000000000 --- a/core/.changelog.d/+01658739.added +++ /dev/null @@ -1 +0,0 @@ -[T3T1] Upgrade bundled bootloader to 2.1.10. diff --git a/core/.changelog.d/3503.added b/core/.changelog.d/3503.added deleted file mode 100644 index 5cea56457b..0000000000 --- a/core/.changelog.d/3503.added +++ /dev/null @@ -1 +0,0 @@ -Added ability to cancel recovery on word count selection screen. diff --git a/core/.changelog.d/3503.fixed b/core/.changelog.d/3503.fixed deleted file mode 100644 index 34ce2e0d64..0000000000 --- a/core/.changelog.d/3503.fixed +++ /dev/null @@ -1 +0,0 @@ -Fix cancelling device recovery after aborting from Suite. diff --git a/core/.changelog.d/3536.added b/core/.changelog.d/3536.added deleted file mode 100644 index a362889bc6..0000000000 --- a/core/.changelog.d/3536.added +++ /dev/null @@ -1 +0,0 @@ -[T2T1] Added account info for ETH transactions. diff --git a/core/.changelog.d/4541.added b/core/.changelog.d/4541.added deleted file mode 100644 index f3008af3e8..0000000000 --- a/core/.changelog.d/4541.added +++ /dev/null @@ -1 +0,0 @@ -Added new UI for confirming long messages. diff --git a/core/.changelog.d/4560.added b/core/.changelog.d/4560.added deleted file mode 100644 index ad0afc82c5..0000000000 --- a/core/.changelog.d/4560.added +++ /dev/null @@ -1 +0,0 @@ -Add Solana staking confirmation dialogs. diff --git a/core/.changelog.d/4571.changed b/core/.changelog.d/4571.changed deleted file mode 100644 index ece94a671f..0000000000 --- a/core/.changelog.d/4571.changed +++ /dev/null @@ -1 +0,0 @@ -Changed "swipe to continue" to "tap to continue". Screens still respond to swipe-up, but the preferred interaction method is now tapping the lower part of the screen. diff --git a/core/CHANGELOG.T2B1.md b/core/CHANGELOG.T2B1.md index 91784cd2f8..3885f1c296 100644 --- a/core/CHANGELOG.T2B1.md +++ b/core/CHANGELOG.T2B1.md @@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [2.8.9] (19th March 2025) + +### Added +- Ability to cancel recovery on word count selection screen. [#3503] +- New UI for confirming long messages. [#4541] +- Solana staking confirmation dialogs. [#4560] + +### Fixed +- Cancelling device recovery after aborting from Suite. [#3503] + ## [2.8.8] (internal release) ### Fixed @@ -42,7 +52,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [2.8.4] (internal release) -## [2.8.3] (unreleased) +## [2.8.3] (18th September 2024) ### Added - Reduce the choices to select wordcount when unlocking repeated backup to 20 or 33. [#4099] @@ -59,15 +69,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix display orientation _south_. [#3990] - Fixed SLIP-10 fingerprints for ed25519 and curve25519. [#4093] -## [2.8.1] (unreleased) +## [2.8.1] (21st August 2024) ### Added - Improve precision of PIN timeout countdown. [#4000] +### Changed + ### Fixed - Solana: added support for deprecated AToken Create `rent_sysvar` argument. [#3976] - ## [2.8.0] (9th July 2024) ### Added @@ -968,6 +979,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#3475]: https://github.com/trezor/trezor-firmware/pull/3475 [#3477]: https://github.com/trezor/trezor-firmware/pull/3477 [#3496]: https://github.com/trezor/trezor-firmware/pull/3496 +[#3503]: https://github.com/trezor/trezor-firmware/pull/3503 [#3517]: https://github.com/trezor/trezor-firmware/pull/3517 [#3520]: https://github.com/trezor/trezor-firmware/pull/3520 [#3536]: https://github.com/trezor/trezor-firmware/pull/3536 @@ -1042,3 +1054,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#4492]: https://github.com/trezor/trezor-firmware/pull/4492 [#4500]: https://github.com/trezor/trezor-firmware/pull/4500 [#4537]: https://github.com/trezor/trezor-firmware/pull/4537 +[#4541]: https://github.com/trezor/trezor-firmware/pull/4541 +[#4560]: https://github.com/trezor/trezor-firmware/pull/4560 +[#4571]: https://github.com/trezor/trezor-firmware/pull/4571 +[#1658739]: https://github.com/trezor/trezor-firmware/pull/1658739 diff --git a/core/CHANGELOG.T2T1.md b/core/CHANGELOG.T2T1.md index 2a1db8bc35..448a03cf16 100644 --- a/core/CHANGELOG.T2T1.md +++ b/core/CHANGELOG.T2T1.md @@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [2.8.9] (19th March 2025) + +### Added +- Ability to cancel recovery on word count selection screen. [#3503] +- Account info for ETH transactions. [#3536] +- New UI for confirming long messages. [#4541] +- Solana staking confirmation dialogs. [#4560] + +### Fixed +- Cancelling device recovery after aborting from Suite. [#3503] + ## [2.8.8] (19th February 2025) ### Fixed @@ -42,7 +53,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [2.8.4] (internal release) -## [2.8.3] (unreleased) +## [2.8.3] (18th September 2024) ### Added - Reduce the choices to select wordcount when unlocking repeated backup to 20 or 33. [#4099] @@ -63,19 +74,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Improve precision of PIN timeout countdown. [#4000] +### Changed + ### Fixed - Added a progress indicator for the formatting operation. [#3035] - Solana: added support for deprecated AToken Create `rent_sysvar` argument. [#3976] - ## [2.8.0] (9th July 2024) +### Added + ### Changed - Reworked PIN processing. ### Removed - CoSi functionality. [#3442] +### Fixed + ## [2.7.2] (14th June 2024) @@ -947,6 +963,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#3256]: https://github.com/trezor/trezor-firmware/pull/3256 [#3296]: https://github.com/trezor/trezor-firmware/pull/3296 [#3311]: https://github.com/trezor/trezor-firmware/pull/3311 +[#3324]: https://github.com/trezor/trezor-firmware/pull/3324 [#3359]: https://github.com/trezor/trezor-firmware/pull/3359 [#3370]: https://github.com/trezor/trezor-firmware/pull/3370 [#3377]: https://github.com/trezor/trezor-firmware/pull/3377 @@ -960,6 +977,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#3475]: https://github.com/trezor/trezor-firmware/pull/3475 [#3477]: https://github.com/trezor/trezor-firmware/pull/3477 [#3496]: https://github.com/trezor/trezor-firmware/pull/3496 +[#3503]: https://github.com/trezor/trezor-firmware/pull/3503 [#3517]: https://github.com/trezor/trezor-firmware/pull/3517 [#3520]: https://github.com/trezor/trezor-firmware/pull/3520 [#3536]: https://github.com/trezor/trezor-firmware/pull/3536 @@ -1034,3 +1052,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#4492]: https://github.com/trezor/trezor-firmware/pull/4492 [#4500]: https://github.com/trezor/trezor-firmware/pull/4500 [#4537]: https://github.com/trezor/trezor-firmware/pull/4537 +[#4541]: https://github.com/trezor/trezor-firmware/pull/4541 +[#4560]: https://github.com/trezor/trezor-firmware/pull/4560 +[#4571]: https://github.com/trezor/trezor-firmware/pull/4571 +[#1658739]: https://github.com/trezor/trezor-firmware/pull/1658739 diff --git a/core/CHANGELOG.T3B1.md b/core/CHANGELOG.T3B1.md index 6b85436e55..c51d08a610 100644 --- a/core/CHANGELOG.T3B1.md +++ b/core/CHANGELOG.T3B1.md @@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [2.8.9] (19th March 2025) + +### Added +- Ability to cancel recovery on word count selection screen. [#3503] +- New UI for confirming long messages. [#4541] +- Solana staking confirmation dialogs. [#4560] + +### Fixed +- Cancelling device recovery after aborting from Suite. [#3503] + ## [2.8.8] (internal release) ### Fixed @@ -58,22 +68,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Fix persistent word when going to previous word during recovery process. [#3859] -- Fix display orientation _south_. [#3990] - Fixed SLIP-10 fingerprints for ed25519 and curve25519. [#4093] -## [2.8.1] (unreleased) +## [2.8.1] (21st August 2024) ### Added +- Added support for T3B1. [#3728] - Improve precision of PIN timeout countdown. [#4000] +### Changed + ### Fixed - Solana: added support for deprecated AToken Create `rent_sysvar` argument. [#3976] - ## [2.8.0] (9th July 2024) ### Added -- Expose value of the Optiga SEC counter in `Features` message. ### Changed - Reworked PIN processing. @@ -82,13 +92,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - CoSi functionality. [#3442] ### Fixed -- Increase Optiga read timeout to avoid spurious RSODs. ## [2.7.2] (14th June 2024) ### Fixed -- Fixed device freeze after setup. [#3925] - Translation fixes. [#3916] @@ -114,7 +122,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Add translations capability. [#3206] - Stellar: add support for `StellarClaimClaimableBalanceOp`. [#3434] -- Add loader to homescreen when locking the device. [#3440] - Allow for going back to previous word in recovery process. [#3458] - Clear sign ETH staking transactions on Everstake pool. [#3517] - Send BIP-380 descriptor in GetPublicKey response. [#3539] @@ -126,7 +133,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Improved UI of multiple Solana instructions. [#3445] - Solana multisig instruction warning will be displayed before instruction details are displayed. [#3445] - Fixed Solana Memo instruction being unknown - it will now be recognized and displayed properly. [#3445] -- Add missing semicolon character to the passphrase entry. [#3477] ## [2.6.4] (20th December 2023) @@ -139,7 +145,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Fix invalid encoding of signatures from Optiga. [#3411] -- Re-added missing address confirmation screens. [#3424] ## [2.6.3] (15th November 2023) @@ -147,7 +152,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Support interaction-less upgrade. [#2919] - Allowed non-zero address index in Cardano staking paths. [#3242] -- Turn the screen off when device is locked, to prolong OLED life. [#3377] ### Changed @@ -157,20 +161,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [2.6.2] (internal release) ### Added -- Integrate Optiga into PIN verification. [#3296] ## [2.6.1] (internal release) ### Added -- Implement UI. [#2610] - QR code display when exporting XPUBs. [#3047] - Added hw model field to all vendor headers. [#3048] - Added firmware update without interaction. [#3205] - Split builds of different parts to use simple util.s assembler, while FW+bootloader use interconnected ones. [#3205] - Add support for address chunkification in Receive and Sign flow. [#3237] -- Implement device authentication. [#3255] -- Use Optiga as a source of randomness in seed generation. [#3256] ### Changed - Update to MicroPython 1.19.1. [#2341] @@ -970,6 +970,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#3475]: https://github.com/trezor/trezor-firmware/pull/3475 [#3477]: https://github.com/trezor/trezor-firmware/pull/3477 [#3496]: https://github.com/trezor/trezor-firmware/pull/3496 +[#3503]: https://github.com/trezor/trezor-firmware/pull/3503 [#3517]: https://github.com/trezor/trezor-firmware/pull/3517 [#3520]: https://github.com/trezor/trezor-firmware/pull/3520 [#3536]: https://github.com/trezor/trezor-firmware/pull/3536 @@ -1044,3 +1045,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#4492]: https://github.com/trezor/trezor-firmware/pull/4492 [#4500]: https://github.com/trezor/trezor-firmware/pull/4500 [#4537]: https://github.com/trezor/trezor-firmware/pull/4537 +[#4541]: https://github.com/trezor/trezor-firmware/pull/4541 +[#4560]: https://github.com/trezor/trezor-firmware/pull/4560 +[#4571]: https://github.com/trezor/trezor-firmware/pull/4571 +[#1658739]: https://github.com/trezor/trezor-firmware/pull/1658739 diff --git a/core/CHANGELOG.T3T1.md b/core/CHANGELOG.T3T1.md index 2d5fb1e53c..a9321a01b9 100644 --- a/core/CHANGELOG.T3T1.md +++ b/core/CHANGELOG.T3T1.md @@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [2.8.9] (19th March 2025) + +### Added +- Ability to cancel recovery on word count selection screen. [#3503] +- New UI for confirming long messages. [#4541] +- Solana staking confirmation dialogs. [#4560] +- Upgrade bundled bootloader to 2.1.10. [#4665] + +### Changed +- Changed "swipe to continue" to "tap to continue". Screens still respond to swipe-up, but the preferred interaction method is now tapping the lower part of the screen. [#4571] + +### Fixed +- Cancelling device recovery after aborting from Suite. [#3503] + ## [2.8.8] (internal release) ### Fixed @@ -99,7 +113,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Adjusted detection of swipes: vertical swipes are preferred over horizontal swipes. [#4060] - Solana: added support for deprecated AToken Create `rent_sysvar` argument. [#3976] - ## [2.8.0] (9th July 2024) ### Added @@ -1001,6 +1014,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#3475]: https://github.com/trezor/trezor-firmware/pull/3475 [#3477]: https://github.com/trezor/trezor-firmware/pull/3477 [#3496]: https://github.com/trezor/trezor-firmware/pull/3496 +[#3503]: https://github.com/trezor/trezor-firmware/pull/3503 [#3517]: https://github.com/trezor/trezor-firmware/pull/3517 [#3520]: https://github.com/trezor/trezor-firmware/pull/3520 [#3536]: https://github.com/trezor/trezor-firmware/pull/3536 @@ -1075,3 +1089,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#4492]: https://github.com/trezor/trezor-firmware/pull/4492 [#4500]: https://github.com/trezor/trezor-firmware/pull/4500 [#4537]: https://github.com/trezor/trezor-firmware/pull/4537 +[#4541]: https://github.com/trezor/trezor-firmware/pull/4541 +[#4560]: https://github.com/trezor/trezor-firmware/pull/4560 +[#4571]: https://github.com/trezor/trezor-firmware/pull/4571 +[#4665]: https://github.com/trezor/trezor-firmware/pull/4665 diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 83a7532d67..7d3273ac16 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [2.8.9] (19th March 2025) + +### Added +- Added ability to cancel recovery on word count selection screen. [#3503] +- [T2T1] Added account info for ETH transactions. [#3536] +- Added new UI for confirming long messages. [#4541] +- Add Solana staking confirmation dialogs. [#4560] +- [T3T1] Upgrade bundled bootloader to 2.1.10. [#1658739] + +### Changed +- Changed "swipe to continue" to "tap to continue". Screens still respond to swipe-up, but the preferred interaction method is now tapping the lower part of the screen. [#4571] + +### Fixed +- Fix cancelling device recovery after aborting from Suite. [#3503] + ## [2.8.8] (19th February 2025) ### Fixed @@ -1028,6 +1043,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#3475]: https://github.com/trezor/trezor-firmware/pull/3475 [#3477]: https://github.com/trezor/trezor-firmware/pull/3477 [#3496]: https://github.com/trezor/trezor-firmware/pull/3496 +[#3503]: https://github.com/trezor/trezor-firmware/pull/3503 [#3517]: https://github.com/trezor/trezor-firmware/pull/3517 [#3520]: https://github.com/trezor/trezor-firmware/pull/3520 [#3536]: https://github.com/trezor/trezor-firmware/pull/3536 @@ -1102,3 +1118,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#4492]: https://github.com/trezor/trezor-firmware/pull/4492 [#4500]: https://github.com/trezor/trezor-firmware/pull/4500 [#4537]: https://github.com/trezor/trezor-firmware/pull/4537 +[#4541]: https://github.com/trezor/trezor-firmware/pull/4541 +[#4560]: https://github.com/trezor/trezor-firmware/pull/4560 +[#4571]: https://github.com/trezor/trezor-firmware/pull/4571 +[#1658739]: https://github.com/trezor/trezor-firmware/pull/1658739 From 2c94dc24df97dbfad682dd2be03f2c46c03418ef Mon Sep 17 00:00:00 2001 From: obrusvit Date: Wed, 26 Feb 2025 02:03:27 +0100 Subject: [PATCH 03/13] docs(core): fix entries in changelog --- core/CHANGELOG.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 7d3273ac16..bbd90cf286 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -7,17 +7,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [2.8.9] (19th March 2025) ### Added -- Added ability to cancel recovery on word count selection screen. [#3503] -- [T2T1] Added account info for ETH transactions. [#3536] -- Added new UI for confirming long messages. [#4541] -- Add Solana staking confirmation dialogs. [#4560] -- [T3T1] Upgrade bundled bootloader to 2.1.10. [#1658739] +- Ability to cancel recovery on word count selection screen. [#3503] +- [T2T1] Account info for ETH transactions. [#3536] +- New UI for confirming long messages. [#4541] +- Solana staking confirmation dialogs. [#4560] +- [T3T1] Upgrade bundled bootloader to 2.1.10. [#4665] ### Changed - Changed "swipe to continue" to "tap to continue". Screens still respond to swipe-up, but the preferred interaction method is now tapping the lower part of the screen. [#4571] ### Fixed -- Fix cancelling device recovery after aborting from Suite. [#3503] +- Cancelling device recovery after aborting from Suite. [#3503] ## [2.8.8] (19th February 2025) @@ -1121,4 +1121,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [#4541]: https://github.com/trezor/trezor-firmware/pull/4541 [#4560]: https://github.com/trezor/trezor-firmware/pull/4560 [#4571]: https://github.com/trezor/trezor-firmware/pull/4571 -[#1658739]: https://github.com/trezor/trezor-firmware/pull/1658739 +[#4665]: https://github.com/trezor/trezor-firmware/pull/4665 From 8568378a8a91e40bd0475f7cd643084ec9f6d319 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Wed, 26 Feb 2025 15:00:17 +0200 Subject: [PATCH 04/13] fix(core): confirm only visible Solana staking instructions [no changelog] (cherry picked from commit ee1cc4ae81eb8c89c3a5ea3d05ada9a9b3ff1dc8) --- .../src/apps/solana/predefined_transaction.py | 12 ++-- tests/ui_tests/fixtures.json | 72 +++++++++---------- 2 files changed, 40 insertions(+), 44 deletions(-) diff --git a/core/src/apps/solana/predefined_transaction.py b/core/src/apps/solana/predefined_transaction.py index 76af3750d0..3d194ae7b1 100644 --- a/core/src/apps/solana/predefined_transaction.py +++ b/core/src/apps/solana/predefined_transaction.py @@ -217,7 +217,6 @@ async def try_confirm_staking_transaction( blockhash: bytes, ) -> bool: from .transaction.instructions import ( - ComputeBudgetProgramSetComputeUnitPriceInstruction, StakeProgramDeactivateInstruction, StakeProgramDelegateStakeInstruction, StakeProgramInitializeInstruction, @@ -225,7 +224,7 @@ async def try_confirm_staking_transaction( SystemProgramCreateAccountWithSeedInstruction, ) - instructions = transaction.instructions + instructions = transaction.get_visible_instructions() def _match_instructions(*expected_types: Type[Instruction]) -> bool: if len(instructions) != len(expected_types): @@ -236,14 +235,13 @@ async def try_confirm_staking_transaction( ) if _match_instructions( - ComputeBudgetProgramSetComputeUnitPriceInstruction, SystemProgramCreateAccountWithSeedInstruction, StakeProgramInitializeInstruction, StakeProgramDelegateStakeInstruction, ): from .layout import confirm_stake_transaction, confirm_stake_withdrawer - _budget, create, init, delegate = instructions + create, init, delegate = instructions if signer_public_key != create.funding_account[0]: return False if signer_public_key != create.base: @@ -274,12 +272,11 @@ async def try_confirm_staking_transaction( return True if _match_instructions( - ComputeBudgetProgramSetComputeUnitPriceInstruction, StakeProgramDeactivateInstruction, ): from .layout import confirm_unstake_transaction - _budget, deactivate = instructions + (deactivate,) = instructions if signer_public_key != deactivate.stake_authority[0]: return False @@ -289,12 +286,11 @@ async def try_confirm_staking_transaction( return True if _match_instructions( - ComputeBudgetProgramSetComputeUnitPriceInstruction, StakeProgramWithdrawInstruction, ): from .layout import confirm_claim_recipient, confirm_claim_transaction - _budget, withdraw = instructions + (withdraw,) = instructions if signer_public_key != withdraw.withdrawal_authority[0]: return False if signer_public_key != withdraw.recipient_account[0]: diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 1ad829a306..55526032f4 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -2228,7 +2228,7 @@ "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "83f8ba7a8c7ef0a8e6ba76c4f9976c67090aa109b4f0908b69c2dec116887dcb", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "ad9a80cb0b5957efca789696c480ceb4bd08db6625aacadccfb247db5b7a7dca", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "38263f14775717cd2c3ae0509f17a28381f59837ae4707e978896615f6236f4e", -"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "8c9e5c467b44292b9c6e8299b76b0b55b566791f7a67ad3fe95c0628bf70a0b8", +"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "788b690406d4bcb8eefdfee34c5c2def061f47c9ba08e5f112bb8a4834cc0cd0", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "a34e548df5ba5ff9e6604f5ac780eda096343d21979befa90d13b708346bb888", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "61bf192e03f93fff4c8ef726315a693cdc4408d6f8cde34d3fd11d8a6a2c232d", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "0003d332d7246c41ec327e0058c5c8ce0f28a39d730a0bb85e0627e97982bb20", @@ -2274,7 +2274,7 @@ "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "d56a9b4a96f830ac99a4dd2d3320d1bfc8398bff96e084be84a025541da50e43", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "2d11eb5c9a273279176d6e409b04f938930dac0f7e370abd4842686ff96402d5", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "30483df5b100c8e32c3c03ece3aa982e073c376857c26ab1dd0e0d0bc2e6f4ee", -"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "6c93c48b47c8a005548b722e25ce989b3a64c6ca8f480dabdbb634de7246bd3c", +"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "64c0c2013066811fee36af7449aa9f53131a69da3138ddf78940f581c89ddc96", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "f597203143e02d6acd7124fbe533224b644b928bd9ed81146e36d98ba6adcd98", "T2T1_cs_stellar-test_stellar.py::test_get_address[parameters0-result0]": "487ab85fe79aa403aa2010265cdee79af8512434d63927dfd314a6b0d7b41620", "T2T1_cs_stellar-test_stellar.py::test_get_address[parameters1-result1]": "12c0fb50ad7504acaba98923ec81fd8498dbd34bc61a543d1064e957074ee4ee", @@ -3688,7 +3688,7 @@ "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "95ebd82d308622dbd1569ee63e272e959c6833f2c1bd72c07c4fb3bbc2473212", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "3d460e45b046a2b09986fae8e8ad2b8213e8a63c9db9a80e705f1211d264c683", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "d179c554b9935f1b8ea3321974eef4bdcbb9d1e0c1a325255ed6069668d40c3c", -"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "a7b18d900b9c2feb8a6071b5bfbf1792649b1d56033fe0cbdb0f2575450e179a", +"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "eb6784172d9e0573e7ab1e017a550d1960235ff53fc879caabc5984dec172bf8", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "e0a16526ba3056fe90308cca4a257ac34eebd35402207595c5d65496116e8afe", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "25a73c53078cd00ef91a27679ab3c4ac340cea43b9a9aedfbf7adbcaecd096a6", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "b601f41f087b709bbb1e92e4ba55cce6718b9f0c9a573d4abe5056b54c4b58e1", @@ -3734,7 +3734,7 @@ "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "df8ccf561750f8da42d48d7acc480bd888f3228ec3c3229332d0bfb42f3ddc5a", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "70eab0fa8551351c5363f87a2b48dfd3f34d55360d4a838a5b7558fcba4229c3", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "ff2d82a3e04718ba8706d11042d30d70f2d046ccc094a6da7cec6e7c4bc7e936", -"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "434a6a583935ee428930259c437157457cd51b13b58ec9378fe1b16d103eec38", +"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "1c5ec9e02b00869ee636c2a6e4f77799173b360f95ca7202ea3ebb0d3c2cd192", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "2171b52a987e540a541e805360cf1bf226c5197a031844382de681687abf7d24", "T2T1_de_stellar-test_stellar.py::test_get_address[parameters0-result0]": "fdc544fd25c12115ebcb7d639279b175fdfbf02c2633580c662eb7d2b9587237", "T2T1_de_stellar-test_stellar.py::test_get_address[parameters1-result1]": "0ab150c9832ab0e8b8994e6750a2dc958e4c051a8e7219334b368b08fb250492", @@ -5148,7 +5148,7 @@ "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "484ca9aa68a1025e31a68551fdf346c87a246dc338b203e6811699594d360145", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "466394eef2d1f121a13a337d722ff5defcfbaff93303370c6a31cbe4b124856a", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "75a9d45b62c0354cbb912f558fa46c7ca484a3a2c3eb95e772e4a16605f85527", -"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "61606d68b2c372f97fa72e649d62d026e43a875c721c403095635c014bee6e58", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "4f4e440f864933735427dadbdf9276928c4b77c32064cf571ded7064a7fa5994", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "c227efee90e84a86602a854007dd5871d11a58bc7a22dcf5806b1dcf0e97d590", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "e3f8c4de71faef72f033e5c76677feff6f8868ed6c0c458927aa57b85be75161", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "d6b60f9f65e5b65fe2ce7abbb8509ac9b10d3f84ba76e7486e328f4f3b356e76", @@ -5194,7 +5194,7 @@ "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]": "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]": "a5b725a6eb11859efcc55237e9ca061800f2530472e4128a8dcbda9fbc79fc9b", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "25db9577893e79a0823d88eda0b8bfa70ee0125cd574bab912b116f506dbb9c1", "T2T1_en_stellar-test_stellar.py::test_get_address[parameters0-result0]": "b1fa93cbf05638472cfb4c343e069267ffd82029391f807fe371fdb960bdcf2d", "T2T1_en_stellar-test_stellar.py::test_get_address[parameters1-result1]": "bc73800840c47711069a3cfc2ef090170a03ec4c0d32312a25260cce435c75e1", @@ -6626,7 +6626,7 @@ "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "52af33593cf340a89de2383d5ec912b5037023bdc6186a3f1d87a45071f95018", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "c961e969dc8527ea6babea5afbc5b0c8a33bed2fd6d8f6d0a41477515ee938d3", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "c8861b3218309de8020d0575a7ec721ad132b60b2755d32c363a78d811aab846", -"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "3dd94c8c537587cd5b9659c0be38b9379e2cc9b4de0c4023cf85095fd9133ea8", +"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "09b889ce8e6947fbc1ec198e06246ce392d88f3902ff4e0dc922942bd6fa55c3", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "16b9406ab9369bd0ba23480090a2fc0582c65926423a4ec1fd49e271fdd5bb0f", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "609e15ab34dbe1834cab1bf6e8c286a5b6cca9092f439ccffd2f326aa6ddf075", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "47a847afbd079171b531e09f629ccb7376f6be3a15e0010f622faf2f792819d3", @@ -6672,7 +6672,7 @@ "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "11eb14dc4cd74c4a0cdba65a4db1fc5e0ce312bc379da1edb3629202b68616b8", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "24500c24d2fa26870a97523b96f686d90d6065c0315308d9283363127824cb0e", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "4d131574044a25c2acc14f4fa8b202c628daf6b7703b0c6648b1854ebc2b4110", -"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "51e0b3e83d11d63735fd8600b7203b9d3184a3f528daefbb8456d901c07c3584", +"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "72af64b40112029a41f4dfa29b2a0f4501d7a62f19ac54a9b67a91844c48cc0f", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "0a710b5fe6deebe3c31a6b92d51f04ad83f16de2e50b966efd986f1cd3e2bc12", "T2T1_es_stellar-test_stellar.py::test_get_address[parameters0-result0]": "9fe7567e4938bdd9b6d9173b60da9a718977641a6b634ef3b6275c59876d887f", "T2T1_es_stellar-test_stellar.py::test_get_address[parameters1-result1]": "241970c4404b4ec85b444dea4b1e8de696916f91fbaa4f2b970798b722c7a3f3", @@ -8086,7 +8086,7 @@ "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "fac448dc95fdce172545aca6e992fb031d5282216a50d008f997a754694ccc1f", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "0e76f1454570c2169013fc58a39188ef7502562f4940eca6996d577f33f4ff70", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "357c943cc8b53ba64f91887378daaa171af490019e257c740e8a309ca6155d2c", -"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "516099b316984d347cbd3fb95a2af43a19f8bf86ae7b1793174b527b335a4746", +"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "83dbfb9242a02421bc9af8cae91d952fa9eb29fd96807e957add9507047a50b3", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "d8b8a322da38917b1cf2a12b296b8e55640fd0ad93c00f4646230934312c20e8", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "5efa4b29deea071d32a4594c7245539e04d5e3251007fe9d028baf8c45d29a4b", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "f8ea30a79142acb8e53835f0272becc34e36098ed8d6604692c51e30d338b4b7", @@ -8132,7 +8132,7 @@ "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "9f6d20c1da62194c29165117da02d800520e98fbebd37273e31c8a006ccd622c", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "2d56d358825cb3910c11ad56f8945eea09de9ad008838ff3e008327e27c52df9", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "578f5a16b954d79ec5a6736171d10ffb57e6c35413ea18b61ab6702301457d26", -"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "6b3cb9166aad070bf62f61c386909611933eaf5053d25243c437e3bc462133a5", +"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "184bcc238ac0e486ce91ca4a1f224f98054457ba422a0207b9ebce0af466c674", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "abac393609055bf275466bf71d3ab11f17bcaa673c2424317276caf8795e3674", "T2T1_fr_stellar-test_stellar.py::test_get_address[parameters0-result0]": "a0eab7100c568cda6663ebfea4c4aed4abac8d436a0ba359d170940049449307", "T2T1_fr_stellar-test_stellar.py::test_get_address[parameters1-result1]": "6eb5d97cc167fc20663601cc1cf890215c417d20c7fb1d40bc6925e699a186e6", @@ -9546,7 +9546,7 @@ "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "3becbac66caeb26ab0895426fe3c795c1b60158f966a58bcda459295072e6fc2", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "6fe29f0fc8bbcdc69ca461ab7ac7f57305a51df80f4c0a26cf97825310feb216", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "45c9a3031481a3d929bfc7bf6a90e23fa4d610a388cf91ce8fdc3cfb3015891a", -"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "6b8f274b56b5da9b9c00525582bff6c83d8f3d0b1f3c416c94d12ee640fb4858", +"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "611a0c0d8f1a41cd492dd7d601c5a36b52401bcaa08b94f1f8e6b4aa8856fb64", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "878cdba4021758959df92a92d6a1365f0fb7bc820f480365321c9860947a464f", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "06d9abf9c260f6e3363b47a4e0c52953512ec5f0ac92211f0f0d3ed8a82e628c", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "01c29a30afbd483efc7c9b931fa4fe08c924cb47dac203c6ca4692d038e13312", @@ -9592,7 +9592,7 @@ "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "328ec75d9ebba23db4aac9492f671b36d12f44df0aac0ce16f5fa936f1a63bd3", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "465cf0c32205ad78dc30ab1a64bb18c4878cbb592f32064468a096f86c972d4c", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "67f23a0a982bb0e341f533006f927c9fd054704d125dc94ab3dc53937ae2c10e", -"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "85db870c8dfa986c616e31e2ef303db03b7f6a3929165fe4d93397531fd8bb97", +"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "80b993fe713338b8f63de21bf91c4c6889a9b98a98f60ad24f05357dd265769f", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "47edbe33d783ac6aedc60294912733da863f3e902285ecf4ece9a964e9772d73", "T2T1_pt_stellar-test_stellar.py::test_get_address[parameters0-result0]": "c924aad99d615ff1abe2744262eb315f8e587fb63ddc6f7855387e22bd28315f", "T2T1_pt_stellar-test_stellar.py::test_get_address[parameters1-result1]": "a0a7d4c075a19652c3e944aa4b31dba8d79e8b8e53e4ece554a7eb4eeeeb4f8d", @@ -11237,7 +11237,7 @@ "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "7ab80ec6004404cd476f375afced49bbd5579e3740706707e2b3d655314e1520", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "c67259003dde8201373d7f752b9b7b59ba99dd4b8dac11d32c596a4818c957b7", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "886c1973ed22adafce7ded76c775606119d95756ef57ade70bb63692d3005c0e", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "4dd01488a41389273a58e1660f94f5d522f01cdaf3f897f85606a146bd60b3c3", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "6ef6cbd1b6bcf0acff8ff86797a808a19101a2ceb75db2f135d79c839e3b8431", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "27bfc4ef3296f54a2ed9943a0d85722c06fe61007b63cc35766c1e81fe94c0f4", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "3522db3982d27d0be6603ac4023b853a0ef92d437309ce40b16df2847ae32819", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "5f36b08821222bca8a7eaf4311da27f7d59fe5d1dd73dba8da24fc9c68ba2b5e", @@ -11283,7 +11283,7 @@ "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "32f5ac6f05fc705de2ae55ee79e1691d3468f0c7057a8349517848a17e4758ab", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "fe8f237c806211edf4c185422bc9bf550e930aebd3662ccf34d65cec64cee992", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "edeb80df93a903855e9cb593500f2e95475181e15105eb6f3b87e93f9d10c3b3", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "767ff11a76b0764d594646216e0de13b3852151e47abcac1ee816ee6417e853f", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "e7e6c4194531875582e598951941aba162fa637aa949ae001e32a52a5c7380c8", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "970f7bc441b701e62537ae6ad2be2537f443b0e8930a7a228e6fbace2e6526fd", "T3B1_cs_stellar-test_stellar.py::test_get_address[parameters0-result0]": "623540f73b76f80602d59ad71dfb5fcf22131693cea9a262d105469482b2058e", "T3B1_cs_stellar-test_stellar.py::test_get_address[parameters1-result1]": "a3a39e14281413785a2200024bd80f76f0fe87197f0939d0ea05294ab93d95ff", @@ -12616,7 +12616,7 @@ "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "5a914159e0fe36934587d7c9ce8a18d487489f3dec7ecfa980aff9cd5713429d", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "76d3f921550282edf70ff1eb03f38636d762e279dc10be659baffadabb85a02e", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "e732afa4114701a45ee5e370c0ac75269bb96f26ebbf1e72199b3bafc32e2d56", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "24477d57e0e71d99969f80a79ac3e4e5a706fa986441b48637dde5f91a904cd0", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "3497211370cdb01a5b5cf56ed4b12a0b73dedfa90768a6976f99b2b534610fa8", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "f8510f919c3d010d4149f5146aa404df41f31170a7644655f6a3a4683ff147ee", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "f0cf2d5cfa05773a2b2eedb11d32d186d34db7dbcda05601f35c7f12940d8193", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "4654563b314436d78b23bd4e1be0ca0c560ac6d5e54b687c6be907564b333747", @@ -12662,7 +12662,7 @@ "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "5a27dd6f5568b70f06c8870b110f1fc6ceb2074ba7d0a91c37027c8f82e47386", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "47f6387954c87d075ba331dede12ecd74d12bc7ae3ec6b40ea9d09e2f9d62edf", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "71689656c4fa6dde212593eb09ec345bb5948a1c0ea68377eb751a4a53b77eeb", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "f103e75aeedc948bf0eda36d9002bfc6a52fc8bf85fa85cce3242bec02fa60ea", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "52f2682a2b17ee0ce107df1f5cd5814ade3e7f2984683d33721f5ed93cefa938", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "930880cfe5c71263e9f1d5a293e0fd2530c6f8e0b819bae919d45b46736058da", "T3B1_de_stellar-test_stellar.py::test_get_address[parameters0-result0]": "eea127c54c5afba851ec93aa0eb61bf0911ade3db8629e921924178fd444c792", "T3B1_de_stellar-test_stellar.py::test_get_address[parameters1-result1]": "6c308f56f394fddf59496745747fb2b67ea9b73e4d96ad4aa551db13ec53308b", @@ -13995,7 +13995,7 @@ "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "a2cf2471d1a155efdf991c614e1712ff38737d16ad1f030fcad862d0b6ce2045", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "384bb04019678ea8d89261f113704c227f2156fed009aab3319104ebcbc12cea", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "6db07491b7502f4b9b96d6192b9ccd8e7d03fcb0887238875c36ca569042a73a", -"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "683d45d6b6c67fca6320a33d129d76bf677298e8ad0b0f72c96cc5756bc5fa2f", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "f4545bfc34d86a26bf37263b7f47f5fff52d2c7205043ba20b98b793a0c36a96", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "aae9c8e7bcb0a0b74df52015ac460d7da6ea352e9bf3da0eb8b1d8bee50c8c86", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "dc0d9aa17aedb272e5ec84e7490843f5326ee074974453cd4f5df635c5c1da8a", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "60ef9553cde0fcb49e5c7effb34f9d4e9eab513c80a0c30ad32963e1c4a483af", @@ -14041,7 +14041,7 @@ "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]": "3771f6b88d13df8a44fad8b0de126c955ad35ac91b55c97a12cc4002a92f5ae4", "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]": "9c76187bbcbf73ddd81f6e745b88ed0a6ea6a04af5c0d922612ca28a426d6147", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "fa6ec1c23d35127a15f9aae1d36a7ea2472c55339ac15653b89346a2a6b09b49", "T3B1_en_stellar-test_stellar.py::test_get_address[parameters0-result0]": "3973353235e0355bc1f7cf89de9aacfa2f3bb2d826e110f75175967057ec7289", "T3B1_en_stellar-test_stellar.py::test_get_address[parameters1-result1]": "d62aea2c3a2976aaff0635f6c03b071a54250ddd39c7089d333fbd6da70fb1aa", @@ -15374,7 +15374,7 @@ "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "7ce50cdf8d8b2b9401c1d241bc90ccfa0fdb046a63f3f7692602ffc3aa14288f", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "6344ab64785bdef2770529df6a315ff8ca158ddb56750fbd7561861eac07342a", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "e553777fff9cb9195606bf4fbee8168c6a0b172e8a07963519de456f6502472a", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "bd2a5180c8f5a6e4e8f155f8025a892fcc085599230b389680dea1ff286eafee", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "130740843619fe81636d6d909951793a37b416e0b8d052c7c8c751ecf67d956c", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "22fe72e3074520c4f38363e0817cc76db0e1e7b9d9b75f4b8068584f00994306", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "f21d5808954ae575fd90204f803a9bc232cf644ae8b8e8c329802fd33a45299d", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "be46246d176cf14dce6a6f2851e7f72dfbda86b5db0d3ab9a679bfde9de9270b", @@ -15420,7 +15420,7 @@ "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "06f37978fce68d8e35b6bfa188623667da195f04b88d2c288455619db48328a3", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "569018e6516bccd8c2b12fc9f52485dd3d3a7944ef7b3161299ae28610f523f9", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "b402695b52aac8759f6a795db44167439a6b6c26231935b022f7fff66a50a83b", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "f6adb39f55984e52a92770f64b2ce9400e2d66daa7d64ef0265d9067cfb9c2fd", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "b12f009cd75a44e8f2901763445243e2fbcc6559a5bbce1d0f222dd16ed2f9a1", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "8afee1af7327c57cf9c0d25194a75c5f7fc398b836a71555a01e40f2133356df", "T3B1_es_stellar-test_stellar.py::test_get_address[parameters0-result0]": "eed3d00ee710eabfda63673ce6ea71f673de5fafdd0126591ad006c97990d1c3", "T3B1_es_stellar-test_stellar.py::test_get_address[parameters1-result1]": "74a5dde7afb0b78708e0e926f1f89b7e0a5e29b6d7aeb512cc7193b2c1c113bd", @@ -16753,7 +16753,7 @@ "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "49a69f6f0878dcdbc69d1e712a0e90e386a2270f2f77d0083127ea8593366e4b", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "44741f9afe635ae1852cfa00b060169726b6113eb8b8d280bcc95243cbe54ebf", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "bb964ea35563636aa1c6de0da2108740fdf4045305d386f063fa71192f867dfa", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "827c704933cd52f0f1b9227eec5940dc5a3092a9f289ba07bc4269014298d94f", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "35a1073fcde71e01de3cbdf412a69de00635bad907edc8d82a01da2f3c333a37", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "0a5be34a2d7727a7ffd74e326bd99f1ebf88d40d1eee5d9986a3d7051fbfc215", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "8dfd9638d3d0f495ca94f66efa49173ddc2b7af5d74b9de0b4af41eb1628fd6c", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "20ad4f773886f39e82ceec186bf3fffaabb9908927023b34baa3d99e06e7e2cc", @@ -16799,7 +16799,7 @@ "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "2331e7f8dd3188d9bfd7392a024791f4dad81229210f924d607adb3f3ab2a16e", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "e146318ae7af1dd1029f44c34b09b5dc11ade7d8ed357afa893dd47f25cdd70f", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "06dcff22ca564d749ef6d1b71c68317deb4a62dca24ac0b55c9a8cdaa61e4a91", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "9111a31217191e4c2c483d0e086a8cb0c07ce1843ca53f5669ff6a7aa1cdb634", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "5a99b4bda0a11f0705a831a332db6295849fdbceeb5f877b43d7792f9fc94376", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "fdacd42d6b03dd7e36e7f583ec875d1cace32281dc55f428b4ee5ee7519864a1", "T3B1_fr_stellar-test_stellar.py::test_get_address[parameters0-result0]": "5f1e571c9266fb784178e334e0429e0a17297303d661de8c5161e6affdbc08f9", "T3B1_fr_stellar-test_stellar.py::test_get_address[parameters1-result1]": "ee27d004f74ee1ded7cad3cf85c4b0bdc02d5de9e4355b16dbe03c57f5b4e42e", @@ -18132,7 +18132,7 @@ "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "4e5c3f9d52ae914fd7a1fd49585c1c8465514621c44ae527b3a338cae3169fb4", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "aeaa5b6ba67d2929e05eeb8c63e70114a994d0ac2f1c716080164bcc3e6aaafe", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "7442ba59ead0c2a7b8ce9c33f63f270133ef74037476e0809c5ca87623f13a5c", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "9e87b471d0cff8a9bd77bfef8ca12545ffdba38742002b03d4e5e27e88d9b1f6", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "cd5b0ed0dcdb3bfa51857558ae1c9b3c75d8ed11929143de292f1ad9597798d6", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "da5384f5cabec0a8bac028d0da16c79a9f19b5545a1f21cabcc86aa4b4bee65f", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "95b5ef56e34e8d660bf0e6f3ef244775d24dc8b84a7cc63328057b5a5a32bbb6", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "92fe41c78e7d972fb8882ce36da75453d8ee68872781bb9788e90239f34dede9", @@ -18178,7 +18178,7 @@ "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "f290d1abc269b2c656fc68027bd3e05eeace57cc8f088415eac73e0c25c73b3d", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "f7573c295f08d39646ebc1ac61550096cd663ce5b6aa1d93c5ab3afc19ab2d3e", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "64a5c1f6e3d9316c1da580ea265fbb3ce53db853929cd8367921ac1b60e9c2b1", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "3702c473944d7a3a0f0a07e0e54904f0a4b33571d5855232d0a877b402f459e2", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "4d9b3986568295fbf7693305e44adb2bec5c7f2578b1cd356df61a7208860b6c", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "ccbd27d2be8bbe12f12ed7215daf0d14000c812e91ba7ed691bc01c9d4e3796d", "T3B1_pt_stellar-test_stellar.py::test_get_address[parameters0-result0]": "b17bf5d484f0a0f31a9aebdbfab6b768d2bce9108cf36dc781ad76c93fbdd2a0", "T3B1_pt_stellar-test_stellar.py::test_get_address[parameters1-result1]": "55aacb4189ecda7cc03ec7042c6f3e5a31b3ddbea99137b1ed2179bc2f10b186", @@ -19883,7 +19883,7 @@ "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "79ad31a5d564945867f69574944b4b346d776bd2d8a455dfb0eb5bc0e0a6e352", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "0ce2f0d4e5fed6c2ef7e1dc6df1b14d7018b6872720656ece14712d3314da66f", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "7c7e3b08aecffbc24c7f784baf20bfb225442b8988233b5f16b445afbd73c92e", -"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "8bf65f6003fdc7d59aed4ad246c918b84615f4b2c396be67bd43ae88b599a6a5", +"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "e57507f5200a7b969e92a18fce59571ab438cd427f976c46a34188836ff9f286", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "032e94cd0abbdc47e55b90edab2e990948fc90b5f5e35336ae5f91dca5996b0f", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "85870ab658c6b006449a143706d0cd3d162dc3006c39f535c136ab51eb129a70", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "8f0617e6df5816185056119a398d38c3b883a28e4866eaad352243c1d37585cf", @@ -19929,7 +19929,7 @@ "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "26f284c0b59928a236097304a1f371bca2f08f473e9fb8b32b383624e97ee3fd", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "934c558b37663c454e2ecf7b48ed4e7b196dcf276a214d0280e06350e733182c", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "c86eb99b29aca9d9d76a8489fea62b68b4e485352de518bef6eca52cd0a3e778", -"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "80a0cce79cff5f73447e2e791a7d9f7b0b90b1a99199b036d46ee1547dba475b", +"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "7904ccde4548d1c0949bd16e8dccbeb1331e9b080d9e838ff51f970a04e08ff1", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "4832b87373cbbe544887b32474acd0cfb2669f11e8bdc00c3bf9b19e2a42a029", "T3T1_cs_stellar-test_stellar.py::test_get_address[parameters0-result0]": "ed289a5a47105c3ea304bff7edc555c0201d830d0af70d5db1bbb1b1d3d6da3e", "T3T1_cs_stellar-test_stellar.py::test_get_address[parameters1-result1]": "132016f3bf78d9bfed056d8659b659f7e0fb237c9b3e58ae2d282e26e800b7e4", @@ -21282,7 +21282,7 @@ "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "77011f9b6eb9241011969b15f9e31d6eb6a16e4a25d56d121f7e6fab78bfc3af", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "1daa0ef28aa8d392b5edb7a910e54d12f622adbacc22f8660c740bd47636ca8e", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "81430dbb06a3bdfbdf6a62b638a89d807efd21936a97f48ef98d53042154a66f", -"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "b444ae8c506f886b27a4a4ae3988416fbd7395fb2899df76a51b746f3d744562", +"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "106dfdab63ffeb7e454630456b5c803e06e3c59bc8f73ced3c34a2e3ae540662", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "bd4bef720958d78ca504886c3e88a87c9f2f96653ccc0326c65c7054fb57a3d7", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "0374152c1300faa82e955c21b9d60d2401579f60c79a2e4c6b99049120b8f10e", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "8163a564855f5db5bac29d861099191b5e496da08b7ce5a27ab977bce534f188", @@ -21328,7 +21328,7 @@ "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "489b4317d8e41dac1cc042377003dee0634ce7b720c4a02569b31231909a8826", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "b1492badce949dcb3c1beb6574f7c596f8892504731d530f7bd9859b183d9243", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "fe26c5026852ad9b4b729c6acb04ebf640cd0fde7da15305378f3a8c2a659281", -"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "607b757684d2977a39efa132f69d43584aeb92ff8cfcadda6ed3c1efa8b14b7a", +"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "3c6004984c32c76550f4aae4267a142fa826b3fb1fdf87662702ec63ebda843a", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "1358c577b1b3dd7c73267b8a90769a859f26bbb2cca801ec94e1886fbf694ceb", "T3T1_de_stellar-test_stellar.py::test_get_address[parameters0-result0]": "5c147ee6983d0d895be7abb29ec8411d90af8438d5d21dda9761d888ca409bf6", "T3T1_de_stellar-test_stellar.py::test_get_address[parameters1-result1]": "d19746ff94e334a76f6883993657360c957e127be618e7b7d8baedf932f41dd3", @@ -22681,7 +22681,7 @@ "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "71984b7ae8ce886799e27798a01d7aaa313ee9de8ea3d54623954dd650269bab", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "d4bc040533e50a9416316fd2a0a6fda6785852e0ad7a418ad219a8a0b4f3bcc3", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "3bb89d6d13510ebb685e9534729992cade2faac538f3dafb6a9d87f1f24c8152", -"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "35b84622c8012d222514130a007a2f7dccfc05d657d1251a1729908bfeffbaef", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "b7fbcbc3f79380b3b2040df8967d735ec7896bc5b30a15fa989bf2d86c3771cf", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "668f3f3afeefbba67c9de9fde815c803d43add9f363070ca40c6ae8523a0ef21", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "c82c035b8f901467a6c978a83402ea551c12fa6f5d557266664cab5085f5832e", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "c791bb24007ad1e84acbcd99c41063f4f66351405409a6e20ca0a78546546712", @@ -22727,7 +22727,7 @@ "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "9f772ac50016e273ac10c672283fc8de3720b35c2d4ef916614b03b7c0826f16", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "17730b3a835475129f2fa16b72f7efdd469a1ebf3cccc622d2868ee6a806aaf2", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "9dce222c838c4622be6f84e9657f5a93c646345b40526d585b42443dcd504e47", -"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "8abdfef204199f9775dac2cd307c434bd3ce04882cc93eeb69702fd399770f36", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "ced24fc0ebebd367386966fb7786fced9a3543d73d6aef3901051d65486c2e25", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "5ccbfcf58a80f446b19986adf5ac08cbe542ea5f057e6e859541279990ae24f8", "T3T1_en_stellar-test_stellar.py::test_get_address[parameters0-result0]": "b567b7f540c2efa9fd7a7b0130e4675dac5bd3b8cc89a6144cb9df020b00be2a", "T3T1_en_stellar-test_stellar.py::test_get_address[parameters1-result1]": "227278abc25994a99b5c51800f7468c0ff3e57dca5e576e5c6c4dee45432ed5a", @@ -24080,7 +24080,7 @@ "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "d97226c7dcb62ca44acd0c867e4d87b4b868ad85d58f09a1975939492ef6b7f6", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "ad4d9d9308f7abad1152090719e2879f4d190007fa103c30ffba76790fb63806", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "7714ccb25215dbc0d0120fc810b6af4d2fb95df17a7f4d959f49e24c9da9b1db", -"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "fb2d1ff38012411b95bfef018129df2e4dc2c0446436e9dfdb25369ef082eed3", +"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "f7c342da4ddefd015fbb7eaf81bb81da0882eaaf9b27ef0b5fba3d96ab666844", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "dbf87dc866b92a96dc3af74a6863320a48fb353bbd243e3fe096004bfe9aa1cd", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "81afbe46f58bb7286c8d49171da2ebc47cda75fec59dbd235f7f8c0d9669fb4d", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "38991137a15e4012569354f5ce2d613286f21169f52f0c17589c2d87e5356a46", @@ -24126,7 +24126,7 @@ "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "c4ceef4220f66d7f634abdbab0afe14169e01fc26ad091fdef3b2a7f7cb00f0a", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "a1b8904dd3b45959563c944012b0a33effb510294c0fb8c1031d7c66109c7098", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "bf5b6db4346a628ae1a475cbd476b5647c9fa49cf6ca228c5826cd2363732b30", -"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "8bdbad6868dfdb430674c77e72d22428797b3aee163b55e2162971a959c85bc5", +"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "02a2c6ab932fbf050148ea0cfc0ee3531a7998b13fc6ca989f132646ee4ea2ef", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "8e3aac045c514c8e5209802d2c0ed3e3da279fce097120b176f173252dcecd14", "T3T1_es_stellar-test_stellar.py::test_get_address[parameters0-result0]": "e1bf36e3ed4b404968dc12afdf91b181227f991d57d74123fa33347c1910b76b", "T3T1_es_stellar-test_stellar.py::test_get_address[parameters1-result1]": "5383da5011a469a80a2041d1f721290e251789db5011d3a19c3809ac79abeb7d", @@ -25479,7 +25479,7 @@ "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "6589e15ebe91a5ec2d9292cfa8e73d9ae9fbfef998e8d7923f3ec191eaf7a0c2", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "ea6b95115f31019e6b3218121145779836eac377fbcd7fcacc6fc9d56ff4f1ff", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "a67045fd92ed629d2b67746384d61b90591aff7280f9c2203c927bee775f902e", -"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "a38d76c761a1132881bd015226c4e02714379d2fb19ee92b32799833cb252928", +"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "587d76698142c11aee6086b4beac48f44a4f02397e6e532cb61f9f34d21a3aaa", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "81d8764d7e3f7a4642aef0e6986a691c842207b2cc62ac2e57fcfc64bd537a40", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "6c98ffce484d001d9be2c61632d74d6765da29240a082b75c7d0228088422f9d", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "6a97dfaea30717eba22874cc0958e534c7f7b8bb5884348ad18989a43d122ddb", @@ -25525,7 +25525,7 @@ "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "0d5182d436d26bd04c92d1d749272ff404fc606d49dc308436ea81ec5e277ea9", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "fb51f0230828258d2d6998b5535fcd77f8835914428131cb9a6d0e6972b9505e", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "f002e1d09c13be4f8bf2e9332d8655a5a49866caec3d107ed03df36f1143192b", -"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "dd028052ed7558b279aeb85ad351254665c40698f1797b6def7b6e287f84ec41", +"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "f288a1ca6eae6fded77e78636403239f5dc2e60850f17ad885c52943dbc282ea", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "a0c87933c76c292649db4122a8b015ff7c7445c5b373be26d8321137d8a1f6ba", "T3T1_fr_stellar-test_stellar.py::test_get_address[parameters0-result0]": "a77a1f1cc8ce66662ed55ff49944a794e00a917726b3ee14f9b8143f4d6da956", "T3T1_fr_stellar-test_stellar.py::test_get_address[parameters1-result1]": "a9be8b1a2c232c0bc3fa4a3282bd2c99467fbbb9d78d4490fcc9704e0e0ceefe", @@ -26878,7 +26878,7 @@ "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "641b28f4bef404de90e79707bab3054b0b6f5453fa7405ff1a9f0762b458a3cf", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "751464c1152d2c3ad9aa68d715400a4aaf6f2ebed4a1a0f5d18db1501b410261", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "d49b37bc1dc9c57a97cb69ba71b968e65713c256a2c7dc3295c5b963ffde41fc", -"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "ac5c2973dd6cc140dc425c5cf44ca3123ba6a38b39cd2fcb8eda3939eac75fe9", +"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "96a9d0fd5d3e98806948be3f6276e27e6dcbf19c6aeef34a3e618939c70ca5d8", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "cfdedf4ff1573a12604f7a39c9b255ecd0d061e0765daa0f04868de50d0955a4", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "4ff780ddaf2727f8d4b6344b5d810db0c8c6b23317f441dc0aacdc6edd0592b7", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "b8291220de4dd5ccaf40b72437f08a7df1ff79347d6bc7e7d0f520addf619855", @@ -26924,7 +26924,7 @@ "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "5c3d6eef972032305b9cd3335ea72d3254456bb383d62ff83c3b63185f6646af", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "cb7389bb5df94bd9ae42df5160d52cf6839540a59f8992962b46c0be7a9d9a34", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "61a56f2fcf0ee4b4f592e6ecb1e0a51ef7aa3d2075cf97e06bfcf63cacebfda8", -"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "a66bc68dcd5fbf4323aa5b659544b11a9a0d2a122d5cace73ad63f715b3821a4", +"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "19614a0fb5bb4d7f17ebfbebda4c0eca78e58849ab22ee95fe83633ab9dccc5f", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "160855d9f1267defeefd3edbe74f883756cbdf753bd9e69d2899d1d30cf4c049", "T3T1_pt_stellar-test_stellar.py::test_get_address[parameters0-result0]": "6c6f1be574dc66200e31f1c43acbcb31f0f41bb7f483e8cfec3dcc1802564ff1", "T3T1_pt_stellar-test_stellar.py::test_get_address[parameters1-result1]": "629c09e4106c6923cd5882fa0a1924caf680101cdd0be391552672630a45b459", From da6d4afc7dbfb6967de82552a4fbc45c81c1f113 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Thu, 27 Feb 2025 16:55:38 +0200 Subject: [PATCH 05/13] fix(core): use `SwipeFlow::add_page` to save stack memory [no changelog] (cherry picked from commit bd496a9e95675e0f32ec316a8a56fc6f1739b1b8) --- core/embed/rust/src/ui/flow/swipe.rs | 12 ++++ .../ui/layout_delizia/flow/confirm_output.rs | 55 ++++++++++--------- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/core/embed/rust/src/ui/flow/swipe.rs b/core/embed/rust/src/ui/flow/swipe.rs index 1626f27f70..8cf6687d79 100644 --- a/core/embed/rust/src/ui/flow/swipe.rs +++ b/core/embed/rust/src/ui/flow/swipe.rs @@ -133,6 +133,18 @@ impl SwipeFlow { state: &'static dyn FlowController, page: impl FlowComponentDynTrait + 'static, ) -> Result { + self.add_page(state, page)?; + Ok(self) + } + + /// Add a page to the flow. + /// + /// Pages must be inserted in the order of the flow state index. + pub fn add_page( + &mut self, + state: &'static dyn FlowController, + page: impl FlowComponentDynTrait + 'static, + ) -> Result<&mut Self, error::Error> { debug_assert!(self.store.len() == state.index()); let alloc = GcBox::new(page)?; let page = gc::coerce!(FlowComponentDynTrait, alloc); diff --git a/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs b/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs index 884401df36..8697551773 100644 --- a/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs +++ b/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs @@ -274,12 +274,13 @@ pub fn new_confirm_output( .into_layout()? .one_button_request(ButtonRequest::from_num(br_code, br_name)); - SwipeFlow::new(&ConfirmOutputWithAmount::Address)? - .with_page(&ConfirmOutputWithAmount::Address, main_content)? - .with_page(&ConfirmOutputWithAmount::Amount, confirm_amount)? - .with_page(&ConfirmOutputWithAmount::Menu, content_main_menu)? - .with_page(&ConfirmOutputWithAmount::AccountInfo, account_content)? - .with_page(&ConfirmOutputWithAmount::CancelTap, get_cancel_page())? + let mut flow = SwipeFlow::new(&ConfirmOutputWithAmount::Address)?; + flow.add_page(&ConfirmOutputWithAmount::Address, main_content)? + .add_page(&ConfirmOutputWithAmount::Amount, confirm_amount)? + .add_page(&ConfirmOutputWithAmount::Menu, content_main_menu)? + .add_page(&ConfirmOutputWithAmount::AccountInfo, account_content)? + .add_page(&ConfirmOutputWithAmount::CancelTap, get_cancel_page())?; + flow } else if let Some(summary_items_params) = summary_items_params { // Summary let content_summary = summary_items_params @@ -344,45 +345,45 @@ pub fn new_confirm_output( .with_swipe(Direction::Right, SwipeSettings::immediate()) .map(super::util::map_to_choice); - let mut flow = SwipeFlow::new(&ConfirmOutputWithSummary::Main)? - .with_page(&ConfirmOutputWithSummary::Main, main_content)? - .with_page(&ConfirmOutputWithSummary::MainMenu, content_main_menu)? - .with_page(&ConfirmOutputWithSummary::MainMenuCancel, get_cancel_page())?; + let mut flow = SwipeFlow::new(&ConfirmOutputWithSummary::Main)?; + flow.add_page(&ConfirmOutputWithSummary::Main, main_content)? + .add_page(&ConfirmOutputWithSummary::MainMenu, content_main_menu)? + .add_page(&ConfirmOutputWithSummary::MainMenuCancel, get_cancel_page())?; if let Some(confirm_address) = confirm_address { let address_content = confirm_address.into_layout()?; - flow = flow.with_page(&ConfirmOutputWithSummary::AddressInfo, address_content)?; + flow.add_page(&ConfirmOutputWithSummary::AddressInfo, address_content)?; } else { // dummy page - this will never be shown since there is no menu item pointing to // it, but the page has to exist in the flow - flow = flow.with_page( + flow.add_page( &ConfirmOutputWithSummary::AddressInfo, Frame::left_aligned(TString::empty(), VerticalMenu::empty()) .map(|_| Some(FlowMsg::Cancelled)), )?; } - flow = flow - .with_page(&ConfirmOutputWithSummary::Summary, content_summary)? - .with_page(&ConfirmOutputWithSummary::SummaryMenu, content_summary_menu)? - .with_page( + flow.add_page(&ConfirmOutputWithSummary::Summary, content_summary)? + .add_page(&ConfirmOutputWithSummary::SummaryMenu, content_summary_menu)? + .add_page( &ConfirmOutputWithSummary::SummaryMenuCancel, get_cancel_page(), )? - .with_page(&ConfirmOutputWithSummary::FeeInfo, content_fee)? - .with_page(&ConfirmOutputWithSummary::Hold, content_hold)? - .with_page(&ConfirmOutputWithSummary::HoldMenu, content_hold_menu)? - .with_page(&ConfirmOutputWithSummary::HoldMenuCancel, get_cancel_page())? - .with_page(&ConfirmOutputWithSummary::AccountInfo, account_content)?; + .add_page(&ConfirmOutputWithSummary::FeeInfo, content_fee)? + .add_page(&ConfirmOutputWithSummary::Hold, content_hold)? + .add_page(&ConfirmOutputWithSummary::HoldMenu, content_hold_menu)? + .add_page(&ConfirmOutputWithSummary::HoldMenuCancel, get_cancel_page())? + .add_page(&ConfirmOutputWithSummary::AccountInfo, account_content)?; if let Some(confirm_extra) = confirm_extra { let extra_content = confirm_extra.into_layout()?; - flow = flow.with_page(&ConfirmOutputWithSummary::ExtraInfo, extra_content)? + flow.add_page(&ConfirmOutputWithSummary::ExtraInfo, extra_content)?; } flow } else { - SwipeFlow::new(&ConfirmOutput::Address)? - .with_page(&ConfirmOutput::Address, main_content)? - .with_page(&ConfirmOutput::Menu, content_main_menu)? - .with_page(&ConfirmOutput::AccountInfo, account_content)? - .with_page(&ConfirmOutput::CancelTap, get_cancel_page())? + let mut flow = SwipeFlow::new(&ConfirmOutput::Address)?; + flow.add_page(&ConfirmOutput::Address, main_content)? + .add_page(&ConfirmOutput::Menu, content_main_menu)? + .add_page(&ConfirmOutput::AccountInfo, account_content)? + .add_page(&ConfirmOutput::CancelTap, get_cancel_page())?; + flow }; Ok(res) From 9321227ddb225d8523e5bf2b232c0ea82b6dfa71 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Fri, 28 Feb 2025 12:06:29 +0200 Subject: [PATCH 06/13] fix(core): fix `ExtraInfo` menu cancellation [no changelog] (cherry picked from commit ac49c3e284d4546a82a091f2bec01102c02b86e3) --- core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs b/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs index 8697551773..32fac8f799 100644 --- a/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs +++ b/core/embed/rust/src/ui/layout_delizia/flow/confirm_output.rs @@ -165,7 +165,7 @@ impl FlowController for ConfirmOutputWithSummary { (Self::AccountInfo, FlowMsg::Cancelled) => Self::MainMenu.goto(), (Self::MainMenuCancel, FlowMsg::Cancelled) => Self::MainMenu.goto(), (Self::AddressInfo, FlowMsg::Cancelled) => Self::MainMenu.goto(), - (Self::ExtraInfo, FlowMsg::Info) => Self::SummaryMenu.goto(), + (Self::ExtraInfo, FlowMsg::Cancelled) => Self::SummaryMenu.goto(), (Self::Summary, FlowMsg::Info) => Self::SummaryMenu.goto(), (Self::SummaryMenu, FlowMsg::Choice(MENU_ITEM_CANCEL)) => { Self::SummaryMenuCancel.swipe_left() From 0b5dbcae1b670a0e923a2925916fa997e2eb4075 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Fri, 28 Feb 2025 12:00:10 +0200 Subject: [PATCH 07/13] feat(core): confirm multiple Solana Deactivate/Withdraw instructions [no changelog] (cherry picked from commit 1954c7cbc28f7a40ac6fff3e7541c5b2c4c05fec) --- .../solana/sign_tx.staking_transactions.json | 126 ++++++++++++++++++ core/src/apps/solana/layout.py | 15 +-- .../src/apps/solana/predefined_transaction.py | 35 ++--- core/src/trezor/ui/layouts/bolt/__init__.py | 17 ++- core/src/trezor/ui/layouts/caesar/__init__.py | 12 +- .../src/trezor/ui/layouts/delizia/__init__.py | 2 +- tests/ui_tests/fixtures.json | 96 ++++++++----- 7 files changed, 233 insertions(+), 70 deletions(-) diff --git a/common/tests/fixtures/solana/sign_tx.staking_transactions.json b/common/tests/fixtures/solana/sign_tx.staking_transactions.json index 749108b15f..892756c412 100644 --- a/common/tests/fixtures/solana/sign_tx.staking_transactions.json +++ b/common/tests/fixtures/solana/sign_tx.staking_transactions.json @@ -315,6 +315,65 @@ "expected_signature": "c0a704d4702248f2f9c9c5a6e5f17523ac7bf12546d1a1447a5af22b56fe1a62901fd0074f5d7560cfecea635aa7d3594c9c5fb124bf47ab376fae487bdedd0e" } }, + { + "description": "Multiple unstake instructions", + "parameters": { + "address": "m/44'/501'/0'/0'", + "construct": { + "version": null, + "header": { + "signers": 1, + "readonly_signers": 0, + "readonly_non_signers": 2 + }, + "accounts": [ + "14CCvQzQzHCVgZM3j9soPnXuJXh1RmCfwLVUcdfbZVBS", + "ATFXMD5cYiw9yHkvexgx3nf9LNSouEViB5BZBsgwunAv", + "Stake11111111111111111111111111111111111111", + "SysvarC1ock11111111111111111111111111111111", + "ComputeBudget111111111111111111111111111111", + "AeDJ1BqA7ruBbd6mEcS1QNxFbT8FQbiBVuN9NqK94Taq" + ], + "blockhash": "2p4rYZAaFfV5Uk5ugdG5KPNty9Uda9B3b4gWB8qnNqak", + "instructions": [ + { + "program_index": 4, + "accounts": {}, + "data": { + "instruction_id": 3, + "lamports": 8000 + } + }, + { + "program_index": 2, + "accounts": { + "delegated_stake_account": 1, + "clock_sysvar": 3, + "stake_authority": 0 + }, + "data": { + "instruction_id": 5 + } + }, + { + "program_index": 2, + "accounts": { + "delegated_stake_account": 5, + "clock_sysvar": 3, + "stake_authority": 0 + }, + "data": { + "instruction_id": 5 + } + } + ], + "luts": [] + } + }, + "result": { + "expected_signature": "b60391297924981ff312647ac63902b39fb22f76fd134c6ba57ffdd36966706c6ce5675d4ee82a1cdc567d15b0b4b4f6cdd6f98e4c0ab390013ff98d5fb39200" + } + }, { "description": "Claim instructions", "parameters": { @@ -366,6 +425,73 @@ "expected_signature": "4edf71d1b4d075c6717617ef43cd896a80153f418dbe4cca5e66ee9f27bd5652bec67d30ee9a14e3bd7062dd72ed619cf238e6f5538b150dae34d24bee650303" } }, + { + "description": "Multiple claim instructions", + "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": 0, + "clock_sysvar": 3, + "stake_history_sysvar": 4, + "withdrawal_authority": 0, + "lockup_authority": 0 + }, + "data": { + "instruction_id": 4, + "lamports": 1000000 + } + }, + { + "program_index": 2, + "accounts": { + "stake_account": 5, + "recipient_account": 0, + "clock_sysvar": 3, + "stake_history_sysvar": 4, + "withdrawal_authority": 0, + "lockup_authority": 0 + }, + "data": { + "instruction_id": 4, + "lamports": 1000000 + } + } + ], + "luts": [] + } + }, + "result": { + "expected_signature": "87a376794de2e69b6bd46b2f48081aa915d97139706a1fa9aef9d5efd95615bb1f71c8bc64155b2d602cb259a2ac5d3a91a0cc6d95afc0d573bcf17f2bbc2e09" + } + }, { "description": "Claim instructions with warning", "parameters": { diff --git a/core/src/apps/solana/layout.py b/core/src/apps/solana/layout.py index f68a60a724..bedd432500 100644 --- a/core/src/apps/solana/layout.py +++ b/core/src/apps/solana/layout.py @@ -435,7 +435,6 @@ async def confirm_unstake_transaction( fee: Fee, signer_path: list[int], blockhash: bytes, - deactivate: Instruction, ) -> None: from trezor.ui.layouts import confirm_solana_staking_tx @@ -445,10 +444,7 @@ async def confirm_unstake_transaction( account=_format_path(signer_path), account_path=address_n_to_str(signer_path), vote_account="", - stake_item=( - TR.solana__stake_account, - base58.encode(deactivate.delegated_stake_account[0]), - ), + stake_item=None, amount_item=_fee_summary(fee), fee_item=("", ""), fee_details=_fee_details(fee), @@ -460,7 +456,7 @@ async def confirm_claim_transaction( fee: Fee, signer_path: list[int], blockhash: bytes, - withdraw: Instruction, + total_amount: int, ) -> None: from trezor.ui.layouts import confirm_solana_staking_tx @@ -470,13 +466,10 @@ async def confirm_claim_transaction( account=_format_path(signer_path), account_path=address_n_to_str(signer_path), vote_account="", - stake_item=( - TR.solana__stake_account, - base58.encode(withdraw.stake_account[0]), - ), + stake_item=None, amount_item=( f"{TR.words__amount}:", - f"{format_amount(withdraw.lamports, 9)} SOL", + f"{format_amount(total_amount, 9)} SOL", ), fee_item=_fee_summary(fee), fee_details=_fee_details(fee), diff --git a/core/src/apps/solana/predefined_transaction.py b/core/src/apps/solana/predefined_transaction.py index 3d194ae7b1..5d9377f583 100644 --- a/core/src/apps/solana/predefined_transaction.py +++ b/core/src/apps/solana/predefined_transaction.py @@ -225,6 +225,8 @@ async def try_confirm_staking_transaction( ) instructions = transaction.get_visible_instructions() + if not instructions: + return False def _match_instructions(*expected_types: Type[Instruction]) -> bool: if len(instructions) != len(expected_types): @@ -271,33 +273,34 @@ async def try_confirm_staking_transaction( ) return True - if _match_instructions( - StakeProgramDeactivateInstruction, - ): + if all(map(StakeProgramDeactivateInstruction.is_type_of, instructions)): from .layout import confirm_unstake_transaction - (deactivate,) = instructions - if signer_public_key != deactivate.stake_authority[0]: - return False + for deactivate in instructions: + if signer_public_key != deactivate.stake_authority[0]: + return False await confirm_unstake_transaction( - fee=fee, signer_path=signer_path, blockhash=blockhash, deactivate=deactivate + fee=fee, signer_path=signer_path, blockhash=blockhash ) return True - if _match_instructions( - StakeProgramWithdrawInstruction, - ): + if all(map(StakeProgramWithdrawInstruction.is_type_of, instructions)): from .layout import confirm_claim_recipient, confirm_claim_transaction - (withdraw,) = instructions - if signer_public_key != withdraw.withdrawal_authority[0]: - return False - if signer_public_key != withdraw.recipient_account[0]: - await confirm_claim_recipient(withdraw.recipient_account[0]) + total_amount = 0 + for withdraw in instructions: + if signer_public_key != withdraw.withdrawal_authority[0]: + return False + if signer_public_key != withdraw.recipient_account[0]: + await confirm_claim_recipient(withdraw.recipient_account[0]) + total_amount += withdraw.lamports await confirm_claim_transaction( - fee=fee, signer_path=signer_path, blockhash=blockhash, withdraw=withdraw + fee=fee, + signer_path=signer_path, + blockhash=blockhash, + total_amount=total_amount, ) return True diff --git a/core/src/trezor/ui/layouts/bolt/__init__.py b/core/src/trezor/ui/layouts/bolt/__init__.py index a52470391d..5d71d92585 100644 --- a/core/src/trezor/ui/layouts/bolt/__init__.py +++ b/core/src/trezor/ui/layouts/bolt/__init__.py @@ -983,7 +983,7 @@ if not utils.BITCOIN_ONLY: account: str, account_path: str, vote_account: str, - stake_item: tuple[str, str], + stake_item: tuple[str, str] | None, amount_item: tuple[str, str], fee_item: tuple[str, str], fee_details: Iterable[tuple[str, str]], @@ -1003,14 +1003,17 @@ if not utils.BITCOIN_ONLY: info=True, ) + items = [ + (f"{TR.words__account}:", account), + (f"{TR.address_details__derivation_path}:", account_path), + ] + if stake_item is not None: + items.append(stake_item) + items.append(blockhash_item) + info_layout = trezorui_api.show_info_with_cancel( title=title, - items=( - (f"{TR.words__account}:", account), - (f"{TR.address_details__derivation_path}:", account_path), - stake_item, - blockhash_item, - ), + items=items, horizontal=True, ) diff --git a/core/src/trezor/ui/layouts/caesar/__init__.py b/core/src/trezor/ui/layouts/caesar/__init__.py index ad150ace98..5db4661a0e 100644 --- a/core/src/trezor/ui/layouts/caesar/__init__.py +++ b/core/src/trezor/ui/layouts/caesar/__init__.py @@ -953,7 +953,7 @@ if not utils.BITCOIN_ONLY: account: str, account_path: str, vote_account: str, - stake_item: tuple[str, str], + stake_item: tuple[str, str] | None, amount_item: tuple[str, str], fee_item: tuple[str, str], fee_details: Iterable[tuple[str, str]], @@ -966,12 +966,14 @@ if not utils.BITCOIN_ONLY: if not fee_label and not fee: amount_label = f"\n\n{amount_label}" - items = ( + items = [ (f"{TR.words__account}:", account), (f"{TR.address_details__derivation_path}:", account_path), - stake_item, - blockhash_item, - ) + ] + if stake_item is not None: + items.append(stake_item) + items.append(blockhash_item) + if vote_account: description = f"{description}\n{TR.solana__stake_provider}:" else: diff --git a/core/src/trezor/ui/layouts/delizia/__init__.py b/core/src/trezor/ui/layouts/delizia/__init__.py index ad0df13259..30424b6bc6 100644 --- a/core/src/trezor/ui/layouts/delizia/__init__.py +++ b/core/src/trezor/ui/layouts/delizia/__init__.py @@ -872,7 +872,7 @@ if not utils.BITCOIN_ONLY: account: str, account_path: str, vote_account: str, - stake_item: tuple[str, str], + stake_item: tuple[str, str] | None, amount_item: tuple[str, str], fee_item: tuple[str, str], fee_details: Iterable[tuple[str, str]], diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 55526032f4..879cae3846 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -2247,6 +2247,8 @@ "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "56f16f49977b14f453d7cb0de51c31aaefad893d79b6bc20db808af104f2bb5c", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "faa90ca171550b67c8794901d36b7a17fead06a109339d425b914a7109feaf22", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "d73bf4025c4a88382485ace2cf33a7700e02f45997c86240ffb0a028e1219482", +"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "53bca9a566d27c0af3f5591e4377bfbfe1d2b37a3271cd899c95761c226a310c", +"T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "2d11eb5c9a273279176d6e409b04f938930dac0f7e370abd4842686ff96402d5", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "a0dac9f7eb7089857fe8dd9e7637b2e757d475f552612ed0bf531f0d4168530f", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "b43b18c0b293d3a664b1f50fcc3005f5e5b93acb71e48e469bec9b5ce791157c", "T2T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "9cd4fcfb5624255de9f5ecf75bc67c787ea5d3553c33584fd9b34137a34495d4", @@ -3707,6 +3709,8 @@ "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "707e98a3a55d107898708098e498a0c18dae0a24eef263c9d1b7eaedfd6a8525", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "639a0ec644d7459434cc9578e1c0e76b6f2a9479ea6753b5618aff053d80876f", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "56271cfbd16f9eb5f93f1bb586462a6542664cd7f36285c4a3d3ec1c475b22ac", +"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "5e60bd559a8761e4e34a6b34060bf924bcb3cdfb3ddd0068c3d5d9e3485a3b08", +"T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "70eab0fa8551351c5363f87a2b48dfd3f34d55360d4a838a5b7558fcba4229c3", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "85369d7d4d4a675c548ff1710a1eca51048ac3ae679375b03091d336247b760f", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "66743bff5442f2791c153e4933ee3d4986b782f02c54e4039866db69df531779", "T2T1_de_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "a127074b6a50c03a471c33527df69d3808f67be64e2f692fd1f772c9d939ab25", @@ -5167,6 +5171,8 @@ "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "3395dd949bed8c6ee1d2ee92734fe5937f84ffd29d6586e1eaf97f79a0c323b0", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "c16c3812385c2e92107ab17e0699a21257511ba885681138bc27ee7756a4ce29", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "35d5a5f049541e8a0513523ab2ebae4fb8d3c21fe643cb2b3dfe796c2938d228", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "0768123aada21b89a938bb5701d2ced2f7a27a52a98fbfdea357e0db7b6b612f", +"T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "cf1b187032adf39e2289dbd87c2e8cc2629c9c691382b6c3c3fd46bf649217bf", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "a0434004b50a2be6a15c9967373e1268b809631deaf50d77033d8d22a936ba2a", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "f397d4e9b001f0672d7bdc8bee7f7a35e03de900d7a8a1fa9498f75371c72c33", "T2T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "35044d89a716f523b88267ee6c2758456caa6c62573f2a19da525a5c061d0ccb", @@ -6645,6 +6651,8 @@ "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "ef4f2123c3db6c0ca880f3a771ab55a6f481773dd7a2d98507753276ca06e208", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "e957b980f876cecbdf632821a0efead56d9c4a404db7d5c9044a992914f11717", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "e9fbdeaed93b810f6631777c1e0a0bdd23f1bca83b1bf57193888e9f12fe1f3d", +"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "651f513254923f1e9809f22c72b11fc4c6c6179eadf9c2de1a5ab1afcaac2833", +"T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "24500c24d2fa26870a97523b96f686d90d6065c0315308d9283363127824cb0e", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "622b330ea8963cff89550b92b616fa02b81c356f7f8d0cd080d905b05d96cf18", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "784fc73f3a138059991febb190442f27982e1eea8d5166a5d968851e3e350a72", "T2T1_es_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "d4afa1f35a6ab137d9e3d15f45438b20b640149b6d1584c56c297bb9aec37437", @@ -8105,6 +8113,8 @@ "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "a97807ad84432f0f8c42cd1863b6410644fd93b7ae8ac90526d25bf9f20c949d", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "da0e40ea9c2e1fd83c7579df025f7745c99f56e608424b3c7643e8890c99727d", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "a869a86af99ee1390f4ecfe279647d818f443f20f32c2fcb4266b887b171bac9", +"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "0e491f2c4b0b51a0cd88b38d930256d7d54e5417e1e449e6ec4f86cd5c2de4e4", +"T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "2d56d358825cb3910c11ad56f8945eea09de9ad008838ff3e008327e27c52df9", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "e172cc28efef94c8441c6ba4450ec93f3180f5d9d19fa84445387401edb68dbe", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "7e23fbef321ea3afbd3dcdc203d3ef149fbcbcdac06711bf6e6ae9afe30437a8", "T2T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "670e4665c885e8b699c5e883cbd3aebe9e886bcb8e7810768e1a93baeb522683", @@ -9565,6 +9575,8 @@ "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "6589e4b295417f94b7fbee567d9d06ec61a0a80aef0e7d12c8cdd62cea73a9ac", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "3edea928b549b92f12167824a9b1d5b0e3938fb54e3da41d43d1764e96f47179", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "8a80e763eb6b31342076ee6599868b9bf12bbde1c62c4b4d722c85016e16a964", +"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "62f385c70a505ce20c55ec73ed49f0e461bb0102ecf9955462f86d194f08877e", +"T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "465cf0c32205ad78dc30ab1a64bb18c4878cbb592f32064468a096f86c972d4c", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "21291d99ae3ad92d6d18fe512555976184cd8c27ea8dc7a3893401cc915abf49", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "f8d0f9a17ca08a9a31ca859b36e29b524679002df8424ea6769e75ef7c4e57ee", "T2T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "473051f0a018e3510cbdfd69cab1c233f49b24b4d0cf2653b5eeae3c12fab729", @@ -11225,8 +11237,8 @@ "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "6a407f717e5cbdb2ace9ecbd945ca8bb874f5b3615bb3654053277d5b7ecf75a", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "02fe8a47ac6526a5c470ff3730a8592733c067c1de53c68ecb1f118ff55567b2", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "d79cf2b1c591e31956df8614ac2c7adbe24a3f408d83945d04676f61c0522101", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "747993987c22339ff231fb099bf387b37e2a12270c4ab422ebd5d6c23ed00624", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "d39057f53434fc076eb537b824f6af9e375af48b7ccd00d8293eadf2dc42e9e5", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "174ebf157ee72e1575e3994c7a4711c37846a5391135f258fa714b506d41a7cb", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "2e8157ee44c4875bb2617bf0030167c2d434c0a9e1abd44f87cdd439fd2d8fe4", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "bd0878acbca1d2097db9c042200a03fb7629277a1a7ca1e3b2a6c38cf5107e07", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "5de3def0d7d2d0ab1d8ed6b42937de2d6c2f52a88a8a7e7912e8571810375ffa", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "a5d6a8a15a817fad8f7e4fb68ea5795e919bd8a5575557e402cc07d490f21d78", @@ -11237,7 +11249,7 @@ "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "7ab80ec6004404cd476f375afced49bbd5579e3740706707e2b3d655314e1520", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "c67259003dde8201373d7f752b9b7b59ba99dd4b8dac11d32c596a4818c957b7", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "886c1973ed22adafce7ded76c775606119d95756ef57ade70bb63692d3005c0e", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "6ef6cbd1b6bcf0acff8ff86797a808a19101a2ceb75db2f135d79c839e3b8431", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "0bf9af83ec89b2a421078761186ea7be96e5a077ec8bc6a5d30984e3e924dbe2", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "27bfc4ef3296f54a2ed9943a0d85722c06fe61007b63cc35766c1e81fe94c0f4", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "3522db3982d27d0be6603ac4023b853a0ef92d437309ce40b16df2847ae32819", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "5f36b08821222bca8a7eaf4311da27f7d59fe5d1dd73dba8da24fc9c68ba2b5e", @@ -11256,6 +11268,8 @@ "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "c067dabcc3e3812083cb1e76464f27bc5e8425b2965e67e4d321ad1219de7327", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "47879052abb93d39c686d4b04b7c7de471cfe5d05818103e7c7d94265b7eac78", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "cf86108bfd726dc1666f56a0d97147e6c19789ff0a6acd17bcd7fc4fa3557014", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "372b8e22080977f1b9fc7583ff2f003ef0bbaeaf12ded987e5ec371051f5bd14", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "5b1beded826c0758df00dcd9a62da7ed87f610b7501d19099d83287f48e2f5a5", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "fc322be60e7fcaff1cd12094fa3ca44854e2604404622020b6726391ab851d48", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "9a8ee05cd203116c39c40ae8ca9f38d273c09043d7964052de838040bc0b7984", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "8438f6668c5bf0290bb3b4e0ea64ca121dc28576cf4c423200f41f16b309da15", @@ -11281,9 +11295,9 @@ "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "6ef82c0252e40397fbbe54c50ec179a22ef7e472a5d140abe1c4596d577a7380", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "b6170e778b1deb7af305ea34cdf2e853acef27ed3ea00f4df1ad4f2bb741c522", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "32f5ac6f05fc705de2ae55ee79e1691d3468f0c7057a8349517848a17e4758ab", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "fe8f237c806211edf4c185422bc9bf550e930aebd3662ccf34d65cec64cee992", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "5b1beded826c0758df00dcd9a62da7ed87f610b7501d19099d83287f48e2f5a5", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "edeb80df93a903855e9cb593500f2e95475181e15105eb6f3b87e93f9d10c3b3", -"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "e7e6c4194531875582e598951941aba162fa637aa949ae001e32a52a5c7380c8", +"T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "17e625f7844130719cdcfb923e6d742da9b8567fc08416a3c4155018d4d06fa2", "T3B1_cs_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "970f7bc441b701e62537ae6ad2be2537f443b0e8930a7a228e6fbace2e6526fd", "T3B1_cs_stellar-test_stellar.py::test_get_address[parameters0-result0]": "623540f73b76f80602d59ad71dfb5fcf22131693cea9a262d105469482b2058e", "T3B1_cs_stellar-test_stellar.py::test_get_address[parameters1-result1]": "a3a39e14281413785a2200024bd80f76f0fe87197f0939d0ea05294ab93d95ff", @@ -12604,8 +12618,8 @@ "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "384f4764007ce29eac173202ca07b5b8b5aa6643a572525cabc4a62a7f99d5ef", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "c36396febc3d830227d91fbadae44f2283820afca0760f2ef8a74a3264f7667d", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "e66025382097cde57b1404269d22ed3d12b734a4cf979bd81d6e312cbf4458da", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "77cc2da353d29a2fae8facbd7de746c9dcfdf56f23319c595db8fde9cd7efc1e", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "a9e819252f582b0a19cbb7acad8c05fa7e382b9487226acd668c77f22c82ed5a", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "2c07b7fbdad3b5023316d72ebb4ffde8e55e4681d1edc2a2883c2dfa0bacc598", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "0199d7bf46bbdcf50664551ffa443b5f359ad4f4e77db1a1a350a0025b5a5595", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "bfeef1a50a5cef5e877f52b78dfc39984bdd4625ab93f01643c17596ca1e79ee", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "3bde63a4e9de6ec9febb2161dd6f6b7f5b3e5539e0c9c03634597707dbeee9f5", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "5e84ca155aec0cae43d580d5a673b1bd428bc9c56012afd97acfca5d01ee8e57", @@ -12616,7 +12630,7 @@ "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "5a914159e0fe36934587d7c9ce8a18d487489f3dec7ecfa980aff9cd5713429d", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "76d3f921550282edf70ff1eb03f38636d762e279dc10be659baffadabb85a02e", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "e732afa4114701a45ee5e370c0ac75269bb96f26ebbf1e72199b3bafc32e2d56", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "3497211370cdb01a5b5cf56ed4b12a0b73dedfa90768a6976f99b2b534610fa8", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "0a6317becc7474d64bacc040d55d4ec4a4de14fbf709bd9b8e99ca05e48c5cfc", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "f8510f919c3d010d4149f5146aa404df41f31170a7644655f6a3a4683ff147ee", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "f0cf2d5cfa05773a2b2eedb11d32d186d34db7dbcda05601f35c7f12940d8193", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "4654563b314436d78b23bd4e1be0ca0c560ac6d5e54b687c6be907564b333747", @@ -12635,6 +12649,8 @@ "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "32721d4a7bdb4cdcd4336a4c6fcf9688ff07231d77c66c9680503fb130de75c6", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "750bf2bdecf6c5122eeaca0c207e82a200b878854e4213362eef673e185865e1", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "5b3ec0a7f5dc0b3370083ebacdbde97efb1298399ce60e7ece4c05956f744bdb", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "12c9ab5cae5677ffdf5ab762cc1f4e34d2cbb951f2eb31a2318a904827b8fb44", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "357ef199fad129f962e93f12a46dbfca22a60a5ce0d0922e580a7f8b24ea1ca7", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "a88fb57b6f7817f340f2d23940179a10ce2ce63ead05e9621e9bbda6d5d810f8", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "d0254437d2f24bfbb3ee88f3bf7518ee91b916cda900ed577a1bd8adfbe5db15", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "ee65cd4533b53fd70bae1db55645d76927f2bca7c7999a88a3d3497e06222ddd", @@ -12660,9 +12676,9 @@ "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "f3894e603a73e362926f2bc267ce832b02a5aaecc3768030cbeaafceee915e5e", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "b3419ab5bbe63c3e44dca065c9dacbca58db8392a159bc763e240923a1cad703", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "5a27dd6f5568b70f06c8870b110f1fc6ceb2074ba7d0a91c37027c8f82e47386", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "47f6387954c87d075ba331dede12ecd74d12bc7ae3ec6b40ea9d09e2f9d62edf", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "357ef199fad129f962e93f12a46dbfca22a60a5ce0d0922e580a7f8b24ea1ca7", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "71689656c4fa6dde212593eb09ec345bb5948a1c0ea68377eb751a4a53b77eeb", -"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "52f2682a2b17ee0ce107df1f5cd5814ade3e7f2984683d33721f5ed93cefa938", +"T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "e4f1605bbff63f0b386586ce1b933fcdf3a89c5b2592c237d8241b0baecfd871", "T3B1_de_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "930880cfe5c71263e9f1d5a293e0fd2530c6f8e0b819bae919d45b46736058da", "T3B1_de_stellar-test_stellar.py::test_get_address[parameters0-result0]": "eea127c54c5afba851ec93aa0eb61bf0911ade3db8629e921924178fd444c792", "T3B1_de_stellar-test_stellar.py::test_get_address[parameters1-result1]": "6c308f56f394fddf59496745747fb2b67ea9b73e4d96ad4aa551db13ec53308b", @@ -13983,8 +13999,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]": "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[claim_instructions]": "ed28a693be5761be709c31371dd6ca3fbd5777afae4cc711050f0c8cfb6a8171", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "b4d90e51594caa23bf0ab95bf4ca4a6823f12177decb8ce0d9fcaa9cb81a8651", "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", @@ -13995,7 +14011,7 @@ "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "a2cf2471d1a155efdf991c614e1712ff38737d16ad1f030fcad862d0b6ce2045", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "384bb04019678ea8d89261f113704c227f2156fed009aab3319104ebcbc12cea", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "6db07491b7502f4b9b96d6192b9ccd8e7d03fcb0887238875c36ca569042a73a", -"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "f4545bfc34d86a26bf37263b7f47f5fff52d2c7205043ba20b98b793a0c36a96", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "0c13800f4bb66bc7a654f3b589c9d8f721e35f3ee033ffe15909bfe000224a58", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "aae9c8e7bcb0a0b74df52015ac460d7da6ea352e9bf3da0eb8b1d8bee50c8c86", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "dc0d9aa17aedb272e5ec84e7490843f5326ee074974453cd4f5df635c5c1da8a", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "60ef9553cde0fcb49e5c7effb34f9d4e9eab513c80a0c30ad32963e1c4a483af", @@ -14014,6 +14030,8 @@ "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "8310a241fd8d9e935f1eddbf8df4dbe4b9a65461c8c9a263a1656bd6d60b9821", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "edf61b82f8758f98f498b31f9e30492e969e39b6c887e5555c100f8368f552fc", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "13ba15d67dc4a9ef16b6b38f5cf60515adb6e310cfb33581dddd5bbcc5bd2d55", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "699423668a2f915d337514b0fb96bff9b74076e8c8761e510033cabd0a98aab8", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "5e808bc78e71368d6e7849909846f5fd903ceba0717a22c0b28e157737d6637f", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "e58e01cb15a584eb8bd3d00ab7fc0217d5775e00316fd5b4a305f75145aa1b87", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "30b0c891005070f807f6b8d657ff64ed908546cd93bc1f7523b57b0e1cf00c8c", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "75d65afe6c2011b7e3b7e3877493739f676aa4bad861620bfe5e5517bc66fb3f", @@ -14039,9 +14057,9 @@ "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]": "3771f6b88d13df8a44fad8b0de126c955ad35ac91b55c97a12cc4002a92f5ae4", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "5e808bc78e71368d6e7849909846f5fd903ceba0717a22c0b28e157737d6637f", "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]": "9c76187bbcbf73ddd81f6e745b88ed0a6ea6a04af5c0d922612ca28a426d6147", +"T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "9790a2b81b62a1de44fd59f4bac006111aff3aba60fee3a0e3c5659ba8c2764c", "T3B1_en_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "fa6ec1c23d35127a15f9aae1d36a7ea2472c55339ac15653b89346a2a6b09b49", "T3B1_en_stellar-test_stellar.py::test_get_address[parameters0-result0]": "3973353235e0355bc1f7cf89de9aacfa2f3bb2d826e110f75175967057ec7289", "T3B1_en_stellar-test_stellar.py::test_get_address[parameters1-result1]": "d62aea2c3a2976aaff0635f6c03b071a54250ddd39c7089d333fbd6da70fb1aa", @@ -15362,8 +15380,8 @@ "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "5f0e33334cbcdd9e21c9ec716e2376360e3f1fa21334ae3fa1c11ff5a8038f13", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "0f08b054779d243aae96f0b116b4f2cfc50527ab31901b11f5a2da13b4a58929", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "b9dfd48335674894049a135fc693418aec9a3d990ce73e87e319c9ce04b1806d", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "660125fe589c5db701b17e2bbbd0bbbf48d170335c8c112d6707ccea2d6391d8", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "cda375c296542c597f682924616be227f0e2a944cd096eba3c443417f4c08bb8", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "9ee295d2b4a82625f004d8a225f7be77a03458aefe7c666302ff64f71b3f861b", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "0fd9febb25f698781887bde293165fc8ee1a40fad50c6184dbac644015aa40a8", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "d1d660574830004cf4315e33090d059dda0e7356977cf813f41cdecedb576924", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "bedbc1cb477f0326a5074d9202a3a5b82d6805816dcc4a7b99fb9cd2162c8c3a", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "a5bf4da06bd6a11134644a41aebf986f7d7502d1307a9ff451f729732a5cb372", @@ -15374,7 +15392,7 @@ "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "7ce50cdf8d8b2b9401c1d241bc90ccfa0fdb046a63f3f7692602ffc3aa14288f", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "6344ab64785bdef2770529df6a315ff8ca158ddb56750fbd7561861eac07342a", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "e553777fff9cb9195606bf4fbee8168c6a0b172e8a07963519de456f6502472a", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "130740843619fe81636d6d909951793a37b416e0b8d052c7c8c751ecf67d956c", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "2b06a8ec1e1afb305dfc53347f0a86ca954a4095865647b62685b402f4f7f691", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "22fe72e3074520c4f38363e0817cc76db0e1e7b9d9b75f4b8068584f00994306", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "f21d5808954ae575fd90204f803a9bc232cf644ae8b8e8c329802fd33a45299d", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "be46246d176cf14dce6a6f2851e7f72dfbda86b5db0d3ab9a679bfde9de9270b", @@ -15393,6 +15411,8 @@ "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "e71ec545b7d0cf2535b8fed086b44b949d9839be021dd0969134bfb138479a70", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "333ba9d7e686b0aa6b5bf1e32200f90979656299eebb88d3c8d4acab67299aaf", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "9849ae55d5fec791728fa626df71b33bd3e0f9cfb38d36fdb558cb898bc291bb", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "ecf03f95d653d114e655d31a7ab93c4e9a503543728d69f8418017b032ff7bf7", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "a2edc3183e349586662b66cfdb466f083efa3aca420ab6ccde5b7cc3f62fc89e", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "3e1d604b97f7ca8cd3998605c96e77ab09b068ece7a709bee596cc0854c10dc5", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "5da0445d1ba2a569ce8ff0e775fb5680580920f118a6075815ea6814e2227cc4", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "8435ccbdb1602726fc7d91344ac24e60ccd4703351114306aeb2e0c4100f002d", @@ -15418,9 +15438,9 @@ "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "98efdd9bdc6056600bcb7b9f28c54987d652349c439cfcec8194eb7a1088e467", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "d9c1a281a4156ba19a67b76a38b2e20a49f2d31ab8f38d07e36fadbf88036beb", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "06f37978fce68d8e35b6bfa188623667da195f04b88d2c288455619db48328a3", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "569018e6516bccd8c2b12fc9f52485dd3d3a7944ef7b3161299ae28610f523f9", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "a2edc3183e349586662b66cfdb466f083efa3aca420ab6ccde5b7cc3f62fc89e", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "b402695b52aac8759f6a795db44167439a6b6c26231935b022f7fff66a50a83b", -"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "b12f009cd75a44e8f2901763445243e2fbcc6559a5bbce1d0f222dd16ed2f9a1", +"T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "006332413bb1fad9a988dc8adff18c72017c02b41b9562c51bb2a3e73186bd5a", "T3B1_es_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "8afee1af7327c57cf9c0d25194a75c5f7fc398b836a71555a01e40f2133356df", "T3B1_es_stellar-test_stellar.py::test_get_address[parameters0-result0]": "eed3d00ee710eabfda63673ce6ea71f673de5fafdd0126591ad006c97990d1c3", "T3B1_es_stellar-test_stellar.py::test_get_address[parameters1-result1]": "74a5dde7afb0b78708e0e926f1f89b7e0a5e29b6d7aeb512cc7193b2c1c113bd", @@ -16741,8 +16761,8 @@ "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "7296c1978ad49fce37ab220119b47cb058e6202994eb206dd320da06bf6e9769", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "67a56dbf9ee50a35b156a29d7531012fda537e49ef491fd829a3b859fc712d41", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "f4a48c52c9cb189f9c46be3bff90a0a78591650e96f560d09d72c445f3314f22", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "2a7ce87e040e35bee0264ab53f9af343247a993722f0bf187bebe2c3413705bb", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "6c80fa02f92020df0cb9672529d28d09d5d983780dc5908ab2ea171085da3ba0", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "71940e742ab56aabe171f865537b72156aa48b749a97134d5739e6166acdeed2", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "e06ed8ee4e80284c33ae60f92d047febfc19aba12b3698a9fb9ad838805b8841", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "8a9e58e0287a052f16fd3af6e8cd4b41e89302308ad5b8269320430c4a6c524d", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "9805873472a1644f03bc8c631063a83c54162c07d6ba66a66f8f8c513ad46b44", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "1ea3a79d751c84e376d14a1f0e8b71ea7b78f9180e5b9c33bc1b22e025a7ab8c", @@ -16753,7 +16773,7 @@ "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "49a69f6f0878dcdbc69d1e712a0e90e386a2270f2f77d0083127ea8593366e4b", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "44741f9afe635ae1852cfa00b060169726b6113eb8b8d280bcc95243cbe54ebf", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "bb964ea35563636aa1c6de0da2108740fdf4045305d386f063fa71192f867dfa", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "35a1073fcde71e01de3cbdf412a69de00635bad907edc8d82a01da2f3c333a37", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "dfb25ffc88030726384cab4196b330eac313b0be1d6b5f7b72cb5aa0ae67bfd1", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "0a5be34a2d7727a7ffd74e326bd99f1ebf88d40d1eee5d9986a3d7051fbfc215", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "8dfd9638d3d0f495ca94f66efa49173ddc2b7af5d74b9de0b4af41eb1628fd6c", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "20ad4f773886f39e82ceec186bf3fffaabb9908927023b34baa3d99e06e7e2cc", @@ -16772,6 +16792,8 @@ "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "cb68ebf28619e4e568b9124a55f80828e337f44e28c8521ad03fffff26eab47d", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "0bb110f81e9422dae0306190431913e335e045277b54f0f328528b1df06af600", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "35943def25757363b8fd435bea8b09bc67c287eb0161b504a30c61924d59f5c4", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "a68815d68d9250c2e53c980d3c03a56179d7ee95dfb53165b431c7501b452498", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "2ea2b73342666d67c0ea1a18e57af29fee03f5e07f80912452d90bc18db4f821", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "0e5af00a10af777402a822d0ad546c7a51b7ef189f2d60ef7ca539254ab3f4ca", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "5b75d3af9cfd34056b6da5032a0eb09459de88a205a3412a74eb4c831feba552", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "0e756bb408f0e39ad2e894509d1d9c0c7dd60653c26cb579a91be146b53e5cad", @@ -16797,9 +16819,9 @@ "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "e0ff61d32b70980d9b43460155027c91da7ee6b2f034f5bc325c3911fb631b99", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "d942ddb112b4855cf67e6f0b432218969717fc93371e7861acd12c1ad28db23f", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "2331e7f8dd3188d9bfd7392a024791f4dad81229210f924d607adb3f3ab2a16e", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "e146318ae7af1dd1029f44c34b09b5dc11ade7d8ed357afa893dd47f25cdd70f", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "2ea2b73342666d67c0ea1a18e57af29fee03f5e07f80912452d90bc18db4f821", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "06dcff22ca564d749ef6d1b71c68317deb4a62dca24ac0b55c9a8cdaa61e4a91", -"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "5a99b4bda0a11f0705a831a332db6295849fdbceeb5f877b43d7792f9fc94376", +"T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "543460b758995cf2382c4253aa26c702d67f8e1c40156c286a9237478e6d4108", "T3B1_fr_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "fdacd42d6b03dd7e36e7f583ec875d1cace32281dc55f428b4ee5ee7519864a1", "T3B1_fr_stellar-test_stellar.py::test_get_address[parameters0-result0]": "5f1e571c9266fb784178e334e0429e0a17297303d661de8c5161e6affdbc08f9", "T3B1_fr_stellar-test_stellar.py::test_get_address[parameters1-result1]": "ee27d004f74ee1ded7cad3cf85c4b0bdc02d5de9e4355b16dbe03c57f5b4e42e", @@ -18120,8 +18142,8 @@ "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[burn]": "7635ef08dac96b36208069b9d80b7fc65c4a8c867df579ef420005b13152873e", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked]": "f60acb50d19c6ff30f455da409853f4d961820c4a89c70241fc3f16c4fa0f8b0", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[burn_checked_-_multisig]": "be0d0f7a988238f080be8f772371a750fbb4eea51b520b4e9178a4cc3ea5f85f", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "916dee3f51c3aea0a0fa7b0307afaee2773183130e46795ba23cc78bf5df63dc", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "52a1b292b7fc565d150024aa45f9d1ef57d385adb4013cb218b1199d5e3f566a", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions]": "aefff4a923d5f0ec57b98f12a3534e0bfaf3764bc02a726c6f53ddeb3066e032", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[claim_instructions_with_warning]": "1e59e30693393ea5edf248bbb106b4d4c2e987166821544a59d7fde65767765c", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[close_account]": "504203a1472363dd343ff28da7208d4e74d8e0132475bc4dcf527127da051d08", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[close_account_-_multisig]": "ad32b6ce735d1499933a82e92a8d91b3e272a8cb93e2c179ecc39e84a7daaae6", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_account]": "19551e3135d6ae7d4da003d18c310b169ef214eaf316927bd4eb53f5538a57bb", @@ -18132,7 +18154,7 @@ "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account]": "4e5c3f9d52ae914fd7a1fd49585c1c8465514621c44ae527b3a338cae3169fb4", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_stake_account_with_compute_budget]": "aeaa5b6ba67d2929e05eeb8c63e70114a994d0ac2f1c716080164bcc3e6aaafe", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[create_token_account_and_transfer_token_-_predefined]": "7442ba59ead0c2a7b8ce9c33f63f270133ef74037476e0809c5ca87623f13a5c", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "cd5b0ed0dcdb3bfa51857558ae1c9b3c75d8ed11929143de292f1ad9597798d6", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[deactivate]": "92520f9fa3a2671402e3aed16593ca3d881d7e26538e4a02fd08815eebb05485", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[delegate]": "da5384f5cabec0a8bac028d0da16c79a9f19b5545a1f21cabcc86aa4b4bee65f", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account]": "95b5ef56e34e8d660bf0e6f3ef244775d24dc8b84a7cc63328057b5a5a32bbb6", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[freeze_account_-_multisig]": "92fe41c78e7d972fb8882ce36da75453d8ee68872781bb9788e90239f34dede9", @@ -18151,6 +18173,8 @@ "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "2b677ac5e3f750a50aab9a24dea4bf158f769c1b99d6f9a0d9899c8378c65276", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "1481c720cbbe9dd30c6532c3a643a5674a43cea34aeab538217723b5befcbbfa", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "da1b4cd7acebff6b43a00ce3db6503f1a23f95b0ac0bee1e055e283a5cda13ed", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "468936c602de41fda390e5646f1c67ca477fd8e47ee393410db386d30fe1871b", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "7d25cff1c101423c472609b3923ad7ffec653f553e1c407b29fd38ba81fb5303", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "f7796f3900f11835eaebb10b90097342a24135dcd2b81a564750a787f50a0b03", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "760dfd43a8a114d8cf39233ad3cbfde14e40d0566fbba3cd2c4a9b8736357ce6", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "551680f0bc7df6c4c19c8768f9597ad8a0a926254d00544447d8c73854fc401a", @@ -18176,9 +18200,9 @@ "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_compute_budget_without_heap_confirmation]": "a49e2f0df5fb5620f5bda3f88ad9928cd7fe3f6c68062800d357f557594b8218", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[transfer_with_seed]": "7407da8f73059a663c5c98e06bd0a6d45eeaed9075c848aa1b1693f1740b4744", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unknown_instruction]": "f290d1abc269b2c656fc68027bd3e05eeace57cc8f088415eac73e0c25c73b3d", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "f7573c295f08d39646ebc1ac61550096cd663ce5b6aa1d93c5ab3afc19ab2d3e", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[unstake_instructions]": "7d25cff1c101423c472609b3923ad7ffec653f553e1c407b29fd38ba81fb5303", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[upgrade_nonce]": "64a5c1f6e3d9316c1da580ea265fbb3ce53db853929cd8367921ac1b60e9c2b1", -"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "4d9b3986568295fbf7693305e44adb2bec5c7f2578b1cd356df61a7208860b6c", +"T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw]": "ea7f14a62d139c0391610915359e9acbb4e8b19b8c90796c5be63cec991852de", "T3B1_pt_solana-test_sign_tx.py::test_solana_sign_tx[withdraw_nonce_account]": "ccbd27d2be8bbe12f12ed7215daf0d14000c812e91ba7ed691bc01c9d4e3796d", "T3B1_pt_stellar-test_stellar.py::test_get_address[parameters0-result0]": "b17bf5d484f0a0f31a9aebdbfab6b768d2bce9108cf36dc781ad76c93fbdd2a0", "T3B1_pt_stellar-test_stellar.py::test_get_address[parameters1-result1]": "55aacb4189ecda7cc03ec7042c6f3e5a31b3ddbea99137b1ed2179bc2f10b186", @@ -19902,6 +19926,8 @@ "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "3db514baf8b11152288df06036bc63333ec1f2fc9ad23034d1af40bf4dda35ae", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "fd34c78d67d80c9e56783e666d4607f0f89edc4b99477a69bc6c4937ebac3896", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "c2728be503bd7741384bb3e4befeebaaa53b6cb6b0d1e68ae35e442333e66485", +"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "eb3fd2f242c0b975b24be5d029003dd06f3e50cab0281216b63e859134f3ccf5", +"T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "934c558b37663c454e2ecf7b48ed4e7b196dcf276a214d0280e06350e733182c", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "4499deed76fe4d4fc05253cdda4dec10b55f5eecadd1121e2a5c25e771186c3c", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "b27d29ca57369f453cf2d2b658c14b5e83914e1d515f3a63e2fbd9fa923c0b3c", "T3T1_cs_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "402791b57eaa5c9cabfa261562682e9949d81fdd5062cff7fefdda618c9bcb9d", @@ -21301,6 +21327,8 @@ "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "3ef106d3c7337388f0c756d898b4c7404dbd7b1a8dedc5cd6b9fa0a7f123b875", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "48e9a6f88e0be3c285dd1ab13afc704a210d752a7bc2ab38b914eb52b9099f8e", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "cb82978729633376eab20e6a402e1e7827a474ed8c575c809596dd02861f4bde", +"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "eb2acfbbcca2a6ea3fccafb03b55827ae2352a83596b99d55e3d25536ac4c4e0", +"T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "b1492badce949dcb3c1beb6574f7c596f8892504731d530f7bd9859b183d9243", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "d0e070b845171e11b90d0338464eee93fa7efa2fe69f0895805ad8e3afea32bd", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "f9fac77f62fef13dcc03bb9688f78f6e67dd662ed4968d59168c729f3898c7d1", "T3T1_de_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "6f1f3b28dc2cc54406954401eb9df5df9f65ca413f4e41be5e4137d46804b336", @@ -22700,6 +22728,8 @@ "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "c61b9ca9d78929c8ea30873e27e112fa7245aa89d735b1d53fe7afce12021bff", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "e37a4f0b0f98f7b40cfc44d59e70938d80d74cb0d3f5b2b89d3d4d2b069fa7ec", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "56ea73d61aad9ac5af0492458db1f764e8542aa5588ff4964ae45084befa5b46", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "d7e67dfe5eb101938ede81b4816be1f91cda404c2401c4fd4ee0d35510a1470d", +"T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "17730b3a835475129f2fa16b72f7efdd469a1ebf3cccc622d2868ee6a806aaf2", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "bc4126ea9622caf7c29486e2c48d7e449c2d7baf1d3c35ce56cde12912d9c971", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "079991cc128ddb34538ff841d60d5f44b9b4da3a918129c38b9c787563535d8a", "T3T1_en_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "165b2f49e0164eede865edc7140741546c1b3d8cabcac1914a2c45c3bb6ee9b3", @@ -24099,6 +24129,8 @@ "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "71285424b589a1b75d064cd9e179456df70173f71951c14dd1aa738abc516c23", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "16321d04e523eb01b76bb0e63c381f158aa0cbc6241c109340f79c64993092f6", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "8c4a786d68bb519f67ca6c6f03fec88c2187222f435756182881fb08d19317be", +"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "79bbee47a2f3b63ae83e2f0aef9bb17f4b4313f0763d504368c68d05cfce25c1", +"T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "a1b8904dd3b45959563c944012b0a33effb510294c0fb8c1031d7c66109c7098", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "8b3b8bf1bb175ac12c7cf0f439838622436d2ea8d522679a781f71335d3c718c", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "7ffdf3dd37b33d2063ed2e7cf02a0dd0e09c7cdbb0b1067766e0e7e46b618bee", "T3T1_es_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "599fc4885260939ecc2dee62704f8983aa67e79bc876ab261acf99837535f0f4", @@ -25498,6 +25530,8 @@ "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "ce5cfd8de7f4bfb21b1843161e096cf845349a51aae7eeb05987aa5285f52a9c", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "a7713890e55754769e6a0769a3239a6a1d9d5e0650c0a00edf043aa6c6e7c59a", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "01f844e1fd0b7df4762a0351099b8d82c68cbe573bbe6f3048f763cd0cdfa2da", +"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "826a69d706b249c06360661e326d5e6fb1ebf2193173428bd21d6e20f5aeb78b", +"T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "fb51f0230828258d2d6998b5535fcd77f8835914428131cb9a6d0e6972b9505e", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "5a23ca913ecd08561c16ff6ce622f0b13cc7ad7fd4169eb472f4ce66ebf33bf9", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "8818b64ca24c83c9005e38add6f571a9d2c7b1c933361f0ba137dee841911f3e", "T3T1_fr_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "740c6967d133acc44601b8ddcfea27a8f83951542f30606141b7dec890623c3a", @@ -26897,6 +26931,8 @@ "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to]": "6649c54ccec67616a8bc36e8eeb25bd28ee4d6460c0fc7f7fee23f65a378595e", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked]": "aa288428fd37fe6df295e51126ae7a1ea606c5b4d051e4fe1c7ea0e4c58e3a7e", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[mint_to_checked_-_multisig]": "be87cfeaa787ef446f81a847e8c1c297dc52b16a6b30724f15ca9b251fe5805f", +"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_claim_instructions]": "ad87a51a40c82e3297e14ef93727f06ecff612f482485cc7a69b1e5aab17996a", +"T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[multiple_unstake_instructions]": "cb7389bb5df94bd9ae42df5160d52cf6839540a59f8992962b46c0be7a9d9a34", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke]": "3dcafc8b191bd69309a1a60e7018912a0001bc9c41bd1752142915ec1e7cbecc", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[revoke_-_multisig]": "ad07b7b81dc3eae012ffe4beb1838fda14d1adc5bf9ff5abd7e810c0aaeb34ca", "T3T1_pt_solana-test_sign_tx.py::test_solana_sign_tx[set_authority]": "dc0b46d09f2b4f5283aae0f3221d5e870fe4cbc8b6e29d8b3c9dc8572e00cff8", From a77f1f1a99a28fa615ac2d5df8e7feba48a4b836 Mon Sep 17 00:00:00 2001 From: tychovrahe Date: Fri, 28 Feb 2025 11:27:03 +0100 Subject: [PATCH 08/13] fix(core): fix jump to old bootloader Initialize systick before jump, as the old bootloaders may not initialize systick on start and rely on systick running from boardloader or firmware. Only relevant for F4, otherwise we are jumping through reset. [no changelog] (cherry picked from commit 0536ed6f50987290a8a5039a0ee1721e7d5f1d21) --- core/embed/sys/startup/stm32/bootutils.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/embed/sys/startup/stm32/bootutils.c b/core/embed/sys/startup/stm32/bootutils.c index aeae943ac9..1cedd54ea4 100644 --- a/core/embed/sys/startup/stm32/bootutils.c +++ b/core/embed/sys/startup/stm32/bootutils.c @@ -168,6 +168,10 @@ static void reboot_with_args_phase_2(uint32_t arg1, uint32_t arg2) { if (command == BOOT_COMMAND_NONE) { NVIC_SystemReset(); } else { +#ifndef FIXED_HW_DEINIT + SysTick_Config(HAL_RCC_GetSysClockFreq() / 1000U); + NVIC_SetPriority(SysTick_IRQn, 0); +#endif jump_to_vectbl(BOOTLOADER_START + IMAGE_HEADER_SIZE, command); } #else From 7614a29c9a9cc138fff446937b7d9489fd57821f Mon Sep 17 00:00:00 2001 From: Martin Milata Date: Thu, 27 Feb 2025 11:20:12 +0100 Subject: [PATCH 09/13] ci: build T2B1 firmware for release branches (cherry picked from commit d0fddeca9f4367b7d638dd62af1ae45ff6ccb230) --- .github/workflows/core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index e800bdd363..b3ed8bba1a 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -54,7 +54,7 @@ jobs: strategy: fail-fast: false matrix: - model: [T2T1, T3B1, T3T1, T3W1] + model: ${{ fromJSON(startsWith(github.ref, 'refs/heads/release/') && '["T2B1", "T2T1", "T3B1", "T3T1", "T3W1"]' || '["T2T1", "T3B1", "T3T1", "T3W1"]') }} coins: [universal, btconly] type: ${{ fromJSON(github.event_name == 'schedule' && '["normal", "debuglink", "production"]' || '["normal", "debuglink"]') }} include: From 5f94715ca7b1e880a179cf230a9b0f6f225edd36 Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 3 Mar 2025 15:02:21 +0100 Subject: [PATCH 10/13] fix(core/rust): correctly extend SwipeAttach animation duration so that it covers the interval from the Attach event until timer running out. Without this change, it is possible to slip in a TouchStart event before the animation timer has had a chance to start, and lose the matching TouchEnd. (cherry picked from commit f59deebfbafa9e019e4ef32a470413d4548817fc) --- .../layout_delizia/component/swipe_content.rs | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/core/embed/rust/src/ui/layout_delizia/component/swipe_content.rs b/core/embed/rust/src/ui/layout_delizia/component/swipe_content.rs index 12dd34232e..073fdd7c1d 100644 --- a/core/embed/rust/src/ui/layout_delizia/component/swipe_content.rs +++ b/core/embed/rust/src/ui/layout_delizia/component/swipe_content.rs @@ -17,7 +17,11 @@ use crate::{ #[derive(Default, Clone)] pub struct SwipeAttachAnimation { - pub timer: Stopwatch, + /// Animation timer for time elapsed since the first animation frame tick + /// after the attach event. Stopped state indicates animation initial + /// state; after the animation duration elapses, the stopwatch continues + /// to run. + timer: Stopwatch, pub attach_type: Option, pub show_attach_anim: bool, } @@ -33,13 +37,20 @@ impl SwipeAttachAnimation { } } + /// Checks if the attach animation is active. + /// + /// The animation is considered "active" from attach event (timer stopped), + /// through the first animation frame (timer started), until the timer + /// exceeds animation duration. pub fn is_active(&self) -> bool { if animation_disabled() { return false; } - self.timer - .is_running_within(Duration::from_millis(Self::DURATION_MS)) + !self.timer.is_running() + || self + .timer + .is_running_within(Duration::from_millis(Self::DURATION_MS)) } pub fn eval(&self) -> f32 { @@ -93,14 +104,19 @@ impl SwipeAttachAnimation { u8::lerp(0, 255, value.eval(t)) } - pub fn start(&mut self) { - self.timer.start(); - } - - pub fn reset(&mut self) { + /// Reset the animation to initial state. + fn reset(&mut self) { self.timer = Stopwatch::new_stopped(); } + /// Lazily start the animation. + /// + /// Attach event will reset but not start the timer; the timer is started by + /// the first animation frame, to avoid any discontinuity in case Attach + /// precedes the first animation frame by a noticeable interval. + /// + /// While the animation is active, that is, from the first Attach to until + /// the timer runs out, no touch events are allowed through. pub fn lazy_start( &mut self, ctx: &mut EventCtx, From fad9682201cf9289bba2adb66e6e07ed1cf78936 Mon Sep 17 00:00:00 2001 From: obrusvit Date: Mon, 3 Mar 2025 14:58:03 +0100 Subject: [PATCH 11/13] fix(core): fix delizia set brightness setting [no changelog] (cherry picked from commit 55101b8013c8e7041f4209540e8787fdc6e66cb4) --- .../src/ui/layout_delizia/component/frame.rs | 7 +++- .../component/number_input_slider.rs | 38 ++++++------------- .../ui/layout_delizia/flow/set_brightness.rs | 22 ++++++++++- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/core/embed/rust/src/ui/layout_delizia/component/frame.rs b/core/embed/rust/src/ui/layout_delizia/component/frame.rs index 4bc2539bdf..0eee6ad6b5 100644 --- a/core/embed/rust/src/ui/layout_delizia/component/frame.rs +++ b/core/embed/rust/src/ui/layout_delizia/component/frame.rs @@ -89,7 +89,7 @@ pub struct Frame { header: Header, header_update_fn: Option, footer: Option>, - footer_update_fn: Option, + footer_update_fn: Option)>, swipe: SwipeConfig, horizontal_swipe: HorizontalSwipe, margin: usize, @@ -234,7 +234,10 @@ where self } - pub fn register_footer_update_fn(mut self, f: fn(&T, &mut EventCtx, &mut Footer)) -> Self { + pub fn register_footer_update_fn( + mut self, + f: fn(&T, &mut EventCtx, &mut Footer<'static>), + ) -> Self { self.footer_update_fn = Some(f); self } diff --git a/core/embed/rust/src/ui/layout_delizia/component/number_input_slider.rs b/core/embed/rust/src/ui/layout_delizia/component/number_input_slider.rs index ffa6161035..c520ff7f73 100644 --- a/core/embed/rust/src/ui/layout_delizia/component/number_input_slider.rs +++ b/core/embed/rust/src/ui/layout_delizia/component/number_input_slider.rs @@ -1,7 +1,6 @@ -use super::{theme, Footer}; +use super::theme; use crate::{ - strutil::{ShortString, TString}, - translations::TR, + strutil::ShortString, ui::{ component::{paginated::SinglePage, Component, Event, EventCtx}, constant::screen, @@ -18,7 +17,6 @@ pub enum NumberInputSliderDialogMsg { pub struct NumberInputSliderDialog { area: Rect, input: NumberInputSlider, - footer: Footer<'static>, min: u16, max: u16, val: u16, @@ -30,10 +28,6 @@ impl NumberInputSliderDialog { Self { area: Rect::zero(), input: NumberInputSlider::new(min, max, init_value), - footer: Footer::new::>( - TR::instructions__swipe_horizontally.into(), - Some(TR::setting__adjust.into()), - ), min, max, val: init_value, @@ -44,6 +38,14 @@ impl NumberInputSliderDialog { pub fn value(&self) -> u16 { self.input.value } + + pub fn init_value(&self) -> u16 { + self.init_val + } + + pub fn touching(&self) -> bool { + self.input.touching + } } const INPUT_AREA_HEIGHT: i16 = 91; @@ -54,12 +56,7 @@ impl Component for NumberInputSliderDialog { fn place(&mut self, bounds: Rect) -> Rect { self.area = bounds; - let whole_area = self.area.inset(Insets::bottom(theme::SPACING)); - let (remaining, footer_area) = whole_area.split_bottom(self.footer.height()); - self.footer.place(footer_area); - let content_area = remaining; - - let used_area = content_area + let used_area = bounds .inset(Insets::sides(theme::SPACING)) .inset(Insets::bottom(theme::SPACING)); @@ -77,18 +74,6 @@ impl Component for NumberInputSliderDialog { fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option { let msg_opt = self.input.event(ctx, event); - if self.val == self.init_val || self.input.touching { - self.footer - .update_instruction(ctx, TR::instructions__swipe_horizontally); - self.footer.update_description(ctx, TR::setting__adjust); - ctx.request_paint(); - } else { - self.footer - .update_instruction(ctx, TR::instructions__tap_to_continue); - self.footer.update_description(ctx, TR::setting__apply); - ctx.request_paint(); - } - msg_opt.map(|value| { self.val = value; Self::Msg::Changed(value) @@ -97,7 +82,6 @@ impl Component for NumberInputSliderDialog { fn render<'s>(&'s self, target: &mut impl Renderer<'s>) { self.input.render(target); - self.footer.render(target); } } diff --git a/core/embed/rust/src/ui/layout_delizia/flow/set_brightness.rs b/core/embed/rust/src/ui/layout_delizia/flow/set_brightness.rs index d25aea4ea6..c687befef6 100644 --- a/core/embed/rust/src/ui/layout_delizia/flow/set_brightness.rs +++ b/core/embed/rust/src/ui/layout_delizia/flow/set_brightness.rs @@ -6,12 +6,13 @@ use crate::{ translations::TR, trezorhal::display, ui::{ - component::{swipe_detect::SwipeSettings, FlowMsg}, + component::{swipe_detect::SwipeSettings, EventCtx, FlowMsg}, flow::{ base::{Decision, DecisionBuilder as _}, FlowController, SwipeFlow, }, geometry::Direction, + layout_delizia::component::Footer, }, }; @@ -63,6 +64,20 @@ impl FlowController for SetBrightness { static BRIGHTNESS: AtomicU8 = AtomicU8::new(0); +fn footer_update_fn( + content: &NumberInputSliderDialog, + ctx: &mut EventCtx, + footer: &mut Footer<'static>, +) { + if content.value() == content.init_value() || content.touching() { + footer.update_instruction(ctx, TR::instructions__swipe_horizontally); + footer.update_description(ctx, TR::setting__adjust); + } else { + footer.update_instruction(ctx, TR::instructions__tap_to_continue); + footer.update_description(ctx, TR::setting__apply); + } +} + pub fn new_set_brightness(brightness: Option) -> Result { let brightness = brightness.unwrap_or(theme::backlight::get_backlight_normal()); let content_slider = Frame::left_aligned( @@ -76,6 +91,11 @@ pub fn new_set_brightness(brightness: Option) -> Result { .with_subtitle(TR::homescreen__settings_subtitle.into()) .with_menu_button() .with_swipe(Direction::Up, SwipeSettings::default()) + .with_footer( + TR::instructions__swipe_horizontally.into(), + Some(TR::setting__adjust.into()), + ) + .register_footer_update_fn(footer_update_fn) .map(|msg| match msg { NumberInputSliderDialogMsg::Changed(n) => { display::backlight(n as _); From 813620a4c5e413fac81392b19de6c77a410217e2 Mon Sep 17 00:00:00 2001 From: obrusvit Date: Thu, 6 Mar 2025 16:10:20 +0100 Subject: [PATCH 12/13] chore(core): include signed translations for 2.8.9 --- core/translations/signatures.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/translations/signatures.json b/core/translations/signatures.json index ab8022461c..8d7c883d6b 100644 --- a/core/translations/signatures.json +++ b/core/translations/signatures.json @@ -5,6 +5,13 @@ "commit": "ba8a64d3e42febd344f60f039b6ac21ffb36aa9c" }, "history": [ + { + "signature": "03a0f2df5f468356b0444a24050a60789bff459a90328533b0aa9693666ca3145c8df72adc23f5b7a52d0814ef58c44ebec0b4f4482d12fa137b6c9a8858374209", + "version": "2.8.9.0", + "merkle_root": "1754d367a3f9796a460e21677a38465ac51110a5abaae96a8977e64cd3d35e27", + "datetime": "2025-03-06T15:09:54.012864", + "commit": "fad9682201cf9289bba2adb66e6e07ed1cf78936" + }, { "signature": "03f88fe2c1bd552869efcd6c52b0aa8e5b7bc806faa221a678db173de3324b164e762dc0be44a55ee1c6331d5bd7970772178cdfc20c0e532e89e038436769680c", "version": "2.8.8.0", From 10b552bc81b9a7ac91cb48380cc9a2221c0d1659 Mon Sep 17 00:00:00 2001 From: obrusvit Date: Thu, 6 Mar 2025 17:23:11 +0100 Subject: [PATCH 13/13] chore: update releases.json --- common/releases.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/releases.json b/common/releases.json index 64871612c7..2f55bdf725 100644 --- a/common/releases.json +++ b/common/releases.json @@ -79,6 +79,7 @@ "2.8.1": ["T2T1", "T3T1"], "2.8.3": ["T3B1", "T3T1"], "2.8.7": ["T2B1", "T2T1", "T3B1", "T3T1"], - "2.8.8": ["T2T1"] + "2.8.8": ["T2T1"], + "2.8.9": ["T2B1", "T2T1", "T3B1", "T3T1"] } }