Assessment reports>Astria Shared Sequencer>Low findings>Soft-block channel capacity misconfiguration
Category: Coding Mistakes

Soft-block channel capacity misconfiguration

Low Severity
Low Impact
Medium Likelihood

Description

The soft_blocks channel is used for communicating soft blocks (which have been processed by the Sequencer but not Celestia, as opposed to firm blocks, which have also been processed by Celestia).

Its capacity is tied to the celestia_block_variance value in the rollup node’s genesis configuration. If this value is set to zero, soft blocks will never be sent or executed.

Impact

In the Executor's init method, the soft block channel's capacity is set based on calculate_max_spread, which multiplies celestia_block_variance by six:

fn calculate_max_spread(&self) -> usize {
    usize::try_from(self.state.celestia_block_variance())
        .expect("converting a u32 to usize should work on any architecture conductor runs on")
        .saturating_mul(6)
}

If celestia_block_variance is zero, it results in a max_spread of zero, preventing soft blocks from being processed:

if let Some(channel) = self.soft_blocks.as_mut() {
    channel.set_capacity(max_spread);
}

This creates a situation where soft blocks are never sent or executed. Notably, in soft-only mode, celestia_block_variance and the soft-block channel capacity do not appear to have any direct functional relationship, yet a zero variance still prevents execution.

Recommendations

Ensure a minimum value for celestia_block_variance or set a default value for soft-only mode to decouple the logic and guarantee that soft blocks can be processed in any mode.

Remediation

Zellic © 2025Back to top ↑