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#[derive(Debug, Clone, Serialize, Deserialize, Default)]
106pub struct Create {
107    #[serde(default)]
108    pub mint: Option<String>,
109    #[serde(default)]
110    pub mint_authority: Option<String>,
111    #[serde(default)]
112    pub bonding_curve: Option<String>,
113    #[serde(default)]
114    pub associated_bonding_curve: Option<String>,
115    #[serde(default)]
116    pub global: Option<String>,
117    #[serde(default)]
118    pub mpl_token_metadata: Option<String>,
119    #[serde(default)]
120    pub metadata: Option<String>,
121    #[serde(default)]
122    pub user: Option<String>,
123    #[serde(default)]
124    pub system_program: Option<String>,
125    #[serde(default)]
126    pub token_program: Option<String>,
127    #[serde(default)]
128    pub associated_token_program: Option<String>,
129    #[serde(default)]
130    pub rent: Option<String>,
131    #[serde(default)]
132    pub event_authority: Option<String>,
133    #[serde(default)]
134    pub program: Option<String>,
135    #[serde(default)]
136    pub name: Option<String>,
137    #[serde(default)]
138    pub symbol: Option<String>,
139    #[serde(default)]
140    pub uri: Option<String>,
141    #[serde(default)]
142    pub creator: Option<String>,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize, Default)]
146pub struct Buy {
147    #[serde(default)]
148    pub global: Option<String>,
149    #[serde(default)]
150    pub fee_recipient: Option<String>,
151    #[serde(default)]
152    pub mint: Option<String>,
153    #[serde(default)]
154    pub bonding_curve: Option<String>,
155    #[serde(default)]
156    pub associated_bonding_curve: Option<String>,
157    #[serde(default)]
158    pub associated_user: Option<String>,
159    #[serde(default)]
160    pub user: Option<String>,
161    #[serde(default)]
162    pub system_program: Option<String>,
163    #[serde(default)]
164    pub token_program: Option<String>,
165    #[serde(default)]
166    pub creator_vault: Option<String>,
167    #[serde(default)]
168    pub event_authority: Option<String>,
169    #[serde(default)]
170    pub program: Option<String>,
171    #[serde(default)]
172    pub global_volume_accumulator: Option<String>,
173    #[serde(default)]
174    pub user_volume_accumulator: Option<String>,
175    #[serde(default)]
176    pub fee_config: Option<String>,
177    #[serde(default)]
178    pub fee_program: Option<String>,
179    #[serde(default)]
180    pub amount: Option<u64>,
181    #[serde(default)]
182    pub max_sol_cost: Option<u64>,
183    #[serde(default)]
184    pub track_volume: Option<serde_json::Value>,
185}
186
187#[derive(Debug, Clone, Serialize, Deserialize, Default)]
188pub struct Sell {
189    #[serde(default)]
190    pub global: Option<String>,
191    #[serde(default)]
192    pub fee_recipient: Option<String>,
193    #[serde(default)]
194    pub mint: Option<String>,
195    #[serde(default)]
196    pub bonding_curve: Option<String>,
197    #[serde(default)]
198    pub associated_bonding_curve: Option<String>,
199    #[serde(default)]
200    pub associated_user: Option<String>,
201    #[serde(default)]
202    pub user: Option<String>,
203    #[serde(default)]
204    pub system_program: Option<String>,
205    #[serde(default)]
206    pub creator_vault: Option<String>,
207    #[serde(default)]
208    pub token_program: Option<String>,
209    #[serde(default)]
210    pub event_authority: Option<String>,
211    #[serde(default)]
212    pub program: Option<String>,
213    #[serde(default)]
214    pub fee_config: Option<String>,
215    #[serde(default)]
216    pub fee_program: Option<String>,
217    #[serde(default)]
218    pub amount: Option<u64>,
219    #[serde(default)]
220    pub min_sol_output: Option<u64>,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize, Default)]
224pub struct BondingCurve {
225    #[serde(default)]
226    pub virtual_token_reserves: Option<u64>,
227    #[serde(default)]
228    pub virtual_sol_reserves: Option<u64>,
229    #[serde(default)]
230    pub real_token_reserves: Option<u64>,
231    #[serde(default)]
232    pub real_sol_reserves: Option<u64>,
233    #[serde(default)]
234    pub token_total_supply: Option<u64>,
235    #[serde(default)]
236    pub complete: Option<bool>,
237    #[serde(default)]
238    pub creator: Option<String>,
239    #[serde(default)]
240    pub is_mayhem_mode: Option<bool>,
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize)]
244pub struct EventWrapper<T> {
245    #[serde(default)]
246    pub timestamp: i64,
247    pub data: T,
248    #[serde(default)]
249    pub slot: Option<f64>,
250    #[serde(default)]
251    pub signature: Option<String>,
252}
253
254impl<T: Default> Default for EventWrapper<T> {
255    fn default() -> Self {
256        Self {
257            timestamp: 0,
258            data: T::default(),
259            slot: None,
260            signature: None,
261        }
262    }
263}