1//! Shanghai rules for new payloads.
23use alloy_rpc_types_engine::PayloadError;
4use reth_primitives_traits::BlockBody;
56/// 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> {
12if is_shanghai_active {
13if block_body.withdrawals().is_none() {
14// shanghai active but no withdrawals present
15return Err(PayloadError::PostShanghaiBlockWithoutWithdrawals)
16 }
17 } else if block_body.withdrawals().is_some() {
18// shanghai not active but withdrawals present
19return Err(PayloadError::PreShanghaiBlockWithWithdrawals)
20 }
2122Ok(())
23}