solscan_api/structs/
block_transaction.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize)]
4pub struct BlockTransaction {
5    pub meta: Option<Meta>,
6    pub transaction: Option<Transaction>,
7}
8
9#[derive(Debug, Serialize, Deserialize)]
10pub struct Meta {
11    pub err: Option<Err>,
12    pub fee: Option<i64>,
13    #[serde(rename = "innerInstructions")]
14    pub inner_instructions: Option<Vec<InnerInstruction>>,
15    #[serde(rename = "loadedAddresses")]
16    pub loaded_addresses: Option<LoadedAddresses>,
17    #[serde(rename = "logMessages")]
18    pub log_messages: Option<Vec<String>>,
19    #[serde(rename = "postBalances")]
20    pub post_balances: Option<Vec<i64>>,
21    #[serde(rename = "postTokenBalances")]
22    pub post_token_balances: Option<Vec<TokenBalance>>,
23    #[serde(rename = "preBalances")]
24    pub pre_balances: Option<Vec<i64>>,
25    #[serde(rename = "preTokenBalances")]
26    pub pre_token_balances: Option<Vec<TokenBalance>>,
27    pub rewards: Option<Vec<Option<serde_json::Value>>>,
28    pub status: Option<Status>,
29}
30
31#[derive(Debug, Serialize, Deserialize)]
32pub struct Err {
33    #[serde(rename = "InstructionError")]
34    pub instruction_error: Option<Vec<InstructionErrorElement>>,
35}
36
37#[derive(Debug, Serialize, Deserialize)]
38pub struct InstructionErrorClass {
39    #[serde(rename = "Custom")]
40    pub custom: Option<i64>,
41}
42
43#[derive(Debug, Serialize, Deserialize)]
44pub struct InnerInstruction {
45    pub index: Option<i64>,
46    pub instructions: Option<Vec<InnerInstructionInstruction>>,
47}
48
49#[derive(Debug, Serialize, Deserialize)]
50pub struct InnerInstructionInstruction {
51    pub parsed: Option<PurpleParsed>,
52    pub program: Option<Program>,
53    #[serde(rename = "programId")]
54    pub program_id: Option<ProgramId>,
55}
56
57#[derive(Debug, Serialize, Deserialize)]
58pub struct PurpleParsed {
59    pub info: Option<PurpleInfo>,
60    #[serde(rename = "type")]
61    pub parsed_type: Option<Type>,
62}
63
64#[derive(Debug, Serialize, Deserialize)]
65pub struct PurpleInfo {
66    pub amount: Option<String>,
67    pub authority: Option<String>,
68    pub destination: Option<String>,
69    pub source: Option<String>,
70}
71
72#[derive(Debug, Serialize, Deserialize)]
73pub struct LoadedAddresses {
74    pub readonly: Option<Vec<Option<serde_json::Value>>>,
75    pub writable: Option<Vec<Option<serde_json::Value>>>,
76}
77
78#[derive(Debug, Serialize, Deserialize)]
79pub struct TokenBalance {
80    #[serde(rename = "accountIndex")]
81    pub account_index: Option<i64>,
82    pub mint: Option<String>,
83    pub owner: Option<String>,
84    #[serde(rename = "programId")]
85    pub program_id: Option<ProgramId>,
86    #[serde(rename = "uiTokenAmount")]
87    pub ui_token_amount: Option<UiTokenAmount>,
88}
89
90#[derive(Debug, Serialize, Deserialize)]
91pub struct UiTokenAmount {
92    pub amount: Option<String>,
93    pub decimals: Option<i64>,
94    #[serde(rename = "uiAmount")]
95    pub ui_amount: Option<f64>,
96    #[serde(rename = "uiAmountString")]
97    pub ui_amount_string: Option<String>,
98}
99
100#[derive(Debug, Serialize, Deserialize)]
101pub struct Status {
102    #[serde(rename = "Ok")]
103    pub ok: Option<serde_json::Value>,
104    #[serde(rename = "Err")]
105    pub err: Option<Err>,
106}
107
108#[derive(Debug, Serialize, Deserialize)]
109pub struct Transaction {
110    pub message: Option<Message>,
111    pub signatures: Option<Vec<String>>,
112}
113
114#[derive(Debug, Serialize, Deserialize)]
115pub struct Message {
116    #[serde(rename = "accountKeys")]
117    pub account_keys: Option<Vec<AccountKey>>,
118    #[serde(rename = "addressTableLookups")]
119    pub address_table_lookups: Option<serde_json::Value>,
120    pub instructions: Option<Vec<MessageInstruction>>,
121    #[serde(rename = "recentBlockhash")]
122    pub recent_blockhash: Option<String>,
123}
124
125#[derive(Debug, Serialize, Deserialize)]
126pub struct AccountKey {
127    pub pubkey: Option<String>,
128    pub signer: Option<bool>,
129    pub writable: Option<bool>,
130}
131
132#[derive(Debug, Serialize, Deserialize)]
133pub struct MessageInstruction {
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub parsed: Option<FluffyParsed>,
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub program: Option<Program>,
138    #[serde(skip_serializing_if = "Option::is_none")]
139    #[serde(rename = "programId")]
140    pub program_id: Option<ProgramId>,
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub accounts: Option<Vec<String>>,
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub data: Option<String>,
145}
146
147#[derive(Debug, Serialize, Deserialize)]
148pub struct FluffyParsed {
149    pub info: Option<FluffyInfo>,
150    #[serde(rename = "type")]
151    pub parsed_type: Option<Type>,
152}
153
154#[derive(Debug, Serialize, Deserialize)]
155pub struct FluffyInfo {
156    #[serde(rename = "clockSysvar")]
157    pub clock_sysvar: Option<ClockSysvar>,
158    #[serde(rename = "slotHashesSysvar")]
159    pub slot_hashes_sysvar: Option<SlotHashesSysvar>,
160    pub vote: Option<Vote>,
161    #[serde(rename = "voteAccount")]
162    pub vote_account: Option<String>,
163    #[serde(rename = "voteAuthority")]
164    pub vote_authority: Option<String>,
165    pub amount: Option<String>,
166    pub authority: Option<String>,
167    pub destination: Option<String>,
168    pub source: Option<String>,
169}
170
171#[derive(Debug, Serialize, Deserialize)]
172pub struct Vote {
173    pub hash: Option<String>,
174    pub slots: Option<Vec<i64>>,
175    pub timestamp: Option<i64>,
176}
177
178#[derive(Debug, Serialize, Deserialize)]
179#[serde(untagged)]
180pub enum InstructionErrorElement {
181    InstructionErrorClass(InstructionErrorClass),
182    Integer(i64),
183}
184
185#[derive(Debug, Serialize, Deserialize)]
186pub enum Type {
187    #[serde(rename = "transfer")]
188    Transfer,
189    #[serde(rename = "vote")]
190    Vote,
191}
192
193#[derive(Debug, Serialize, Deserialize)]
194pub enum Program {
195    #[serde(rename = "spl-token")]
196    SplToken,
197    #[serde(rename = "vote")]
198    Vote,
199}
200
201#[derive(Debug, Serialize, Deserialize)]
202pub enum ProgramId {
203    ComputeBudget111111111111111111111111111111,
204    #[serde(rename = "FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH")]
205    FsJ3A3U2Vn5CTVofAjvy6Y5KwAbjAqYWpe4975Bi2EpH,
206    #[serde(rename = "sarbL3oPVviJSsRzZYzPCMA7p7pFGzRBFQFU62xNpNz")]
207    SarbL3OPVviJSsRzZYzPcma7P7PFGzRbfqfu62XNpNz,
208    #[serde(rename = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin")]
209    The9XQeWvG816BUx9EPjHmaT23YvVm2ZWbrrpZb9PusVFin,
210    #[serde(rename = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")]
211    TokenkegQfeZyiNwAJbNbGkpfxcWuBvf9Ss623Vq5Da,
212    Vote111111111111111111111111111111111111111,
213}
214
215#[derive(Debug, Serialize, Deserialize)]
216pub enum ClockSysvar {
217    #[serde(rename = "SysvarC1ock11111111111111111111111111111111")]
218    SysvarC1Ock11111111111111111111111111111111,
219}
220
221#[derive(Debug, Serialize, Deserialize)]
222pub enum SlotHashesSysvar {
223    #[serde(rename = "SysvarS1otHashes111111111111111111111111111")]
224    SysvarS1OtHashes111111111111111111111111111,
225}