alloy_consensus/transaction/
eip4844_sidecar.rs

1use alloy_eips::{
2    eip4844::BlobTransactionSidecar,
3    eip7594::{BlobTransactionSidecarEip7594, BlobTransactionSidecarVariant},
4};
5
6#[cfg(feature = "kzg")]
7#[doc(inline)]
8pub use alloy_eips::eip4844::BlobTransactionValidationError;
9
10/// An EIP-4844 transaction sidecar.
11pub trait TxEip4844Sidecar {
12    /// Verifies that the versioned hashes are valid for this sidecar's blob data, commitments, and
13    /// proofs.
14    #[cfg(feature = "kzg")]
15    fn validate(
16        &self,
17        blob_versioned_hashes: &[alloy_primitives::B256],
18        proof_settings: &c_kzg::KzgSettings,
19    ) -> Result<(), BlobTransactionValidationError>;
20
21    /// Calculate a size heuristic for the in-memory size of the sidecar.
22    fn size(&self) -> usize;
23}
24
25impl TxEip4844Sidecar for BlobTransactionSidecar {
26    #[cfg(feature = "kzg")]
27    fn validate(
28        &self,
29        blob_versioned_hashes: &[alloy_primitives::B256],
30        proof_settings: &c_kzg::KzgSettings,
31    ) -> Result<(), BlobTransactionValidationError> {
32        Self::validate(self, blob_versioned_hashes, proof_settings)
33    }
34
35    fn size(&self) -> usize {
36        Self::size(self)
37    }
38}
39
40impl TxEip4844Sidecar for BlobTransactionSidecarEip7594 {
41    #[cfg(feature = "kzg")]
42    fn validate(
43        &self,
44        blob_versioned_hashes: &[alloy_primitives::B256],
45        proof_settings: &c_kzg::KzgSettings,
46    ) -> Result<(), BlobTransactionValidationError> {
47        Self::validate(self, blob_versioned_hashes, proof_settings)
48    }
49
50    fn size(&self) -> usize {
51        Self::size(self)
52    }
53}
54
55impl TxEip4844Sidecar for BlobTransactionSidecarVariant {
56    #[cfg(feature = "kzg")]
57    fn validate(
58        &self,
59        blob_versioned_hashes: &[alloy_primitives::B256],
60        proof_settings: &c_kzg::KzgSettings,
61    ) -> Result<(), BlobTransactionValidationError> {
62        Self::validate(self, blob_versioned_hashes, proof_settings)
63    }
64
65    fn size(&self) -> usize {
66        Self::size(self)
67    }
68}