cardinal-stake-pool 2.2.1

Cardinal stake pool
Documentation
use crate::state::*;
use anchor_lang::prelude::*;

#[derive(AnchorSerialize, AnchorDeserialize)]
pub struct InitGroupEntryIx {
    pub group_id: Pubkey,
    pub group_cooldown_seconds: Option<u32>,
    pub group_stake_seconds: Option<u32>,
}

#[derive(Accounts)]
#[instruction(ix: InitGroupEntryIx)]
pub struct InitGroupEntryCtx<'info> {
    #[account(
        init,
        payer = authority,
        space = GROUP_ENTRY_DEFAULT_SIZE,
        seeds = [GROUP_ENTRY_PREFIX.as_bytes(), ix.group_id.key().as_ref()],
        bump,
    )]
    group_entry: Box<Account<'info, GroupStakeEntry>>,
    #[account(mut)]
    authority: Signer<'info>,
    system_program: Program<'info, System>,
}

pub fn handler(ctx: Context<InitGroupEntryCtx>, ix: InitGroupEntryIx) -> Result<()> {
    let group_entry = &mut ctx.accounts.group_entry;
    let authority = &mut ctx.accounts.authority;
    group_entry.bump = *ctx.bumps.get("group_entry").unwrap();
    group_entry.group_id = ix.group_id;
    group_entry.authority = authority.key();
    group_entry.changed_at = Clock::get().unwrap().unix_timestamp;
    group_entry.group_cooldown_seconds = ix.group_cooldown_seconds.unwrap_or(0);
    group_entry.group_stake_seconds = ix.group_stake_seconds.unwrap_or(0);

    Ok(())
}