pub async fn create_and_send_transaction_with_event<T>(
    context: &mut ProgramTestContext,
    instruction: &[Instruction],
    payer: &Pubkey,
    signers: &[&Keypair],
    transaction_params: Option<TransactionParams>
) -> Result<Option<T>, BanksClientError>