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, 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,                 //32
23    pub name: String,                      //50
24    pub account_key: Pubkey,               //32
25    pub total_shares: u64,                 //8
26    pub total_members: u64,                //8
27    pub total_inflow: u64,                 //8
28    pub last_snapshot_amount: u64,         //8
29    pub bump_seed: u8,                     //1
30    pub account_owner_bump_seed: u8,       //1
31    pub total_available_shares: u64,       //8
32    pub membership_model: MembershipModel, //1
33    pub membership_mint: Option<Pubkey>,   //32
34    pub total_staked_shares: Option<u64>,  //4
35}
36
37#[account]
38#[derive(Default, Debug)]
39pub struct FanoutMint {
40    pub mint: Pubkey,              //32
41    pub fanout: Pubkey,            //32
42    pub token_account: Pubkey,     //32
43    pub total_inflow: u64,         //8
44    pub last_snapshot_amount: u64, //8
45    pub bump_seed: u8,             //1
46                                   // +50 padding
47}
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}