reth_primitives/
lib.rs

1//! Commonly used types in Reth.
2//!
3//! This crate contains Ethereum primitive types and helper functions.
4//!
5//! ## Feature Flags
6//!
7//! - `alloy-compat`: Adds compatibility conversions for certain alloy types.
8//! - `arbitrary`: Adds `proptest` and `arbitrary` support for primitive types.
9//! - `test-utils`: Export utilities for testing
10//! - `reth-codec`: Enables db codec support for reth types including zstd compression for certain
11//!   types.
12
13#![doc(
14    html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png",
15    html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
16    issue_tracker_base_url = "https://github.com/SeismicSystems/seismic-reth/issues/"
17)]
18#![cfg_attr(not(test), warn(unused_crate_dependencies))]
19#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
20#![cfg_attr(not(feature = "std"), no_std)]
21
22extern crate alloc;
23
24mod traits;
25pub use traits::*;
26
27#[cfg(feature = "alloy-compat")]
28mod alloy_compat;
29mod block;
30pub mod proofs;
31mod receipt;
32pub use reth_static_file_types as static_file;
33pub mod transaction;
34#[cfg(any(test, feature = "arbitrary"))]
35pub use block::{generate_valid_header, valid_header_strategy};
36pub use block::{
37    Block, BlockBody, BlockWithSenders, SealedBlock, SealedBlockFor, SealedBlockWithSenders,
38};
39pub use receipt::{gas_spent_by_transactions, Receipt, Receipts};
40pub use reth_primitives_traits::{
41    logs_bloom, Account, Bytecode, GotExpected, GotExpectedBoxed, Header, HeaderError, Log,
42    LogData, NodePrimitives, SealedHeader, StorageEntry,
43};
44pub use static_file::StaticFileSegment;
45
46pub use transaction::{
47    util::secp256k1::{public_key_to_address, recover_signer_unchecked, sign_message},
48    BlobTransaction, InvalidTransactionError, PooledTransactionsElement,
49    PooledTransactionsElementEcRecovered, RecoveredTx, Transaction, TransactionMeta,
50    TransactionSigned, TransactionSignedEcRecovered, TxType,
51};
52
53pub use alloy_consensus::ReceiptWithBloom;
54
55// Re-exports
56pub use reth_ethereum_forks::*;
57
58#[cfg(any(test, feature = "arbitrary"))]
59pub use arbitrary;
60
61#[cfg(feature = "c-kzg")]
62pub use c_kzg as kzg;
63
64/// Bincode-compatible serde implementations for commonly used types in Reth.
65///
66/// `bincode` crate doesn't work with optionally serializable serde fields, but some of the
67/// Reth types require optional serialization for RPC compatibility. This module makes so that
68/// all fields are serialized.
69///
70/// Read more: <https://github.com/bincode-org/bincode/issues/326>
71#[cfg(feature = "serde-bincode-compat")]
72pub mod serde_bincode_compat {
73    pub use super::{
74        block::serde_bincode_compat::*,
75        transaction::{serde_bincode_compat as transaction, serde_bincode_compat::*},
76    };
77}
78
79/// Temp helper struct for integrating [`NodePrimitives`].
80#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
81#[non_exhaustive]
82pub struct EthPrimitives;
83
84impl reth_primitives_traits::NodePrimitives for EthPrimitives {
85    type Block = crate::Block;
86    type BlockHeader = alloy_consensus::Header;
87    type BlockBody = crate::BlockBody;
88    type SignedTx = crate::TransactionSigned;
89    type Receipt = crate::Receipt;
90}