feat(clear_signing): support for calldata formatter. - scaffolding
What changed, and why it matters
This commit is purely scaffolding for a new Ethereum clear-signing feature. It adds a new data type (FORMATTER_CALLDATA), two new optional fields (callee_path and selector) to message definitions, and two new user-facing text labels ('Subcall' and 'Subcall to'). There is no actual implementation of parsing, validation, or display logic here, and no security vulnerability is visible in the diff.
No immediate security action required. Treat as normal feature scaffolding. When the actual calldata formatter implementation arrives, review it carefully for parsing safety, recursion limits, and correct validation of callee_path/selector.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change extends the Ethereum ERC-7730 clear-signing protocol definitions across generated Python, Rust, and protobuf bindings. It introduces a new formatter enum value FORMATTER_CALLDATA and two optional fields in EthereumERC7730FieldInfo: callee_path (an EthereumERC7730Path) and selector (4-byte function selector). It also adds translation keys for ‘Subcall’/’Subcall to’. No runtime parsing, decoding, or UI rendering code for calldata is included in this commit.
Changed components
common/protob/messages-definitions.protocore/src/trezor/messages.pycore/src/trezor/enums/EthereumERC7730FieldFormatterType.pycore/src/trezor/enums/__init__.pypython/src/trezorlib/messages.pyrust/trezor-client/src/protos/generated/messages_definitions.rscore/translations/en.jsoncore/translations/order.jsoncore/embed/rust/librust_qstr.hcore/embed/rust/src/translations/generated/translated_string.rscore/mocks/trezortranslate_keys.pyivendor/ts-tvlInspect captured patch +216 / −33
diff --git a/common/protob/messages-definitions.proto b/common/protob/messages-definitions.proto
index c4ef3bd8..7806f3c4 100644
--- a/common/protob/messages-definitions.proto
+++ b/common/protob/messages-definitions.proto
@@ -139,6 +139,7 @@ enum EthereumERC7730FieldFormatterType {
FORMATTER_UNIT = 3;
FORMATTER_RAW = 4;
FORMATTER_DATE = 5;
+ FORMATTER_CALLDATA = 6;
}
/**
@@ -192,6 +193,9 @@ message EthereumERC7730FieldInfo {
// Constant token address, specific to the contract.
// Typically a metadata value, resolved by the parser.
optional bytes const_token_address = 9;
+
+ optional EthereumERC7730Path callee_path = 10; // address of the called contract
+ optional bytes selector = 11; // 4-byte selector, when the embedded calldata is args-only
}
/**
diff --git a/core/embed/rust/librust_qstr.h b/core/embed/rust/librust_qstr.h
index 6c8e3d71..6d792e19 100644
--- a/core/embed/rust/librust_qstr.h
+++ b/core/embed/rust/librust_qstr.h
@@ -1329,6 +1329,8 @@ static void _librust_qstrs(void) {
MP_QSTR_ethereum__staking_stake_intro;
MP_QSTR_ethereum__staking_unstake;
MP_QSTR_ethereum__staking_unstake_intro;
+ MP_QSTR_ethereum__subcall;
+ MP_QSTR_ethereum__subcall_to;
MP_QSTR_ethereum__subtitle_input_data_bytes;
MP_QSTR_ethereum__title_confirm_domain;
MP_QSTR_ethereum__title_confirm_message;
diff --git a/core/embed/rust/src/translations/generated/translated_string.rs b/core/embed/rust/src/translations/generated/translated_string.rs
index b157f50a..b16b2fda 100644
--- a/core/embed/rust/src/translations/generated/translated_string.rs
+++ b/core/embed/rust/src/translations/generated/translated_string.rs
@@ -1673,6 +1673,10 @@ pub enum TranslatedString {
stellar__sign_authorization = 1265, // "Sign authorization"
#[cfg(feature = "universal_fw")]
stellar__valid_until_ledger = 1266, // "Valid until ledger"
+ #[cfg(feature = "universal_fw")]
+ ethereum__subcall = 1267, // "Subcall"
+ #[cfg(feature = "universal_fw")]
+ ethereum__subcall_to = 1268, // "Subcall to"
}
impl TranslatedString {
@@ -2947,6 +2951,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -4219,6 +4225,8 @@ impl TranslatedString {
19122,
19140,
19158,
+ 19165,
+ 19175,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -5490,6 +5498,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -6762,6 +6772,8 @@ impl TranslatedString {
19122,
19140,
19158,
+ 19165,
+ 19175,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -8033,6 +8045,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -9305,6 +9319,8 @@ impl TranslatedString {
19122,
19140,
19158,
+ 19165,
+ 19175,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -10576,6 +10592,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -11848,6 +11866,8 @@ impl TranslatedString {
19122,
19140,
19158,
+ 19165,
+ 19175,
];
} else if #[cfg(feature = "layout_caesar")] {
@@ -13120,6 +13140,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -14392,6 +14414,8 @@ impl TranslatedString {
16913,
16931,
16949,
+ 16956,
+ 16966,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -15663,6 +15687,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -16935,6 +16961,8 @@ impl TranslatedString {
16913,
16931,
16949,
+ 16956,
+ 16966,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -18206,6 +18234,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -19478,6 +19508,8 @@ impl TranslatedString {
16913,
16931,
16949,
+ 16956,
+ 16966,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -20749,6 +20781,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -22021,6 +22055,8 @@ impl TranslatedString {
16913,
16931,
16949,
+ 16956,
+ 16966,
];
} else if #[cfg(feature = "layout_delizia")] {
@@ -23293,6 +23329,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -24565,6 +24603,8 @@ impl TranslatedString {
19011,
19029,
19047,
+ 19054,
+ 19064,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -25836,6 +25876,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -27108,6 +27150,8 @@ impl TranslatedString {
19011,
19029,
19047,
+ 19054,
+ 19064,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -28379,6 +28423,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -29651,6 +29697,8 @@ impl TranslatedString {
19011,
19029,
19047,
+ 19054,
+ 19064,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -30922,6 +30970,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -32194,6 +32244,8 @@ impl TranslatedString {
19011,
19029,
19047,
+ 19054,
+ 19064,
];
} else if #[cfg(feature = "layout_eckhart")] {
@@ -33466,6 +33518,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", feature = "universal_fw"))]
@@ -34738,6 +34792,8 @@ impl TranslatedString {
20398,
20416,
20434,
+ 20441,
+ 20451,
];
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -36009,6 +36065,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(feature = "debug", not(feature = "universal_fw")))]
@@ -37281,6 +37339,8 @@ impl TranslatedString {
20398,
20416,
20434,
+ 20441,
+ 20451,
];
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -38552,6 +38612,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), feature = "universal_fw"))]
@@ -39824,6 +39886,8 @@ impl TranslatedString {
20398,
20416,
20434,
+ 20441,
+ 20451,
];
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -41095,6 +41159,8 @@ impl TranslatedString {
"On behalf of",
"Sign authorization",
"Valid until ledger",
+ "Subcall",
+ "Subcall to",
);
#[cfg(all(not(feature = "debug"), not(feature = "universal_fw")))]
@@ -42367,6 +42433,8 @@ impl TranslatedString {
20398,
20416,
20434,
+ 20441,
+ 20451,
];
}
@@ -42977,6 +43045,10 @@ impl TranslatedString {
#[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__staking_unstake_intro, Self::ethereum__staking_unstake_intro),
#[cfg(feature = "universal_fw")]
+ (Qstr::MP_QSTR_ethereum__subcall, Self::ethereum__subcall),
+ #[cfg(feature = "universal_fw")]
+ (Qstr::MP_QSTR_ethereum__subcall_to, Self::ethereum__subcall_to),
+ #[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__subtitle_input_data_bytes, Self::ethereum__subtitle_input_data_bytes),
#[cfg(feature = "universal_fw")]
(Qstr::MP_QSTR_ethereum__title_confirm_domain, Self::ethereum__title_confirm_domain),
diff --git a/core/mocks/trezortranslate_keys.pyi b/core/mocks/trezortranslate_keys.pyi
index 3f220b6d..e5f07c58 100644
--- a/core/mocks/trezortranslate_keys.pyi
+++ b/core/mocks/trezortranslate_keys.pyi
@@ -383,6 +383,8 @@ class TR:
ethereum__staking_stake_intro: str = "Stake ETH on Everstake?"
ethereum__staking_unstake: str = "Unstake"
ethereum__staking_unstake_intro: str = "Unstake ETH from Everstake?"
+ ethereum__subcall: str = "Subcall"
+ ethereum__subcall_to: str = "Subcall to"
ethereum__subtitle_input_data_bytes: str = "{0} / {1} bytes"
ethereum__title_confirm_domain: str = "Confirm domain"
ethereum__title_confirm_message: str = "Confirm message"
diff --git a/core/src/trezor/enums/EthereumERC7730FieldFormatterType.py b/core/src/trezor/enums/EthereumERC7730FieldFormatterType.py
index 39107afa..addf388f 100644
--- a/core/src/trezor/enums/EthereumERC7730FieldFormatterType.py
+++ b/core/src/trezor/enums/EthereumERC7730FieldFormatterType.py
@@ -8,3 +8,4 @@ FORMATTER_TOKEN_AMOUNT = 2
FORMATTER_UNIT = 3
FORMATTER_RAW = 4
FORMATTER_DATE = 5
+FORMATTER_CALLDATA = 6
diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py
index 9fed2c1d..25f0fe5e 100644
--- a/core/src/trezor/enums/__init__.py
+++ b/core/src/trezor/enums/__init__.py
@@ -331,6 +331,7 @@ if TYPE_CHECKING:
FORMATTER_UNIT = 3
FORMATTER_RAW = 4
FORMATTER_DATE = 5
+ FORMATTER_CALLDATA = 6
class EthereumERC7730ContainerPath(IntEnum):
FROM = 1
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index 6a6dd8ba..c15f051c 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -3403,6 +3403,8 @@ if TYPE_CHECKING:
base: "str | None"
prefix: "bool | None"
const_token_address: "AnyBytes | None"
+ callee_path: "EthereumERC7730Path | None"
+ selector: "AnyBytes | None"
def __init__(
self,
@@ -3416,6 +3418,8 @@ if TYPE_CHECKING:
base: "str | None" = None,
prefix: "bool | None" = None,
const_token_address: "AnyBytes | None" = None,
+ callee_path: "EthereumERC7730Path | None" = None,
+ selector: "AnyBytes | None" = None,
) -> None:
pass
diff --git a/core/translations/en.json b/core/translations/en.json
index 603ff949..8e5bdc7e 100644
--- a/core/translations/en.json
+++ b/core/translations/en.json
@@ -880,6 +880,8 @@
"ethereum__staking_stake_intro": "Stake ETH on Everstake?",
"ethereum__staking_unstake": "Unstake",
"ethereum__staking_unstake_intro": "Unstake ETH from Everstake?",
+ "ethereum__subcall": "Subcall",
+ "ethereum__subcall_to": "Subcall to",
"ethereum__subtitle_input_data_bytes": {
"Bolt": "",
"Caesar": "",
diff --git a/core/translations/order.json b/core/translations/order.json
index 2f2d5c6b..7509608b 100644
--- a/core/translations/order.json
+++ b/core/translations/order.json
@@ -1265,5 +1265,7 @@
"1263": "ethereum__view_data_and_hash",
"1264": "stellar__on_behalf_of",
"1265": "stellar__sign_authorization",
- "1266": "stellar__valid_until_ledger"
+ "1266": "stellar__valid_until_ledger",
+ "1267": "ethereum__subcall",
+ "1268": "ethereum__subcall_to"
}
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index 84ea040d..f508bc77 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -374,6 +374,7 @@ class EthereumERC7730FieldFormatterType(IntEnum):
FORMATTER_UNIT = 3
FORMATTER_RAW = 4
FORMATTER_DATE = 5
+ FORMATTER_CALLDATA = 6
class EthereumERC7730ContainerPath(IntEnum):
@@ -4865,6 +4866,8 @@ class EthereumERC7730FieldInfo(protobuf.MessageType):
7: protobuf.Field("base", "string", repeated=False, required=False, default=None),
8: protobuf.Field("prefix", "bool", repeated=False, required=False, default=None),
9: protobuf.Field("const_token_address", "bytes", repeated=False, required=False, default=None),
+ 10: protobuf.Field("callee_path", "EthereumERC7730Path", repeated=False, required=False, default=None),
+ 11: protobuf.Field("selector", "bytes", repeated=False, required=False, default=None),
}
def __init__(
@@ -4879,6 +4882,8 @@ class EthereumERC7730FieldInfo(protobuf.MessageType):
base: Optional["str"] = None,
prefix: Optional["bool"] = None,
const_token_address: Optional["bytes"] = None,
+ callee_path: Optional["EthereumERC7730Path"] = None,
+ selector: Optional["bytes"] = None,
) -> None:
self.path = path
self.label = label
@@ -4889,6 +4894,8 @@ class EthereumERC7730FieldInfo(protobuf.MessageType):
self.base = base
self.prefix = prefix
self.const_token_address = const_token_address
+ self.callee_path = callee_path
+ self.selector = selector
class EthereumDisplayFormatInfo(protobuf.MessageType):
diff --git a/rust/trezor-client/src/protos/generated/messages_definitions.rs b/rust/trezor-client/src/protos/generated/messages_definitions.rs
index 9f27282e..5cff86d5 100644
--- a/rust/trezor-client/src/protos/generated/messages_definitions.rs
+++ b/rust/trezor-client/src/protos/generated/messages_definitions.rs
@@ -1667,6 +1667,10 @@ pub struct EthereumERC7730FieldInfo {
pub prefix: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.definitions.EthereumERC7730FieldInfo.const_token_address)
pub const_token_address: ::std::option::Option<::std::vec::Vec<u8>>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.definitions.EthereumERC7730FieldInfo.callee_path)
+ pub callee_path: ::protobuf::MessageField<EthereumERC7730Path>,
+ // @@protoc_insertion_point(field:hw.trezor.messages.definitions.EthereumERC7730FieldInfo.selector)
+ pub selector: ::std::option::Option<::std::vec::Vec<u8>>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.definitions.EthereumERC7730FieldInfo.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@@ -1887,8 +1891,44 @@ impl EthereumERC7730FieldInfo {
self.const_token_address.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
+ // optional bytes selector = 11;
+
+ pub fn selector(&self) -> &[u8] {
+ match self.selector.as_ref() {
+ Some(v) => v,
+ None => &[],
+ }
+ }
+
+ pub fn clear_selector(&mut self) {
+ self.selector = ::std::option::Option::None;
+ }
+
+ pub fn has_selector(&self) -> bool {
+ self.selector.is_some()
+ }
+
+ // Param is passed by value, moved
+ pub fn set_selector(&mut self, v: ::std::vec::Vec<u8>) {
+ self.selector = ::std::option::Option::Some(v);
+ }
+
+ // Mutable pointer to the field.
+ // If field is not initialized, it is initialized with default value first.
+ pub fn mut_selector(&mut self) -> &mut ::std::vec::Vec<u8> {
+ if self.selector.is_none() {
+ self.selector = ::std::option::Option::Some(::std::vec::Vec::new());
+ }
+ self.selector.as_mut().unwrap()
+ }
+
+ // Take field
+ pub fn take_selector(&mut self) -> ::std::vec::Vec<u8> {
+ self.selector.take().unwrap_or_else(|| ::std::vec::Vec::new())
+ }
+
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
- let mut fields = ::std::vec::Vec::with_capacity(9);
+ let mut fields = ::std::vec::Vec::with_capacity(11);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, EthereumERC7730Path>(
"path",
@@ -1935,6 +1975,16 @@ impl EthereumERC7730FieldInfo {
|m: &EthereumERC7730FieldInfo| { &m.const_token_address },
|m: &mut EthereumERC7730FieldInfo| { &mut m.const_token_address },
));
+ fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, EthereumERC7730Path>(
+ "callee_path",
+ |m: &EthereumERC7730FieldInfo| { &m.callee_path },
+ |m: &mut EthereumERC7730FieldInfo| { &mut m.callee_path },
+ ));
+ fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
+ "selector",
+ |m: &EthereumERC7730FieldInfo| { &m.selector },
+ |m: &mut EthereumERC7730FieldInfo| { &mut m.selector },
+ ));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<EthereumERC7730FieldInfo>(
"EthereumERC7730FieldInfo",
fields,
@@ -1966,6 +2016,11 @@ impl ::protobuf::Message for EthereumERC7730FieldInfo {
return false;
}
};
+ for v in &self.callee_path {
+ if !v.is_initialized() {
+ return false;
+ }
+ };
true
}
@@ -1999,6 +2054,12 @@ impl ::protobuf::Message for EthereumERC7730FieldInfo {
74 => {
self.const_token_address = ::std::option::Option::Some(is.read_bytes()?);
},
+ 82 => {
+ ::protobuf::rt::read_singular_message_into_field(is, &mut self.callee_path)?;
+ },
+ 90 => {
+ self.selector = ::std::option::Option::Some(is.read_bytes()?);
+ },
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@@ -2040,6 +2101,13 @@ impl ::protobuf::Message for EthereumERC7730FieldInfo {
if let Some(v) = self.const_token_address.as_ref() {
my_size += ::protobuf::rt::bytes_size(9, &v);
}
+ if let Some(v) = self.callee_path.as_ref() {
+ let len = v.compute_size();
+ my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
+ }
+ if let Some(v) = self.selector.as_ref() {
+ my_size += ::protobuf::rt::bytes_size(11, &v);
+ }
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@@ -2073,6 +2141,12 @@ impl ::protobuf::Message for EthereumERC7730FieldInfo {
if let Some(v) = self.const_token_address.as_ref() {
os.write_bytes(9, v)?;
}
+ if let Some(v) = self.callee_path.as_ref() {
+ ::protobuf::rt::write_message_field_with_cached_size(10, v, os)?;
+ }
+ if let Some(v) = self.selector.as_ref() {
+ os.write_bytes(11, v)?;
+ }
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@@ -2099,6 +2173,8 @@ impl ::protobuf::Message for EthereumERC7730FieldInfo {
self.base = ::std::option::Option::None;
self.prefix = ::std::option::Option::None;
self.const_token_address = ::std::option::Option::None;
+ self.callee_path.clear();
+ self.selector = ::std::option::Option::None;
self.special_fields.clear();
}
@@ -2113,6 +2189,8 @@ impl ::protobuf::Message for EthereumERC7730FieldInfo {
base: ::std::option::Option::None,
prefix: ::std::option::Option::None,
const_token_address: ::std::option::Option::None,
+ callee_path: ::protobuf::MessageField::none(),
+ selector: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@@ -2843,6 +2921,8 @@ pub enum EthereumERC7730FieldFormatterType {
FORMATTER_RAW = 4,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.definitions.EthereumERC7730FieldFormatterType.FORMATTER_DATE)
FORMATTER_DATE = 5,
+ // @@protoc_insertion_point(enum_value:hw.trezor.messages.definitions.EthereumERC7730FieldFormatterType.FORMATTER_CALLDATA)
+ FORMATTER_CALLDATA = 6,
}
impl ::protobuf::Enum for EthereumERC7730FieldFormatterType {
@@ -2860,6 +2940,7 @@ impl ::protobuf::Enum for EthereumERC7730FieldFormatterType {
3 => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_UNIT),
4 => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_RAW),
5 => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_DATE),
+ 6 => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_CALLDATA),
_ => ::std::option::Option::None
}
}
@@ -2872,6 +2953,7 @@ impl ::protobuf::Enum for EthereumERC7730FieldFormatterType {
"FORMATTER_UNIT" => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_UNIT),
"FORMATTER_RAW" => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_RAW),
"FORMATTER_DATE" => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_DATE),
+ "FORMATTER_CALLDATA" => ::std::option::Option::Some(EthereumERC7730FieldFormatterType::FORMATTER_CALLDATA),
_ => ::std::option::Option::None
}
}
@@ -2883,6 +2965,7 @@ impl ::protobuf::Enum for EthereumERC7730FieldFormatterType {
EthereumERC7730FieldFormatterType::FORMATTER_UNIT,
EthereumERC7730FieldFormatterType::FORMATTER_RAW,
EthereumERC7730FieldFormatterType::FORMATTER_DATE,
+ EthereumERC7730FieldFormatterType::FORMATTER_CALLDATA,
];
}
@@ -3007,7 +3090,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\
h\x18\x02\x20\x01(\x0e2<.hw.trezor.messages.definitions.EthereumERC7730C\
ontainerPathR\rcontainerPath\x12\x1f\n\x0bconst_value\x18\x03\x20\x01(\t\
R\nconstValue\x12\x1f\n\x0bslice_start\x18\x04\x20\x01(\x11R\nsliceStart\
- \x12\x1b\n\tslice_end\x18\x05\x20\x01(\x11R\x08sliceEnd\"\xc4\x03\n\x18E\
+ \x12\x1b\n\tslice_end\x18\x05\x20\x01(\x11R\x08sliceEnd\"\xb6\x04\n\x18E\
thereumERC7730FieldInfo\x12G\n\x04path\x18\x01\x20\x02(\x0b23.hw.trezor.\
messages.definitions.EthereumERC7730PathR\x04path\x12\x14\n\x05label\x18\
\x02\x20\x02(\tR\x05label\x12_\n\tformatter\x18\x03\x20\x02(\x0e2A.hw.tr\
@@ -3017,35 +3100,38 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x0cR\tthreshold\x12\x1a\n\x08decimals\x18\x06\x20\x01(\rR\x08decimals\
\x12\x12\n\x04base\x18\x07\x20\x01(\tR\x04base\x12\x16\n\x06prefix\x18\
\x08\x20\x01(\x08R\x06prefix\x12.\n\x13const_token_address\x18\t\x20\x01\
- (\x0cR\x11constTokenAddress\"\xfa\x02\n\x19EthereumDisplayFormatInfo\x12\
- \x19\n\x08chain_id\x18\x01\x20\x02(\x04R\x07chainId\x12\x18\n\x07address\
- \x18\x02\x20\x02(\x0cR\x07address\x12\x19\n\x08func_sig\x18\x03\x20\x02(\
- \x0cR\x07funcSig\x12\x16\n\x06intent\x18\x04\x20\x02(\tR\x06intent\x12i\
- \n\x15parameter_definitions\x18\x05\x20\x03(\x0b24.hw.trezor.messages.de\
- finitions.EthereumABIValueInfoR\x14parameterDefinitions\x12e\n\x11field_\
- definitions\x18\x06\x20\x03(\x0b28.hw.trezor.messages.definitions.Ethere\
- umERC7730FieldInfoR\x10fieldDefinitions\x12#\n\rprovider_name\x18\x07\
- \x20\x01(\tR\x0cproviderName*i\n\x0eDefinitionType\x12\x14\n\x10ETHEREUM\
- _NETWORK\x10\0\x12\x12\n\x0eETHEREUM_TOKEN\x10\x01\x12\x10\n\x0cSOLANA_T\
- OKEN\x10\x02\x12\x1b\n\x17ETHEREUM_DISPLAY_FORMAT\x10\x03*\xa7\x03\n\x0f\
- EthereumABIType\x12\x0f\n\x0bABI_ADDRESS\x10\0\x12\x0f\n\x0bABI_UINT256\
- \x10\x01\x12\x0f\n\x0bABI_UINT248\x10\x02\x12\x0f\n\x0bABI_UINT160\x10\
- \x03\x12\x0f\n\x0bABI_UINT128\x10\x04\x12\x0f\n\x0bABI_UINT120\x10\x05\
- \x12\x0f\n\x0bABI_UINT112\x10\x06\x12\x0e\n\nABI_UINT96\x10\x07\x12\x0e\
- \n\nABI_UINT72\x10\x08\x12\x0e\n\nABI_UINT64\x10\t\x12\x0e\n\nABI_UINT48\
- \x10\n\x12\x0e\n\nABI_UINT40\x10\x0b\x12\x0e\n\nABI_UINT32\x10\x0c\x12\
- \x0e\n\nABI_UINT24\x10\r\x12\x0e\n\nABI_UINT16\x10\x0e\x12\r\n\tABI_UINT\
- 8\x10\x0f\x12\x0c\n\x08ABI_BOOL\x10\x10\x12\x0e\n\nABI_INT160\x10\x11\
- \x12\x0f\n\x0bABI_BYTES32\x10\x14\x12\x0f\n\x0bABI_BYTES16\x10\x15\x12\
- \x0e\n\nABI_BYTES8\x10\x16\x12\x0e\n\nABI_BYTES4\x10\x17\x12\x0f\n\x0bAB\
- I_BYTES20\x10\x18\x12\r\n\tABI_BYTES\x10\x1e\x12\x0e\n\nABI_STRING\x10\
- \x1f*\xac\x01\n!EthereumERC7730FieldFormatterType\x12\x1a\n\x16FORMATTER\
- _ADDRESS_NAME\x10\0\x12\x14\n\x10FORMATTER_AMOUNT\x10\x01\x12\x1a\n\x16F\
- ORMATTER_TOKEN_AMOUNT\x10\x02\x12\x12\n\x0eFORMATTER_UNIT\x10\x03\x12\
- \x11\n\rFORMATTER_RAW\x10\x04\x12\x12\n\x0eFORMATTER_DATE\x10\x05*;\n\
- \x1cEthereumERC7730ContainerPath\x12\x08\n\x04FROM\x10\x01\x12\t\n\x05VA\
- LUE\x10\x02\x12\x06\n\x02TO\x10\x03B?\n#com.satoshilabs.trezor.lib.proto\
- bufB\x18TrezorMessageDefinitions\
+ (\x0cR\x11constTokenAddress\x12T\n\x0bcallee_path\x18\n\x20\x01(\x0b23.h\
+ w.trezor.messages.definitions.EthereumERC7730PathR\ncalleePath\x12\x1a\n\
+ \x08selector\x18\x0b\x20\x01(\x0cR\x08selector\"\xfa\x02\n\x19EthereumDi\
+ splayFormatInfo\x12\x19\n\x08chain_id\x18\x01\x20\x02(\x04R\x07chainId\
+ \x12\x18\n\x07address\x18\x02\x20\x02(\x0cR\x07address\x12\x19\n\x08func\
+ _sig\x18\x03\x20\x02(\x0cR\x07funcSig\x12\x16\n\x06intent\x18\x04\x20\
+ \x02(\tR\x06intent\x12i\n\x15parameter_definitions\x18\x05\x20\x03(\x0b2\
+ 4.hw.trezor.messages.definitions.EthereumABIValueInfoR\x14parameterDefin\
+ itions\x12e\n\x11field_definitions\x18\x06\x20\x03(\x0b28.hw.trezor.mess\
+ ages.definitions.EthereumERC7730FieldInfoR\x10fieldDefinitions\x12#\n\rp\
+ rovider_name\x18\x07\x20\x01(\tR\x0cproviderName*i\n\x0eDefinitionType\
+ \x12\x14\n\x10ETHEREUM_NETWORK\x10\0\x12\x12\n\x0eETHEREUM_TOKEN\x10\x01\
+ \x12\x10\n\x0cSOLANA_TOKEN\x10\x02\x12\x1b\n\x17ETHEREUM_DISPLAY_FORMAT\
+ \x10\x03*\xa7\x03\n\x0fEthereumABIType\x12\x0f\n\x0bABI_ADDRESS\x10\0\
+ \x12\x0f\n\x0bABI_UINT256\x10\x01\x12\x0f\n\x0bABI_UINT248\x10\x02\x12\
+ \x0f\n\x0bABI_UINT160\x10\x03\x12\x0f\n\x0bABI_UINT128\x10\x04\x12\x0f\n\
+ \x0bABI_UINT120\x10\x05\x12\x0f\n\x0bABI_UINT112\x10\x06\x12\x0e\n\nABI_\
+ UINT96\x10\x07\x12\x0e\n\nABI_UINT72\x10\x08\x12\x0e\n\nABI_UINT64\x10\t\
+ \x12\x0e\n\nABI_UINT48\x10\n\x12\x0e\n\nABI_UINT40\x10\x0b\x12\x0e\n\nAB\
+ I_UINT32\x10\x0c\x12\x0e\n\nABI_UINT24\x10\r\x12\x0e\n\nABI_UINT16\x10\
+ \x0e\x12\r\n\tABI_UINT8\x10\x0f\x12\x0c\n\x08ABI_BOOL\x10\x10\x12\x0e\n\
+ \nABI_INT160\x10\x11\x12\x0f\n\x0bABI_BYTES32\x10\x14\x12\x0f\n\x0bABI_B\
+ YTES16\x10\x15\x12\x0e\n\nABI_BYTES8\x10\x16\x12\x0e\n\nABI_BYTES4\x10\
+ \x17\x12\x0f\n\x0bABI_BYTES20\x10\x18\x12\r\n\tABI_BYTES\x10\x1e\x12\x0e\
+ \n\nABI_STRING\x10\x1f*\xc4\x01\n!EthereumERC7730FieldFormatterType\x12\
+ \x1a\n\x16FORMATTER_ADDRESS_NAME\x10\0\x12\x14\n\x10FORMATTER_AMOUNT\x10\
+ \x01\x12\x1a\n\x16FORMATTER_TOKEN_AMOUNT\x10\x02\x12\x12\n\x0eFORMATTER_\
+ UNIT\x10\x03\x12\x11\n\rFORMATTER_RAW\x10\x04\x12\x12\n\x0eFORMATTER_DAT\
+ E\x10\x05\x12\x16\n\x12FORMATTER_CALLDATA\x10\x06*;\n\x1cEthereumERC7730\
+ ContainerPath\x12\x08\n\x04FROM\x10\x01\x12\t\n\x05VALUE\x10\x02\x12\x06\
+ \n\x02TO\x10\x03B?\n#com.satoshilabs.trezor.lib.protobufB\x18TrezorMessa\
+ geDefinitions\
";
/// `FileDescriptorProto` object which was a source for this generated file
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.