hyperstack_stacks/pumpfun/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4pub struct PumpfunTokenId {
5    #[serde(default)]
6    pub mint: Option<String>,
7    #[serde(default)]
8    pub bonding_curve: Option<String>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default)]
12pub struct PumpfunTokenInfo {
13    #[serde(default)]
14    pub name: Option<Option<String>>,
15    #[serde(default)]
16    pub symbol: Option<Option<String>>,
17    #[serde(default)]
18    pub uri: Option<Option<String>>,
19    #[serde(default)]
20    pub is_complete: Option<Option<bool>>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, Default)]
24pub struct PumpfunTokenReserves {
25    #[serde(default)]
26    pub virtual_token_reserves: Option<Option<u64>>,
27    #[serde(default)]
28    pub virtual_sol_reserves: Option<Option<u64>>,
29    #[serde(default)]
30    pub real_token_reserves: Option<Option<u64>>,
31    #[serde(default)]
32    pub real_sol_reserves: Option<Option<u64>>,
33    #[serde(default)]
34    pub token_total_supply: Option<Option<u64>>,
35    #[serde(default)]
36    pub current_price_sol: Option<Option<f64>>,
37    #[serde(default)]
38    pub market_cap_sol: Option<Option<f64>>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize, Default)]
42pub struct PumpfunTokenTrading {
43    #[serde(default)]
44    pub total_buy_volume: Option<Option<u64>>,
45    #[serde(default)]
46    pub total_sell_volume: Option<Option<u64>>,
47    #[serde(default)]
48    pub total_trades: Option<Option<u64>>,
49    #[serde(default)]
50    pub buy_count: Option<Option<u64>>,
51    #[serde(default)]
52    pub sell_count: Option<Option<u64>>,
53    #[serde(default)]
54    pub unique_traders: Option<Option<u64>>,
55    #[serde(default)]
56    pub largest_trade: Option<Option<u64>>,
57    #[serde(default)]
58    pub smallest_trade: Option<Option<u64>>,
59    #[serde(default)]
60    pub last_trade_timestamp: Option<Option<i64>>,
61    #[serde(default)]
62    pub last_trade_price: Option<Option<f64>>,
63    #[serde(default)]
64    pub whale_trade_count: Option<Option<u64>>,
65    #[serde(default)]
66    pub last_whale_address: Option<Option<String>>,
67    #[serde(default)]
68    pub total_volume: Option<Option<u64>>,
69    #[serde(default)]
70    pub average_trade_size: Option<Option<f64>>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, Default)]
74pub struct PumpfunTokenEvents {
75    #[serde(default)]
76    pub create: Option<Option<serde_json::Value>>,
77    #[serde(default)]
78    pub buys: Option<Vec<serde_json::Value>>,
79    #[serde(default)]
80    pub sells: Option<Vec<serde_json::Value>>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, Default)]
84pub struct PumpfunToken {
85    #[serde(default)]
86    pub id: PumpfunTokenId,
87    #[serde(default)]
88    pub info: PumpfunTokenInfo,
89    #[serde(default)]
90    pub reserves: PumpfunTokenReserves,
91    #[serde(default)]
92    pub trading: PumpfunTokenTrading,
93    #[serde(default)]
94    pub events: PumpfunTokenEvents,
95    #[serde(default)]
96    pub bonding_curve_snapshot: Option<Option<serde_json::Value>>,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize, Default)]
100pub struct Create {
101    #[serde(rename = "mint", default)]
102    pub mint: Option<String>,
103    #[serde(rename = "mintAuthority", default)]
104    pub mint_authority: Option<String>,
105    #[serde(rename = "bondingCurve", default)]
106    pub bonding_curve: Option<String>,
107    #[serde(rename = "associatedBondingCurve", default)]
108    pub associated_bonding_curve: Option<String>,
109    #[serde(rename = "global", default)]
110    pub global: Option<String>,
111    #[serde(rename = "mplTokenMetadata", default)]
112    pub mpl_token_metadata: Option<String>,
113    #[serde(rename = "metadata", default)]
114    pub metadata: Option<String>,
115    #[serde(rename = "user", default)]
116    pub user: Option<String>,
117    #[serde(rename = "systemProgram", default)]
118    pub system_program: Option<String>,
119    #[serde(rename = "tokenProgram", default)]
120    pub token_program: Option<String>,
121    #[serde(rename = "associatedTokenProgram", default)]
122    pub associated_token_program: Option<String>,
123    #[serde(rename = "rent", default)]
124    pub rent: Option<String>,
125    #[serde(rename = "eventAuthority", default)]
126    pub event_authority: Option<String>,
127    #[serde(rename = "program", default)]
128    pub program: Option<String>,
129    #[serde(rename = "name", default)]
130    pub name: Option<String>,
131    #[serde(rename = "symbol", default)]
132    pub symbol: Option<String>,
133    #[serde(rename = "uri", default)]
134    pub uri: Option<String>,
135    #[serde(rename = "creator", default)]
136    pub creator: Option<String>,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize, Default)]
140pub struct Buy {
141    #[serde(rename = "global", default)]
142    pub global: Option<String>,
143    #[serde(rename = "feeRecipient", default)]
144    pub fee_recipient: Option<String>,
145    #[serde(rename = "mint", default)]
146    pub mint: Option<String>,
147    #[serde(rename = "bondingCurve", default)]
148    pub bonding_curve: Option<String>,
149    #[serde(rename = "associatedBondingCurve", default)]
150    pub associated_bonding_curve: Option<String>,
151    #[serde(rename = "associatedUser", default)]
152    pub associated_user: Option<String>,
153    #[serde(rename = "user", default)]
154    pub user: Option<String>,
155    #[serde(rename = "systemProgram", default)]
156    pub system_program: Option<String>,
157    #[serde(rename = "tokenProgram", default)]
158    pub token_program: Option<String>,
159    #[serde(rename = "creatorVault", default)]
160    pub creator_vault: Option<String>,
161    #[serde(rename = "eventAuthority", default)]
162    pub event_authority: Option<String>,
163    #[serde(rename = "program", default)]
164    pub program: Option<String>,
165    #[serde(rename = "amount", default)]
166    pub amount: Option<u64>,
167    #[serde(rename = "maxSolCost", default)]
168    pub max_sol_cost: Option<u64>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, Default)]
172pub struct Sell {
173    #[serde(rename = "global", default)]
174    pub global: Option<String>,
175    #[serde(rename = "feeRecipient", default)]
176    pub fee_recipient: Option<String>,
177    #[serde(rename = "mint", default)]
178    pub mint: Option<String>,
179    #[serde(rename = "bondingCurve", default)]
180    pub bonding_curve: Option<String>,
181    #[serde(rename = "associatedBondingCurve", default)]
182    pub associated_bonding_curve: Option<String>,
183    #[serde(rename = "associatedUser", default)]
184    pub associated_user: Option<String>,
185    #[serde(rename = "user", default)]
186    pub user: Option<String>,
187    #[serde(rename = "systemProgram", default)]
188    pub system_program: Option<String>,
189    #[serde(rename = "creatorVault", default)]
190    pub creator_vault: Option<String>,
191    #[serde(rename = "tokenProgram", default)]
192    pub token_program: Option<String>,
193    #[serde(rename = "eventAuthority", default)]
194    pub event_authority: Option<String>,
195    #[serde(rename = "program", default)]
196    pub program: Option<String>,
197    #[serde(rename = "amount", default)]
198    pub amount: Option<u64>,
199    #[serde(rename = "minSolOutput", default)]
200    pub min_sol_output: Option<u64>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize, Default)]
204pub struct BondingCurve {
205    #[serde(rename = "virtualTokenReserves", default)]
206    pub virtual_token_reserves: Option<u64>,
207    #[serde(rename = "virtualSolReserves", default)]
208    pub virtual_sol_reserves: Option<u64>,
209    #[serde(rename = "realTokenReserves", default)]
210    pub real_token_reserves: Option<u64>,
211    #[serde(rename = "realSolReserves", default)]
212    pub real_sol_reserves: Option<u64>,
213    #[serde(rename = "tokenTotalSupply", default)]
214    pub token_total_supply: Option<u64>,
215    #[serde(rename = "complete", default)]
216    pub complete: Option<bool>,
217    #[serde(rename = "creator", default)]
218    pub creator: Option<String>,
219}
220
221#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct EventWrapper<T> {
223    #[serde(default)]
224    pub timestamp: i64,
225    pub data: T,
226    #[serde(default)]
227    pub slot: Option<f64>,
228    #[serde(default)]
229    pub signature: Option<String>,
230}
231
232impl<T: Default> Default for EventWrapper<T> {
233    fn default() -> Self {
234        Self {
235            timestamp: 0,
236            data: T::default(),
237            slot: None,
238            signature: None,
239        }
240    }
241}