mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-02-19 03:04:27 -05:00
feat: tx and receipt compression utils for no-std config (#11112)
This commit is contained in:
committed by
GitHub
parent
d46f76264d
commit
6d0159eb70
@@ -1,6 +1,5 @@
|
||||
use alloc::vec::Vec;
|
||||
use core::cell::RefCell;
|
||||
use std::thread_local;
|
||||
use zstd::bulk::{Compressor, Decompressor};
|
||||
|
||||
/// Compression/Decompression dictionary for `Receipt`.
|
||||
@@ -10,7 +9,8 @@ pub static TRANSACTION_DICTIONARY: &[u8] = include_bytes!("./transaction_diction
|
||||
|
||||
// We use `thread_local` compressors and decompressors because dictionaries can be quite big, and
|
||||
// zstd-rs recommends to use one context/compressor per thread
|
||||
thread_local! {
|
||||
#[cfg(feature = "std")]
|
||||
std::thread_local! {
|
||||
/// Thread Transaction compressor.
|
||||
pub static TRANSACTION_COMPRESSOR: RefCell<Compressor<'static>> = RefCell::new(
|
||||
Compressor::with_dictionary(0, TRANSACTION_DICTIONARY)
|
||||
@@ -38,6 +38,33 @@ thread_local! {
|
||||
));
|
||||
}
|
||||
|
||||
/// Fn creates tx [`Compressor`]
|
||||
pub fn create_tx_compressor() -> Compressor<'static> {
|
||||
Compressor::with_dictionary(0, RECEIPT_DICTIONARY).expect("Failed to instantiate tx compressor")
|
||||
}
|
||||
|
||||
/// Fn creates tx [`Decompressor`]
|
||||
pub fn create_tx_decompressor() -> ReusableDecompressor {
|
||||
ReusableDecompressor::new(
|
||||
Decompressor::with_dictionary(TRANSACTION_DICTIONARY)
|
||||
.expect("Failed to instantiate tx decompressor"),
|
||||
)
|
||||
}
|
||||
|
||||
/// Fn creates receipt [`Compressor`]
|
||||
pub fn create_receipt_compressor() -> Compressor<'static> {
|
||||
Compressor::with_dictionary(0, RECEIPT_DICTIONARY)
|
||||
.expect("Failed to instantiate receipt compressor")
|
||||
}
|
||||
|
||||
/// Fn creates receipt [`Decompressor`]
|
||||
pub fn create_receipt_decompressor() -> ReusableDecompressor {
|
||||
ReusableDecompressor::new(
|
||||
Decompressor::with_dictionary(RECEIPT_DICTIONARY)
|
||||
.expect("Failed to instantiate receipt decompressor"),
|
||||
)
|
||||
}
|
||||
|
||||
/// Reusable decompressor that uses its own internal buffer.
|
||||
#[allow(missing_debug_implementations)]
|
||||
pub struct ReusableDecompressor {
|
||||
|
||||
Reference in New Issue
Block a user