From 6da38f4cf36e1f2950784ea4cc998f016c0f34f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ioan=20Biz=C4=83u?= Date: Thu, 12 Sep 2024 15:56:07 +0200 Subject: [PATCH] feat(core): show account info in ETH send/stake flow --- core/.changelog.d/3536.fixed | 1 + .../ui/model_mercury/flow/confirm_output.rs | 1 + core/src/apps/ethereum/helpers.py | 16 ++ core/src/apps/ethereum/layout.py | 42 ++++- core/src/apps/ethereum/sign_tx.py | 9 +- .../src/trezor/ui/layouts/mercury/__init__.py | 12 +- core/src/trezor/ui/layouts/tr/__init__.py | 4 + core/src/trezor/ui/layouts/tt/__init__.py | 4 + tests/ui_tests/fixtures.json | 144 +++++++++--------- 9 files changed, 149 insertions(+), 84 deletions(-) create mode 100644 core/.changelog.d/3536.fixed diff --git a/core/.changelog.d/3536.fixed b/core/.changelog.d/3536.fixed new file mode 100644 index 0000000000..f52cef4907 --- /dev/null +++ b/core/.changelog.d/3536.fixed @@ -0,0 +1 @@ +[T3T1] Show account info in ETH send/stake flow. diff --git a/core/embed/rust/src/ui/model_mercury/flow/confirm_output.rs b/core/embed/rust/src/ui/model_mercury/flow/confirm_output.rs index 6c215eafdf..09756d7495 100644 --- a/core/embed/rust/src/ui/model_mercury/flow/confirm_output.rs +++ b/core/embed/rust/src/ui/model_mercury/flow/confirm_output.rs @@ -163,6 +163,7 @@ impl FlowState for ConfirmOutputWithSummary { (Self::MainMenu, FlowMsg::Choice(MENU_ITEM_CANCEL)) => { Self::MainMenuCancel.swipe_left() } + (Self::AccountInfo, FlowMsg::Cancelled) => Self::MainMenu.swipe_right(), (Self::MainMenuCancel, FlowMsg::Cancelled) => Self::MainMenu.swipe_right(), (Self::AddressInfo, FlowMsg::Info) => Self::MainMenu.transit(), (Self::Summary, FlowMsg::Info) => Self::SummaryMenu.transit(), diff --git a/core/src/apps/ethereum/helpers.py b/core/src/apps/ethereum/helpers.py index 7ce265d1af..09a9343691 100644 --- a/core/src/apps/ethereum/helpers.py +++ b/core/src/apps/ethereum/helpers.py @@ -195,6 +195,22 @@ def format_ethereum_amount( return f"{amount} {suffix}" +def get_account_and_path(address_n: list[int]) -> tuple[str | None, str | None]: + from apps.common import paths + + from .keychain import PATTERNS_ADDRESS + + if not address_n or len(address_n) < 2: + return (None, None) + + slip44_id = address_n[1] # it depends on the network (ETH vs ETC...) + + account = paths.get_account_name("ETH", address_n, PATTERNS_ADDRESS, slip44_id) + account_path = paths.address_n_to_str(address_n) + + return (account, account_path) + + def _from_bytes_bigendian_signed(b: bytes) -> int: negative = b[0] & 0x80 if negative: diff --git a/core/src/apps/ethereum/layout.py b/core/src/apps/ethereum/layout.py index 20bd76cb7f..8f88d9f802 100644 --- a/core/src/apps/ethereum/layout.py +++ b/core/src/apps/ethereum/layout.py @@ -9,7 +9,12 @@ from trezor.ui.layouts import ( should_show_more, ) -from .helpers import address_from_bytes, decode_typed_data, format_ethereum_amount +from .helpers import ( + address_from_bytes, + decode_typed_data, + format_ethereum_amount, + get_account_and_path, +) if TYPE_CHECKING: from typing import Awaitable, Iterable @@ -25,6 +30,7 @@ if TYPE_CHECKING: async def require_confirm_tx( to_bytes: bytes, value: int, + address_n: list[int], maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], network: EthereumNetworkInfo, @@ -41,14 +47,23 @@ async def require_confirm_tx( total_amount = format_ethereum_amount(value, token, network) + account, account_path = get_account_and_path(address_n) + await confirm_ethereum_tx( - to_str, total_amount, maximum_fee, fee_info_items, chunkify=chunkify + to_str, + total_amount, + account, + account_path, + maximum_fee, + fee_info_items, + chunkify=chunkify, ) async def require_confirm_stake( addr_bytes: bytes, value: int, + address_n: list[int], maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], network: EthereumNetworkInfo, @@ -57,12 +72,16 @@ async def require_confirm_stake( addr_str = address_from_bytes(addr_bytes, network) total_amount = format_ethereum_amount(value, None, network) + account, account_path = get_account_and_path(address_n) + await confirm_ethereum_staking_tx( TR.ethereum__staking_stake, # title TR.ethereum__staking_stake_intro, # intro_question TR.ethereum__staking_stake, # verb - total_amount, # total_amount - maximum_fee, # maximum_fee + total_amount, + account, + account_path, + maximum_fee, addr_str, # address TR.ethereum__staking_stake_address, # address_title fee_info_items, # info_items @@ -73,6 +92,7 @@ async def require_confirm_stake( async def require_confirm_unstake( addr_bytes: bytes, value: int, + address_n: list[int], maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], network: EthereumNetworkInfo, @@ -81,13 +101,16 @@ async def require_confirm_unstake( addr_str = address_from_bytes(addr_bytes, network) total_amount = format_ethereum_amount(value, None, network) + account, account_path = get_account_and_path(address_n) await confirm_ethereum_staking_tx( TR.ethereum__staking_unstake, # title TR.ethereum__staking_unstake_intro, # intro_question TR.ethereum__staking_unstake, # verb - total_amount, # total_amount - maximum_fee, # maximum_fee + total_amount, + account, + account_path, + maximum_fee, addr_str, # address TR.ethereum__staking_stake_address, # address_title fee_info_items, # info_items @@ -97,6 +120,7 @@ async def require_confirm_unstake( async def require_confirm_claim( addr_bytes: bytes, + address_n: list[int], maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], network: EthereumNetworkInfo, @@ -104,12 +128,16 @@ async def require_confirm_claim( ) -> None: addr_str = address_from_bytes(addr_bytes, network) + account, account_path = get_account_and_path(address_n) + await confirm_ethereum_staking_tx( TR.ethereum__staking_claim, # title TR.ethereum__staking_claim_intro, # intro_question TR.ethereum__staking_claim, # verb "", # total_amount - maximum_fee, # maximum_fee + account, + account_path, + maximum_fee, addr_str, # address TR.ethereum__staking_claim_address, # address_title fee_info_items, # info_items diff --git a/core/src/apps/ethereum/sign_tx.py b/core/src/apps/ethereum/sign_tx.py index c90f4d427d..7e1dc3d0ae 100644 --- a/core/src/apps/ethereum/sign_tx.py +++ b/core/src/apps/ethereum/sign_tx.py @@ -138,6 +138,7 @@ async def confirm_tx_data( await require_confirm_tx( recipient, value, + msg.address_n, maximum_fee, fee_items, defs.network, @@ -175,6 +176,7 @@ async def handle_staking( if func_sig == constants.SC_FUNC_SIG_CLAIM: await _handle_staking_tx_claim( data_reader, + msg, address_bytes, maximum_fee, fee_items, @@ -325,6 +327,7 @@ async def _handle_staking_tx_stake( await require_confirm_stake( address_bytes, int.from_bytes(msg.value, "big"), + msg.address_n, maximum_fee, fee_items, network, @@ -364,6 +367,7 @@ async def _handle_staking_tx_unstake( await require_confirm_unstake( address_bytes, value, + msg.address_n, maximum_fee, fee_items, network, @@ -373,6 +377,7 @@ async def _handle_staking_tx_unstake( async def _handle_staking_tx_claim( data_reader: BufferReader, + msg: MsgInSignTx, staking_addr: bytes, maximum_fee: str, fee_items: Iterable[tuple[str, str]], @@ -385,7 +390,9 @@ async def _handle_staking_tx_claim( if data_reader.remaining_count() != 0: raise DataError("Invalid staking transaction call") - await require_confirm_claim(staking_addr, maximum_fee, fee_items, network, chunkify) + await require_confirm_claim( + staking_addr, msg.address_n, maximum_fee, fee_items, network, chunkify + ) _progress_obj: ProgressLayout | None = None diff --git a/core/src/trezor/ui/layouts/mercury/__init__.py b/core/src/trezor/ui/layouts/mercury/__init__.py index 3a8385e2f0..96adf2e2ed 100644 --- a/core/src/trezor/ui/layouts/mercury/__init__.py +++ b/core/src/trezor/ui/layouts/mercury/__init__.py @@ -1027,6 +1027,8 @@ if not utils.BITCOIN_ONLY: async def confirm_ethereum_tx( recipient: str, total_amount: str, + account: str | None, + account_path: str | None, maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], br_name: str = "confirm_ethereum_tx", @@ -1042,8 +1044,8 @@ if not utils.BITCOIN_ONLY: amount=None, chunkify=chunkify, text_mono=True, - account=None, - account_path=None, + account=account, + account_path=account_path, address=None, address_title=None, br_code=ButtonRequestType.Other, @@ -1066,6 +1068,8 @@ if not utils.BITCOIN_ONLY: intro_question: str, verb: str, total_amount: str, + account: str | None, + account_path: str | None, maximum_fee: str, address: str, address_title: str, @@ -1090,8 +1094,8 @@ if not utils.BITCOIN_ONLY: amount=None, chunkify=False, text_mono=False, - account=None, - account_path=None, + account=account, + account_path=account_path, br_code=br_code, br_name=br_name, address=address, diff --git a/core/src/trezor/ui/layouts/tr/__init__.py b/core/src/trezor/ui/layouts/tr/__init__.py index 1dd0a4acf9..389fcaa7a2 100644 --- a/core/src/trezor/ui/layouts/tr/__init__.py +++ b/core/src/trezor/ui/layouts/tr/__init__.py @@ -1191,6 +1191,8 @@ if not utils.BITCOIN_ONLY: intro_question: str, verb: str, total_amount: str, + _account: str | None, + _account_path: str | None, maximum_fee: str, address: str, address_title: str, @@ -1268,6 +1270,8 @@ if not utils.BITCOIN_ONLY: async def confirm_ethereum_tx( recipient: str, total_amount: str, + _account: str | None, + _account_path: str | None, maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], br_name: str = "confirm_ethereum_tx", diff --git a/core/src/trezor/ui/layouts/tt/__init__.py b/core/src/trezor/ui/layouts/tt/__init__.py index 7218757127..2d6ad00b45 100644 --- a/core/src/trezor/ui/layouts/tt/__init__.py +++ b/core/src/trezor/ui/layouts/tt/__init__.py @@ -1097,6 +1097,8 @@ if not utils.BITCOIN_ONLY: async def confirm_ethereum_tx( recipient: str, total_amount: str, + _account: str | None, + _account_path: str | None, maximum_fee: str, fee_info_items: Iterable[tuple[str, str]], br_name: str = "confirm_ethereum_tx", @@ -1145,6 +1147,8 @@ if not utils.BITCOIN_ONLY: intro_question: str, verb: str, total_amount: str, + _account: str | None, + _account_path: str | None, maximum_fee: str, address: str, address_title: str, diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 6f9e665612..29325feaea 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -19467,18 +19467,18 @@ "T3T1_cs_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "6ce1d66af3f9e857b66dd057a60f5f5bcba6e7a0a241a08855d109a2fc440ac7", "T3T1_cs_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "6ce1d66af3f9e857b66dd057a60f5f5bcba6e7a0a241a08855d109a2fc440ac7", "T3T1_cs_ethereum-test_signtx.py::test_signtx_fee_info": "6a43a117d79ced98980f2c3d63b8cf7c580326f8df601be465627f1131a8606d", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "de5a3f76a0c9bc879f9046285a050a36738d369ce2fc01e13733838795fe574b", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "534d5a30dda303900259c190868d8143af063282e35e685e71788e92d0937e38", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "d00a990e3511885aeea98d5ff004da4b59614faea1bdfb3efab445f431c282b4", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "4a36106048823d8f95f2ed06d988ae2c5d61ca2132f5f3b198eda08671d399ca", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "c0c90a36e3be72160ef50ed2355fa022fdcb2735c381f22512ebb5b4d9290a2f", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "35f51f28bc80f3517e6ce4fea2a4763833a828aa0f970a4766ee619f48e332e8", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "de5a3f76a0c9bc879f9046285a050a36738d369ce2fc01e13733838795fe574b", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "534d5a30dda303900259c190868d8143af063282e35e685e71788e92d0937e38", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "d00a990e3511885aeea98d5ff004da4b59614faea1bdfb3efab445f431c282b4", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "4a36106048823d8f95f2ed06d988ae2c5d61ca2132f5f3b198eda08671d399ca", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "c0c90a36e3be72160ef50ed2355fa022fdcb2735c381f22512ebb5b4d9290a2f", -"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "35f51f28bc80f3517e6ce4fea2a4763833a828aa0f970a4766ee619f48e332e8", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "f7d23a1ad9a22591de9cf34d411c757d157705ece74aef5764bca4e5039f3340", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "a1501dfb92f0db28e9313765c6ba37ef86b2b22d0bf3a2ed75b88567f0dc93d9", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "67a3a27ffe843ebd4d3d7ae265ccecf2879e7a0b220fd31a5208c1587aad713c", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "3f882efbfa16f689ce24fcc4caa91b64aac5ead63d11237a37448780e68c2f5b", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "1fe62393e7884571749d426904cabea5a49efced8ce3db6c51d5fa761c11943d", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "0bdba9f22c02c578ca339c29a9a932e625ac06d36f114d0aface334ebaa07843", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "f7d23a1ad9a22591de9cf34d411c757d157705ece74aef5764bca4e5039f3340", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "a1501dfb92f0db28e9313765c6ba37ef86b2b22d0bf3a2ed75b88567f0dc93d9", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "67a3a27ffe843ebd4d3d7ae265ccecf2879e7a0b220fd31a5208c1587aad713c", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "3f882efbfa16f689ce24fcc4caa91b64aac5ead63d11237a37448780e68c2f5b", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "1fe62393e7884571749d426904cabea5a49efced8ce3db6c51d5fa761c11943d", +"T3T1_cs_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "0bdba9f22c02c578ca339c29a9a932e625ac06d36f114d0aface334ebaa07843", "T3T1_cs_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "db145237dd6797d9dd5204b63976d890465fa96aa121b5a84032f6d62955b6d1", "T3T1_cs_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "db145237dd6797d9dd5204b63976d890465fa96aa121b5a84032f6d62955b6d1", "T3T1_cs_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "db145237dd6797d9dd5204b63976d890465fa96aa121b5a84032f6d62955b6d1", @@ -20825,18 +20825,18 @@ "T3T1_de_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "fe02b97c28cec0b8f6c03cd93fe6219b3b732390bb98badf5a6f35a82cb997ef", "T3T1_de_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "fe02b97c28cec0b8f6c03cd93fe6219b3b732390bb98badf5a6f35a82cb997ef", "T3T1_de_ethereum-test_signtx.py::test_signtx_fee_info": "17a4d8511d786f95410c1cfe55ab6df1c54edd581637839380d504a9a943192e", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "f27b041783cc79a22c11ed668a003c906f1065aa76d8f16b30472d04409a154a", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "c33ae42431c166ca0cece0f9e22caacd96dde3afa5fef705aebafc649e92ce5b", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "f69d79f138e87dcde788d6fe50362e14c4954431f940dc9ac958c4caeceead93", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "d8a29f667f4e48fffe17f13cd698b19b855ce97c60d1e22628136fe08d55c44f", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "9e70a5e0158171f5f74fdcf801684dff0aea6d0f97076046b0f18af209d3325d", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "c6a47a4a4899ae0cb796692e3d0570440daceab947a0442ea2f62fa5e5a6fa74", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "f27b041783cc79a22c11ed668a003c906f1065aa76d8f16b30472d04409a154a", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "c33ae42431c166ca0cece0f9e22caacd96dde3afa5fef705aebafc649e92ce5b", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "f69d79f138e87dcde788d6fe50362e14c4954431f940dc9ac958c4caeceead93", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "d8a29f667f4e48fffe17f13cd698b19b855ce97c60d1e22628136fe08d55c44f", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "9e70a5e0158171f5f74fdcf801684dff0aea6d0f97076046b0f18af209d3325d", -"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "c6a47a4a4899ae0cb796692e3d0570440daceab947a0442ea2f62fa5e5a6fa74", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "d284e56e14343ea9dacaa363535bbec3b79b14f71c4ce6b4b63167efd54a7cc8", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "7f3d8d34e917b13228468fa24af4a9b4b9550f6ba46f5a2a24c6a4eaebc8fe5f", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "ae40b57c74e7bbd3d89f9276a154b266c72940d9a3958ab6a8860eb7dc9c4094", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "e90e3fc6ddfbd749b925ebcc50afe57f0f99902b6144427f132b3e17a2f34cd1", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "d2ac24d80a295746e4eb84d0789f3a167a751fe68a43bedd0a2501d22def025e", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "54b473af2dd5738cd3546be7c1b42a34494af6d491f5454ddacdca14f3e9d5c5", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "d284e56e14343ea9dacaa363535bbec3b79b14f71c4ce6b4b63167efd54a7cc8", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "7f3d8d34e917b13228468fa24af4a9b4b9550f6ba46f5a2a24c6a4eaebc8fe5f", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "ae40b57c74e7bbd3d89f9276a154b266c72940d9a3958ab6a8860eb7dc9c4094", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "e90e3fc6ddfbd749b925ebcc50afe57f0f99902b6144427f132b3e17a2f34cd1", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "d2ac24d80a295746e4eb84d0789f3a167a751fe68a43bedd0a2501d22def025e", +"T3T1_de_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "54b473af2dd5738cd3546be7c1b42a34494af6d491f5454ddacdca14f3e9d5c5", "T3T1_de_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "adfe275fcc2caed0137079330cbc85aaccecf9e5fdc0404238db121212124edf", "T3T1_de_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "adfe275fcc2caed0137079330cbc85aaccecf9e5fdc0404238db121212124edf", "T3T1_de_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "adfe275fcc2caed0137079330cbc85aaccecf9e5fdc0404238db121212124edf", @@ -22183,18 +22183,18 @@ "T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "dd2790ac7fa5c240b051e85342d6368d0deac5a5cf8c7c8c4af1c09e3cf7182f", "T3T1_en_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "dd2790ac7fa5c240b051e85342d6368d0deac5a5cf8c7c8c4af1c09e3cf7182f", "T3T1_en_ethereum-test_signtx.py::test_signtx_fee_info": "b85b87c6946ad2074272ae7156fd6a5bfec4db17f12290c8b88d1bde1b551565", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "c9ea54681f77d78b130719dec5be110ae0268f499466cc4656e96aa090c7f057", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "ef7330fe5b7ef7d9bef858d63bd78401ffacb39ee2b07134f74c25ca0ac057e2", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "ee0a79a53b01e068bfee5ecc98597d4c6504b241ddff2eed22fadd0c4690913f", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "28a8ede2baa9b729d626e128451452e335e3161dbc651867c9ed70a2192d4944", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "e5b6b99c47e6f5bf2d0dda1c317db61858ca42f5ab67ef268379770bc01ccc86", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "47ab2304a91cfbf820996c7514b5cc25d2f5fa317c294f6f7d60914836a1e25f", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "c9ea54681f77d78b130719dec5be110ae0268f499466cc4656e96aa090c7f057", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "ef7330fe5b7ef7d9bef858d63bd78401ffacb39ee2b07134f74c25ca0ac057e2", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "ee0a79a53b01e068bfee5ecc98597d4c6504b241ddff2eed22fadd0c4690913f", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "28a8ede2baa9b729d626e128451452e335e3161dbc651867c9ed70a2192d4944", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "e5b6b99c47e6f5bf2d0dda1c317db61858ca42f5ab67ef268379770bc01ccc86", -"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "47ab2304a91cfbf820996c7514b5cc25d2f5fa317c294f6f7d60914836a1e25f", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "eaca0e98888546de42dccfc6f08cb371f4bbb0b2683b9809a95abdf21d93d137", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "6864d04cd868e5c6140011d07bfbafc7b94a1947e817ec41dca99cce329f01ca", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "8571b93330b2f8e1d0cfe5afa4ad4facc42c7ba15217b4aa4ee66fdf31fac767", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "5c6ad16fa5749fc08af9e54c88044b723665fa7c5cc669ef7b086e96dc74bc09", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "d800aacbe852eb06a4dc3f077c24042058878fce5c35a7c75050e881484e0739", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "46c83ead0992edc76ca8452682ec1a7c35f5562eedfb89b27cdf4b7b27573b05", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "eaca0e98888546de42dccfc6f08cb371f4bbb0b2683b9809a95abdf21d93d137", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "6864d04cd868e5c6140011d07bfbafc7b94a1947e817ec41dca99cce329f01ca", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "8571b93330b2f8e1d0cfe5afa4ad4facc42c7ba15217b4aa4ee66fdf31fac767", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "5c6ad16fa5749fc08af9e54c88044b723665fa7c5cc669ef7b086e96dc74bc09", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "d800aacbe852eb06a4dc3f077c24042058878fce5c35a7c75050e881484e0739", +"T3T1_en_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "46c83ead0992edc76ca8452682ec1a7c35f5562eedfb89b27cdf4b7b27573b05", "T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "886a329a63547ee0f07547685dfc1c8677587c3471fe1bcba81c6a9363659185", "T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "886a329a63547ee0f07547685dfc1c8677587c3471fe1bcba81c6a9363659185", "T3T1_en_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "886a329a63547ee0f07547685dfc1c8677587c3471fe1bcba81c6a9363659185", @@ -23541,18 +23541,18 @@ "T3T1_es_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "8f70757da8d2e04371c54ce284f59c7d1212eb3f4a9e035b1afa09dea6dda976", "T3T1_es_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "8f70757da8d2e04371c54ce284f59c7d1212eb3f4a9e035b1afa09dea6dda976", "T3T1_es_ethereum-test_signtx.py::test_signtx_fee_info": "2fb56492bae54739eb8af2259ea05fff90397dc4ca16ed0ab859566a97c5ec48", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "82e98ccae78a78f96e67e7ba2d137036375d97c2e3644c4ecbc63941cbef8adc", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "69aa565c1f41969831a03a37075ff02a16333357a956aabdf0771af9be070fdd", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "45430e948c1725caf0769bb44bc338d1ecb4258d8a88a85e9849131674be08d9", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "601545c5963df3c325a2d72510d0ceb1e9c05cd753b802c9e44fb7735ca1bbe1", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "aaaacd4652ba80623098ea6606d5d284c3c8eb13938919339c25db8a120568de", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "7dfc04f0d6289822e0ae017dd517df67f2cedc26d7a7dfca0f952b1a7489896f", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "82e98ccae78a78f96e67e7ba2d137036375d97c2e3644c4ecbc63941cbef8adc", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "69aa565c1f41969831a03a37075ff02a16333357a956aabdf0771af9be070fdd", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "45430e948c1725caf0769bb44bc338d1ecb4258d8a88a85e9849131674be08d9", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "601545c5963df3c325a2d72510d0ceb1e9c05cd753b802c9e44fb7735ca1bbe1", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "aaaacd4652ba80623098ea6606d5d284c3c8eb13938919339c25db8a120568de", -"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "7dfc04f0d6289822e0ae017dd517df67f2cedc26d7a7dfca0f952b1a7489896f", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "2b15b2a238452fa4a9095eac6748b7c484353f44922ed0797a30797755384776", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "927f9b792254498b01d3893ac1f1f050b0ef3f571bb6c29ab58f9ee4c55650d3", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "cd74a5bf3f9e89420e0f5d7cfb011b81bd6c667a4685240f32d97f7cb08bdca1", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "5b3285edfebf1e9b71c5c8971603dbd311e747a8a48bd762039bf9ce511fc15a", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "de1c1127ae860aa7f009bfdbebec0708d49ddac3c6d0f067218ecc6fc74e25e1", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "af6c05f4a84a3ddd26f3d25924065b6c2ec5390025d9ac920cff25041215db02", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "2b15b2a238452fa4a9095eac6748b7c484353f44922ed0797a30797755384776", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "927f9b792254498b01d3893ac1f1f050b0ef3f571bb6c29ab58f9ee4c55650d3", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "cd74a5bf3f9e89420e0f5d7cfb011b81bd6c667a4685240f32d97f7cb08bdca1", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "5b3285edfebf1e9b71c5c8971603dbd311e747a8a48bd762039bf9ce511fc15a", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "de1c1127ae860aa7f009bfdbebec0708d49ddac3c6d0f067218ecc6fc74e25e1", +"T3T1_es_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "af6c05f4a84a3ddd26f3d25924065b6c2ec5390025d9ac920cff25041215db02", "T3T1_es_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "9e2b64f79ece46f82e116b01abc0a03d1edf7bb2deb53a5216e6665f97ac2840", "T3T1_es_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "9e2b64f79ece46f82e116b01abc0a03d1edf7bb2deb53a5216e6665f97ac2840", "T3T1_es_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "9e2b64f79ece46f82e116b01abc0a03d1edf7bb2deb53a5216e6665f97ac2840", @@ -24899,18 +24899,18 @@ "T3T1_fr_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "19b948f557ebf500d80540e5b86a03f2be9dfa8e6a30686e4c3efa89689b78e1", "T3T1_fr_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "19b948f557ebf500d80540e5b86a03f2be9dfa8e6a30686e4c3efa89689b78e1", "T3T1_fr_ethereum-test_signtx.py::test_signtx_fee_info": "7f9aece317e149abd566d9028ad68752eb8226e2775d1655c3e60ef5a6980a63", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "530a5248700ab678e2a50cfc7ba82055244017d504103e3faf489b6597fa3c7c", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "2fbe548d3804327aaa755bdf487247c48f5c2692a38d84ebcc4acac742f9a97c", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "2429e6e0d42c8a884e78ff514b13c4ae79aaf6806be1defc1d36a13c91c52255", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "9c2e18f0027225df5cc9e34c3909b2d1dad1f693d75a1e5303d19c102a8f3c95", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "3087490d11bf2b6bd4227df53008f5a414145a0fde90274d5b17461b84e9840d", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "19122522ea3086aa7ad69ac4029ed1b7c589c32c459d0b923a799eb45bbe5993", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "530a5248700ab678e2a50cfc7ba82055244017d504103e3faf489b6597fa3c7c", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "2fbe548d3804327aaa755bdf487247c48f5c2692a38d84ebcc4acac742f9a97c", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "2429e6e0d42c8a884e78ff514b13c4ae79aaf6806be1defc1d36a13c91c52255", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "9c2e18f0027225df5cc9e34c3909b2d1dad1f693d75a1e5303d19c102a8f3c95", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "3087490d11bf2b6bd4227df53008f5a414145a0fde90274d5b17461b84e9840d", -"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "19122522ea3086aa7ad69ac4029ed1b7c589c32c459d0b923a799eb45bbe5993", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "6441c96b6becfa38138655e8f05ebbd1f13221858600778c534bc4981243c0b2", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "e3a2b87b37bb2fba493d88af15c4b2418948e2f74c83fcc8e6b3e84fd9f34f82", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "47321b89b053a91c2d1281477cafeaf0add040425beb8717496c1afed68ddf11", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "6932008bb490bcd8a5a9e561666ed28d4774eed08a3f0c3f0b626625fb8b47c6", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "b4d6d88db5a9ab2a9682682cfaadd44d075887ea9806ef5f8f189b1ace6e74c6", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "1e3f8b29466d4bfc7cdbebfdc2e3df28eddc13ff01e2869eba72ec50b6ee8c90", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "6441c96b6becfa38138655e8f05ebbd1f13221858600778c534bc4981243c0b2", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "e3a2b87b37bb2fba493d88af15c4b2418948e2f74c83fcc8e6b3e84fd9f34f82", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "47321b89b053a91c2d1281477cafeaf0add040425beb8717496c1afed68ddf11", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "6932008bb490bcd8a5a9e561666ed28d4774eed08a3f0c3f0b626625fb8b47c6", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "b4d6d88db5a9ab2a9682682cfaadd44d075887ea9806ef5f8f189b1ace6e74c6", +"T3T1_fr_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "1e3f8b29466d4bfc7cdbebfdc2e3df28eddc13ff01e2869eba72ec50b6ee8c90", "T3T1_fr_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "84bc5711f80dff8ebb527d9204da271acc3ce29e17caacec880253ff12a418c2", "T3T1_fr_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "84bc5711f80dff8ebb527d9204da271acc3ce29e17caacec880253ff12a418c2", "T3T1_fr_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "84bc5711f80dff8ebb527d9204da271acc3ce29e17caacec880253ff12a418c2", @@ -26257,18 +26257,18 @@ "T3T1_pt_ethereum-test_signtx.py::test_signtx_eip1559_access_list": "b06e4b38014e26e07636569fa11e736cf439c345088249a8255b17e6f8ca99c8", "T3T1_pt_ethereum-test_signtx.py::test_signtx_eip1559_access_list_larger": "b06e4b38014e26e07636569fa11e736cf439c345088249a8255b17e6f8ca99c8", "T3T1_pt_ethereum-test_signtx.py::test_signtx_fee_info": "fbe7b97531a1a06ff335360839d5c7ffc46adca1234a8d51f51185dbbf1c73c9", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "974ebc89d8530de01d5fd04008a1b78edcf9b36fa3e0adf1781e5e3b7708a350", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "ff4cf1a7a89f9c089cde3ab625da301c1af8e998fe21922d6e83a124961b4c05", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "47577146740a912be17d43ba16df22987d9457b02964212d7ca5ed168dbe68d4", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "da7072ef2fe4466c575d776e7836c0da67b10fc095d744a53d12cb509c93ddc9", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "50c9e0699cfe14710ad51aad303b1eea326e09c8f4c8f27366083bed7397607d", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "faa65dbc95970debaf3c3e3e82c286aa127541da8ff021b43bd9d19bdf6809e9", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "974ebc89d8530de01d5fd04008a1b78edcf9b36fa3e0adf1781e5e3b7708a350", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "ff4cf1a7a89f9c089cde3ab625da301c1af8e998fe21922d6e83a124961b4c05", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "47577146740a912be17d43ba16df22987d9457b02964212d7ca5ed168dbe68d4", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "da7072ef2fe4466c575d776e7836c0da67b10fc095d744a53d12cb509c93ddc9", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "50c9e0699cfe14710ad51aad303b1eea326e09c8f4c8f27366083bed7397607d", -"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "faa65dbc95970debaf3c3e3e82c286aa127541da8ff021b43bd9d19bdf6809e9", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-claim_holesky]": "6404f817df4b3e919d19cc93f3daec90ba28020a2cb9b022f51d892be96c8908", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-claim_mainnet]": "10a20b78b223167e82bd4e5ebdd47d689b8567433d8e5eb42d1d9d2a119bd657", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-stake_holesky]": "aa4f9c9fb94b162f98432b0a7c8ebfd0c3c5a0abb976e6aa6258d8591f88e6ac", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-stake_main]": "b9efabdb918ef01d2a1169f80af965265c9174129b152ce728df14bc6a9ac8e2", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-unstake_holesky]": "2faad6f013095ca5be931021f7e589e117ce395634fc6ece73733649b2cccb42", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[False-unstake_main]": "5c8a33e1c9e2ff52714fdc9a32f39dce4a3772bca95e29931ed623f0f23aa42d", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-claim_holesky]": "6404f817df4b3e919d19cc93f3daec90ba28020a2cb9b022f51d892be96c8908", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-claim_mainnet]": "10a20b78b223167e82bd4e5ebdd47d689b8567433d8e5eb42d1d9d2a119bd657", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-stake_holesky]": "aa4f9c9fb94b162f98432b0a7c8ebfd0c3c5a0abb976e6aa6258d8591f88e6ac", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-stake_main]": "b9efabdb918ef01d2a1169f80af965265c9174129b152ce728df14bc6a9ac8e2", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-unstake_holesky]": "2faad6f013095ca5be931021f7e589e117ce395634fc6ece73733649b2cccb42", +"T3T1_pt_ethereum-test_signtx.py::test_signtx_staking[True-unstake_main]": "5c8a33e1c9e2ff52714fdc9a32f39dce4a3772bca95e29931ed623f0f23aa42d", "T3T1_pt_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[claim_bad_inputs_1]": "a31f83fbfe8b45f848ffa9542f48a0f8ccb71d88acc10a3bbc30ee8097cbb365", "T3T1_pt_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_1]": "a31f83fbfe8b45f848ffa9542f48a0f8ccb71d88acc10a3bbc30ee8097cbb365", "T3T1_pt_ethereum-test_signtx.py::test_signtx_staking_bad_inputs[stake_bad_inputs_2]": "a31f83fbfe8b45f848ffa9542f48a0f8ccb71d88acc10a3bbc30ee8097cbb365",