programs/logger/src/lib.rs
use anchor_lang::prelude::*;
use borsh::{BorshDeserialize, BorshSerialize};
declare_id!("ENdMF5CR3qvWj2L6xZWofrYiYaQVV3dM94ghtbrvJ9QN");
#[program]
pub mod logger {
use super::*;
pub fn emit_event(_ctx: Context<SetRoosterEvent>, data: String, label: String) -> Result<()> {
let m_data = data;
let m_label = label;
emit!(RoosterEvent {
data: m_data.to_string(),
label: m_label.to_string(),
});
msg!(m_data.as_str());
msg!(m_label.as_str());
Ok(())
}
}
#[derive(Accounts, AnchorDeserialize, AnchorSerialize)]
pub struct SetRoosterEvent<'info> {
#[account(mut)]
pub event: Account<'info, TestEvent>,
}
#[account]
pub struct TestEvent {
pub ignore: u64,
}
#[event]
// #[derive(Clone, Debug, Default)]
pub struct RoosterEvent {
pub data: String,
pub label: String,
}
programs/consumer/src/lib.rs
use anchor_lang::prelude::*;
use logger::cpi::accounts::SetRoosterEvent;
use logger::program::Logger;
use logger::{self, TestEvent};
declare_id!("5M8M5VCtD3cDkqJJj3NmfgVwnrVj1t9NSpmdSB3XGKR6");
#[program]
pub mod consumer {
use super::*;
pub fn do_something(ctx: Context<DoSomething>) -> Result<()> {
let cpi_program = ctx.accounts.logger_program.to_account_info().clone();
let cpi_accounts = SetRoosterEvent {
event: ctx.accounts.event.to_account_info().clone(),
};
let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
logger::cpi::emit_event(cpi_ctx, "data".to_string(), "label".to_string())?;
Ok(())
}
}
#[derive(Accounts)]
pub struct DoSomething<'info> {
#[account(mut)]
pub event: Account<'info, TestEvent>,
pub logger_program: Program<'info, Logger>,
}
tests/logger.ts
import * as anchor from "@coral-xyz/anchor";
import { Program } from "@coral-xyz/anchor";
import { Logger } from "../target/types/logger";
import { Consumer } from "../target/types/consumer";
describe("logger", () => {
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const program = anchor.workspace.Logger as Program<Logger>;
const consumer = anchor.workspace.Consumer as Program<Consumer>;
const powerAccount = anchor.web3.Keypair.generate();
it("Does CPI", async()=>{
await consumer.methods.doSomething().accounts({
event: powerAccount.publicKey,
loggerProgram: program.programId,
}).rpc();
})
});