diff --git a/rust/main/agents/relayer/src/msg/op_submitter.rs b/rust/main/agents/relayer/src/msg/op_submitter.rs index 1f0a54234c..88efc46aa6 100644 --- a/rust/main/agents/relayer/src/msg/op_submitter.rs +++ b/rust/main/agents/relayer/src/msg/op_submitter.rs @@ -465,10 +465,21 @@ async fn confirm_operation( confirm_queue.push(op, None).await; } PendingOperationResult::Confirm(reason) => { - // TODO: push multiple messages at once - confirm_queue - .push(op, Some(PendingOperationStatus::Confirm(reason.clone()))) - .await; + let mut batch = vec![op]; + // Try to get more operations from the queue that are ready for confirmation + while let Some(next_op) = confirm_queue.pop().await { + batch.push(next_op); + if batch.len() >= max_batch_size as usize { + break; + } + } + + // Push all operations back to confirm queue + for op in batch { + confirm_queue + .push(op, Some(PendingOperationStatus::Confirm(reason.clone()))) + .await; + } } PendingOperationResult::Reprepare(reason) => { metrics.ops_failed.inc();