@@ -66,6 +66,7 @@ impl TransactionUtils {
6666 let budget_instructions = Self :: budget_instructions (
6767 Self :: tasks_compute_units ( tasks) ,
6868 compute_unit_price,
69+ Self :: tasks_accounts_size_budget ( tasks) ,
6970 ) ;
7071 let ixs = Self :: tasks_instructions ( & authority. pubkey ( ) , tasks) ;
7172 Self :: assemble_tx_raw (
@@ -127,16 +128,28 @@ impl TransactionUtils {
127128 tasks. iter ( ) . map ( |task| task. as_ref ( ) . compute_units ( ) ) . sum ( )
128129 }
129130
131+ pub fn tasks_accounts_size_budget (
132+ tasks : & [ impl AsRef < dyn BaseTask > ] ,
133+ ) -> u32 {
134+ tasks
135+ . iter ( )
136+ . map ( |task| task. as_ref ( ) . accounts_size_budget ( ) )
137+ . sum ( )
138+ }
139+
130140 pub fn budget_instructions (
131141 compute_units : u32 ,
132142 compute_unit_price : u64 ,
133- ) -> [ Instruction ; 2 ] {
134- let compute_budget_ix =
135- ComputeBudgetInstruction :: set_compute_unit_limit ( compute_units ) ;
136- let compute_unit_price_ix =
143+ accounts_size_budget : u32 ,
144+ ) -> [ Instruction ; 3 ] {
145+ [
146+ ComputeBudgetInstruction :: set_compute_unit_limit ( compute_units ) ,
137147 ComputeBudgetInstruction :: set_compute_unit_price (
138148 compute_unit_price,
139- ) ;
140- [ compute_budget_ix, compute_unit_price_ix]
149+ ) ,
150+ ComputeBudgetInstruction :: set_loaded_accounts_data_size_limit (
151+ accounts_size_budget,
152+ ) ,
153+ ]
141154 }
142155}
0 commit comments