quarry_mine/instructions/
new_rewarder_v2.rs1use crate::*;
2
3pub fn handler(ctx: Context<NewRewarderV2>) -> Result<()> {
4 let rewarder = &mut ctx.accounts.rewarder;
5
6 rewarder.base = ctx.accounts.base.key();
7 rewarder.bump = unwrap_bump!(ctx, "rewarder");
8
9 rewarder.authority = ctx.accounts.initial_authority.key();
10 rewarder.pending_authority = Pubkey::default();
11
12 rewarder.annual_rewards_rate = 0;
13 rewarder.num_quarries = 0;
14 rewarder.total_rewards_shares = 0;
15 rewarder.mint_wrapper = ctx.accounts.mint_wrapper.key();
16
17 rewarder.rewards_token_mint = ctx.accounts.rewards_token_mint.key();
18
19 rewarder.claim_fee_token_account = ctx.accounts.claim_fee_token_account.key();
20 rewarder.max_claim_fee_millibps = DEFAULT_CLAIM_FEE_MILLIBPS;
21
22 rewarder.pause_authority = Pubkey::default();
23 rewarder.is_paused = false;
24
25 let current_ts = Clock::get()?.unix_timestamp;
26 emit!(NewRewarderEvent {
27 authority: rewarder.authority,
28 timestamp: current_ts,
29 });
30
31 Ok(())
32}
33
34#[derive(Accounts)]
36pub struct NewRewarderV2<'info> {
37 pub base: Signer<'info>,
39
40 #[account(
42 init,
43 seeds = [
44 b"Rewarder".as_ref(),
45 base.key().to_bytes().as_ref()
46 ],
47 bump,
48 payer = payer,
49 space = 8 + Rewarder::LEN
50 )]
51 pub rewarder: Account<'info, Rewarder>,
52
53 pub initial_authority: UncheckedAccount<'info>,
56
57 #[account(mut)]
59 pub payer: Signer<'info>,
60
61 pub system_program: Program<'info, System>,
63
64 pub mint_wrapper: Account<'info, quarry_mint_wrapper::MintWrapper>,
66
67 pub rewards_token_mint: Account<'info, Mint>,
69
70 pub claim_fee_token_account: Account<'info, TokenAccount>,
72}
73
74impl<'info> Validate<'info> for NewRewarderV2<'info> {
75 fn validate(&self) -> Result<()> {
76 invariant!(self.base.is_signer, Unauthorized);
77
78 assert_keys_eq!(self.mint_wrapper.token_mint, self.rewards_token_mint);
79 assert_keys_eq!(
80 self.rewards_token_mint.mint_authority.unwrap(),
81 self.mint_wrapper
82 );
83
84 assert_keys_eq!(self.claim_fee_token_account.owner, self.rewarder);
85 assert_keys_eq!(self.claim_fee_token_account.mint, self.rewards_token_mint);
86 invariant!(self.claim_fee_token_account.delegate.is_none());
87 invariant!(self.claim_fee_token_account.close_authority.is_none());
88
89 Ok(())
90 }
91}