pub async fn push_actions(&self, actions: Vec<SyncAction>) -> anyhow::Result<()> {
        Self::check_action_sequence(&actions)?;
        for action in actions {
            self.0
                .send(action)
                .await
                .map_err(|_| anyhow::anyhow!("node action processor stopped"))?;
            QUEUE_METRICS
                .action_queue_size
                .set(self.0.max_capacity() - self.0.capacity());
        }
        Ok(())
    }
Pushes a set of actions to the queue.

Requires that the actions are in the correct order: starts with a new open L1 batch / L2 block,
followed by 0 or more transactions, have mandatory `SealL2Block` and optional `SealBatch` at the end.
Would panic if the order is incorrect.

# Errors

Errors correspond to incorrect action order, or to `ExternalIO` instance that the queue is connected to shutting down.
Hence, returned errors must be treated as unrecoverable by the caller; it is unsound to continue
operating a node if some of the `actions` may be lost.
core/node/node_sync/src/sync_action.rs