solana_block_decoder/block/
ui_block.rs

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