chore(core): add ETH calldata digest translated string
What changed, and why it matters
This commit only adds a new user-facing text label, 'ERC-8213 digest', used when a Trezor device displays Ethereum transaction details. There is no code that processes transaction data, cryptography, or user authorization. It is a translation/string asset change with no security relevance on its own.
No security action required. Review the companion commit(s) that actually consume this new string to ensure the ERC-8213 calldata digest is computed and displayed correctly.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change introduces a single new translated string key ethereum__calldata_digest with the English value ‘ERC-8213 digest’. It updates the generated Rust translation enum, qstr header, Python mock, English translation JSON, ordering metadata, and translation signature metadata. No functional logic is modified; the string is gated behind the existing universal_fw feature flag alongside other Ethereum UI strings.
Changed components
core/embed/rust/src/translations/generated/translated_string.rscore/embed/rust/librust_qstr.hcore/mocks/trezortranslate_keys.pyicore/translations/en.jsoncore/translations/order.jsoncore/translations/signatures.jsonInspect captured patch +44 / −4
diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h
index dffdad29..20c84e74 100644
--- a/core/embed/rust/librust_qstr.h
+++ b/core/embed/rust/librust_qstr.h
@@ -1279,6 +1279,7 @@ static void _librust_qstrs(void) {
MP_QSTR_ethereum__auth_done;
MP_QSTR_ethereum__auth_title;
MP_QSTR_ethereum__auth_warn;
+ MP_QSTR_ethereum__calldata_digest;
MP_QSTR_ethereum__calldata_suffix;
MP_QSTR_ethereum__confirm_contract;
MP_QSTR_ethereum__contract_address;
diff --git a/core/embed/rust/src/translations/generated/translated_string.rs b/core/embed/rust/src/translations/generated/translated_string.rs
index e57807b1..43f2f646 100644
--- a/core/embed/rust/src/translations/generated/translated_string.rs
+++ b/core/embed/rust/src/translations/generated/translated_string.rs
@@ -1651,6 +1651,8 @@ pub enum TranslatedString {
ethereum__smart_info = 1251, // "Smart account contract info"
#[cfg(feature = "universal_fw")]
ethereum__to = 1252, // "To"
+ #[cfg(feature = "universal_fw")]
+ ethereum__calldata_digest = 1253, // "ERC-8213 digest"
}
impl TranslatedString {
@@ -2911,6 +2913,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -4169,6 +4172,7 @@ impl TranslatedString {
19588,
19615,
19617,
+ 19632,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -5426,6 +5430,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -6684,6 +6689,7 @@ impl TranslatedString {
19588,
19615,
19617,
+ 19632,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -7941,6 +7947,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -9199,6 +9206,7 @@ impl TranslatedString {
19588,
19615,
19617,
+ 19632,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -10456,6 +10464,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -11714,6 +11723,7 @@ impl TranslatedString {
19588,
19615,
19617,
+ 19632,
];
} else if #[cfg(feature = "layout_caesar")] {
@@ -12972,6 +12982,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -14230,6 +14241,7 @@ impl TranslatedString {
17476,
17503,
17505,
+ 17520,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -15487,6 +15499,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -16745,6 +16758,7 @@ impl TranslatedString {
17476,
17503,
17505,
+ 17520,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -18002,6 +18016,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -19260,6 +19275,7 @@ impl TranslatedString {
17476,
17503,
17505,
+ 17520,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -20517,6 +20533,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -21775,6 +21792,7 @@ impl TranslatedString {
17476,
17503,
17505,
+ 17520,
];
} else if #[cfg(feature = "layout_delizia")] {
@@ -23033,6 +23051,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -24291,6 +24310,7 @@ impl TranslatedString {
19188,
19215,
19217,
+ 19232,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -25548,6 +25568,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -26806,6 +26827,7 @@ impl TranslatedString {
19188,
19215,
19217,
+ 19232,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -28063,6 +28085,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -29321,6 +29344,7 @@ impl TranslatedString {
19188,
19215,
19217,
+ 19232,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -30578,6 +30602,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -31836,6 +31861,7 @@ impl TranslatedString {
19188,
19215,
19217,
+ 19232,
];
} else if #[cfg(feature = "layout_eckhart")] {
@@ -33094,6 +33120,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -34352,6 +34379,7 @@ impl TranslatedString {
20496,
20523,
20525,
+ 20540,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -35609,6 +35637,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -36867,6 +36896,7 @@ impl TranslatedString {
20496,
20523,
20525,
+ 20540,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -38124,6 +38154,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -39382,6 +39413,7 @@ impl TranslatedString {
20496,
20523,
20525,
+ 20540,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -40639,6 +40671,7 @@ impl TranslatedString {
"Revoke {0} from smart account delegation?",
"Smart account contract info",
"To",
+ "ERC-8213 digest",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -41897,6 +41930,7 @@ impl TranslatedString {
20496,
20523,
20525,
+ 20540,
];
}
@@ -42418,6 +42452,8 @@ impl TranslatedString {
#[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__auth_warn, Self::ethereum__auth_warn),
#[cfg(feature = "universal_fw")]
+ (Qstr::MP_QSTR_ethereum__calldata_digest, Self::ethereum__calldata_digest),
+ #[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__calldata_suffix, Self::ethereum__calldata_suffix),
#[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__confirm_contract, Self::ethereum__confirm_contract),
diff --git a/core/mocks/trezortranslate_keys.pyi b/core/mocks/trezortranslate_keys.pyi
index ebf4380c..c5fff21a 100644
--- a/core/mocks/trezortranslate_keys.pyi
+++ b/core/mocks/trezortranslate_keys.pyi
@@ -338,6 +338,7 @@ class TR:
ethereum__auth_done: str = "EIP-7702 authorization signed."
ethereum__auth_title: str = "EIP-7702 Authorization"
ethereum__auth_warn: str = "Authorize your account to a third-party contract using EIP-7702?"
+ 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"
diff --git a/core/translations/en.json b/core/translations/en.json
index 5937ae99..f7066d36 100644
--- a/core/translations/en.json
+++ b/core/translations/en.json
@@ -800,6 +800,7 @@
},
"ethereum__auth_title": "EIP-7702 Authorization",
"ethereum__auth_warn": "Authorize your account to a third-party contract using EIP-7702?",
+ "ethereum__calldata_digest": "ERC-8213 digest",
"ethereum__calldata_suffix": "Calldata suffix",
"ethereum__confirm_contract": "Confirm contract",
"ethereum__contract_address": "Provider contract address",
diff --git a/core/translations/order.json b/core/translations/order.json
index 75e6c9e5..4fdaaa35 100644
--- a/core/translations/order.json
+++ b/core/translations/order.json
@@ -1251,5 +1251,6 @@
"1249": "ethereum__revoke_title",
"1250": "ethereum__revoke_warn",
"1251": "ethereum__smart_info",
- "1252": "ethereum__to"
+ "1252": "ethereum__to",
+ "1253": "ethereum__calldata_digest"
}
diff --git a/core/translations/signatures.json b/core/translations/signatures.json
index e9341918..e79d0c6f 100644
--- a/core/translations/signatures.json
+++ b/core/translations/signatures.json
@@ -1,8 +1,8 @@
{
"current": {
- "merkle_root": "6607055a456019f1b8275c81804f400ac721227a454d4dd079fe375d1daa7641",
- "datetime": "2026-07-16T12:17:37.257990+00:00",
- "commit": "56f1fede1c8c68e2652edf665be257aa9ce32d72"
+ "merkle_root": "e3d5b1c2d8aab88f4726120f764143e21012b564bf467184f5f483e12f1ab9b9",
+ "datetime": "2026-07-19T22:26:46.667625+00:00",
+ "commit": "afc84b921473c125b635d42bccff49d293b87ef3"
},
"history": [
{
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.