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, 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>, }
37
38#[account]
39#[derive(Default, Debug)]
40pub struct FanoutMint {
41 pub mint: Pubkey, pub fanout: Pubkey, pub token_account: Pubkey, pub total_inflow: u64, pub last_snapshot_amount: u64, pub bump_seed: u8, }
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}