diff --git a/lang/attribute/event/src/lib.rs b/lang/attribute/event/src/lib.rs index a73eea9425..16a5be059a 100644 --- a/lang/attribute/event/src/lib.rs +++ b/lang/attribute/event/src/lib.rs @@ -93,14 +93,22 @@ pub fn emit_cpi(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let first = &elems[0]; let second = &elems[1]; + // use solana_program::account_info::AccountInfo; + // use solana_program::instruction::{AccountMeta, Instruction}; proc_macro::TokenStream::from(quote! { let program_info: &anchor_lang::solana_program::account_info::AccountInfo = &#first; let __disc: Vec = crate::event::EVENT_IX_TAG_LE.to_vec(); let __inner_data: &Vec = &anchor_lang::Event::data(&#second); - let __ix_data: Vec = __disc.iter().chain(__inner_data.iter()).cloned().collect(); + let ix_data: Vec = __disc.iter().chain(__inner_data.iter()).cloned().collect(); - anchor_lang::__private::_emit_cpi_invoke(__ix_data, program_info)?; + let ix = anchor_lang::solana_program::instruction::Instruction::new_with_bytes( + program_info.key.clone(), + ix_data.as_ref(), + vec![anchor_lang::solana_program::instruction::AccountMeta::new_readonly(*program_info.key, false)], + ); + anchor_lang::solana_program::program::invoke(&ix, &[program_info.clone()]) + .map_err(|e: anchor_lang::solana_program::program_error::ProgramError| crate::Error::from(e))?; }) } diff --git a/lang/src/lib.rs b/lang/src/lib.rs index 16b3b35884..310b4f975d 100644 --- a/lang/src/lib.rs +++ b/lang/src/lib.rs @@ -334,8 +334,6 @@ pub mod __private { pub use bytemuck; - use solana_program::account_info::AccountInfo; - use solana_program::instruction::{AccountMeta, Instruction}; use solana_program::pubkey::Pubkey; // Used to calculate the maximum between two expressions. @@ -361,17 +359,6 @@ pub mod __private { input.to_bytes() } } - - #[doc(hidden)] - pub fn _emit_cpi_invoke(ix_data: Vec, program: &AccountInfo) -> anchor_lang::Result<()> { - let ix: Instruction = Instruction::new_with_bytes( - program.key.clone(), - ix_data.as_ref(), - vec![AccountMeta::new_readonly(*program.key, false)], - ); - solana_program::program::invoke(&ix, &[program.clone()])?; - Ok(()) - } } /// Ensures a condition is true, otherwise returns with the given error.