pub fn push_l2_block(&mut self) {
        let next_l2_block_params = self
            .next_l2_block_params
            .take()
            .expect("next l2 block params cannot be empty");
        let new_l2_block_updates = L2BlockUpdates::new(
            next_l2_block_params.timestamp,
            self.l2_block.number + 1,
            self.l2_block.get_l2_block_hash(),
            next_l2_block_params.virtual_blocks,
            self.protocol_version,
        );
        let old_l2_block_updates = std::mem::replace(&mut self.l2_block, new_l2_block_updates);
        self.l1_batch
            .extend_from_sealed_l2_block(old_l2_block_updates);
    }
Pushes a new L2 block with the specified timestamp into this manager. The previously
held L2 block is considered sealed and is used to extend the L1 batch data.
core/node/state_keeper/src/updates/mod.rs