Skip to main content

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_buy_exact_sol_volume: Option<Option<u64>>,
49    #[serde(default)]
50    pub total_trades: Option<Option<u64>>,
51    #[serde(default)]
52    pub buy_count: Option<Option<u64>>,
53    #[serde(default)]
54    pub sell_count: Option<Option<u64>>,
55    #[serde(default)]
56    pub unique_traders: Option<Option<u64>>,
57    #[serde(default)]
58    pub largest_trade: Option<Option<u64>>,
59    #[serde(default)]
60    pub smallest_trade: Option<Option<u64>>,
61    #[serde(default)]
62    pub last_trade_timestamp: Option<Option<i64>>,
63    #[serde(default)]
64    pub last_trade_price: Option<Option<f64>>,
65    #[serde(default)]
66    pub whale_trade_count: Option<Option<u64>>,
67    #[serde(default)]
68    pub last_whale_address: Option<Option<String>>,
69    #[serde(default)]
70    pub total_volume: Option<Option<u64>>,
71    #[serde(default)]
72    pub average_trade_size: Option<Option<f64>>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, Default)]
76pub struct PumpfunTokenEvents {
77    #[serde(default)]
78    pub create: Option<Option<serde_json::Value>>,
79    #[serde(default)]
80    pub create_v2: Option<Option<serde_json::Value>>,
81    #[serde(default)]
82    pub buys: Option<Vec<serde_json::Value>>,
83    #[serde(default)]
84    pub buys_exact_sol: Option<Vec<serde_json::Value>>,
85    #[serde(default)]
86    pub sells: Option<Vec<serde_json::Value>>,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, Default)]
90pub struct PumpfunToken {
91    #[serde(default)]
92    pub id: PumpfunTokenId,
93    #[serde(default)]
94    pub info: PumpfunTokenInfo,
95    #[serde(default)]
96    pub reserves: PumpfunTokenReserves,
97    #[serde(default)]
98    pub trading: PumpfunTokenTrading,
99    #[serde(default)]
100    pub events: PumpfunTokenEvents,
101    #[serde(default)]
102    pub bonding_curve_snapshot: Option<Option<serde_json::Value>>,
103}
104
105
106
107#[derive(Debug, Clone, Serialize, Deserialize, Default)]
108pub struct Create {
109    #[serde(default)]
110    pub mint: Option<String>,
111    #[serde(default)]
112    pub mint_authority: Option<String>,
113    #[serde(default)]
114    pub bonding_curve: Option<String>,
115    #[serde(default)]
116    pub associated_bonding_curve: Option<String>,
117    #[serde(default)]
118    pub global: Option<String>,
119    #[serde(default)]
120    pub mpl_token_metadata: Option<String>,
121    #[serde(default)]
122    pub metadata: Option<String>,
123    #[serde(default)]
124    pub user: Option<String>,
125    #[serde(default)]
126    pub system_program: Option<String>,
127    #[serde(default)]
128    pub token_program: Option<String>,
129    #[serde(default)]
130    pub associated_token_program: Option<String>,
131    #[serde(default)]
132    pub rent: Option<String>,
133    #[serde(default)]
134    pub event_authority: Option<String>,
135    #[serde(default)]
136    pub program: Option<String>,
137    #[serde(default)]
138    pub name: Option<String>,
139    #[serde(default)]
140    pub symbol: Option<String>,
141    #[serde(default)]
142    pub uri: Option<String>,
143    #[serde(default)]
144    pub creator: Option<String>,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize, Default)]
148pub struct Buy {
149    #[serde(default)]
150    pub global: Option<String>,
151    #[serde(default)]
152    pub fee_recipient: Option<String>,
153    #[serde(default)]
154    pub mint: Option<String>,
155    #[serde(default)]
156    pub bonding_curve: Option<String>,
157    #[serde(default)]
158    pub associated_bonding_curve: Option<String>,
159    #[serde(default)]
160    pub associated_user: Option<String>,
161    #[serde(default)]
162    pub user: Option<String>,
163    #[serde(default)]
164    pub system_program: Option<String>,
165    #[serde(default)]
166    pub token_program: Option<String>,
167    #[serde(default)]
168    pub creator_vault: Option<String>,
169    #[serde(default)]
170    pub event_authority: Option<String>,
171    #[serde(default)]
172    pub program: Option<String>,
173    #[serde(default)]
174    pub global_volume_accumulator: Option<String>,
175    #[serde(default)]
176    pub user_volume_accumulator: Option<String>,
177    #[serde(default)]
178    pub fee_config: Option<String>,
179    #[serde(default)]
180    pub fee_program: Option<String>,
181    #[serde(default)]
182    pub amount: Option<u64>,
183    #[serde(default)]
184    pub max_sol_cost: Option<u64>,
185    #[serde(default)]
186    pub track_volume: Option<serde_json::Value>,
187}
188
189#[derive(Debug, Clone, Serialize, Deserialize, Default)]
190pub struct Sell {
191    #[serde(default)]
192    pub global: Option<String>,
193    #[serde(default)]
194    pub fee_recipient: Option<String>,
195    #[serde(default)]
196    pub mint: Option<String>,
197    #[serde(default)]
198    pub bonding_curve: Option<String>,
199    #[serde(default)]
200    pub associated_bonding_curve: Option<String>,
201    #[serde(default)]
202    pub associated_user: Option<String>,
203    #[serde(default)]
204    pub user: Option<String>,
205    #[serde(default)]
206    pub system_program: Option<String>,
207    #[serde(default)]
208    pub creator_vault: Option<String>,
209    #[serde(default)]
210    pub token_program: Option<String>,
211    #[serde(default)]
212    pub event_authority: Option<String>,
213    #[serde(default)]
214    pub program: Option<String>,
215    #[serde(default)]
216    pub fee_config: Option<String>,
217    #[serde(default)]
218    pub fee_program: Option<String>,
219    #[serde(default)]
220    pub amount: Option<u64>,
221    #[serde(default)]
222    pub min_sol_output: Option<u64>,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize, Default)]
226pub struct BondingCurve {
227    #[serde(default)]
228    pub virtual_token_reserves: Option<u64>,
229    #[serde(default)]
230    pub virtual_sol_reserves: Option<u64>,
231    #[serde(default)]
232    pub real_token_reserves: Option<u64>,
233    #[serde(default)]
234    pub real_sol_reserves: Option<u64>,
235    #[serde(default)]
236    pub token_total_supply: Option<u64>,
237    #[serde(default)]
238    pub complete: Option<bool>,
239    #[serde(default)]
240    pub creator: Option<String>,
241    #[serde(default)]
242    pub is_mayhem_mode: Option<bool>,
243}
244
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
247pub struct EventWrapper<T> {
248    #[serde(default)]
249    pub timestamp: i64,
250    pub data: T,
251    #[serde(default)]
252    pub slot: Option<f64>,
253    #[serde(default)]
254    pub signature: Option<String>,
255}
256
257impl<T: Default> Default for EventWrapper<T> {
258    fn default() -> Self {
259        Self {
260            timestamp: 0,
261            data: T::default(),
262            slot: None,
263            signature: None,
264        }
265    }
266}