From d9a5c05badfb4a79b45fd96b50aab77c9537ae4b Mon Sep 17 00:00:00 2001 From: Sarfaraz Nawaz Date: Wed, 5 Nov 2025 19:50:23 +0530 Subject: [PATCH 1/2] refactor: Rename optimize() -> minimize_tx_size() --- magicblock-committor-service/src/tasks/args_task.rs | 2 +- magicblock-committor-service/src/tasks/buffer_task.rs | 2 +- magicblock-committor-service/src/tasks/mod.rs | 5 +++-- .../src/tasks/task_strategist.rs | 9 +++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/magicblock-committor-service/src/tasks/args_task.rs b/magicblock-committor-service/src/tasks/args_task.rs index fdb05a7b6..08b8cd7ff 100644 --- a/magicblock-committor-service/src/tasks/args_task.rs +++ b/magicblock-committor-service/src/tasks/args_task.rs @@ -85,7 +85,7 @@ impl BaseTask for ArgsTask { } } - fn optimize( + fn minimize_tx_size( self: Box, ) -> Result, Box> { match self.task_type { diff --git a/magicblock-committor-service/src/tasks/buffer_task.rs b/magicblock-committor-service/src/tasks/buffer_task.rs index 375622833..f48604adb 100644 --- a/magicblock-committor-service/src/tasks/buffer_task.rs +++ b/magicblock-committor-service/src/tasks/buffer_task.rs @@ -70,7 +70,7 @@ impl BaseTask for BufferTask { } /// No further optimizations - fn optimize( + fn minimize_tx_size( self: Box, ) -> Result, Box> { // Since the buffer in BufferTask doesn't contribute to the size of diff --git a/magicblock-committor-service/src/tasks/mod.rs b/magicblock-committor-service/src/tasks/mod.rs index 732dd5be4..cb601f65c 100644 --- a/magicblock-committor-service/src/tasks/mod.rs +++ b/magicblock-committor-service/src/tasks/mod.rs @@ -75,8 +75,9 @@ pub trait BaseTask: Send + Sync + DynClone + LabelValue { /// Gets instruction for task execution fn instruction(&self, validator: &Pubkey) -> Instruction; - /// Optimizes Task strategy if possible, otherwise returns itself - fn optimize( + /// Optimize for transaction size so that more instructions can be buddled together in a single + /// transaction. Return Ok(new_tx_optimized_task), else Err(self) if task cannot be optimized. + fn minimize_tx_size( self: Box, ) -> Result, Box>; diff --git a/magicblock-committor-service/src/tasks/task_strategist.rs b/magicblock-committor-service/src/tasks/task_strategist.rs index 4814118ef..aa51d7b7f 100644 --- a/magicblock-committor-service/src/tasks/task_strategist.rs +++ b/magicblock-committor-service/src/tasks/task_strategist.rs @@ -171,7 +171,8 @@ impl TaskStrategist { persistor: &Option

, ) -> TaskStrategistResult { // Attempt optimizing tasks themselves(using buffers) - if Self::optimize_strategy(&mut tasks)? <= MAX_ENCODED_TRANSACTION_SIZE + if Self::minimize_tx_size_if_needed(&mut tasks)? + <= MAX_ENCODED_TRANSACTION_SIZE { // Persist tasks strategy if let Some(persistor) = persistor { @@ -270,7 +271,7 @@ impl TaskStrategist { /// Optimizes set of [`TaskDeliveryStrategy`] to fit [`MAX_ENCODED_TRANSACTION_SIZE`] /// Returns size of tx after optimizations - fn optimize_strategy( + fn minimize_tx_size_if_needed( tasks: &mut [Box], ) -> Result { // Get initial transaction size @@ -325,7 +326,7 @@ impl TaskStrategist { let tmp_task = Box::new(tmp_task) as Box; std::mem::replace(&mut tasks[index], tmp_task) }; - match task.optimize() { + match task.minimize_tx_size() { // If we can decrease: // 1. Calculate new tx size & ix size // 2. Insert item's data back in the heap @@ -619,7 +620,7 @@ mod tests { as Box, // Larger task ]; - let _ = TaskStrategist::optimize_strategy(&mut tasks); + let _ = TaskStrategist::minimize_tx_size_if_needed(&mut tasks); // The larger task should have been optimized first assert!(matches!(tasks[0].strategy(), TaskStrategy::Args)); assert!(matches!(tasks[1].strategy(), TaskStrategy::Buffer)); From e9b6661e932541f7b269562494a9b47e7757c847 Mon Sep 17 00:00:00 2001 From: Sarfaraz Nawaz Date: Thu, 6 Nov 2025 23:09:55 +0530 Subject: [PATCH 2/2] Address @taco-paco's feedback --- .../src/tasks/args_task.rs | 2 +- .../src/tasks/buffer_task.rs | 2 +- magicblock-committor-service/src/tasks/mod.rs | 2 +- .../src/tasks/task_strategist.rs | 14 ++++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/magicblock-committor-service/src/tasks/args_task.rs b/magicblock-committor-service/src/tasks/args_task.rs index 08b8cd7ff..e7293f7bb 100644 --- a/magicblock-committor-service/src/tasks/args_task.rs +++ b/magicblock-committor-service/src/tasks/args_task.rs @@ -85,7 +85,7 @@ impl BaseTask for ArgsTask { } } - fn minimize_tx_size( + fn try_optimize_tx_size( self: Box, ) -> Result, Box> { match self.task_type { diff --git a/magicblock-committor-service/src/tasks/buffer_task.rs b/magicblock-committor-service/src/tasks/buffer_task.rs index f48604adb..7001f8bac 100644 --- a/magicblock-committor-service/src/tasks/buffer_task.rs +++ b/magicblock-committor-service/src/tasks/buffer_task.rs @@ -70,7 +70,7 @@ impl BaseTask for BufferTask { } /// No further optimizations - fn minimize_tx_size( + fn try_optimize_tx_size( self: Box, ) -> Result, Box> { // Since the buffer in BufferTask doesn't contribute to the size of diff --git a/magicblock-committor-service/src/tasks/mod.rs b/magicblock-committor-service/src/tasks/mod.rs index cb601f65c..e7d1616a7 100644 --- a/magicblock-committor-service/src/tasks/mod.rs +++ b/magicblock-committor-service/src/tasks/mod.rs @@ -77,7 +77,7 @@ pub trait BaseTask: Send + Sync + DynClone + LabelValue { /// Optimize for transaction size so that more instructions can be buddled together in a single /// transaction. Return Ok(new_tx_optimized_task), else Err(self) if task cannot be optimized. - fn minimize_tx_size( + fn try_optimize_tx_size( self: Box, ) -> Result, Box>; diff --git a/magicblock-committor-service/src/tasks/task_strategist.rs b/magicblock-committor-service/src/tasks/task_strategist.rs index aa51d7b7f..974f33324 100644 --- a/magicblock-committor-service/src/tasks/task_strategist.rs +++ b/magicblock-committor-service/src/tasks/task_strategist.rs @@ -171,7 +171,7 @@ impl TaskStrategist { persistor: &Option

, ) -> TaskStrategistResult { // Attempt optimizing tasks themselves(using buffers) - if Self::minimize_tx_size_if_needed(&mut tasks)? + if Self::try_optimize_tx_size_if_needed(&mut tasks)? <= MAX_ENCODED_TRANSACTION_SIZE { // Persist tasks strategy @@ -269,9 +269,11 @@ impl TaskStrategist { ) } - /// Optimizes set of [`TaskDeliveryStrategy`] to fit [`MAX_ENCODED_TRANSACTION_SIZE`] - /// Returns size of tx after optimizations - fn minimize_tx_size_if_needed( + /// Optimizes tasks so as to bring the transaction size within the limit [`MAX_ENCODED_TRANSACTION_SIZE`] + /// Returns Ok(size of tx after optimizations) else Err(SignerError). + /// Note that the returned size, though possibly optimized one, may still not be under + /// the limit MAX_ENCODED_TRANSACTION_SIZE. The caller needs to check and make decision accordingly. + fn try_optimize_tx_size_if_needed( tasks: &mut [Box], ) -> Result { // Get initial transaction size @@ -326,7 +328,7 @@ impl TaskStrategist { let tmp_task = Box::new(tmp_task) as Box; std::mem::replace(&mut tasks[index], tmp_task) }; - match task.minimize_tx_size() { + match task.try_optimize_tx_size() { // If we can decrease: // 1. Calculate new tx size & ix size // 2. Insert item's data back in the heap @@ -620,7 +622,7 @@ mod tests { as Box, // Larger task ]; - let _ = TaskStrategist::minimize_tx_size_if_needed(&mut tasks); + let _ = TaskStrategist::try_optimize_tx_size_if_needed(&mut tasks); // The larger task should have been optimized first assert!(matches!(tasks[0].strategy(), TaskStrategy::Args)); assert!(matches!(tasks[1].strategy(), TaskStrategy::Buffer));