solana_block_decoder/
lib.rs1use {
2 solana_storage_utils::compression::compress_best,
3 solana_transaction_status::{
4 BlockEncodingOptions,
5 VersionedConfirmedBlock as SolanaVersionedConfirmedBlock,
6 },
7 solana_transaction_status_client_types::{
8 UiTransactionEncoding,
9 },
10 block::{
11 confirmed_block::ConfirmedBlock,
12 encoded_block::EncodedConfirmedBlock,
13 ui_block::UiConfirmedBlock,
14 versioned_block::VersionedConfirmedBlock,
15 },
16};
17
18pub mod errors {
19 pub mod conversion_error;
20 pub mod decode_error;
21}
22
23pub mod block {
24 pub mod confirmed_block;
25 pub mod encoded_block;
26 pub mod versioned_block;
27 pub mod ui_block;
28}
29
30pub mod transaction {
31 pub mod transaction;
32 pub mod tx_status_meta;
33 pub mod tx_return_data;
34 pub mod tx_token_balance;
35 pub mod versioned_transaction;
36
37 pub use transaction::Transaction;
38}
39
40pub mod address {
41 pub mod address_table_lookup;
42 pub mod loaded_addresses;
43}
44
45pub mod instruction {
46 pub mod compiled_instruction;
47 pub mod inner_instruction;
48 pub use compiled_instruction::CompiledInstruction;
49 pub use inner_instruction::InnerInstruction;
50}
51
52pub mod message {
53 pub mod message;
54 pub mod message_v0;
55 pub mod versioned_message;
56}
57
58pub mod decodable;
59
60pub async fn encode_block<T>(
61 data: T,
62) -> Result<Vec<u8>, Box<dyn std::error::Error>>
63 where
64 T: prost::Message,
65{
66 let mut buf = Vec::with_capacity(data.encoded_len());
67 data.encode(&mut buf).unwrap();
68 let data = compress_best(&buf)?;
69
70 Ok(data)
71}
72
73pub fn convert_block(
74 encoded_block: EncodedConfirmedBlock,
75 encoding: UiTransactionEncoding,
76 options: BlockEncodingOptions,
77) -> Result<SolanaVersionedConfirmedBlock, Box<dyn std::error::Error>> {
78 let ui_block: UiConfirmedBlock = encoded_block.into();
80
81 let confirmed_block = ConfirmedBlock::decode_with_options(ui_block, encoding, options)?;
83
84 let versioned_block = VersionedConfirmedBlock::try_from(confirmed_block)?;
86
87 Ok(versioned_block.into())
89}
90
91pub async fn encode_transaction<T>(
92 data: T,
93) -> Result<Vec<u8>, Box<dyn std::error::Error>>
94 where
95 T: prost::Message,
96{
97 let mut buf = Vec::with_capacity(data.encoded_len());
98 data.encode(&mut buf).unwrap();
99 let data = compress_best(&buf)?;
100
101 Ok(data)
102}
103
104