1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//! This code was AUTOGENERATED using the Codama library.
use {crate::types::UserFees, solana_pubkey::Pubkey};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct UserStats {
/// The authority for all of a users sub accounts
pub authority: Pubkey,
/// The address that referred this user
pub referrer: Pubkey,
/// Stats on the fees paid by the user
pub fees: UserFees,
/// The timestamp of the next epoch
/// Epoch is used to limit referrer rewards earned in single epoch
pub next_epoch_ts: i64,
/// Rolling 30day maker volume for user
/// precision: QUOTE_PRECISION
pub maker_volume30d: u64,
/// Rolling 30day taker volume for user
/// precision: QUOTE_PRECISION
pub taker_volume30d: u64,
/// Rolling 30day filler volume for user
/// precision: QUOTE_PRECISION
pub filler_volume30d: u64,
/// last time the maker volume was updated
pub last_maker_volume30d_ts: i64,
/// last time the taker volume was updated
pub last_taker_volume30d_ts: i64,
/// last time the filler volume was updated
pub last_filler_volume30d_ts: i64,
/// The amount of tokens staked in the quote spot markets if
pub if_staked_quote_asset_amount: u64,
/// The current number of sub accounts
pub number_of_sub_accounts: u16,
/// The number of sub accounts created. Can be greater than the number of
/// sub accounts if user has deleted sub accounts
pub number_of_sub_accounts_created: u16,
/// Flags for referrer status:
/// First bit (LSB): 1 if user is a referrer, 0 otherwise
/// Second bit: 1 if user was referred, 0 otherwise
pub referrer_status: u8,
pub disable_update_perp_bid_ask_twap: u8,
pub paused_operations: u8,
/// whether the user has a FuelOverflow account
pub fuel_overflow_status: u8,
/// accumulated fuel for token amounts of insurance
pub fuel_insurance: u32,
/// accumulated fuel for notional of deposits
pub fuel_deposits: u32,
/// accumulate fuel bonus for notional of borrows
pub fuel_borrows: u32,
/// accumulated fuel for perp open interest
pub fuel_positions: u32,
/// accumulate fuel bonus for taker volume
pub fuel_taker: u32,
/// accumulate fuel bonus for maker volume
pub fuel_maker: u32,
/// The amount of tokens staked in the governance spot markets if
pub if_staked_gov_token_amount: u64,
/// last unix ts user stats data was used to update if fuel (u32 to save
/// space)
pub last_fuel_if_bonus_update_ts: u32,
pub padding: [u8; 12],
}
impl UserStats {
pub fn decode(data: &[u8]) -> Option<Self> {
if data.len() < 8 {
return None;
}
let discriminator = &data[0..8];
if discriminator != [176, 223, 136, 27, 122, 79, 32, 227] {
return None;
}
let mut data_slice = data;
data_slice = &data_slice[8..];
borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
}
}