reth_payload_validator/shanghai.rs
1//! Shanghai rules for new payloads.
2
3use alloy_rpc_types_engine::PayloadError;
4use reth_primitives_traits::BlockBody;
5
6/// Checks that block body contains withdrawals if Shanghai is active and vv.
7#[inline]
8pub fn ensure_well_formed_fields<T: BlockBody>(
9 block_body: &T,
10 is_shanghai_active: bool,
11) -> Result<(), PayloadError> {
12 if is_shanghai_active {
13 if block_body.withdrawals().is_none() {
14 // shanghai active but no withdrawals present
15 return Err(PayloadError::PostShanghaiBlockWithoutWithdrawals)
16 }
17 } else if block_body.withdrawals().is_some() {
18 // shanghai not active but withdrawals present
19 return Err(PayloadError::PreShanghaiBlockWithWithdrawals)
20 }
21
22 Ok(())
23}