sunny_anchor/
lib.rs

1//! Sunny Anchor client.
2
3use anchor_lang::prelude::*;
4
5declare_id!("SPQR4kT3q2oUKEJes2L6NNSBCiPW9SfuhkuqC9bp6Sx");
6
7#[program]
8pub mod sunny_anchor {
9    use super::*;
10
11    pub fn init_vault(_ctx: Context<InitVault>, _bump: u8) -> Result<()> {
12        Ok(())
13    }
14
15    pub fn init_miner(_ctx: Context<InitMiner>, _bump: u8) -> Result<()> {
16        Ok(())
17    }
18
19    pub fn deposit_vendor(_ctx: Context<QuarryStakeVendor>) -> Result<()> {
20        Ok(())
21    }
22
23    pub fn stake_internal(_ctx: Context<QuarryStakeInternal>) -> Result<()> {
24        Ok(())
25    }
26
27    pub fn unstake_internal(_ctx: Context<QuarryStakeInternal>, _amount: u64) -> Result<()> {
28        Ok(())
29    }
30
31    pub fn withdraw_vendor(_ctx: Context<QuarryStakeVendor>, _amount: u64) -> Result<()> {
32        Ok(())
33    }
34
35    pub fn withdraw_from_vault(_ctx: Context<WithdrawFromVault>) -> Result<()> {
36        Ok(())
37    }
38
39    pub fn claim_rewards(_ctx: Context<ClaimRewards>) -> Result<()> {
40        Ok(())
41    }
42}
43
44#[account]
45#[derive(Copy, Debug, Default)]
46pub struct Pool {
47    pub creator: Pubkey,
48    pub quarry: Pubkey,
49    pub bump: u8,
50    pub rewarder: Pubkey,
51    pub rewards_mint: Pubkey,
52    pub vendor_mint: Pubkey,
53    pub internal_mint: Pubkey,
54    pub admin: Pubkey,
55    pub pending_admin: Pubkey,
56    pub fees: Fees,
57    pub vault_count: u64,
58    pub total_vendor_balance: u64,
59    pub total_internal_balance: u64,
60    pub total_rewards_claimed: u64,
61    pub total_rewards_fees_paid: u64,
62}
63
64#[account]
65#[derive(Copy, Debug, Default)]
66pub struct Vault {
67    pub pool: Pubkey,
68    pub owner: Pubkey,
69    pub bump: u8,
70    pub index: u64,
71    pub vendor_balance: u64,
72    pub internal_balance: u64,
73}
74
75#[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy, Debug, Default)]
76pub struct Fees {
77    pub claim_fee: MegaBPS,
78    pub vendor_fee: MegaBPS,
79    pub withdraw_fee: MegaBPS,
80}
81
82#[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy, Debug, Default)]
83pub struct MegaBPS {
84    pub mega_bps: u64,
85}
86
87#[derive(Accounts)]
88pub struct InitVault<'info> {
89    pub pool: UncheckedAccount<'info>,
90    pub owner: UncheckedAccount<'info>,
91    #[account(mut)]
92    pub vault: UncheckedAccount<'info>,
93    #[account(mut)]
94    pub payer: Signer<'info>,
95    pub system_program: UncheckedAccount<'info>,
96}
97
98#[derive(Accounts)]
99pub struct InitMiner<'info> {
100    pub pool: UncheckedAccount<'info>,
101    pub vault: UncheckedAccount<'info>,
102    #[account(mut)]
103    pub miner: UncheckedAccount<'info>,
104    #[account(mut)]
105    pub quarry: UncheckedAccount<'info>,
106    pub rewarder: UncheckedAccount<'info>,
107    pub token_mint: UncheckedAccount<'info>,
108    pub miner_vault: UncheckedAccount<'info>,
109    #[account(mut)]
110    pub payer: Signer<'info>,
111    pub mine_program: UncheckedAccount<'info>,
112    pub system_program: UncheckedAccount<'info>,
113    pub token_program: UncheckedAccount<'info>,
114}
115
116#[derive(Accounts)]
117pub struct WithdrawFromVault<'info> {
118    pub owner: Signer<'info>,
119    pub pool: UncheckedAccount<'info>,
120    #[account(mut)]
121    pub vault: UncheckedAccount<'info>,
122    #[account(mut)]
123    pub vault_token_account: UncheckedAccount<'info>,
124    #[account(mut)]
125    pub token_destination: UncheckedAccount<'info>,
126    #[account(mut)]
127    pub fee_destination: UncheckedAccount<'info>,
128    pub token_program: UncheckedAccount<'info>,
129}
130
131#[derive(Accounts)]
132pub struct ClaimRewards<'info> {
133    #[account(mut)]
134    pub mint_wrapper: UncheckedAccount<'info>,
135    pub mint_wrapper_program: UncheckedAccount<'info>,
136    #[account(mut)]
137    pub minter: UncheckedAccount<'info>,
138    #[account(mut)]
139    pub rewards_token_mint: UncheckedAccount<'info>,
140    #[account(mut)]
141    pub rewards_token_account: UncheckedAccount<'info>,
142    #[account(mut)]
143    pub claim_fee_token_account: UncheckedAccount<'info>,
144    #[account(mut)]
145    pub stake_token_account: UncheckedAccount<'info>,
146    pub stake: QuarryStake<'info>,
147}
148
149#[derive(Accounts)]
150pub struct QuarryStakeVendor<'info> {
151    pub vault_owner: Signer<'info>,
152    #[account(mut)]
153    pub vault_vendor_token_account: UncheckedAccount<'info>,
154    pub stake: QuarryStake<'info>,
155}
156
157#[derive(Accounts)]
158pub struct QuarryStakeInternal<'info> {
159    pub vault_owner: Signer<'info>,
160    #[account(mut)]
161    pub internal_mint: UncheckedAccount<'info>,
162    #[account(mut)]
163    pub internal_mint_token_account: UncheckedAccount<'info>,
164    pub stake: QuarryStake<'info>,
165}
166
167#[derive(Accounts)]
168pub struct QuarryStake<'info> {
169    #[account(mut)]
170    pub pool: UncheckedAccount<'info>,
171    #[account(mut)]
172    pub vault: UncheckedAccount<'info>,
173    pub rewarder: UncheckedAccount<'info>,
174    #[account(mut)]
175    pub quarry: UncheckedAccount<'info>,
176    #[account(mut)]
177    pub miner: UncheckedAccount<'info>,
178    #[account(mut)]
179    pub miner_vault: UncheckedAccount<'info>,
180    pub token_program: UncheckedAccount<'info>,
181    pub mine_program: UncheckedAccount<'info>,
182    pub clock: UncheckedAccount<'info>,
183}