Skip to content

Commit 987e66e

Browse files
committed
Renamed deposits, added taiko_block, updated imports, added debug logs
1 parent 34bc46b commit 987e66e

File tree

2 files changed

+76
-9
lines changed

2 files changed

+76
-9
lines changed

crates/taiko/engine/types/src/payload.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,12 @@ pub struct TaikoExecutionPayloadInputV2 {
153153
/// Excess blob gas
154154
#[serde(with = "alloy_serde::quantity::opt")]
155155
pub excess_blob_gas: Option<u64>,
156-
/// Deposits
157-
pub deposits: Option<Vec<TxDeposit>>,
156+
/// Deposit requests
157+
pub deposit_requests: Option<Vec<TxDeposit>>,
158+
159+
/// Is taiko block
160+
#[serde(rename = "TaikoBlock")]
161+
pub taiko_block: bool,
158162
}
159163

160164
/// TxDeposit

crates/taiko/node/src/engine.rs

+70-7
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,21 @@ use std::sync::Arc;
55
use alloy_consensus::{BlockHeader, Header};
66
use alloy_rpc_types_engine::{ExecutionPayloadSidecar, PayloadError};
77
use reth_node_builder::{
8-
EngineApiMessageVersion, EngineObjectValidationError, EngineTypes, EngineValidator,
9-
InvalidPayloadAttributesError, PayloadAttributes, PayloadOrAttributes, PayloadTypes,
10-
PayloadValidator,
8+
validate_parent_beacon_block_root_presence, EngineApiMessageVersion,
9+
EngineObjectValidationError, EngineTypes, EngineValidator, InvalidPayloadAttributesError,
10+
MessageValidationKind, PayloadAttributes, PayloadOrAttributes, PayloadTypes, PayloadValidator,
11+
VersionSpecificValidationError,
1112
};
1213
use reth_payload_builder::EthBuiltPayload;
13-
use reth_payload_primitives::validate_version_specific_fields;
14-
use reth_primitives::{Block, SealedBlock};
14+
use reth_primitives::{Block, EthereumHardforks, SealedBlock};
1515
use reth_taiko_chainspec::TaikoChainSpec;
1616
use reth_taiko_engine_primitives::{
1717
ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4, ExecutionPayloadV1,
1818
TaikoExecutionPayloadEnvelopeV2, TaikoPayloadBuilderAttributes,
1919
};
2020
use reth_taiko_engine_types::{TaikoExecutionPayload, TaikoPayloadAttributes};
2121
use reth_taiko_payload_validator::TaikoExecutionPayloadValidator;
22+
use reth_tracing::tracing::debug;
2223

2324
/// The types used in the default mainnet ethereum beacon consensus engine.
2425
#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)]
@@ -97,15 +98,25 @@ where
9798
version: EngineApiMessageVersion,
9899
payload_or_attrs: PayloadOrAttributes<'_, TaikoPayloadAttributes>,
99100
) -> Result<(), EngineObjectValidationError> {
100-
validate_version_specific_fields(self.chain_spec(), version, payload_or_attrs)
101+
debug!(target: "taiko::engine", version=?version, payload_or_attrs=?payload_or_attrs);
102+
let res = validate_version_specific_fields(self.chain_spec(), version, payload_or_attrs);
103+
debug!(target: "taiko::engine", version=?version, ?res);
104+
res
101105
}
102106

103107
fn ensure_well_formed_attributes(
104108
&self,
105109
version: EngineApiMessageVersion,
106110
attributes: &TaikoPayloadAttributes,
107111
) -> Result<(), EngineObjectValidationError> {
108-
validate_version_specific_fields(self.chain_spec(), version, attributes.into())
112+
debug!(target: "taiko::engine", version=?version, attributes=?attributes);
113+
let res = reth_payload_primitives::validate_version_specific_fields(
114+
self.chain_spec(),
115+
version,
116+
attributes.into(),
117+
);
118+
debug!(target: "taiko::engine", version=?version, ?res);
119+
res
109120
}
110121

111122
fn validate_payload_attributes_against_header(
@@ -119,3 +130,55 @@ where
119130
Ok(())
120131
}
121132
}
133+
134+
fn validate_withdrawals_presence<T: EthereumHardforks>(
135+
chain_spec: &T,
136+
version: EngineApiMessageVersion,
137+
message_validation_kind: MessageValidationKind,
138+
timestamp: u64,
139+
has_withdrawals: bool,
140+
) -> Result<(), EngineObjectValidationError> {
141+
let is_shanghai_active = chain_spec.is_shanghai_active_at_timestamp(timestamp);
142+
143+
match version {
144+
EngineApiMessageVersion::V1 => {
145+
if has_withdrawals {
146+
return Err(message_validation_kind
147+
.to_error(VersionSpecificValidationError::WithdrawalsNotSupportedInV1))
148+
}
149+
}
150+
EngineApiMessageVersion::V2 | EngineApiMessageVersion::V3 | EngineApiMessageVersion::V4 => {
151+
if !is_shanghai_active && has_withdrawals {
152+
return Err(message_validation_kind
153+
.to_error(VersionSpecificValidationError::HasWithdrawalsPreShanghai))
154+
}
155+
}
156+
};
157+
158+
Ok(())
159+
}
160+
161+
fn validate_version_specific_fields<Type, T>(
162+
chain_spec: &T,
163+
version: EngineApiMessageVersion,
164+
payload_or_attrs: PayloadOrAttributes<'_, Type>,
165+
) -> Result<(), EngineObjectValidationError>
166+
where
167+
Type: PayloadAttributes,
168+
T: EthereumHardforks,
169+
{
170+
validate_withdrawals_presence(
171+
chain_spec,
172+
version,
173+
payload_or_attrs.message_validation_kind(),
174+
payload_or_attrs.timestamp(),
175+
payload_or_attrs.withdrawals().is_some(),
176+
)?;
177+
validate_parent_beacon_block_root_presence(
178+
chain_spec,
179+
version,
180+
payload_or_attrs.message_validation_kind(),
181+
payload_or_attrs.timestamp(),
182+
payload_or_attrs.parent_beacon_block_root().is_some(),
183+
)
184+
}

0 commit comments

Comments
 (0)