mpl_hydra/
state.rs

1use anchor_lang::prelude::*;
2use std::default::Default;
3
4pub const HOLDING_ACCOUNT_SIZE: usize = 1;
5
6#[derive(AnchorSerialize, AnchorDeserialize, Clone, PartialEq, Eq, Copy, Debug)]
7pub enum MembershipModel {
8    Wallet = 0,
9    Token = 1,
10    NFT = 2,
11}
12
13impl Default for MembershipModel {
14    fn default() -> Self {
15        MembershipModel::Wallet
16    }
17}
18
19pub const FANOUT_ACCOUNT_SIZE: usize = 300;
20#[account]
21#[derive(Default, Debug)]
22pub struct Fanout {
23    pub authority: Pubkey,                 //32
24    pub name: String,                      //50
25    pub account_key: Pubkey,               //32
26    pub total_shares: u64,                 //8
27    pub total_members: u64,                //8
28    pub total_inflow: u64,                 //8
29    pub last_snapshot_amount: u64,         //8
30    pub bump_seed: u8,                     //1
31    pub account_owner_bump_seed: u8,       //1
32    pub total_available_shares: u64,       //8
33    pub membership_model: MembershipModel, //1
34    pub membership_mint: Option<Pubkey>,   //32
35    pub total_staked_shares: Option<u64>,  //4
36}
37
38#[account]
39#[derive(Default, Debug)]
40pub struct FanoutMint {
41    pub mint: Pubkey,              //32
42    pub fanout: Pubkey,            //32
43    pub token_account: Pubkey,     //32
44    pub total_inflow: u64,         //8
45    pub last_snapshot_amount: u64, //8
46    pub bump_seed: u8,             //1
47                                   // +50 padding
48}
49
50pub const FANOUT_MEMBERSHIP_VOUCHER_SIZE: usize = 32 + 8 + 8 + 1 + 32 + 8 + 8 + 56;
51#[account]
52#[derive(Default, Debug)]
53pub struct FanoutMembershipVoucher {
54    pub fanout: Pubkey,
55    pub total_inflow: u64,
56    pub last_inflow: u64,
57    pub bump_seed: u8,
58    pub membership_key: Pubkey,
59    pub shares: u64,
60    pub stake_time: i64,
61}
62
63pub const FANOUT_MINT_MEMBERSHIP_VOUCHER_SIZE: usize = 32 + 32 + 8 + 1 + 8 + 24;
64#[account]
65#[derive(Default)]
66pub struct FanoutMembershipMintVoucher {
67    pub fanout: Pubkey,
68    pub fanout_mint: Pubkey,
69    pub last_inflow: u64,
70    pub bump_seed: u8,
71    pub stake_time: i64,
72}