@@ -44,6 +44,8 @@ impl TasksAccountHeaderV0 {
4444 }
4545}
4646
47+ const MEMO_PROGRAM_ID : Pubkey = pubkey ! ( "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" ) ;
48+
4749// Add new iterator struct for reading tasks
4850pub struct TasksIterator < ' a > {
4951 data : & ' a mut & ' a [ u8 ] ,
@@ -205,13 +207,17 @@ impl<'a, 'info> TaskProcessor<'a, 'info> {
205207 }
206208
207209 // Pass free tasks as remaining accounts so the task can know which IDs will be used
208- let free_tasks = & self . ctx . remaining_accounts [ self . free_task_index ..] ;
209- accounts. extend ( free_tasks. iter ( ) . cloned ( ) ) ;
210- account_infos. extend ( free_tasks. iter ( ) . map ( |acct| AccountMeta {
211- pubkey : acct. key ( ) ,
212- is_signer : false ,
213- is_writable : false ,
214- } ) ) ;
210+ let program_id = remaining_accounts[ ix. program_id_index as usize ] . key ;
211+ // Ignore memo program because it expects every account passed to be a signer.
212+ if * program_id != MEMO_PROGRAM_ID {
213+ let free_tasks = & self . ctx . remaining_accounts [ self . free_task_index ..] ;
214+ accounts. extend ( free_tasks. iter ( ) . cloned ( ) ) ;
215+ account_infos. extend ( free_tasks. iter ( ) . map ( |acct| AccountMeta {
216+ pubkey : acct. key ( ) ,
217+ is_signer : false ,
218+ is_writable : false ,
219+ } ) ) ;
220+ }
215221
216222 let signer_seeds: Vec < Vec < & [ u8 ] > > = self
217223 . signers
@@ -221,7 +227,7 @@ impl<'a, 'info> TaskProcessor<'a, 'info> {
221227
222228 solana_program:: program:: invoke_signed (
223229 & Instruction {
224- program_id : * remaining_accounts [ ix . program_id_index as usize ] . key ,
230+ program_id : * program_id ,
225231 accounts : account_infos,
226232 data : ix. data . clone ( ) ,
227233 } ,
0 commit comments