1use 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}