1use anchor_lang::prelude::*;
2use std::default::Default;
3
4pub const HOLDING_ACCOUNT_SIZE: usize = 1;
5
6#[derive(AnchorSerialize, AnchorDeserialize, Clone, PartialEq, 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
19#[account]
20#[derive(Default, Debug)]
21pub struct Fanout {
22 pub authority: Pubkey, pub name: String, pub account_key: Pubkey, pub total_shares: u64, pub total_members: u64, pub total_inflow: u64, pub last_snapshot_amount: u64, pub bump_seed: u8, pub account_owner_bump_seed: u8, pub total_available_shares: u64, pub membership_model: MembershipModel, pub membership_mint: Option<Pubkey>, pub total_staked_shares: Option<u64>, }
36
37#[account]
38#[derive(Default, Debug)]
39pub struct FanoutMint {
40 pub mint: Pubkey, pub fanout: Pubkey, pub token_account: Pubkey, pub total_inflow: u64, pub last_snapshot_amount: u64, pub bump_seed: u8, }
48
49pub const FANOUT_MEMBERSHIP_VOUCHER_SIZE: usize = 32 + 8 + 8 + 1 + 32 + 8 + 64;
50#[account]
51#[derive(Default, Debug)]
52pub struct FanoutMembershipVoucher {
53 pub fanout: Pubkey,
54 pub total_inflow: u64,
55 pub last_inflow: u64,
56 pub bump_seed: u8,
57 pub membership_key: Pubkey,
58 pub shares: u64,
59}
60
61pub const FANOUT_MINT_MEMBERSHIP_VOUCHER_SIZE: usize = 32 + 32 + 8 + 1 + 32;
62#[account]
63#[derive(Default)]
64pub struct FanoutMembershipMintVoucher {
65 pub fanout: Pubkey,
66 pub fanout_mint: Pubkey,
67 pub last_inflow: u64,
68 pub bump_seed: u8,
69}