fix(ethereum): reword contract address label.
What changed, and why it matters
This commit only rewords user-facing labels in the Trezor Ethereum user interface. It replaces the term 'Provider contract address' with 'Contract address' and removes the separate 'Interaction contract' label, using one consistent label across all device layouts and translations. There is no code behavior change, no cryptographic change, and no security fix.
No security action needed. Treat as a normal localization/UI cleanup commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change is a pure UI/translation refactor. It removes the translation key ethereum__interaction_contract and updates ethereum__contract_address strings across en, cs, de, es, fr, id, pt locales. The four UI layout implementations (bolt, caesar, delizia, eckhart) now use TR.ethereum__contract_address where they previously used TR.ethereum__interaction_contract or TR.words__provider. A test helper assertion is updated to match the new label. No transaction parsing, signing, address validation, or security logic is modified.
Changed components
core/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__.pycore/translations/en.jsoncore/translations/cs.jsoncore/translations/de.jsoncore/translations/es.jsoncore/translations/fr.jsoncore/translations/id.jsoncore/translations/pt.jsoncore/mocks/trezortranslate_keys.pyicore/embed/rust/librust_qstr.htests/input_flows_helpers.pyInspect captured patch +5099 / −5135
### core/embed/rust/librust_qstr.h
@@ -1301,7 +1301,6 @@ static void _librust_qstrs(void) {
MP_QSTR_ethereum__eip_712_empty_domain;
MP_QSTR_ethereum__gas_limit;
MP_QSTR_ethereum__gas_price;
- MP_QSTR_ethereum__interaction_contract;
MP_QSTR_ethereum__max_gas_price;
MP_QSTR_ethereum__name_and_version;
MP_QSTR_ethereum__new_contract;
### core/embed/rust/src/translations/generated/translated_string.rs
[binary or diff unavailable]
### core/mocks/trezortranslate_keys.pyi
@@ -348,7 +348,7 @@ class TR:
ethereum__calldata_digest: str = "ERC-8213 digest"
ethereum__calldata_suffix: str = "Calldata suffix"
ethereum__confirm_contract: str = "Confirm contract"
- ethereum__contract_address: str = "Provider contract address"
+ ethereum__contract_address: str = "Contract address"
ethereum__data_size_template: str = "Size: {0} bytes"
ethereum__delegate_done: str = "EIP-7702 delegation signed."
ethereum__delegate_title: str = "EIP-7702 Delegation"
@@ -359,7 +359,6 @@ class TR:
ethereum__eip_712_empty_domain: str = "dApp did not identify itself!"
ethereum__gas_limit: str = "Gas limit"
ethereum__gas_price: str = "Gas price"
- ethereum__interaction_contract: str = "Interaction contract"
ethereum__max_gas_price: str = "Max fee per gas"
ethereum__name_and_version: str = "Name and version"
ethereum__new_contract: str = "New contract will be deployed"
### core/src/trezor/ui/layouts/bolt/__init__.py
@@ -1099,7 +1099,7 @@ async def confirm_ethereum_tx(
description = with_colon(TR.words__recipient)
else:
description = (
- with_colon(TR.ethereum__interaction_contract) if recipient else None
+ with_colon(TR.ethereum__contract_address) if recipient else None
)
address_ctx = trezorui_api.confirm_value(
@@ -1302,7 +1302,9 @@ def _info_ctx() -> trezorui_api.LayoutContext[ui.UiResult]:
items=info_items,
)
- await confirm_action(f"{br_name}/provider", TR.words__provider, contract_name)
+ await confirm_action(
+ f"{br_name}/provider", TR.ethereum__contract_address, contract_name
+ )
await confirm_action(f"{br_name}/intent", TR.words__intent, intent)
if properties:
props_ctx = trezorui_api.confirm_properties(
### core/src/trezor/ui/layouts/caesar/__init__.py
@@ -1294,7 +1294,9 @@ def _menu() -> Menu[None]:
)
return Menu(menu_items)
- await confirm_action(f"{br_name}/provider", TR.words__provider, contract_name)
+ await confirm_action(
+ f"{br_name}/provider", TR.ethereum__contract_address, contract_name
+ )
await confirm_action(f"{br_name}/intent", TR.words__intent, intent)
if properties:
with trezorui_api.confirm_properties(
@@ -1811,7 +1813,7 @@ async def confirm_ethereum_tx(
if is_send:
title = TR.words__recipient
else:
- title = TR.ethereum__interaction_contract if recipient else ""
+ title = TR.ethereum__contract_address if recipient else ""
while True:
# Allowing going back and forth between recipient and summary/details
### core/src/trezor/ui/layouts/delizia/__init__.py
@@ -1093,9 +1093,7 @@ async def confirm_ethereum_tx(
br_name="confirm_output",
br_code=br_code,
subtitle=(
- TR.words__recipient
- if is_send
- else TR.ethereum__interaction_contract
+ TR.words__recipient if is_send else TR.ethereum__contract_address
),
chunkify=chunkify if recipient else False,
cancel_text=TR.buttons__cancel,
@@ -1294,7 +1292,7 @@ def _menu() -> Menu[None]:
return Menu(menu_items)
for screen, title, value in (
- ("provider", TR.words__provider, contract_name),
+ ("provider", TR.ethereum__contract_address, contract_name),
("intent", TR.words__intent, intent),
):
with trezorui_api.confirm_action(
### core/src/trezor/ui/layouts/eckhart/__init__.py
@@ -1101,7 +1101,7 @@ async def confirm_ethereum_tx(
subtitle = (
None
if not is_send and recipient is None
- else (TR.words__recipient if is_send else TR.ethereum__interaction_contract)
+ else (TR.words__recipient if is_send else TR.ethereum__contract_address)
)
title = TR.words__send
@@ -1343,7 +1343,7 @@ def _menu() -> Menu[None]:
return Menu(menu_items)
for screen, title, value in (
- ("provider", TR.words__provider, contract_name),
+ ("provider", TR.ethereum__contract_address, contract_name),
("intent", TR.words__intent, intent),
):
with trezorui_api.confirm_action(
### core/translations/cs.json
@@ -882,7 +882,7 @@
"ethereum__calldata_digest": "Otisk ERC-8213",
"ethereum__calldata_suffix": "Dodatečná calldata",
"ethereum__confirm_contract": "Potvrzení kontraktu",
- "ethereum__contract_address": "Adresa kontraktu poskytovatele",
+ "ethereum__contract_address": "Adresa kontraktu",
"ethereum__data_size_template": "Velikost: {0} bajtů",
"ethereum__delegate_done": {
"Bolt": "",
@@ -898,12 +898,6 @@
"ethereum__eip_712_empty_domain": "dApp se neidentifikovala!",
"ethereum__gas_limit": "Limit gasu",
"ethereum__gas_price": "Cena gasu",
- "ethereum__interaction_contract": {
- "Bolt": "Kontrakt interakce",
- "Caesar": "Kontrakt interakce",
- "Delizia": "Kontrakt interakce",
- "Eckhart": "Adresa kontraktu interakce"
- },
"ethereum__max_gas_price": "Maximální cena gasu",
"ethereum__name_and_version": "Název a verze",
"ethereum__new_contract": "Bude nasazen nový kontrakt",
### core/translations/de.json
@@ -1022,12 +1022,7 @@
"ethereum__calldata_digest": "ERC-8213-Digest",
"ethereum__calldata_suffix": "Calldata-Suffix",
"ethereum__confirm_contract": "Vertrag bestätigen",
- "ethereum__contract_address": {
- "Bolt": "{provider} Kontraktadresse",
- "Caesar": "{provider} Kontraktadresse",
- "Delizia": "Provider Vertragsadresse",
- "Eckhart": "{provider} Kontraktadresse"
- },
+ "ethereum__contract_address": "Contract-Adresse",
"ethereum__data_size_template": "Größe: {0} Bytes",
"ethereum__delegate_done": {
"Bolt": "",
@@ -1043,8 +1038,7 @@
"ethereum__eip_712_empty_domain": "dApp hat sich nicht identifiziert!",
"ethereum__gas_limit": "Gas-Grenze",
"ethereum__gas_price": "Gas-Preis",
- "ethereum__interaction_contract": "Interaktionsvertrag",
- "ethereum__max_gas_price": "Maximaler Gas-Preis",
+ "ethereum__max_gas_price": "Max. Gas-Preis",
"ethereum__name_and_version": "Name und Version",
"ethereum__new_contract": {
"Bolt": "Neuen Vertrag einstellen",
### core/translations/en.json
@@ -865,7 +865,7 @@
"ethereum__calldata_digest": "ERC-8213 digest",
"ethereum__calldata_suffix": "Calldata suffix",
"ethereum__confirm_contract": "Confirm contract",
- "ethereum__contract_address": "Provider contract address",
+ "ethereum__contract_address": "Contract address",
"ethereum__data_size_template": "Size: {0} bytes",
"ethereum__delegate_done": {
"Bolt": "",
@@ -881,12 +881,6 @@
"ethereum__eip_712_empty_domain": "dApp did not identify itself!",
"ethereum__gas_limit": "Gas limit",
"ethereum__gas_price": "Gas price",
- "ethereum__interaction_contract": {
- "Bolt": "Interaction contract",
- "Caesar": "Interaction contract",
- "Delizia": "Interaction contract",
- "Eckhart": "Interaction contract address"
- },
"ethereum__max_gas_price": "Max fee per gas",
"ethereum__name_and_version": "Name and version",
"ethereum__new_contract": "New contract will be deployed",
### core/translations/es.json
@@ -907,7 +907,7 @@
"ethereum__calldata_digest": "Resumen ERC-8213",
"ethereum__calldata_suffix": "Sufijo calldata",
"ethereum__confirm_contract": "Confirmar contrato",
- "ethereum__contract_address": "Dir. del contrato del proveedor",
+ "ethereum__contract_address": "Dirección del contrato",
"ethereum__data_size_template": "Tamaño: {0} bytes",
"ethereum__delegate_done": {
"Bolt": "",
@@ -923,12 +923,6 @@
"ethereum__eip_712_empty_domain": "¡dApp no se identificó!",
"ethereum__gas_limit": "Límite de gas",
"ethereum__gas_price": "Precio de gas",
- "ethereum__interaction_contract": {
- "Bolt": "Contrato de interacción",
- "Caesar": "Contrato de interacción",
- "Delizia": "Contrato de interacción",
- "Eckhart": "Dir. contrato de interacción"
- },
"ethereum__max_gas_price": "Comisión máx. de gas",
"ethereum__name_and_version": "Nombre y versión",
"ethereum__new_contract": "Se desplegará un nuevo contrato",
### core/translations/fr.json
@@ -1022,7 +1022,7 @@
"ethereum__calldata_digest": "Digest ERC-8213",
"ethereum__calldata_suffix": "Suffixe de calldata",
"ethereum__confirm_contract": "Confirmer le contrat",
- "ethereum__contract_address": "Adresse de contrat",
+ "ethereum__contract_address": "Adresse du contrat",
"ethereum__data_size_template": "Taille : {0} octets",
"ethereum__delegate_done": {
"Bolt": "",
@@ -1038,7 +1038,6 @@
"ethereum__eip_712_empty_domain": "La dApp ne s'est pas identifiée !",
"ethereum__gas_limit": "Limite de gas",
"ethereum__gas_price": "Prix du gas",
- "ethereum__interaction_contract": "Contrat d'interaction",
"ethereum__max_gas_price": "Frais max par gas",
"ethereum__name_and_version": "Nom et version",
"ethereum__new_contract": "Le nouveau contrat sera déployé",
### core/translations/id.json
@@ -861,7 +861,7 @@
"ethereum__calldata_digest": "Digest ERC-8213",
"ethereum__calldata_suffix": "Sufiks calldata",
"ethereum__confirm_contract": "Konfirmasi kontrak",
- "ethereum__contract_address": "Alamat kontrak penyedia",
+ "ethereum__contract_address": "Alamat kontrak",
"ethereum__data_size_template": "Ukuran: {0} byte",
"ethereum__delegate_done": {
"Bolt": "",
@@ -877,12 +877,6 @@
"ethereum__eip_712_empty_domain": "dApp tidak identifikasi dirinya!",
"ethereum__gas_limit": "Batas gas",
"ethereum__gas_price": "Harga gas",
- "ethereum__interaction_contract": {
- "Bolt": "Kontrak interaksi",
- "Caesar": "Kontrak interaksi",
- "Delizia": "Kontrak interaksi",
- "Eckhart": "Alamat kontrak interaksi"
- },
"ethereum__max_gas_price": "Biaya maks. per gas",
"ethereum__name_and_version": "Nama dan versi",
"ethereum__new_contract": "Kontrak baru akan di-deploy",
### core/translations/pt.json
@@ -922,7 +922,7 @@
"ethereum__calldata_digest": "Resumo ERC-8213",
"ethereum__calldata_suffix": "Sufixo calldata",
"ethereum__confirm_contract": "Confirmar contrato",
- "ethereum__contract_address": "Endereço de contr. do provedor",
+ "ethereum__contract_address": "Endereço do contrato",
"ethereum__data_size_template": "Tamanho: {0} bytes",
"ethereum__delegate_done": {
"Bolt": "",
@@ -938,7 +938,6 @@
"ethereum__eip_712_empty_domain": "dApp não se identificou!",
"ethereum__gas_limit": "Limite de gás",
"ethereum__gas_price": "Preço do gás",
- "ethereum__interaction_contract": "Contrato de interação",
"ethereum__max_gas_price": "Taxa máxima por gás",
"ethereum__name_and_version": "Nome e versão",
"ethereum__new_contract": "Novo contrato será implantado",
### tests/input_flows_helpers.py
@@ -488,7 +488,7 @@ def _confirm_tx_caesar(
) -> BRGeneratorType:
assert (yield).name == "confirm_ethereum_tx"
assert (
- TR.ethereum__interaction_contract in self.debug.read_layout().title()
+ TR.ethereum__contract_address in self.debug.read_layout().title()
or TR.words__recipient in self.debug.read_layout().title()
)
if cancel:Why this scored 15/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.