feat: impl block for sealedblock (#12555)

This commit is contained in:
Matthias Seitz
2024-11-14 23:03:09 +01:00
committed by GitHub
parent a534db8714
commit b1729d22e4
3 changed files with 36 additions and 13 deletions

View File

@@ -1,10 +1,8 @@
//! Block body abstraction.
use alloc::fmt;
use alloy_consensus::Transaction;
use crate::InMemorySize;
use alloc::fmt;
use alloy_consensus::Transaction;
/// Abstraction for block's body.
pub trait BlockBody:
@@ -21,6 +19,7 @@ pub trait BlockBody:
+ alloy_rlp::Encodable
+ alloy_rlp::Decodable
+ InMemorySize
+ 'static
{
/// Ordered list of signed transactions as committed in block.
// todo: requires trait for signed transaction

View File

@@ -1,11 +1,9 @@
//! Block header data primitive.
use core::fmt;
use alloy_primitives::Sealable;
use reth_codecs::Compact;
use crate::InMemorySize;
use alloy_primitives::Sealable;
use core::fmt;
use reth_codecs::Compact;
/// Helper trait that unifies all behaviour required by block header to support full node
/// operations.
@@ -28,6 +26,7 @@ pub trait BlockHeader:
+ alloy_consensus::BlockHeader
+ Sealable
+ InMemorySize
+ 'static
{
}
@@ -47,5 +46,6 @@ impl<T> BlockHeader for T where
+ alloy_consensus::BlockHeader
+ Sealable
+ InMemorySize
+ 'static
{
}

View File

@@ -90,13 +90,13 @@ impl reth_primitives_traits::Block for Block {
type Header = Header;
type Body = BlockBody;
fn body(&self) -> &Self::Body {
&self.body
}
fn header(&self) -> &Self::Header {
&self.header
}
fn body(&self) -> &Self::Body {
&self.body
}
}
impl InMemorySize for Block {
@@ -463,6 +463,24 @@ where
}
}
impl<H, B> reth_primitives_traits::Block for SealedBlock<H, B>
where
H: reth_primitives_traits::BlockHeader,
B: reth_primitives_traits::BlockBody,
Self: Serialize + for<'a> Deserialize<'a>,
{
type Header = H;
type Body = B;
fn header(&self) -> &Self::Header {
self.header.header()
}
fn body(&self) -> &Self::Body {
&self.body
}
}
#[cfg(any(test, feature = "arbitrary"))]
impl<'a, H, B> arbitrary::Arbitrary<'a> for SealedBlock<H, B>
where
@@ -959,6 +977,12 @@ mod tests {
use alloy_rlp::{Decodable, Encodable};
use std::str::FromStr;
const fn _traits() {
const fn assert_block<T: reth_primitives_traits::Block>() {}
assert_block::<Block>();
assert_block::<SealedBlock>();
}
/// Check parsing according to EIP-1898.
#[test]
fn can_parse_blockid_u64() {