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}