hyperstack_stacks/pumpfun/
types.rs1use 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}