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