solana_block_decoder/block/
ui_block.rs

1
2use {
3    crate::{
4        block::{
5            encoded_block::{EncodedTransactionWithStatusMeta, EncodedConfirmedBlock},
6        },
7    },
8    solana_clock::{
9        Slot,
10        UnixTimestamp,
11    },
12    solana_transaction_status_client_types::{
13        Rewards,
14    },
15    serde_derive::{Serialize,Deserialize},
16};
17
18#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
19#[serde(rename_all = "camelCase")]
20pub struct UiConfirmedBlock {
21    pub previous_blockhash: String,
22    pub blockhash: String,
23    pub parent_slot: Slot,
24    #[serde(default, skip_serializing_if = "Option::is_none")]
25    pub transactions: Option<Vec<EncodedTransactionWithStatusMeta>>,
26    #[serde(default, skip_serializing_if = "Option::is_none")]
27    pub signatures: Option<Vec<String>>,
28    #[serde(default, skip_serializing_if = "Option::is_none")]
29    pub rewards: Option<Rewards>,
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    pub num_reward_partitions: Option<u64>,
32    pub block_time: Option<UnixTimestamp>,
33    pub block_height: Option<u64>,
34}
35
36impl From<EncodedConfirmedBlock> for UiConfirmedBlock {
37    fn from(block: EncodedConfirmedBlock) -> Self {
38        Self {
39            previous_blockhash: block.previous_blockhash,
40            blockhash: block.blockhash,
41            parent_slot: block.parent_slot,
42            transactions: Some(block.transactions),
43            signatures: None, // Set to None since it's not available in EncodedConfirmedBlock
44            rewards: Some(block.rewards),
45            num_reward_partitions: block.num_partitions,
46            block_time: block.block_time,
47            block_height: block.block_height,
48        }
49    }
50}