feat(core): support EIP-7702 authorization/revocation
What changed, and why it matters
This commit adds support for signing Ethereum EIP-7702 authorizations and revocations on Trezor hardware wallets. EIP-7702 lets an Ethereum account temporarily delegate control to a smart contract. The code adds a new signing workflow, user confirmation screens, and command-line support. It is a feature addition, not a fix for a known vulnerability. The main security consideration is that authorizing delegation is a powerful operation, so the code requires users to disable strict safety checks and confirm on the device, while revocation remains allowed under strict checks.
Review the EIP-7702 signature construction against the final EIP-7702 specification to ensure the magic byte 0x05 and RLP encoding match the standard. Verify that the delegate allowlist and strict-safety-check gating provide the intended risk mitigation. Confirm that the new message type is properly gated by experimental-features and that UI strings clearly warn users about account delegation. No immediate patch is indicated by the diff alone.
Security signals we found
New cryptographic signing path for EIP-7702 authorization tuples
Hard-coded delegate allowlist restricts authorization to known contracts
Strict safety checks block authorization but allow revocation
Nonce upper bound check (>= 0xFFFFFFFFFFFFFFFF rejected)
User must confirm delegation/revocation on-device before signing
No changelog entry in this commit; prior commit updated changelog
Evidence from the diff
The commit introduces a new message handler EthereumSignAuth7702 wired to apps.ethereum.sign_auth_eip7702. It validates the BIP-32 path, rejects nonces >= 2^64-1, and distinguishes revocation (delegate == 0x00..00) from authorization. Revocation is permitted with strict safety checks; authorization requires safety_checks.is_strict() to be false and the delegate address to be in a hard-coded allowlist (Ambire, MetaMask). It then computes keccak256(0x05 || rlp([chain_id, delegate, nonce])) and signs with secp256k1 using the canonical Ethereum signature scheme. UI confirmation flows are added for four layout themes (bolt, caesar, delizia, eckhart). Python client and CLI support are added, plus test fixtures and UI test hashes. No CVE, advisory, or vendor security disclosure is present in the provided materials.
Changed components
core/src/apps/ethereum/sign_auth_eip7702.pycore/src/apps/ethereum/sc_constants.pycore/src/apps/workflow_handlers.pycore/src/trezor/ui/layouts/bolt/__init__.pycore/src/trezor/ui/layouts/caesar/__init__.pycore/src/trezor/ui/layouts/delizia/__init__.pycore/src/trezor/ui/layouts/eckhart/__init__.pypython/src/trezorlib/ethereum.pypython/src/trezorlib/cli/ethereum.pyInspect captured patch +1130 / −0
diff --git a/common/tests/fixtures/ethereum/sign_auth_eip7702.json b/common/tests/fixtures/ethereum/sign_auth_eip7702.json
index 7852dd63..998e8df5 100644
--- a/common/tests/fixtures/ethereum/sign_auth_eip7702.json
+++ b/common/tests/fixtures/ethereum/sign_auth_eip7702.json
@@ -18,6 +18,20 @@
"sig_s": "2c705977a6e066f807d9c2aa1fba02a32069bd92d2edf2c440533f0e05592d46"
}
},
+ {
+ "name": "metamask_nonce_1_chainid_0_all_networks",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x63c0c19a282a1b52b07dd5a65b58948a07dae32b",
+ "nonce": 1,
+ "chain_id": 0
+ },
+ "result": {
+ "sig_v": 1,
+ "sig_r": "9092db9dd37e92acd62299cfe9610f911401029dbe24a7ccb4dd725790794c2e",
+ "sig_s": "265486929f9094a3fd11bd19eac17d027925632e68d1047ba8737b972da783bc"
+ }
+ },
{
"name": "ambire_nonce_1_chainid_1_mainnet",
"parameters": {
@@ -32,6 +46,35 @@
"sig_s": "7938228fd841d148463bb080ace6a580309dbf94a165b3c885db984609123ffd"
}
},
+ {
+ "name": "metamask_nonce_1_chainid_1_mainnet",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x63c0c19a282a1b52b07dd5a65b58948a07dae32b",
+ "nonce": 1,
+ "chain_id": 1
+ },
+ "result": {
+ "sig_v": 0,
+ "sig_r": "c9d939488d895963635118cdb92d4956370e8ee8ce3a3180dcce66057f365dae",
+ "sig_s": "694b9ddb1caf5c2bee62fedd557a02a744da1e4cc32c0dcd3a0e7532cf5f546e"
+ }
+ },
+ {
+ "name": "metamask_nonce_1_chainid_200901_unknown",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x63c0c19a282a1b52b07dd5a65b58948a07dae32b",
+ "nonce": 1,
+ "chain_id": 200901,
+ "fake_defs": false
+ },
+ "result": {
+ "sig_v": 0,
+ "sig_r": "e225efdf988dd90234db63c653a9404b8d74e9ba79335e4d690c879f140cc81d",
+ "sig_s": "082031ed702504345e74f238e8a56d66438c911ce6e1089c6bcd87d9056c3304"
+ }
+ },
{
"name": "ambire_nonce_3_chainid_8453_base",
"parameters": {
@@ -60,6 +103,20 @@
"sig_s": "60070f26d933a49b15db5b46d1443b92ff87916ea9eca9c9b6f36788ce181106"
}
},
+ {
+ "name": "ambire_nonce_2_chainid_123456789_defs",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x5A7fC11397E9A8AD41Bf10bF13f22b0A63F96f6D",
+ "nonce": 2,
+ "chain_id": 123456789
+ },
+ "result": {
+ "sig_v": 0,
+ "sig_r": "4bd2cf05222f0fdfd1db9f7b83b3dad612dd1060fd091a32b66c423952b7f8d7",
+ "sig_s": "16fd7587e55b3b1c412f74597fb4ffba4fa4dd7d877fb91407ac12749d26f16b"
+ }
+ },
{
"name": "revoke_nonce_123456_chainid_0_all_networks",
"parameters": {
@@ -115,6 +172,20 @@
"sig_r": "092e59d6486520ea8fdcb1f4639fc8d3c02273f7f84bc83a527fbb9a95b8c70d",
"sig_s": "3a384fd28a3044fadf937511c795f50e1adeec94118a51dfab42b478a0bf860c"
}
+ },
+ {
+ "name": "revoke_nonce_0_chainid_123456789_defs",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x0000000000000000000000000000000000000000",
+ "nonce": 0,
+ "chain_id": 123456789
+ },
+ "result": {
+ "sig_v": 1,
+ "sig_r": "dbfcec89e34039831441c02101e0ee217da668efb6d37ab4c35c0aa3454865a0",
+ "sig_s": "1ec4a7afcb7b36a84a4ae37d7ac2ae7e5bfd06868e04847be6f3882603dc83f7"
+ }
}
]
}
diff --git a/common/tests/fixtures/ethereum/sign_auth_eip7702_errors.json b/common/tests/fixtures/ethereum/sign_auth_eip7702_errors.json
new file mode 100644
index 00000000..4c389fad
--- /dev/null
+++ b/common/tests/fixtures/ethereum/sign_auth_eip7702_errors.json
@@ -0,0 +1,32 @@
+{
+ "setup": {
+ "mnemonic": "all all all all all all all all all all all all",
+ "passphrase": ""
+ },
+ "tests": [
+ {
+ "name": "unknown_nonce_123456_chainid_1_mainnet",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x4Cd241E8d1510e30b2076397afc7508Ae59C66c9",
+ "nonce": 123456,
+ "chain_id": 1
+ },
+ "result": {
+ "error": "DataError: Unknown EIP-7702 delegate address"
+ }
+ },
+ {
+ "name": "metamask_invalid_nonce_chainid_1_mainnet",
+ "parameters": {
+ "path": "m/44'/60'/0'/0/0",
+ "delegate": "0x63c0c19a282a1b52b07dd5a65b58948a07dae32b",
+ "nonce": 18446744073709551615,
+ "chain_id": 1
+ },
+ "result": {
+ "error": "DataError: Invalid nonce"
+ }
+ }
+ ]
+}
diff --git a/core/embed/upymod/qstrdefsport.h b/core/embed/upymod/qstrdefsport.h
index 49277342..dc6d83ea 100644
--- a/core/embed/upymod/qstrdefsport.h
+++ b/core/embed/upymod/qstrdefsport.h
@@ -553,6 +553,7 @@ Q(apps.ethereum.keychain)
Q(apps.ethereum.layout)
Q(apps.ethereum.networks)
Q(apps.ethereum.sc_constants)
+Q(apps.ethereum.sign_auth_eip7702)
Q(apps.ethereum.sign_message)
Q(apps.ethereum.sign_tx)
Q(apps.ethereum.sign_tx_eip1559)
@@ -769,6 +770,7 @@ Q(sc_constants)
Q(seed)
Q(serialize)
Q(serialize_messages)
+Q(sign_auth_eip7702)
Q(sign_message)
Q(sign_tx)
Q(sign_tx_eip1559)
diff --git a/core/src/apps/ethereum/sc_constants.py b/core/src/apps/ethereum/sc_constants.py
index 9aa49766..2923eef8 100644
--- a/core/src/apps/ethereum/sc_constants.py
+++ b/core/src/apps/ethereum/sc_constants.py
@@ -71,3 +71,11 @@ def weth_deployments() -> Iterator[tuple[int, bytes]]:
yield (8453, b"\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06")
yield (11155111, b"\x7b\x79\x99\x5e\x5f\x79\x3a\x07\xbc\x00\xc2\x14\x12\xe5\x0e\xca\xe0\x98\xe7\xf9")
yield (17000, b"\x94\x37\x3a\x49\x19\xb3\x24\x0d\x86\xea\x41\x59\x3d\x5e\xba\x78\x9f\xef\x38\x48")
+
+
+def lookup_eip7702_address(address: bytes) -> str | None:
+ if address == b"\x5a\x7f\xc1\x13\x97\xe9\xa8\xad\x41\xbf\x10\xbf\x13\xf2\x2b\x0a\x63\xf9\x6f\x6d":
+ return "Ambire"
+ if address == b"\x63\xc0\xc1\x9a\x28\x2a\x1b\x52\xb0\x7d\xd5\xa6\x5b\x58\x94\x8a\x07\xda\xe3\x2b":
+ return "MetaMask"
+ return None
diff --git a/core/src/apps/ethereum/sc_constants.py.mako b/core/src/apps/ethereum/sc_constants.py.mako
index 281423fe..75839b19 100644
--- a/core/src/apps/ethereum/sc_constants.py.mako
+++ b/core/src/apps/ethereum/sc_constants.py.mako
@@ -145,3 +145,18 @@ def weth_deployments() -> Iterator[tuple[int, bytes]]:
% for chain_id, addr in WETH_DEPLOYMENTS:
yield (${chain_id}, ${fmt_addr(addr)})
% endfor
+
+<%
+_EIP7702_ADDRESSES = [
+ # https://etherscan.io/address/0x5a7fc11397e9a8ad41bf10bf13f22b0a63f96f6d
+ ("5a7fc11397e9a8ad41bf10bf13f22b0a63f96f6d", "Ambire"),
+ # https://etherscan.io/address/0x63c0c19a282a1b52b07dd5a65b58948a07dae32b
+ ("63c0c19a282a1b52b07dd5a65b58948a07dae32b", "MetaMask"),
+]
+%>
+def lookup_eip7702_address(address: bytes) -> str | None:
+% for addr, name in _EIP7702_ADDRESSES:
+ if address == ${fmt_addr(addr)}:
+ return "${name}"
+% endfor
+ return None
diff --git a/core/src/apps/ethereum/sign_auth_eip7702.py b/core/src/apps/ethereum/sign_auth_eip7702.py
new file mode 100644
index 00000000..6113ab05
--- /dev/null
+++ b/core/src/apps/ethereum/sign_auth_eip7702.py
@@ -0,0 +1,118 @@
+from typing import TYPE_CHECKING
+
+from trezor import TR
+from trezor.crypto.curve import secp256k1
+from trezor.messages import EthereumAuth7702Signature
+from trezor.wire import DataError, ProcessError
+
+from .keychain import with_keychain_from_chain_id
+from .networks import UNKNOWN_NETWORK
+from .sc_constants import lookup_eip7702_address
+
+if TYPE_CHECKING:
+ from trezor.messages import EthereumSignAuth7702
+
+ from apps.common.keychain import Keychain
+
+ from .definitions import Definitions
+
+_MAGIC = b"\x05"
+
+_REVOKE_ADDRESS = b"\x00" * 20
+
+
+@with_keychain_from_chain_id
+async def sign_auth_eip7702(
+ msg: EthereumSignAuth7702,
+ keychain: Keychain,
+ defs: Definitions,
+) -> EthereumAuth7702Signature:
+
+ from trezor.crypto import rlp
+ from trezor.ui.layouts import (
+ confirm_ethereum_eip7702_auth,
+ confirm_ethereum_eip7702_revoke,
+ show_continue_in_app,
+ )
+
+ from apps.common import paths, safety_checks
+
+ from .helpers import bytes_from_address, get_account_and_path, keccak256
+
+ await paths.validate_path(keychain, msg.address_n)
+
+ chain_id = msg.chain_id
+ if chain_id == 0:
+ # special marker making signature valid for all chains
+ network_item = (TR.ethereum__network, TR.ethereum__all_evms, None)
+ else:
+ if defs.network is UNKNOWN_NETWORK:
+ network_item = (
+ TR.ethereum__approve_chain_id,
+ f"{chain_id} (0x{chain_id:x})",
+ None,
+ )
+ else:
+ network_item = (TR.ethereum__network, defs.network.name, None)
+
+ account, account_path = get_account_and_path(msg.address_n)
+ if account is None or account_path is None:
+ raise DataError("Unknown account")
+
+ if msg.nonce >= 0xFFFFFFFFFFFFFFFF:
+ raise DataError("Invalid nonce")
+
+ delegate_bytes = bytes_from_address(msg.delegate)
+ if delegate_bytes == _REVOKE_ADDRESS:
+ # revocation can be done with strict safety checks
+ await confirm_ethereum_eip7702_revoke(
+ network_item=network_item,
+ account=account,
+ account_path=account_path,
+ nonce=msg.nonce,
+ )
+ done_msg = TR.ethereum__revoke_done
+ else:
+ if safety_checks.is_strict():
+ raise ProcessError(
+ "EIP-7702 authorisation not allowed with strict safety checks"
+ )
+
+ delegate_name = lookup_eip7702_address(delegate_bytes)
+ if delegate_name is None:
+ raise DataError("Unknown EIP-7702 delegate address")
+
+ await confirm_ethereum_eip7702_auth(
+ delegate_name=delegate_name,
+ delegate_addr=msg.delegate,
+ network_item=network_item,
+ account=account,
+ account_path=account_path,
+ nonce=msg.nonce,
+ )
+ done_msg = TR.ethereum__auth_done
+
+ fields: tuple[rlp.RLPItem, ...] = (
+ msg.chain_id,
+ delegate_bytes,
+ msg.nonce,
+ )
+
+ sha = keccak256(_MAGIC)
+
+ data_length = sum(rlp.length(field) for field in fields)
+ rlp.write_header(sha, data_length, rlp.LIST_HEADER_BYTE)
+ for field in fields:
+ rlp.write(sha, field)
+
+ digest = sha.get_digest()
+ node = keychain.derive(msg.address_n)
+ signature = secp256k1.sign(
+ node.private_key(), digest, False, secp256k1.CANONICAL_SIG_ETHEREUM
+ )
+ show_continue_in_app(done_msg)
+ return EthereumAuth7702Signature(
+ signature_v=signature[0] - 27,
+ signature_r=signature[1:33],
+ signature_s=signature[33:],
+ )
diff --git a/core/src/apps/workflow_handlers.py b/core/src/apps/workflow_handlers.py
index 35a3b300..9d5ca859 100644
--- a/core/src/apps/workflow_handlers.py
+++ b/core/src/apps/workflow_handlers.py
@@ -157,6 +157,8 @@ def _find_message_handler_module(msg_type: int) -> str:
return "apps.ethereum.get_address"
if msg_type == MessageType.EthereumGetPublicKey:
return "apps.ethereum.get_public_key"
+ if msg_type == MessageType.EthereumSignAuth7702:
+ return "apps.ethereum.sign_auth_eip7702"
if msg_type == MessageType.EthereumSignTx:
return "apps.ethereum.sign_tx"
if msg_type == MessageType.EthereumSignTxEIP1559:
diff --git a/core/src/trezor/ui/layouts/bolt/__init__.py b/core/src/trezor/ui/layouts/bolt/__init__.py
index 4d206c8d..e47e3757 100644
--- a/core/src/trezor/ui/layouts/bolt/__init__.py
+++ b/core/src/trezor/ui/layouts/bolt/__init__.py
@@ -1498,6 +1498,88 @@ if not utils.BITCOIN_ONLY:
br_code=br_code,
)
+ async def confirm_ethereum_eip7702_auth(
+ delegate_name: str,
+ delegate_addr: str,
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ with trezorui_api.show_warning(
+ title=TR.words__warning,
+ button=TR.buttons__confirm,
+ description=TR.ethereum__auth_warn,
+ allow_cancel=True,
+ danger=True,
+ ) as layout:
+ await raise_if_not_confirmed(layout, "ethereum/auth7702/warn")
+
+ main_ctx = trezorui_api.confirm_properties(
+ title=TR.ethereum__auth_title,
+ items=[
+ (TR.ethereum__delegating, account, False),
+ (TR.ethereum__to, delegate_name, False),
+ network_item,
+ ],
+ hold=True,
+ external_menu=True,
+ )
+ menu_ctx = trezorui_api.show_info_with_cancel(
+ title="",
+ items=[
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ (TR.ethereum__smart_info, delegate_addr, False),
+ # TODO: switch to non-Cardano specific string
+ (TR.cardano__nonce, str(nonce), False),
+ ],
+ )
+ with main_ctx as main, menu_ctx as menu:
+ await with_info(
+ main, menu, "ethereum/auth7702/details", ButtonRequestType.SignTx
+ )
+
+ async def confirm_ethereum_eip7702_revoke(
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ with trezorui_api.confirm_action(
+ title=TR.ethereum__revoke_title,
+ description=None,
+ action=TR.ethereum__revoke_warn.format(account),
+ verb=TR.buttons__continue,
+ ) as layout:
+ await raise_if_not_confirmed(
+ layout, "ethereum/revoke7702/intro", ButtonRequestType.SignTx
+ )
+
+ main_ctx = trezorui_api.confirm_properties(
+ title=TR.ethereum__revoke_title,
+ items=[
+ (TR.ethereum__approve_revoke_from, account, False),
+ network_item,
+ ],
+ verb=TR.buttons__confirm,
+ hold=True,
+ external_menu=True,
+ )
+ menu_ctx = trezorui_api.show_info_with_cancel(
+ title="",
+ items=[
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ # TODO: switch to non-Cardano specific string
+ (TR.cardano__nonce, str(nonce), False),
+ ],
+ )
+ with main_ctx as main, menu_ctx as menu:
+ await with_info(
+ main, menu, "ethereum/revoke7702/details", ButtonRequestType.SignTx
+ )
+
def confirm_solana_unknown_token_warning() -> Awaitable[None]:
return show_danger(
"unknown_token_warning", content=TR.solana__unknown_token_address
diff --git a/core/src/trezor/ui/layouts/caesar/__init__.py b/core/src/trezor/ui/layouts/caesar/__init__.py
index 80ddd528..477bbeb7 100644
--- a/core/src/trezor/ui/layouts/caesar/__init__.py
+++ b/core/src/trezor/ui/layouts/caesar/__init__.py
@@ -1481,6 +1481,103 @@ if not utils.BITCOIN_ONLY:
br_code=br_code,
)
+ async def confirm_ethereum_eip7702_auth(
+ delegate_name: str,
+ delegate_addr: str,
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ from trezor.ui.layouts.menu import Menu, confirm_with_menu
+
+ with trezorui_api.show_warning(
+ title=TR.words__warning,
+ button=TR.buttons__confirm,
+ description=TR.ethereum__auth_warn,
+ value=TR.words__know_what_your_doing,
+ allow_cancel=True,
+ danger=True,
+ ) as layout:
+ await raise_if_not_confirmed(layout, "ethereum/auth7702/warn")
+
+ with trezorui_api.confirm_properties(
+ title=TR.ethereum__auth_title,
+ items=[
+ (TR.ethereum__delegating, account, False),
+ (TR.ethereum__to, delegate_name, False),
+ network_item,
+ ],
+ hold=True,
+ external_menu=True,
+ ) as layout:
+ account_info = [
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ ]
+ more_info = [
+ (TR.ethereum__smart_info, delegate_addr, False),
+ # TODO: switch to non-Cardano specific string
+ (TR.cardano__nonce, str(nonce), False),
+ ]
+ children = [
+ create_details(TR.address_details__account_info, account_info),
+ create_details(TR.buttons__more_info, more_info),
+ ]
+ await confirm_with_menu(
+ layout,
+ Menu.root(children, cancel=TR.buttons__cancel),
+ "ethereum/auth7702/details",
+ ButtonRequestType.SignTx,
+ )
+
+ async def confirm_ethereum_eip7702_revoke(
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ from trezor.ui.layouts.menu import Menu, confirm_with_menu
+
+ account_info = [
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ ]
+ menu = Menu.root(
+ children=[
+ create_details(TR.address_details__account_info, account_info),
+ # TODO: switch to non-Cardano specific string
+ create_details(TR.cardano__nonce, str(nonce)),
+ ],
+ cancel=TR.buttons__cancel,
+ )
+
+ with trezorui_api.confirm_action(
+ title=TR.words__warning,
+ description=TR.words__know_what_your_doing,
+ action=TR.ethereum__revoke_warn.format(account),
+ verb=TR.buttons__continue,
+ external_menu=True,
+ cancel=False,
+ ) as layout:
+ await confirm_with_menu(
+ layout, menu, "ethereum/revoke7702/intro", ButtonRequestType.SignTx
+ )
+
+ with trezorui_api.confirm_properties(
+ title=TR.ethereum__revoke_title,
+ items=[
+ (TR.ethereum__approve_revoke_from, account, False),
+ network_item,
+ ],
+ verb=TR.buttons__confirm,
+ hold=True,
+ external_menu=True,
+ ) as layout:
+ await confirm_with_menu(
+ layout, menu, "ethereum/revoke7702/details", ButtonRequestType.SignTx
+ )
+
def confirm_solana_unknown_token_warning() -> Awaitable[None]:
return show_danger(
"unknown_token_warning",
diff --git a/core/src/trezor/ui/layouts/delizia/__init__.py b/core/src/trezor/ui/layouts/delizia/__init__.py
index 791a8fc2..78b0a3ad 100644
--- a/core/src/trezor/ui/layouts/delizia/__init__.py
+++ b/core/src/trezor/ui/layouts/delizia/__init__.py
@@ -1528,6 +1528,99 @@ if not utils.BITCOIN_ONLY:
await confirm_linear_flow(_step1, _step2, _step3)
+ async def confirm_ethereum_eip7702_auth(
+ delegate_name: str,
+ delegate_addr: str,
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ from trezor.ui.layouts.menu import Menu, confirm_with_menu
+
+ with trezorui_api.show_warning(
+ title=TR.words__warning,
+ button=TR.words__are_you_sure,
+ value=TR.ethereum__auth_warn,
+ allow_cancel=True,
+ danger=True,
+ ) as layout:
+ await raise_if_not_confirmed(layout, "ethereum/auth7702/warn")
+
+ with trezorui_api.confirm_properties(
+ title=TR.ethereum__auth_title,
+ items=[
+ (TR.ethereum__delegating, account, False),
+ (TR.ethereum__to, delegate_name, False),
+ network_item,
+ ],
+ hold=True,
+ external_menu=True,
+ ) as layout:
+ account_info = [
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ ]
+ more_info = [
+ (TR.ethereum__smart_info, delegate_addr, False),
+ (TR.cardano__nonce, str(nonce), False),
+ ]
+ children = [
+ create_details(TR.address_details__account_info, account_info),
+ create_details(TR.buttons__more_info, more_info),
+ ]
+ await confirm_with_menu(
+ layout,
+ Menu.root(children, cancel=TR.buttons__cancel),
+ "ethereum/auth7702/details",
+ ButtonRequestType.SignTx,
+ )
+
+ async def confirm_ethereum_eip7702_revoke(
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ from trezor.ui.layouts.menu import Menu, confirm_with_menu
+
+ account_info = [
+ (TR.words__account, account, True),
+ (TR.address_details__derivation_path, account_path, True),
+ ]
+ menu = Menu.root(
+ children=[
+ create_details(TR.address_details__account_info, account_info),
+ create_details(TR.cardano__nonce, str(nonce)),
+ ],
+ cancel=TR.buttons__cancel,
+ )
+
+ with trezorui_api.confirm_action(
+ title=TR.ethereum__revoke_title,
+ description=None,
+ action=TR.ethereum__revoke_warn.format(account),
+ verb=TR.buttons__continue,
+ external_menu=True,
+ cancel=False,
+ ) as layout:
+ await confirm_with_menu(
+ layout, menu, "ethereum/revoke7702/intro", ButtonRequestType.SignTx
+ )
+
+ with trezorui_api.confirm_properties(
+ title=TR.ethereum__revoke_title,
+ items=[
+ (TR.ethereum__approve_revoke_from, account, False),
+ network_item,
+ ],
+ hold=True,
+ external_menu=True,
+ ) as layout:
+ await confirm_with_menu(
+ layout, menu, "ethereum/revoke7702/details", ButtonRequestType.SignTx
+ )
+
def confirm_solana_unknown_token_warning() -> Awaitable[None]:
return show_danger(
"unknown_token_warning",
diff --git a/core/src/trezor/ui/layouts/eckhart/__init__.py b/core/src/trezor/ui/layouts/eckhart/__init__.py
index f088e267..056bff00 100644
--- a/core/src/trezor/ui/layouts/eckhart/__init__.py
+++ b/core/src/trezor/ui/layouts/eckhart/__init__.py
@@ -1520,6 +1520,102 @@ if not utils.BITCOIN_ONLY:
await confirm_linear_flow(_step1, _step2, _step3)
+ async def confirm_ethereum_eip7702_auth(
+ delegate_name: str,
+ delegate_addr: str,
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ from trezor.ui.layouts.menu import Menu, confirm_with_menu
+
+ with trezorui_api.show_warning(
+ title=TR.words__warning,
+ button=TR.buttons__confirm,
+ description=TR.ethereum__auth_warn,
+ value=TR.words__know_what_your_doing,
+ allow_cancel=True,
+ danger=True,
+ ) as layout:
+ await raise_if_not_confirmed(layout, "ethereum/auth7702/warn")
+
+ with trezorui_api.confirm_properties(
+ title=TR.ethereum__auth_title,
+ items=[
+ (TR.ethereum__delegating, account, False),
+ (TR.ethereum__to, delegate_name, False),
+ network_item,
+ ],
+ hold=True,
+ external_menu=True,
+ ) as layout:
+ account_info = [
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ ]
+ more_info = [
+ (TR.ethereum__smart_info, delegate_addr, False),
+ # TODO: switch to non-Cardano specific string
+ (TR.cardano__nonce, str(nonce), False),
+ ]
+ children = [
+ create_details(TR.address_details__account_info, account_info),
+ create_details(TR.buttons__more_info, more_info),
+ ]
+ await confirm_with_menu(
+ layout,
+ Menu.root(children, cancel=TR.buttons__cancel),
+ "ethereum/auth7702/details",
+ ButtonRequestType.SignTx,
+ )
+
+ async def confirm_ethereum_eip7702_revoke(
+ network_item: StrPropertyType,
+ account: str,
+ account_path: str,
+ nonce: int,
+ ) -> None:
+ from trezor.ui.layouts.menu import Menu, confirm_with_menu
+
+ account_info = [
+ (TR.words__account, account, False),
+ (TR.address_details__derivation_path, account_path, False),
+ ]
+ menu = Menu.root(
+ children=[
+ create_details(TR.address_details__account_info, account_info),
+ # TODO: switch to non-Cardano specific string
+ create_details(TR.cardano__nonce, str(nonce)),
+ ],
+ cancel=TR.buttons__cancel,
+ )
+
+ with trezorui_api.confirm_action(
+ title=TR.ethereum__revoke_title,
+ description=TR.words__know_what_your_doing,
+ action=TR.ethereum__revoke_warn.format(account),
+ verb=TR.buttons__continue,
+ external_menu=True,
+ cancel=False,
+ ) as layout:
+ await confirm_with_menu(
+ layout, menu, "ethereum/revoke7702/intro", ButtonRequestType.SignTx
+ )
+
+ with trezorui_api.confirm_properties(
+ title=TR.ethereum__revoke_title,
+ items=[
+ (TR.ethereum__approve_revoke_from, account, False),
+ network_item,
+ ],
+ hold=True,
+ external_menu=True,
+ ) as layout:
+ await confirm_with_menu(
+ layout, menu, "ethereum/revoke7702/details", ButtonRequestType.SignTx
+ )
+
async def confirm_ethereum_staking_tx(
title: str,
intro_question: str,
diff --git a/python/src/trezorlib/cli/ethereum.py b/python/src/trezorlib/cli/ethereum.py
index 46594db3..e97c5f4c 100644
--- a/python/src/trezorlib/cli/ethereum.py
+++ b/python/src/trezorlib/cli/ethereum.py
@@ -676,3 +676,40 @@ def sign_typed_data_hash(
"signature": f"0x{ret.signature.hex()}",
}
return output
+
+
+@cli.command()
+@click.option("-n", "--address", required=True, help=PATH_HELP)
+@click.option(
+ "-c", "--chain-id", type=int, default=1, help="EIP-155 chain id (replay protection)"
+)
+@click.option("-i", "--nonce", type=int, required=True, help="Transaction counter")
+@click.argument("delegate_addr")
+@with_session
+def sign_auth_eip7702(
+ session: "Session",
+ address: str,
+ chain_id: int,
+ nonce: int,
+ delegate_addr: str,
+) -> dict[str, Any]:
+ """
+ Sign EIP-7702 authorization.
+
+ If DELEGATE_ADDR is 0x0000000000000000000000000000000000000000, authorization is revoked.
+ """
+ address_n = tools.parse_path(address)
+ encoded_network = DEFINITIONS_SOURCE.get_eth_network(chain_id)
+ ret = ethereum.sign_auth_eip7702(
+ session,
+ address_n,
+ delegate=delegate_addr,
+ chain_id=chain_id,
+ nonce=nonce,
+ encoded_network=encoded_network,
+ )
+ return {
+ "v": ret.signature_v,
+ "r": f"0x{ret.signature_r.hex()}",
+ "s": f"0x{ret.signature_s.hex()}",
+ }
diff --git a/python/src/trezorlib/ethereum.py b/python/src/trezorlib/ethereum.py
index a8b017ea..0037552e 100644
--- a/python/src/trezorlib/ethereum.py
+++ b/python/src/trezorlib/ethereum.py
@@ -470,3 +470,25 @@ def sign_typed_data_hash(
),
expect=messages.EthereumTypedDataSignature,
)
+
+
+@workflow(capability=messages.Capability.Ethereum)
+def sign_auth_eip7702(
+ session: "Session",
+ n: "Address",
+ *,
+ delegate: str,
+ chain_id: int,
+ nonce: int,
+ encoded_network: Optional[bytes] = None,
+) -> messages.EthereumAuth7702Signature:
+ return session.call(
+ messages.EthereumSignAuth7702(
+ address_n=n,
+ chain_id=chain_id,
+ delegate=delegate,
+ nonce=nonce,
+ definitions=messages.EthereumDefinitions(encoded_network=encoded_network),
+ ),
+ expect=messages.EthereumAuth7702Signature,
+ )
diff --git a/tests/device_tests/ethereum/test_sign_eip7702.py b/tests/device_tests/ethereum/test_sign_eip7702.py
new file mode 100644
index 00000000..df38c3d2
--- /dev/null
+++ b/tests/device_tests/ethereum/test_sign_eip7702.py
@@ -0,0 +1,95 @@
+# This file is part of the Trezor project.
+#
+# Copyright (C) SatoshiLabs and contributors
+#
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the License along with this library.
+# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
+
+import pytest
+
+from trezorlib import device, ethereum
+from trezorlib.debuglink import DebugSession as Session
+from trezorlib.exceptions import TrezorFailure
+from trezorlib.messages import EthereumAuth7702Signature, SafetyCheckLevel
+from trezorlib.tools import parse_path
+
+from ...common import parametrize_using_common_fixtures
+from .test_signtx import make_defs
+
+pytestmark = [
+ pytest.mark.altcoin,
+ pytest.mark.ethereum,
+ pytest.mark.models("core", reason="T1 does not support EIP 7702"),
+]
+
+# Test vectors validated with Foundry
+# cast wallet sign-auth $ADDRESS --mnemonic $MNEMONIC --mnemonic-derivation-path "m/44'/60'/0'/0/0" --nonce $NONCE --chain $CHAINID
+# To evaluate signature parts: cast from-rlp <result_from_above>
+# format: [chain_id, address, nonce, v, r, s]
+
+
+@parametrize_using_common_fixtures("ethereum/sign_auth_eip7702.json")
+def test_sign_eip7702(session: Session, parameters, result):
+ delegate = parameters["delegate"]
+ defs = make_defs(parameters)
+
+ def _sign() -> EthereumAuth7702Signature:
+ return ethereum.sign_auth_eip7702(
+ session,
+ n=parse_path(parameters["path"]),
+ chain_id=parameters["chain_id"],
+ delegate=delegate,
+ nonce=parameters["nonce"],
+ encoded_network=defs.encoded_network,
+ )
+
+ with pytest.raises(TrezorFailure, match="Experimental features are disabled"):
+ _sign()
+
+ device.apply_settings(session, experimental_features=True)
+
+ # Revocation doesn't require disabling strict safety checks.
+ if delegate != "0x0000000000000000000000000000000000000000":
+ with pytest.raises(
+ TrezorFailure,
+ match="ProcessError: EIP-7702 authorisation not allowed with strict safety checks",
+ ):
+ _sign()
+
+ # Authorization requires disabling strict safety checks.
+ device.apply_settings(
+ session,
+ safety_checks=SafetyCheckLevel.PromptTemporarily,
+ )
+
+ res = _sign()
+ assert res.signature_v == result["sig_v"]
+ assert res.signature_r.hex() == result["sig_r"]
+ assert res.signature_s.hex() == result["sig_s"]
+
+
+@parametrize_using_common_fixtures("ethereum/sign_auth_eip7702_errors.json")
+def test_sign_eip7702_errors(session: Session, parameters, result):
+ device.apply_settings(
+ session,
+ safety_checks=SafetyCheckLevel.PromptTemporarily,
+ experimental_features=True,
+ )
+
+ with pytest.raises(TrezorFailure, match=result["error"]):
+ ethereum.sign_auth_eip7702(
+ session,
+ n=parse_path(parameters["path"]),
+ chain_id=parameters["chain_id"],
+ delegate=parameters["delegate"],
+ nonce=parameters["nonce"],
+ )
diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json
index d6671428..d8dff314 100644
--- a/tests/ui_tests/fixtures.json
+++ b/tests/ui_tests/fixtures.json
@@ -2101,6 +2101,21 @@
"T2T1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111",
"T2T1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111",
"T2T1_cs_ethereum-test_getpublickey.py::test_slip25_disallowed": "f2b80196c81ce473b7f24f16f6192ac76d9d2ca23fb0b40053c00d02b53d5111",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "458ba1f4b96e4f622e0d489beceda38011b72faad44bd05155dc74d860faddf2",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "cc39ede3aeba50f751f73f1d034b15f78a5b76327ca220fee98818e16a17cecb",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "7d9cb4df914ed4c41154fc9e8a09aa9562407d49b235250529556659d2809c41",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "801ce11b489a5b7e3c96d19c5989ab83593c142453f3ef0a4c65807666acb552",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "0a1092e8ac484390a32232b2feb2e3f60e7c7b80100abf4450fd3d7a3901ff4c",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "1437b4697226e58a6ed5c6fa957d6e99061d4321f4ff2108f741f7050e97e2d8",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "bfed0f5d3708bbb739760ab2397af286c1584dafafbe6f2daf034d31e79144bc",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "b99a96ad07321f804a87752b4fb260e836a216b2de21b3e15f30ed55cc1c1e8e",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "8dc1f989315463b04b43a41c309b3d6aaadfd9bcb0c5795f51aadb20bb48be0d",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "bc45529ede7cf766f941a4b9cb4d52077cb5505ccc15a4da2f812ed0851f0972",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "41c63e081c0a2d5cfae1ccd33fcbab0ba01cf4cb1f809ffced3aed9c08b73629",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "1554edec55969bf24efa3491c8a316b245a8052b89baa0a829ad3778bb39a2e1",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "06f36bc3ad9ed32fb55aea6de9327fb724d4041d968102344a1540d83bd55b73",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "b4ef5fc99d433b988d8f4af980391f9f2d3a5f45a9a02662d56f9a1873796539",
+"T2T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "b4ef5fc99d433b988d8f4af980391f9f2d3a5f45a9a02662d56f9a1873796539",
"T2T1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "58f7b6f8a490b8ed91257e81141927d12151874eb174936568e5295d1b279069",
"T2T1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "7f02d8e8494aa9b013086e8d43c41fd0d29359bc5fbae2c0fa47c64a9d4f9414",
"T2T1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "5f870b335fb19cfb2a7d194e98dccf9db15c551cecb42a65f1606c2177d40791",
@@ -3908,6 +3923,21 @@
"T2T1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881",
"T2T1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881",
"T2T1_de_ethereum-test_getpublickey.py::test_slip25_disallowed": "efeaf51fe18b983e9b1a6947a939ad305a92e57798fe07110bb61c0f65755881",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "9b98e55bb43b52cadb33204eed1d3b029bd8a2c2c8206610ecadbb05fd1116ba",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "3943b5b3f15e7b20363d47838478ca5d956d56a6cc869b5b3257c680ae573757",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "91cb1cb3bae6ab0c95d8ccb81b62f80e84ec550dd1e277c994000c7d19d9ad2b",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "9cc2008d63122ef113f8a8cea198c444cb5712310a7fa92b00cdf8e273ff4c16",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "fecf530572917ce7bba167c30e27aba14ebf56bb46241db963f45782a6543a9f",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "34b4c0eea97888c413f48197615a765eda4c219b2800f8f0f5f8b24d95d2a921",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "10d1faa0292cc4ce9c41314975fc0d6e8d24c530d0b894139831ee8771575c22",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "c962638245a6954834f97601197caa5ae4e8d8cb3509ef05540dfd260b720f0c",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "0d5b3712f814f64dae44887aa2b5f2af26d58eefb9336b91a5786f8e12c60ddb",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "c6c10b4759980e4e0af90cd404f9fd0a88875015074be90758d905099adc4c3a",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "623980b5bcc158e1fbb4ca0cd40e11d1ff541b8e5e9967028734cdbe55a6743a",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "d071ca1fbc0ccea1ffa416bd5b2cb4a02f2ef3928d724bd380e65b701965c47f",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "9db19873786ae497daa791ab8ead52c2484b38285e4955c90c9b5c14146deefc",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "18e9a25c2bdd7e78dc9dca894c96d5078fc77d94a1e6b1c7bc99beb96b271b19",
+"T2T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "18e9a25c2bdd7e78dc9dca894c96d5078fc77d94a1e6b1c7bc99beb96b271b19",
"T2T1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "ee40c9711166b01b69c96b76a8875731510cdfa448aa5c11ffa30dadf8179965",
"T2T1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "b5f2b9135b0c36b5384a0a6731d4487f08da5260935fa90c076a88dae443b3bf",
"T2T1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "7454c50387acecce8f54812771e0248153ecc31444921e64d732552ea5ba4b53",
@@ -5715,6 +5745,21 @@
"T2T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79",
"T2T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79",
"T2T1_en_ethereum-test_getpublickey.py::test_slip25_disallowed": "8aa7c68cd09e700e8c6903dcfc39c4a66214481c12c34dc56762829478399b79",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "55544aaf087ab4e158554c037d42e43968e583f7985b9e31b76c5b645a1050fa",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "3a3659aba258f5215d401f33e7b83bb716f895d96aedd7bac36ec21c7a0230c3",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "68680d947a45813febe85f09b69712500f206a6749bda7e4a07330ec27de9a6d",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "927d01cf64c70a0c1c6bdbf32942e1561510bce4570f78933b2aacd8178c2b12",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "fe8d68127480099649f060a8e6afb19c38dba3baca2985f4229f4618bf864d39",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "c6a4564349eddcc0cba30c47cfa2eb00a299bb426d2cb22cc5f043b237939419",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "2514e3f14b316fa22e4cd23e019d1f8cc76fa93731ca08b3b99c55da0fc96152",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "e454fb6a01d5ab77ed044e07f92d9309c8a2a0d30a760ef2aa24b0504e1df328",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "792aaabcb06f28f3fa34db838b09ad22437db014375dd80008a78e3ade8cf766",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "42e938ab2a0313faf1473d74d4e2a7800d4d67a05ca888d97e223f33dff43bb7",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "e1e0ce9c993cc5c5dd7d0dbe88d1e2023df0bd4cc5d8984ac8c1f894f092e364",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "d4112c1feba7b679a42ad954810176a84ae02afd8c7ddb36cba803f0a57bed5e",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "934dfe00009110cad9a28439e5d5722c69690e876ce5c9ee7e697784035cee06",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "7a6feaa1989a2b1558101bca512657147b7b542992d3b652a1e8c19e4c682c8a",
+"T2T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "7a6feaa1989a2b1558101bca512657147b7b542992d3b652a1e8c19e4c682c8a",
"T2T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "a94b38b3e4bd238a76629fdb1db957e74eefc68b73976eb1c16e60342c808de7",
"T2T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "db3223b9060fd7364977a9594a248c6d0ae2ef225cf7d0dc29e332fda81cede7",
"T2T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "d45bb7d983a44b4930dd0485d62eb8fa774191d575b512297a27e42ee89bb9bc",
@@ -7540,6 +7585,21 @@
"T2T1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903",
"T2T1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903",
"T2T1_es_ethereum-test_getpublickey.py::test_slip25_disallowed": "17d836396f272c01cafa175aa87b0c076aedf7698c935d1921c7d3d7e8911903",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "da81b3af12ee6f0a396e2b7288df8fe76f357e9a6b0935239468c89c672af321",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "18628938b956d0ce9541adaee6d2357e4e2f0ec73a04eb6205ef2c43dea1ff13",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "3e4c7bacf7139d44183ed91ca1ecf17603a72ac2e74d8c67d38b2c06524356e8",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "dd0f5b2073a3d37a4c22bfa9c37c224729789b5b1f9bbf544e94be6a5a6427ab",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "a6a8f661cacc94bb00d711cb7d0210451a44f95fe7c92c06705332e0df8f9d65",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "35360fec2ae42dfdaa065ef3659b54ea54995934630f161548d9f34cee899163",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "6178be03786087a4788058e82e2e8c9a9469efe8448256c0687c2dc6b052520a",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "6c6141542f82f3f1b3ad158d72d212cc7f9f55c853dae0c46a9dc1a41414ee38",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "4ac52d8a46b914ea5f5cd7740101fe584ac7e1c3b765ecfcf8cba5511d8e44f5",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "f888ba14df5c18073ac127934b3ce3be381c3c635d3e070bd665b3de7de1fd93",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "3243797a00db902b0c18dd7dbcb9c352d80c91bc16e2db75954ca6f7ae2dccdf",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "b1073639c6549c1e76adea0552f72cfd1450cd045a03e6010d7f1a46b3aa45d4",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "1c88b4bb12f8098ffa45b3d682032a880083edc3a8a70baed14d3205390ee537",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "33dc509ce9a6d56f2302a48b9fe1e10c2417a1aad187b2bf0f1aa5bb51a4c0fc",
+"T2T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "33dc509ce9a6d56f2302a48b9fe1e10c2417a1aad187b2bf0f1aa5bb51a4c0fc",
"T2T1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "015ae4af8b72f0f9cd18481acfce76131a2cd34a9456a2ecdc9849d494f7eff7",
"T2T1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "313d04cff8f097674bdabd9aa4364ce2e77fe3c7ea57f3e3e564c4cd0863d607",
"T2T1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "9109ac3a3da39f67e5594389676e1c14db28116908634d504cb843da04dce03c",
@@ -9347,6 +9407,21 @@
"T2T1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a",
"T2T1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a",
"T2T1_fr_ethereum-test_getpublickey.py::test_slip25_disallowed": "7e5a99a4b6aad4cdf7a9f9aecf483faa381108ee2108efaba88f261e29ac1f8a",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "53fdabc5fec05991962c2c991573737017d7d85c744e10792a4cf48e63f36b3b",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "8b7a70c0919a142db1af6f3278605e5e1bfbc620a61a90b47e44eaa8419cc450",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "aefd29d10b777e22cb90a2774e0203c46d1c20df6458513a0d8576da062a6c1e",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "46ef0f1302bd2c11cb55c0918448ce35a3a1c3d6bafa5d8681686b04d12c0a41",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "a3e483a95a4e775a5b0e2e6332755c4ffbd29b4155d03b1208fddc555200975c",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "41d43ea09bcba2ce9c2b869e312596ebe2c930c4837f4b70c5e9a924f176e2bd",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "1701b3c6d49fab6165518a6d73d55e67b97feb60ec590eeb5e2ff399777523f9",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "e3144f715cb9f04244e8697609aae4510ddac70fc23d58ea696d9389909a1c62",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "8e166d742b0b5a2da8f6bf16bd774feb82db87984808eb7043c05de3f92dcf29",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "2900afd4045a8bda74501c948f73c2ec6afbc32013fa57973c81577aec2550cf",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "203f7b9fea15c956335ecb5654aede801f127c2b593aa5dbc50404b210b75d2c",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "491844d202657771d8fb2e316b2ed7a4e8eabcc58533b716d286c72e2748aa24",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "5b019e86f51892f45a4df6cc272091acde451f199b60b4b3bda9d729858d91cf",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "1790037292baa724e847c091feb862c89389835b24afc686963a45ac25ebd633",
+"T2T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "1790037292baa724e847c091feb862c89389835b24afc686963a45ac25ebd633",
"T2T1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "09c5e04c8a8d2759ba93aa915ca67d2cce354010f77aeb468d5ff3993395a2c3",
"T2T1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "67e498d6c57f7ed88843988e721f552af584f4d727d6896dfba08ad932a064b7",
"T2T1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "2546e2cf07f8f0cf195129878527f17763d43066ed67e577fca434b83e10ae95",
@@ -11154,6 +11229,21 @@
"T2T1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2",
"T2T1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2",
"T2T1_pt_ethereum-test_getpublickey.py::test_slip25_disallowed": "020b255e04b59e53d2aa87ae960038f4538d350de28df15a1ac41b376e9d04f2",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "e2ec6dfddab16ca4e8f58fe00a20ddd56df0b42c899b5086cc8cbb1ffb704987",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "84a087bd57f7489c0f6bba4e529af18520f5dc34e4aec05cfb022fcce67fe689",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "943e4984486641366c0f0ccdaeacd1f6d06d0d8d88ba7fa1433c38f7360bee84",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "cc570ca0954c39253f71be586b0bda8d8b42c1004fc49fedd739491b222028ba",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "52e9ab5a274543e27d7faed604d4b3bb4cef20e4c48a0398eda74c40811b7877",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "f093985cd77367951afd7b9ed26be46260c49e72e64fbcd9c800429b40ed7a35",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "7d76acba1cc70382f99be4f03b1520152621b13b8a1ef6133b6bb2c137bcce61",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "1cd4f7957414dc24ad7e494cf39baccc2f53b10f821dad581b0dbe3f46ee8d33",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "04e3f8f6de2619ab82324b6a4ec1fb715da3ac78d25069acb8dd46412c1e0130",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "9a92f3734a5fb5e439c1747558c1a2a3e765f81456ee3ba4a004e4219e447e60",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "c8a7bb8d84539c501e0a209fbd069cc871c1416a4684a2d7e00de8ed187416f5",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "dd5431cf1b89553f2b560051abe046b210402a770f3816ae0c8cc3d6ee6b460e",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "87965e4cfb23bec5a044e63de789fb31f13a1a50fea83a597cc3ea557e85647e",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "101980adaa8949175596f2b7733e40a0299f5b8221e3aa574b39b00c4d7efd05",
+"T2T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "101980adaa8949175596f2b7733e40a0299f5b8221e3aa574b39b00c4d7efd05",
"T2T1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "0a6638d9a72f7d778432098bd673f7f052027084a1a88a461cc243f2bc53ae62",
"T2T1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "38d78ba60b744e399fbc7cf3b0b12dea20926032936b9c03ee91366aaa27beaf",
"T2T1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "114fcb9842644356b75899d3bf34e91591b15755b4cf8bb86d4f8819235fe6c7",
@@ -13212,6 +13302,21 @@
"T3B1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb",
"T3B1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb",
"T3B1_cs_ethereum-test_getpublickey.py::test_slip25_disallowed": "aec89f6952811bcfa54db3842b2e2e24d7ae162a65bf19424b4e6b6620fe70bb",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "c889b827aa0ccdc784e7a592428729921db1ffbf40f5701a2613b5695a49894c",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "e739a82f0f10c4d55d278de1cdd676cffb21f095f3189f51acc95f8c1628b1b1",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "f5e31a9c7d25fd09ef0a5662ef30837b50374b5e9e2ec4e735b6e39be9e5fe58",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "3448f292e7748f1694fa8db683e2080995d9ce2ecf46d26fa0ccb252201466d3",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "411af56bef900d288aee64a0f276e50f336208d5ef8cff8675271f9e172ced95",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "626fb8de0128d24711e17d40da9d1cf5b852636be98dc4b3c45c5fddfe9687a5",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "73a3fa39a4f2ec1ae3ea4af588f0a0ca978d7b1e6fa49d23d393ddaae11ad055",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "d0cf15acd2bd6a7a3a778dd1e5ee96fe51ab40687b6b2bd76830712ada0d27e7",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "956bbd0ccfa271b2152dfa4575bb36104987127360e04d3bfd182d3edff98e02",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "9c96880c76250e0060be83f123bf76e9e815f7e0054289ccf6327c5c0d55752e",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "c7e87f45c1919aab8c5e0f04697b67b8af9e57df52d9cd8f799bd3e66d31e18f",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "c169c422941603bcd0ff72f71da1b2b418fcf4737497cbaf65ff8c7efea2bfe3",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "305c959477652a61fcdd6f45f10141ea13dfdd87764e7df75914c5870460a1ba",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "34d3d8346540472f81bf6578439a0f3bd0f38953f3b8543d08f6c2a5afa385f1",
+"T3B1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "34d3d8346540472f81bf6578439a0f3bd0f38953f3b8543d08f6c2a5afa385f1",
"T3B1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "39c7debf135b64c561bba83e7d22cd292bb479db3a70db2ccfdbe0d8f78656d2",
"T3B1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "4d90583cbe6bafbd0425baf625b4ee35a26f409119c8e87b35f8c013366e5324",
"T3B1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "18622e53e9ded84ac6ea556bd3fcadbae0bfbbaec0b00c1d6fd2702f4b75a4f6",
@@ -14958,6 +15063,21 @@
"T3B1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde",
"T3B1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde",
"T3B1_de_ethereum-test_getpublickey.py::test_slip25_disallowed": "14dfefb39e3707b5294815085c5d94626e4e632f7fd9ca60df4b28e57d015dde",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "1f3594168565b605664fbf8817753f1dfa9f20f0da71c7f728f718e3887ce708",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "68711231b92a81ce490329a41307814f89cc8223b0f0f97213f3262388017d31",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "57c57c9ddc79601b2ccff456fcc1797af74bfdea2c998d0cda99d03d35e5ab56",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "dd7ae1afebe83d70ba19ae1f603265a24d3ba975203977d560d545f68465cbc1",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "f626da49e3e4aa6e46030abc4d8c69d0a8fa1339b40e2790fa33d5ca3dba65f2",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "f8d68dedd96952b2918aeccbbd029c1ae58e0d95d3e91753140c29bf1f8bcfad",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "727e318ec7af12410cf52dc25f1fd264172403f009dd649fe012eccd40ce588d",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "30229330625b59acb9d880a7dcfd485396e959009e676c115e64e047cf5d582f",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "c9f7287a7dcf28295760c808cf5972323e7bdc0daf046b6f14acb26bf38f047e",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "a2f1e13a118a6910c8991611aa3a48eb56e83ada5870006f19b052a4ded38a19",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "0ee65803f80473994f1695606a2bb770577b1dce4b0efefc8c35963914d7db22",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "45c17923462a33896fe3aa0b6c1becbeeade70e3f26f755dab1171c3d06e8a8e",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "8247d3f28e7cd0bcf5c15866f97d000939e88701032eb60edc24c70b8ee4d1f8",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "d479f6f0354bfbc8590826eb152afb0c8f96b61b1e32ba5c5f8a397e650c5a36",
+"T3B1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "d479f6f0354bfbc8590826eb152afb0c8f96b61b1e32ba5c5f8a397e650c5a36",
"T3B1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "6721f0119b4201daf22b0ddf300f2281cc18a3848eadb5ba5cb1808df54041ff",
"T3B1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "12f3db363cc8e8b658dccccbe1ff2f230310629b33f6212cc77ef5cad6f8aec4",
"T3B1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "e98666820338eed0f165cb04371ff6deb331b3c4ff039570e52abe55d07f90b7",
@@ -16704,6 +16824,21 @@
"T3B1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596",
"T3B1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596",
"T3B1_en_ethereum-test_getpublickey.py::test_slip25_disallowed": "7945fdf0623a34efada654fe62a57fa06c6ab0cf4383bc14c6b7acd594b10596",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "f4e041e930f4a758fd2c61c245a9c32d46da1adb31ada85ca09095828fdef9ea",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "4c58dc44af2f0f21e5729c5dedef0124d472e9c71de6774340290b8c0fb9d336",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "03a997a44626c558ee3c210ac6791f235770c92bc540955f58c11936b7064973",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "3c9777ff8a96946c472cbccf8c293a185e69ea3e929ed2ec2eb379a4ef1b7a6d",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "bbd96f75fa850c0fdf7a4a51eeee1c7815027cd6eadc6636d3402ace67aa74a6",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "1f151fd2071db0fe97079922058e0f42dfd98c94a85a8606b7d9ef37f71c91dd",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "de1626fedf6da6d4967d601bcfd3b951862f44f006f5ede05d9c4e0fcdd8da0e",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "9cd8ee1eb5927fe6c28acea1457ff573b28e71acb587efa279b2da8b9fb0116c",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "7cb4638489e3cb35a457465d64d33da09bb4705b778899b51e484eabfa9c7e7b",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "06bf95e497be8aaf2f19079451d2542bb17e81fe1b2f8b7d235a0e44887e1e8f",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "210c57ae152fc89daf1a44f725747ad8b74de6521e6f5bd44613675e5affcf0e",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "ac67c018e284c1a32f266a7e43a72e3362451b61c86f678083974faaadb4c35c",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "35b724ab92c7decf1457e6c3d20d879ef087674c41187559f2e975f11c9da85c",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "db90d1bcab6ac9e22dc44c4cb1df0fee37894895dc1b4404fecffe2a4b64ec4f",
+"T3B1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "db90d1bcab6ac9e22dc44c4cb1df0fee37894895dc1b4404fecffe2a4b64ec4f",
"T3B1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "2d181e758122e756dcbd9fd6426d45cd4617589ab77e186c08cc8aefd89c8493",
"T3B1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "d1835105d76017586c4b5bfb1405f67b84f737b6edf0d2e6fceb9b1a801efc9f",
"T3B1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "aa914154da162d4ec194b741b05ddf86c01b83b2eee4d9b1b98b8dbf88ee8c6d",
@@ -18450,6 +18585,21 @@
"T3B1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8",
"T3B1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8",
"T3B1_es_ethereum-test_getpublickey.py::test_slip25_disallowed": "1c43a01a3864c17b781e3a68121bb7c4378f858ab5c4db5b3d012f138eba5fb8",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "20267fe8b142f9a08422115faf228bb1a1d648fae285073208407960129b41f9",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "92b9151535fecc3eec272bd4b7af4c8d72b4c80bbb065ac3e92d5f6fe273ec84",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "ea0537656fd47dca8b9473dddee987048316d2da1c91a58d7b2eb76ecacee38b",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "d5e95716d757157b866de06f8631b5a560f19f9884bc5bddd0acbb60c0b0d83d",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "dea9b1148746fc688052075358dddd25b23cfe0416baf83e3c75a08cf3227e93",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "db3dd8e906e436fedffb474a841fa4b3bf787a04fd5ef33fafa65e2c9f8645f2",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "167c934af8f43310c1db304646e7bc893e6bbafb330702ad6d434ae26eb9a48b",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "5905f6c2d387f46e7da220740f23e06182ef01f2a1c9b1e36a9e8ec39dc83330",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "1644bb447a1daca538af065cca1d903db24710e92dde1ae08063338698fc9ef4",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "7e77b354a4a3dc063638fb391c5b5688bca5ada1a9a47ed75ed465d3dcf0206f",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "89e1b84dc5831e2a773cdeb0c464d040c925240ef63661dd07dbd5622c17a960",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "a4fedfe7b0ec6c8dea0186cf0bed95c8e5a8223d242b389025993636b6e6569e",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "5156902201a4b5f20b9e430ed38a81f3d7e170e197da261638086d25fb69e9f6",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "f05a9439d0aba4397336fdb20dd0d29f84df0ae9bccd9fe765cf08a6e4b630b4",
+"T3B1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "f05a9439d0aba4397336fdb20dd0d29f84df0ae9bccd9fe765cf08a6e4b630b4",
"T3B1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "0691badc39e8748d77524655083d893d801efcb429b7df10067b163227ff95a5",
"T3B1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "a316000296b05b802c4320c00df17c96932f6d528eac1aa63ef96a5497d7f4c7",
"T3B1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "98c39fb5f00380e7349e58cf438acf59aff3edf89d48d88e8049552e32494a33",
@@ -20196,6 +20346,21 @@
"T3B1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42",
"T3B1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42",
"T3B1_fr_ethereum-test_getpublickey.py::test_slip25_disallowed": "979886e5de665a0a5bd752457a29ad2bd0aad9d94702754cb351dc7d31979b42",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "5492571b32b65bdbf58b21cc601fa064aa1e2640195fa1f9e9c89056f97728c4",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "ad1a954d88952f43adb46d64555d904798344cf7867874b31b5b58996f195ad9",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "effb45665322b8a02e4126c942b0a6ba0bd810dbb2a8441f370255f354be8022",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "36719b45e455e4e9b47f6e65934952cd4e7aeb1bafeecb18ec84eeae0536b25e",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "6996642af145d60378d1c5442866cf7c33ff63801246c37233eff5b620186e28",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "58fc946cb95e37058a7dc35475123ec7418b61b21e4626914dde97679dfe70ea",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "7f6c468ff58d5fae903acb1b5b49aa68a60687d8a552c4900989474bc1cff69c",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "e385a61ccee0c2a3494d93b590ca73e5618867393b8a909f33d45dfececde49d",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "0d18a9e7910108000a0fb96d41acdb9b832502b97bb8f5d8ceaa304006ec25ae",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "758930655e04c6a15cb7b84f98e46341e6bf7a374f91f2855867c555f21624d6",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "61c95e40d494558f096ba55cac6ab4080a92c5aa06decab14c56e4bae4fb73aa",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "65394f80118c864418bcef1b7dec0d3602ca24024e0adfdc5f802cdecfaa5ec2",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "2948ef6993538fc7db6dafd50532946aee91c5e113692c7b3fad2a51a07df221",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "8be038fc1b13373022fa23eb3fac713dd9ae5ba549a167d954402ff9c792263a",
+"T3B1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "8be038fc1b13373022fa23eb3fac713dd9ae5ba549a167d954402ff9c792263a",
"T3B1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "f7dbf3b191fd182046a74cc53252d3fa3f384d685bb4873e49bc49b06a0bdf72",
"T3B1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "566abfa31588da9bae12eb0061909714b07f24e79edc243603e0d573c892b97f",
"T3B1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "0974fae0b7f967256e40fe72533e29ffd7f5fd50eff1a6afc9f1fe014c7b9f53",
@@ -21942,6 +22107,21 @@
"T3B1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121",
"T3B1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121",
"T3B1_pt_ethereum-test_getpublickey.py::test_slip25_disallowed": "bbd866375fe164eb4caaddceb8a49d710b09ad01ca2cf67a0006d3a0d3ecb121",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "1fbde23f7325ffeaf453ea6d670d8fc0b6fc117a14a8e951cccaaf569d3a892f",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "e75e4948bb948f6f03a84998cdbebe105f3b01fa515a72b998d2fdb1e1b5d283",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "ffb0fa4204a2564352c26d15be0b68ae1599ac79653bcf7fcc0244739a06d97e",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "b7aa2def811395551a6d0a45ee1c575cdc0bb39bb993a4c1909d0dbd00d6c75e",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "c64ad33b0d41b125473d71a1269fe94179dc7ac6287eb7acf2a5680666c723da",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "abcbc5856d18ad12d12c4e02ee0ead379659404e122f07192f501b873ff18f93",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "9a085123d73f57ad210eb3342c76ae9235f31bb187999ad728612b002b9e2358",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "8e10a0bf0081f6b505650b008edbadaaa71e2aaca992f87e9fd378caabf7611c",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "4a835e75ea759d818f7481637957d8cfb53e62ee3c5231e136c8946bd085d8ce",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "9cc24f905f5e268c94e556db8a99be9e60c02af8688aab5b8cf5d54e159ecc79",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "9521c6844d12d68894bbb40ece7f8d7ef5a72ef00215a3b76b8cf773b66e9494",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "7a0f76fce4e3969584d0846d3131eb919d55bdeb5ab2f6fcc7e59848a8220094",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "7abec547372a01fee0025a4c8d91c2ae9a2ec72ebedd9e6214a2951721bf2ebe",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "d07ce0213411c1e0bcd960510b38c149059e99cb8b185de754a72853aa307565",
+"T3B1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "d07ce0213411c1e0bcd960510b38c149059e99cb8b185de754a72853aa307565",
"T3B1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "f0b30f5f19e18c256166f616553a18ecec3b224070018e205d1f8828ecb89ebc",
"T3B1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "d806ce13b1794b90f8cdae106f8deb18c91e923c3f74c3ce9736621392b94e09",
"T3B1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "ca236613a44ef03f13971b2ef72a55635a64b2dbc81e4fe5a6a8324df369727a",
@@ -24082,6 +24262,21 @@
"T3T1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6",
"T3T1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6",
"T3T1_cs_ethereum-test_getpublickey.py::test_slip25_disallowed": "9c20243bc5dacf2442af5a8778b66a0ab7cb978e11c02fec371f109fbc9d55f6",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "a5450a7b0d6234d2e9947409794a9eb9e3edcf600be529793186a9d9a328c022",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "318a9f3700688ac5c6f1f1d8e0d2146bf2b6ba1a38b73ba2edb1aade2f8a2a28",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "706ecdf9311073e4949e98225c66139fd42733dcebc44e1ef27853ede799dcfb",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "376ea7de9065c347d84c0fedccbfc039a3dee1d2c2b419b231c51accfdef0a08",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "a72a2991ddaaab20f7e68dd38c3c8a102b715b825f0b4f1210062e8331bf025f",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "65f4ca54bcfa40fc33851994ef1a5cde451ca00027ac2caa4427cb734e9504e2",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "65e4e91ac2194208040e5e44cd55bd3ba2a74843781d6f8574eae65dfa9d5ea5",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "6766021a7e64ef05172505b93a99b227c5ab2cfc137bed94a60d8eef5ce25d23",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "547761319f13c5de243bbd29b1f0632fbd8070498bf1e898b05fec68aeec8237",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "b0df2392de68ee3c3c2d8b8791c6228d2c6014e4800e668b92dc9f26c10f00cb",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "a178e82c22be4c0f3c32e0302aaa3bd1ac19a300ec9efcd1952d10ca8dfc0e18",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "e170cbf532e928ac97c686c45847a59644d9126616137bf43a2ab52a1bf06286",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "5c324fbccfaaae7010857ffdf0da3e644a4611055a771f790c72b2ab5c1f491c",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "1755c09636002f746a1897951239f5bfd651aa1a74665fc2efdbd921597861be",
+"T3T1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "1755c09636002f746a1897951239f5bfd651aa1a74665fc2efdbd921597861be",
"T3T1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "f2188884dbc1c45a0d5a949eaeda1b79adad4382abb219ac281bd5da4321ddfc",
"T3T1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "772accbbc98b602abe059d660fb087ca99fdcea4cd928974c0f910e460101f72",
"T3T1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "fca2912bef319f77c5d459d6efdebeea51a0d17aa492a1f9a40f1b4537b99642",
@@ -25863,6 +26058,21 @@
"T3T1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4",
"T3T1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4",
"T3T1_de_ethereum-test_getpublickey.py::test_slip25_disallowed": "68c146f13417be0845fee20b1d8de4a05e0844608c2efb3cfae9f573be39f0c4",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "94d890618fd0482c4f5de24ae99f97c72e81f6b4e1bdaddb50ea6233943e282b",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "1d29a4ce45deabf2df927013e009be7d52d17b5d4b9a72037285b82fae3fb641",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "2eaecef9829d2ce2fdd67b3e4963ef5db1f689154371cd36797eff74d1170fd9",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "76f85d6780e4776f7b12b6477001c6519d889e63fef217fb9f6bd6398e70b6b5",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "eddf6e6198410f905f509928dd20164f26fa533361fd7fa92c05e8082c0eda88",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "ce4e0f639cad1b3a839be43e0025881947f5478e0176bcd29358c8d75b651e06",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "3bec3cdc5be84830ce12616d6b9516262e39cc14ce2d0d271911c048bee45f40",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "c0d7b7cf2e514dfe1db3df2af109a7e2820559b3e59cd024d921a3176265388c",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "7772936e612b31b977288d405d6366a9f6673af30d2179033709f6dc6f65a595",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "3f7dd4cd580cfe4a10b4ed4ae1d200f0704bc0533370ee8c10de2a8399c80503",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "6e43e50da08d0d97f9938fd120f496e9a2cbce362ba99a415de227fe959267f2",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "f685ded33969acc098f0f19b54e34eb07a38db2ec1628efe603200c6ae7493ca",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "4b4414c6307c6d044b665a3569938aef1bc253dc2149f5712d53cbed49d13244",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "e1a673c3fa0f9997c650b0e2bd9e54aa57d6fd3f85524a9a336dcd05f80bda35",
+"T3T1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "e1a673c3fa0f9997c650b0e2bd9e54aa57d6fd3f85524a9a336dcd05f80bda35",
"T3T1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "7bbd796a701c2fddcb7a5a7984e1e765df256433978ebabb711f09c509b9aa5e",
"T3T1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "d93d26d96e7b83ecf464a4aeea68a8617ab60eae4b7299ecf9cab63cd07be22c",
"T3T1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "36d6e36e3a0cab0b5297edece3e12ecc55c427a66f7f1345a5eb5eff4942af26",
@@ -27644,6 +27854,21 @@
"T3T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc",
"T3T1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc",
"T3T1_en_ethereum-test_getpublickey.py::test_slip25_disallowed": "0064e8a52b9bff0c2a31432fa781b800afb21e8910d60f303671bdfc8d8425fc",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "1106017ee1965fb533e4f6c9fcfb7086ef0513b9f38ae5622739b183be4393fd",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "030aeb86ad66add31858ede203806a0578343da402825b74c0d0478034e57ba4",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "0e2e9c47888579b49104b91946935542286d6406390e4e3c95365d57ca8bc93b",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "f7e1f82ffe69d0279df903e1f4fdd4c592450164c8ee9efe002127351298c55e",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "67bbb18a9ef00bef40da5290d1fcd702460fae35fcfc6843b518139dd2440806",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "b7c66975a40cef909a10867d8d54ebefa46acc0b127bfaa819d1fbfbf4f3b47e",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "3a1ba31927d318885f4e4fd4188d7243e2040dd2108131e7ae5f7cd5e1ddc9f6",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "7896ec29f1043bf2a0f6f1e315f3cb7929ac89fe3d3bd4f69c92148c329eb6a6",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "7d5851095bdbe46ad35e46da4fa46b00d24349758209833f823775b3758f005c",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "f069502ed9e94e437fd5c3f5d316aa3d6dcd115889e363131161884d808e0fec",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "d8fd983670881d3fa70f8672bc0a34c2f3825c0a63304d646eb7c347c1188e90",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "229ecbffdf310f670a0ca58d93045709072e9d07b8f80887ffd082683295a5e8",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "d4234cb52ba292660567c43b411dfb602e7bcb3ef1e93cfc09fcd9ace1507829",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "9e4d48ea986019efb1608fc59258f0f8b2f3632eceea054f81e84a14759c140f",
+"T3T1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "9e4d48ea986019efb1608fc59258f0f8b2f3632eceea054f81e84a14759c140f",
"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "d41271f94f9353e282576bcc74c9a63cee66248072b63a2db77b46412f084fd2",
"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "6d453d72dd95c4cff2a38da2f780a302af0a4147df7f90840ca675ceb5cf4c80",
"T3T1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "6dd3fb5b30b053d7403af36e1303d23791acbb85282768d499e2cd7c593ee50a",
@@ -29425,6 +29650,21 @@
"T3T1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d",
"T3T1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d",
"T3T1_es_ethereum-test_getpublickey.py::test_slip25_disallowed": "41b9c9e85d64891dcfd03d675df77c533f035a2d191b161144d00afab69a589d",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "2673329330b43b1e1ee52b2a79f386883fbfadd5a2895c1a5cfc30bbb7b89828",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "cb271eb36723877ca8b3e335064866f1b2b2b2be37ce73a3e7a29c5b68285e4b",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "b3879b9259517904430afddb12bf5b4435e72ea6f5a2840c92333680a62c5480",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "e543071df9f5f545b87c61620c842fe48346d3368cf0a223da11b095716eba9d",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "a8365619ef11ac73362883ca3b3060935a58951ca0eb8a3b957c0f3144c43efa",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "ea4bfc13eccd18d3204a0beb374067ec62c4d7d54175b2ce6ac42d2f6a63076b",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "8cb8cd728aa60c8cca9b10d1a85fe4cf685bd4c4195050dba2a7fad9f08fe067",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "7334e601dc2d731b302dba73c23f72d70ec29b990118355d277fc975fcacf250",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "7e1da1003c3e960d2f9f85297374ba5ec14e27fce379da890fefd4ff39ed9758",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "93bc79edc4dac931a9787dec88ef93881485e237cfb5c2f1e8a926e45c29e36e",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "7df63d7ba1ae17367f206eee4b96c810bf9b957f15ace3481556fbc884730fd0",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "3d0db6bfa4426d7030f8e68616ffb7d1be49940584204bdc802efa4b8871a7a0",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "5270d0068e55e899e247cbf261d422d815a4ae0eedcd800ec405f228ceaf2ffe",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "7f7ae53a32d8d7bc96d35005a208a2278dcc10f4a00add69d5ab635a4a38bfc9",
+"T3T1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "7f7ae53a32d8d7bc96d35005a208a2278dcc10f4a00add69d5ab635a4a38bfc9",
"T3T1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "e813546e0ace382762be4c020f134c4e824f9db168a21a7579fb34feba5c7be3",
"T3T1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "c86e08edfabba5027cc41e16bf1a891cdba3795c8251c182be0569ef792df625",
"T3T1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "947e691db798404a8697f385807c6868da63b4144759d3c88a3eec43556175e4",
@@ -31206,6 +31446,21 @@
"T3T1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47",
"T3T1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47",
"T3T1_fr_ethereum-test_getpublickey.py::test_slip25_disallowed": "116c64aa168d12181b7a5317677ddf135d739fdac22d38ff08571dc3301c2f47",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "2ca196bd9694108602a6a1dc3ce46081dd923cf2fcd353af2c5a287c80faae1c",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "5156cce9e8c5bc07dc809e910e30aed8cc10263234c3a2e191d79c2b68aae579",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "96ff1136edbc1c71d4de5791310d3082dc166cad661fc4912abc0a6acd1a2df1",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "ad0288e2820d2ed6b08a9f404554daf1f9e20d4beb6841f8f23c13259a722acd",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "5322d4ea61703a7da9ebf20961e689e1d16153273ec38f19b046660599a573ac",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "7abe71e62a12f5011753b544193690a0fa3e24e88632ffc08f9e30e309a08d3a",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "f365629261c8b217181381cdceabf55f49e8fca221e5e3ef0fed42dbf3877fef",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "0fd87aa462a0b6b90b80635e79b39f9d3e3a36eb389f00af55accda760a9c11c",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "1e77bf62126a0f1f2a23afbba6ce8f306c5490216347b74866c8488d044f4e81",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "5adba8c4e119a10a2085c276f863bfc76c4721806f84d5b4243523102f1c11a4",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "091d8cee0eda5f497c38234e634554664a8820451587e7684cadb8b5ad13284f",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "ed444a0d715af9531942028cb253c8af3cfe42f8b11bcbe638f7a9cf1f538f47",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "1810cf99e65aa3ce5c94729ff801cd59a926c2f312b049387586e67278970a46",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "83f9e8cf310201b1cf650916d8c2c10fe876b67e53866e151eff80406269495b",
+"T3T1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "83f9e8cf310201b1cf650916d8c2c10fe876b67e53866e151eff80406269495b",
"T3T1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "3f1fcca51e5d369588c95ffb512deaf3bd0e9b957886db6e27acdf5342e10d43",
"T3T1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "57eeb46bbf193c46e507753739b371989e9e203025d23859b29d6b2038e349b5",
"T3T1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "722e3978e86314b6472c64ecd50b602f32591a48762327df4d637fc48890c9d6",
@@ -32987,6 +33242,21 @@
"T3T1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be",
"T3T1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be",
"T3T1_pt_ethereum-test_getpublickey.py::test_slip25_disallowed": "14256cd1b801d1b67a37de1198d61a80d342f39e5c5d6fa991ec7fb526d683be",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "1089e542ba70e5012022aaac078cab3aa6b76053994171d8c57c95276f10eeaa",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "6fcccc62d05903d0875436613d04a80c8e31b00f31a3ba47f04272edee20a260",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "836ca4326fc9b3158bfe1596d2e6dfbde6272dbfe0d3adf81ecda7c569272abd",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "bd281d88b6da847eada18471f4af8addfac68df8f351e4912a7904e49aa316f8",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "2b142d78eaaec9fabfd259d9c618b00790b013a9a026904637f8f82f0b094c6d",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "129d535e0a283bce60e72d93a4c91e1a59cd38a6babe51519e6363facc6fcca4",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "d0cb9f885bb02af01a52a9e3d481b41673a24d5874f5e5fd4770278332bfbbf4",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "561b94aea97e98628a5dd33e442db68c87c0cd2cce13768267827eb6258c19af",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "9a32500fdc79f8be1aa3509f958103c6bfb3f65e5bcd4cd04e3fb9995845936b",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "2134a92486a14d7c1730a75b3cf37aa58b3a2dfc2b83bf59a93defcfbf093957",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "c705e8b593d31b260421647c8fbac26e9c2f69335d0d4666ac421f7c0cf16285",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "3920e17600b40c391f98f0ee4d004090712fd08f7692c7ed0ad06c649109ff8e",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "126635e1baeb14cc6ede4712d4d2c65cd014eba13f56bab9674fc388b887d34b",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "28f440276436720bc6b3047c9f5807bb6c575dd3eed440092118ef443dee0f73",
+"T3T1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "28f440276436720bc6b3047c9f5807bb6c575dd3eed440092118ef443dee0f73",
"T3T1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "73c80737401de0e8f00b83ef74503c66ec62dd64cbd8043895d9a02ca76fc1c9",
"T3T1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "03a70efa7eb4011bda091930706aca97e599c26621869142dbc581b2be8c69d6",
"T3T1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "ebcbf232972df95b3bccb1fe6b34ccbdddc959cc4b1f9820a26e7784865fc040",
@@ -35420,6 +35690,21 @@
"T3W1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "2b06a6c36a96faaad9d1237b47e37374c5452331ad8fa3738accbd2e09ec1500",
"T3W1_cs_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "2b06a6c36a96faaad9d1237b47e37374c5452331ad8fa3738accbd2e09ec1500",
"T3W1_cs_ethereum-test_getpublickey.py::test_slip25_disallowed": "2b06a6c36a96faaad9d1237b47e37374c5452331ad8fa3738accbd2e09ec1500",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "5a3162650efbb1355fdea84180dde3931fc9d6d6b84a4ce5226d70c388a873f0",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "b1f5f8c0463582ec2674bed3e81a60600f250074fcee3ba6068381d64e9d664f",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "967b0b9e1cc07b70f9a289da1cb8ddf2e9c8fb44c89c42e491a9dac0c4975d5e",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "0a5579674e23e8fdcb095ba4eacdae67530e47c7af5ed9a994434291f51f3bdd",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "e780b74481a66b17fbe5e3c8a978ffc71e684944bf646a920fd110e990d9ebf1",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "ba24d6d9796b9623fd5192cf26552e17e9f73f190e6295b281b9abf0fbaac8c8",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "fcc97b4f6f33392cf3a9d0745635e7d861a8657f62ff1de09c8ca0e1a4e90ec5",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "2a19406741ecb0f931d855be9f6f330a04cc7b8bbab5ae00812cf6a4ff17e995",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "2da22d79a98e2c6c541f88d9cdda2ba5844a8ec80abdc10bbbe1a8d1fbbe35e1",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "af0cf470c9a6052e93865ede850d0e6072d0dd0b3244f19d41eabffa3279f299",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "fc15c5091532425aa7a18f9a7929a2190514494a6bff92884d9991427b8a7602",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "56a593bd256c9544496824427dfd7657569f41b930cbe9b357f02a01fdf172de",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "171597bdbfee2d065cd58d05407ae772d1fdf006a3e56092685fc7441355aa3f",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "c5b743a49ae6c52dcf50e5479c5b74a7e38a31e91c1bdf204035d662114a50e3",
+"T3W1_cs_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "c5b743a49ae6c52dcf50e5479c5b74a7e38a31e91c1bdf204035d662114a50e3",
"T3W1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "21a495a799ca9385fde9bc07d774f4562a05960f470a26b346e8380414b60f04",
"T3W1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "53d793a1f535233d94f772db067e525559b9bbec3d6fdb4eb60fffefefeedf63",
"T3W1_cs_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "f22efb21a5b306b8d44a227bb419286db1bcd393bde6b2401f91de1d6fc92abf",
@@ -37236,6 +37521,21 @@
"T3W1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "32c06c9f4ef6d91d183e5480b273a0aec9bd56572528ddbfb70b7cd609cbef50",
"T3W1_de_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "32c06c9f4ef6d91d183e5480b273a0aec9bd56572528ddbfb70b7cd609cbef50",
"T3W1_de_ethereum-test_getpublickey.py::test_slip25_disallowed": "32c06c9f4ef6d91d183e5480b273a0aec9bd56572528ddbfb70b7cd609cbef50",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "9842aba47929a55e1be9891af4437d79a22ce3d0dff94c09d3c76d16a4c3a8bd",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "d29d107a340d1b8f9a7a7748b18c8a4a6b77280870a84fa60db08486cd0d1e1a",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "807fadfab3d50909be50cd9f093d67b033204f69c8540aa2f7def01a3c6b33cc",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "22650ff756df94bec9ef50e24faa0f6f8b4fe57d62a5d0b04419e5a88a33e5db",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "bcced31773123f86d6bbc39a3c0465138daf812b916321d1a1c3d74d5664d1ce",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "3e20d3f481e14ac956b3505fb05808708b8ec178793fdeeedf855d6da1d8695e",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "a20ba07ee681efa3ba37682dbd67cdde6664c32b1f7266732314fc80a9b7ceb3",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "352cd4647a3a44d1325cb865cd704a5caaf276002f771e8aac7d377fff6e5930",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "ecc7a4fda0b868d04233a841190b0b1f55c5c45873c8d304216988f79ea50a49",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "cd31d329275dd870d26373af1ed2c3352bb26b0241fd25457f6e6adb55a73d86",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "aa5177ad9b1da968d6ef6d9d8eae27181dfd3593764dc399e9169bc779f23a13",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "ea8979976b21a8bd61b05838de5b0ed40908f888ae4222d3e4e68ab4bfdce8cb",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "b0d93e71659fedb8085ef8e1a1b3976893c568d3e2fef48b675a6cb81b8ae6d7",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "1d2f18cd7e11d92ef06c2d897bc645aa80d7eb92bd3d52237f4dcc293295c8fd",
+"T3W1_de_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "1d2f18cd7e11d92ef06c2d897bc645aa80d7eb92bd3d52237f4dcc293295c8fd",
"T3W1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "3253157f6f29dc49bdd3bf6e08417ea9b5c83a0561d43b909a6859f70affed69",
"T3W1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "f995d2250251412cf4534cbe40a5a492e536e793815abf7f1932b6f82de16237",
"T3W1_de_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "9c721508a619a2318c8b0fbbfa16d7ea93f756a292dabd866dcccc920cf563dc",
@@ -39052,6 +39352,21 @@
"T3W1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "90812f196e8c35dc7f35cb5a9a0e553c8fc6a610812d85b9f166e90b3f1c8b59",
"T3W1_en_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "90812f196e8c35dc7f35cb5a9a0e553c8fc6a610812d85b9f166e90b3f1c8b59",
"T3W1_en_ethereum-test_getpublickey.py::test_slip25_disallowed": "90812f196e8c35dc7f35cb5a9a0e553c8fc6a610812d85b9f166e90b3f1c8b59",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "133af9a1137097245ebc1ab12834b762c37c7019e0be337883e4af3659047b4c",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "43a813ae1230ca1c82736552f9ec5607523a32774024a1c647446393b593df5e",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "0ef0e11a201210c50a78515cab8ad94697af9ed2f81fe4816c94fefe6d85cec1",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "8a65b522cc24c8605cf917743e1349ac38cf15a69fa6ae963dbbfc838c4fc039",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "e19befefa169274035f4ea8e911ac5b5fe7ce1a30276bfa19b5f8a0efbbc8609",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "3959e63eb97f330d47e049142d53b8de2ee042cf21695c82089d7ffba5d9f90b",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "96031e00d783576eb50290dfddebbe8dd087c2325a1a5f6d08b2912e0f7200bc",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "9f0aac76150b7407caf91327330f7ed02301e0fb604ac92386c2400aff6188fd",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "df5d47702e7418f770a674f5af3fd87d4b223995bb04459446f9291f11a13382",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "ed31190f20040919c81f2f98a36eb4043f88eb1d3e3c2c0209c80d77e98f7861",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "25dad11cdf16b513fa48e2e3aecfd2a7516779cf3762311b08cbfbaf2ea853a5",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "c1c376558f2c5ea212033d33ece8c7b4fea998f68e9f2ec7ef4f9f779829c70c",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "19212a641c333a6ca28e38cd4af6006bbd7d962f0a23059a7f9cb17023239335",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "ce32cb9fbe1153f3330cba5b9326399b80406a07f5af2a0f50876266119ecc7c",
+"T3W1_en_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "ce32cb9fbe1153f3330cba5b9326399b80406a07f5af2a0f50876266119ecc7c",
"T3W1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "d5b4291941f59970edb3af2a253bd5afe35bec1a53b99d4e286fe7c29ad28658",
"T3W1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "3653c0379a025ef6c81df704492c752cd72b283e2613cfc1bdf3110d97d6b32f",
"T3W1_en_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "d63620d021074bcb66b48d7f918f32cbeb8a28fbe30921a571349cecca93c6cb",
@@ -40868,6 +41183,21 @@
"T3W1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "ddbd1412a9f69aea1c41c375a2ec0647411a0e487ec5c1ee55e24505dfc34e29",
"T3W1_es_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "ddbd1412a9f69aea1c41c375a2ec0647411a0e487ec5c1ee55e24505dfc34e29",
"T3W1_es_ethereum-test_getpublickey.py::test_slip25_disallowed": "ddbd1412a9f69aea1c41c375a2ec0647411a0e487ec5c1ee55e24505dfc34e29",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "21da6df303fc8284716e07abd704eb526e30fb1b43da936709438144f097bc97",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "830dd2bcd6d1db38ebd1de1cd4d21939bc6ef76b7edc6056f77e73638500758d",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "9bc90c638b5f58a89ac5822d124a3a7ceb18fb0d77e660b4af37170514f1fb37",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "5f1cce7d323b740ece68cc24277c763f70c62bb39d1cc3f9ed332c3134dc818a",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "4167dc870580c6223cf0b9419d06554af82c0431020dc1f394898a65dcd04c4e",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "4aadd26091c923d342ec06d73bed2742f9238237fe765b31aeca3014af4ac323",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "bb02cffe2b40051ad2c3123812da38dfab218bb6913c859ddacad3788b2991b8",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "3dadebfcca9c8366e5cab078c013071b0974bd4b4a137c43f27efa570f3de85b",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "e70a1598c1764eac8eeacb8c392f757481b2deb8a8de288f0dc419328b801570",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "f1d35c0a394957ccd0d1e28fdddd29653982f36d0887b1288c037a7528b76c98",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "956f2bc9da9421789e067127f6f7c27dda12cec46dff108632f8d8d434150760",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "145104d9c7663a4d432da026903f13a043b720e5c32819631c80cd08599e09a4",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "972c404aa34e78f9d97439df4094444e20cc5890ac5f0b4a029852ee9be8e50c",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "f7a026c15d549f0e26d5d128ad3e007e5bac3886447bb00edf19423c86e9ec22",
+"T3W1_es_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "f7a026c15d549f0e26d5d128ad3e007e5bac3886447bb00edf19423c86e9ec22",
"T3W1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "90c7ead8a48e3b0803fe24df9592d150f1a86b373a57e94ca643fb24656f972f",
"T3W1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "9502fc140c776b9e08382102c55553b3280662cb24ada96dd8ba061125c14b06",
"T3W1_es_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "ff244687871f00b6ca0ca9fe55c7b535e2b1583ebae1b615f6b1b9899e4a01d1",
@@ -42684,6 +43014,21 @@
"T3W1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "a392ca1dea666647fb2d6edfcd90e4e3cad6ab0e294ca85cda7db478214a6a81",
"T3W1_fr_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "a392ca1dea666647fb2d6edfcd90e4e3cad6ab0e294ca85cda7db478214a6a81",
"T3W1_fr_ethereum-test_getpublickey.py::test_slip25_disallowed": "a392ca1dea666647fb2d6edfcd90e4e3cad6ab0e294ca85cda7db478214a6a81",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "00d519f18a791fdcd596fd33f0da2663c438b71f385ce9f1b56b40597963d1a0",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "4b89321a5775b9dc65dc8b2cd9b722eb8b937fa715f5ac29ad1eb5a282e15666",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "1eef97dcf8b8ddf02941586ea999c80956e0516b71df33005764b27d5667675b",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "978f0016456b84b01286449999a6ebd22f44dcd581a55c0749fe011f5f4f7fca",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "a0ff6d9d10562b37c1863ef226b95073c9b0857866aaa55e46de9cdda2f1906c",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "f380a39ad8f6b30cbdacdf45eee3a360a571762d8d976ab545b025fd316143e2",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "b4cad3e6c6409d239ed86e59711d3ce73342089e2fafc4a7325c370d45da8fe9",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "6555ace34e5aa64bb661ab9b0c8c83fca7572305bd8be4669be21312c67be5f1",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "a54dc706290c45275d13edd2a531877e78123e1d72813db48d1c57f668f1d479",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "04a0007e9656a217e581af10f4a08f348aa3709802d639423caf8847e39d5e74",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "51dfc6f837ed4cb8865ce87ffcf4a9d04a1b8c78589e7e107f33cb92b27c1a0d",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "8e5fe302189ccf02d3700c50b85fbfdc845a1a31ea1bb2d5bfeda0938661d160",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "a3131a75dcfd21f3750a273827ba28fcf58b7472cc2da1fbc37826aefa4388ff",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "4ea72df700281490c05aa36f0deda74ba641a2dfb532c05dc06e2d68e87d4f6b",
+"T3W1_fr_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "4ea72df700281490c05aa36f0deda74ba641a2dfb532c05dc06e2d68e87d4f6b",
"T3W1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "4c41f53617e74c3761bb13c483699cce8a6fb50ac1ac53d9463658036b702788",
"T3W1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "bc95145309b3d913259e32642653b689894007d2e180d5efb8922150c4caf478",
"T3W1_fr_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "8386bfcbb8ea8d902f2cadac3f23db75f485b4e1e0a970dc51a17ef0b806639b",
@@ -44505,6 +44850,21 @@
"T3W1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "6fb22dca4b252028ed3f91db1fb746e30d12aece0a74e1bcc4abef605a3a9026",
"T3W1_pt_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "6fb22dca4b252028ed3f91db1fb746e30d12aece0a74e1bcc4abef605a3a9026",
"T3W1_pt_ethereum-test_getpublickey.py::test_slip25_disallowed": "6fb22dca4b252028ed3f91db1fb746e30d12aece0a74e1bcc4abef605a3a9026",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_0_all_networks]": "63a5d1610a6f4be690ab33d2735cddcbafd920503185d41add0b6804d3ef51d9",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_1_chainid_1_mainnet]": "129b2c41aed6e4186457b7dc8a76a6540f25a90d22446c875abea5acff4d18dd",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_123456789_defs]": "c586304d6a5eccc3ae297ded57d14b9fb505868aba01f7e95079b55dc26b62f9",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_2_chainid_42161_arbitrum]": "3e9b8348291b7fed3c5a6e5c42647ecee04b802629cb30acef7ca14cd38e6323",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[ambire_nonce_3_chainid_8453_base]": "d331d18d3921a7873f645dd87af99879eec1c10cb8aa33f003bdb98c8d00b51f",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_0_all_networks]": "78d81bbf105abc25c5a82f3d7436b8d884dba307e89090fb801d00cbcf21ad2b",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_1_mainnet]": "7cc68c0bdd95855b91cb446bd7e2daa074b8ed745d3ad816a3e81ea7757ad12a",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[metamask_nonce_1_chainid_200901_unknown]": "fa5c7019f1325bf77f65966578117627d0f1470f957aa87a8b0fddbf1d538214",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_0_chainid_123456789_defs]": "3b415949a6386bb3bdaaa38b059b645fbfc533564f3de2164be505d223eaf6da",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_0_all_networks]": "729a23529858c4b2dee9d45733679b7c5443aa5745c2255d288896f64b56a50a",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_1_mainnet]": "d811a18276e409b9a46378d8c996bd72b4bd211e605d7a0b988e1f5a8a6f25c1",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_42161_arbitrum]": "92da746412c4112e6fa7b8318b17770815c0ae77e13ceb0fb032aa9e79b48adc",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702[revoke_nonce_123456_chainid_8453_base]": "2d180095c6956a3ae32ae7d0d49adeba2aab5e90c944f98fb5856c06e10bba6d",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[metamask_invalid_nonce_chainid_1_mainnet]": "f4cb611441fe8310c4e880c096cb02f96bf31d57d22d76ab2097b4a65da1e246",
+"T3W1_pt_ethereum-test_sign_eip7702.py::test_sign_eip7702_errors[unknown_nonce_123456_chainid_1_mainnet]": "f4cb611441fe8310c4e880c096cb02f96bf31d57d22d76ab2097b4a65da1e246",
"T3W1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "3ebedf17157db883fd75588abf456e88a9254cc840d390dc832f0f092c7470fe",
"T3W1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "ec4695bcaecf6722c3f62b213f729506f56ae207f09dfaf60670c2177a9442fd",
"T3W1_pt_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "77af7b730cbe30f25527085ede621f041b7d25da8f08bcd506971a6202f30d83",
Why this scored 36/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.