This commit is contained in:
Pawan Dhananjay
2025-01-03 18:25:54 -08:00
parent 7e6df3ae64
commit 0b85d86325
2 changed files with 10 additions and 15 deletions

View File

@@ -352,13 +352,8 @@ pub enum RequestsError {
/// Format of `ExecutionRequests` received over the engine api.
///
/// Array of ssz-encoded requests list encoded as hex bytes.
/// The prefix of the request type is used to index into the array.
///
/// For e.g. [0xab, 0xcd, 0xef]
/// Here, 0xab are the deposits bytes (prefix and index == 0)
/// 0xcd are the withdrawals bytes (prefix and index == 1)
/// 0xef are the consolidations bytes (prefix and index == 2)
/// Array of ssz-encoded requests list encoded as hex bytes prefixed
/// with a `RequestType`
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
#[serde(transparent)]
pub struct JsonExecutionRequests(pub Vec<String>);
@@ -383,10 +378,10 @@ impl<E: EthSpec> TryFrom<JsonExecutionRequests> for ExecutionRequests<E> {
return Err(RequestsError::EmptyRequest(i));
}
// Elements of the list **MUST** be ordered by `request_type` in ascending order
let current_prefix = RequestType::from_prefix(*prefix_byte)
let current_prefix = RequestType::from_u8(*prefix_byte)
.ok_or(RequestsError::InvalidPrefix(*prefix_byte))?;
if let Some(prev) = prev_prefix {
if prev.to_prefix() >= current_prefix.to_prefix() {
if prev.to_u8() >= current_prefix.to_u8() {
return Err(RequestsError::InvalidOrdering);
}
}

View File

@@ -46,21 +46,21 @@ impl<E: EthSpec> ExecutionRequests<E> {
let mut requests_list = Vec::new();
if !self.deposits.is_empty() {
requests_list.push(Bytes::from_iter(
[RequestType::Deposit.to_prefix()]
[RequestType::Deposit.to_u8()]
.into_iter()
.chain(self.deposits.as_ssz_bytes()),
));
}
if !self.withdrawals.is_empty() {
requests_list.push(Bytes::from_iter(
[RequestType::Withdrawal.to_prefix()]
[RequestType::Withdrawal.to_u8()]
.into_iter()
.chain(self.withdrawals.as_ssz_bytes()),
));
}
if !self.consolidations.is_empty() {
requests_list.push(Bytes::from_iter(
[RequestType::Consolidation.to_prefix()]
[RequestType::Consolidation.to_u8()]
.into_iter()
.chain(self.consolidations.as_ssz_bytes()),
));
@@ -86,7 +86,7 @@ impl<E: EthSpec> ExecutionRequests<E> {
}
}
/// This is used to index into the `execution_requests` array.
/// The prefix types for `ExecutionRequest` objects.
#[derive(Debug, Copy, Clone)]
pub enum RequestType {
Deposit,
@@ -95,7 +95,7 @@ pub enum RequestType {
}
impl RequestType {
pub fn from_prefix(prefix: u8) -> Option<Self> {
pub fn from_u8(prefix: u8) -> Option<Self> {
match prefix {
0 => Some(Self::Deposit),
1 => Some(Self::Withdrawal),
@@ -103,7 +103,7 @@ impl RequestType {
_ => None,
}
}
pub fn to_prefix(&self) -> u8 {
pub fn to_u8(&self) -> u8 {
match self {
Self::Deposit => 0,
Self::Withdrawal => 1,