pub fn circuit_ids(self) -> Vec<CircuitIdRoundTuple> {
        match self {
            AggregationRound::BasicCircuits => (1..=15)
                .chain(once(255))
                .map(|circuit_id| CircuitIdRoundTuple::new(circuit_id, self as u8))
                .collect(),
            AggregationRound::LeafAggregation => (3..=18)
                .map(|circuit_id| CircuitIdRoundTuple::new(circuit_id, self as u8))
                .collect(),
            AggregationRound::NodeAggregation => vec![CircuitIdRoundTuple::new(2, self as u8)],
            AggregationRound::RecursionTip => vec![CircuitIdRoundTuple::new(255, self as u8)],
            AggregationRound::Scheduler => vec![CircuitIdRoundTuple::new(1, self as u8)],
        }
    }
Returns all the circuit IDs that correspond to a particular
aggregation round.

For example, in aggregation round 0, the circuit ids should be 1 to 15 + 255 (EIP4844).
In aggregation round 1, the circuit ids should be 3 to 18.
In aggregation round 2, the circuit ids should be 2.
In aggregation round 3, the circuit ids should be 255.
In aggregation round 4, the circuit ids should be 1.
core/lib/basic_types/src/basic_fri_types.rs