use crate::*;
#[derive(Accounts)]
#[instruction(_bump: u8, voting_epoch: u32)]
pub struct CreateEpochGauge<'info> {
pub gauge: Account<'info, Gauge>,
#[account(
init,
seeds = [
b"EpochGauge".as_ref(),
gauge.key().as_ref(),
voting_epoch.to_le_bytes().as_ref()
],
bump,
space = 8 + EpochGauge::LEN,
payer = payer
)]
pub epoch_gauge: Account<'info, EpochGauge>,
#[account(mut)]
pub payer: Signer<'info>,
pub system_program: Program<'info, System>,
}
pub fn handler(ctx: Context<CreateEpochGauge>, voting_epoch: u32) -> Result<()> {
let epoch_gauge = &mut ctx.accounts.epoch_gauge;
epoch_gauge.gauge = ctx.accounts.gauge.key();
epoch_gauge.voting_epoch = voting_epoch;
epoch_gauge.total_power = 0;
emit!(EpochGaugeCreateEvent {
gaugemeister: ctx.accounts.gauge.gaugemeister,
quarry: ctx.accounts.gauge.quarry,
voting_epoch,
});
Ok(())
}
impl<'info> Validate<'info> for CreateEpochGauge<'info> {
fn validate(&self) -> Result<()> {
Ok(())
}
}
#[event]
pub struct EpochGaugeCreateEvent {
#[index]
pub gaugemeister: Pubkey,
#[index]
pub quarry: Pubkey,
pub voting_epoch: u32,
}