diff --git a/Cargo.lock b/Cargo.lock index 3c9707af7e..824221eb03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,9 +121,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ea09cffa9ad82f6404e6ab415ea0c41a7674c0f2e2e689cb8683f772b5940d" +checksum = "5c3a590d13de3944675987394715f37537b50b856e3b23a0e66e97d963edbf38" dependencies = [ "alloy-eips", "alloy-primitives", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aafa1f0ddb5cbb6cba6b10e8fa6e31f8c5d5c22e262b30a5d2fa9d336c3b637" +checksum = "0f28f769d5ea999f0d8a105e434f483456a15b4e1fcb08edbbbe1650a497ff6d" dependencies = [ "alloy-consensus", "alloy-eips", @@ -164,9 +164,9 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398c81368b864fdea950071a00b298c22b21506fed1ed8abc7f2902727f987f1" +checksum = "990fa65cd132a99d3c3795a82b9f93ec82b81c7de3bab0bf26ca5c73286f7186" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -260,9 +260,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "691fed81bbafefae0f5a6cedd837ebb3fade46e7d91c5b67a463af12ecf5b11a" +checksum = "09535cbc646b0e0c6fcc12b7597eaed12cf86dff4c4fba9507a61e71b94f30eb" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -308,9 +308,9 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf91e325928dfffe90c769c2c758cc6e9ba35331c6e984310fe8276548df4a9e" +checksum = "1005520ccf89fa3d755e46c1d992a9e795466c2e7921be2145ef1f749c5727de" dependencies = [ "alloy-eips", "alloy-primitives", @@ -349,9 +349,9 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8618cd8431d82d21ed98c300b6072f73fe925dff73b548aa2d4573b5a8d3ca91" +checksum = "72b626409c98ba43aaaa558361bca21440c88fd30df7542c7484b9c7a1489cdb" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -364,9 +364,9 @@ dependencies = [ [[package]] name = "alloy-network" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390641d0e7e51d5d39b905be654ef391a89d62b9e6d3a74fd931b4df26daae20" +checksum = "89924fdcfeee0e0fa42b1f10af42f92802b5d16be614a70897382565663bf7cf" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -390,9 +390,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9badd9de9f310f0c17602c642c043eee40033c0651f45809189e411f6b166e0f" +checksum = "0f0dbe56ff50065713ff8635d8712a0895db3ad7f209db9793ad8fcb6b1734aa" dependencies = [ "alloy-consensus", "alloy-eips", @@ -466,9 +466,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7dcf6452993e31ea728b9fc316ebe4e4e3a820c094f2aad55646041ee812a0" +checksum = "8b56f7a77513308a21a2ba0e9d57785a9d9d2d609e77f4e71a78a1192b83ff2d" dependencies = [ "alloy-chains", "alloy-consensus", @@ -511,9 +511,9 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "040dabce173e246b9522cf189db8e383c811b89cf6bd07a6ab952ec3b822a1e6" +checksum = "94813abbd7baa30c700ea02e7f92319dbcb03bff77aeea92a3a9af7ba19c5c70" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -555,9 +555,9 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce4a28b1302733f565a2900a0d7cb3db94ffd1dd58ad7ebf5b0ec302e868ed1e" +checksum = "ff01723afc25ec4c5b04de399155bef7b6a96dfde2475492b1b7b4e7a4f46445" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -581,9 +581,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1408505e2a41c71f7b3f83ee52e5ecd0f2a6f2db98046d0a4defb9f85a007a9e" +checksum = "f91bf006bb06b7d812591b6ac33395cb92f46c6a65cda11ee30b348338214f0f" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", @@ -594,9 +594,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-admin" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee46cb2875073395f936482392d63f8128f1676a788762468857bd81390f8a4" +checksum = "b934c3bcdc6617563b45deb36a40881c8230b94d0546ea739dff7edb3aa2f6fd" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -606,9 +606,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456a35438dc5631320a747466a0366bf21b03494fc2e33ac903c128504a68edf" +checksum = "7e82145856df8abb1fefabef58cdec0f7d9abf337d4abd50c1ed7e581634acdd" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -618,9 +618,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6792425a4a8e74be38e8785f90f497f8f325188f40f13c168a220310fd421d12" +checksum = "212ca1c1dab27f531d3858f8b1a2d6bfb2da664be0c1083971078eb7b71abe4b" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -629,9 +629,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-beacon" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5e181ada2cd52aaad734a03a541e2ccc5a6198eb5b011843c41b0d6c0d245f5" +checksum = "6d92a9b4b268fac505ef7fb1dac9bb129d4fd7de7753f22a5b6e9f666f7f7de6" dependencies = [ "alloy-eips", "alloy-primitives", @@ -649,9 +649,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72b891c28aa7376f7e4468c40d2bdcc1013ab47ceae57a2696e78b0cd1e8341" +checksum = "bab1ebed118b701c497e6541d2d11dfa6f3c6ae31a3c52999daa802fcdcc16b7" dependencies = [ "alloy-primitives", "derive_more", @@ -661,9 +661,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7bcd9ead89076095806364327a1b18c2215998b6fff5a45f82c658bfbabf2df" +checksum = "232f00fcbcd3ee3b9399b96223a8fc884d17742a70a44f9d7cef275f93e6e872" dependencies = [ "alloy-consensus", "alloy-eips", @@ -682,9 +682,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b505d6223c88023fb1217ac24eab950e4368f6634405bea3977d34cae6935b" +checksum = "5715d0bf7efbd360873518bd9f6595762136b5327a9b759a8c42ccd9b5e44945" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -704,9 +704,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-mev" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6c1a9891c2fe0582fe19dda5064e7ad8f21762ed51731717cce676193b3baa" +checksum = "c7b61941d2add2ee64646612d3eda92cbbde8e6c933489760b6222c8898c79be" dependencies = [ "alloy-consensus", "alloy-eips", @@ -719,9 +719,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca8db59fa69da9da5bb6b75823c2b07c27b0f626a0f3af72bac32a7c361a418" +checksum = "9763cc931a28682bd4b9a68af90057b0fbe80e2538a82251afd69d7ae00bbebf" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -733,9 +733,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14194567368b8c8b7aeef470831bbe90cc8b12ef5f48b18acdda9cf20070ff1" +checksum = "359a8caaa98cb49eed62d03f5bc511dd6dd5dee292238e8627a6e5690156df0f" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -745,9 +745,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a755a3cc0297683c2879bbfe2ff22778f35068f07444f0b52b5b87570142b6" +checksum = "5ed8531cae8d21ee1c6571d0995f8c9f0652a6ef6452fde369283edea6ab7138" dependencies = [ "alloy-primitives", "arbitrary", @@ -757,9 +757,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d73afcd1fb2d851bf4ba67504a951b73231596f819cc814f50d11126db7ac1b" +checksum = "fb10ccd49d0248df51063fce6b716f68a315dd912d55b32178c883fd48b4021d" dependencies = [ "alloy-primitives", "async-trait", @@ -772,9 +772,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "807b043936012acc788c96cba06b8580609d124bb105dc470a1617051cc4aa63" +checksum = "f4d992d44e6c414ece580294abbadb50e74cfd4eaa69787350a4dfd4b20eaa1b" dependencies = [ "alloy-consensus", "alloy-network", @@ -861,9 +861,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b84a605484a03959436e5bea194e6d62f77c3caef750196b4b4f1c8d23254df" +checksum = "3f50a9516736d22dd834cc2240e5bf264f338667cc1d9e514b55ec5a78b987ca" dependencies = [ "alloy-json-rpc", "auto_impl", @@ -884,9 +884,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a400ad5b73590a099111481d4a66a2ca1266ebc85972a844958caf42bfdd37d" +checksum = "0a18b541a6197cf9a084481498a766fdf32fefda0c35ea6096df7d511025e9f1" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -899,9 +899,9 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74adc2ef0cb8c2cad4de2044afec2d4028061bc016148a251704dc204f259477" +checksum = "8075911680ebc537578cacf9453464fd394822a0f68614884a9c63f9fbaf5e89" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -919,9 +919,9 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2c1672b97fef0057f3ca268507fb4f1bc59497531603f39ccaf47cc1e5b9cb4" +checksum = "921d37a57e2975e5215f7dd0f28873ed5407c7af630d4831a4b5c737de4b0b8b" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -956,9 +956,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17272de4df6b8b59889b264f0306eba47a69f23f57f1c08f1366a4617b48c30" +checksum = "b2289a842d02fe63f8c466db964168bb2c7a9fdfb7b24816dbb17d45520575fb" dependencies = [ "darling 0.21.3", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 3db3f9a50c..449429b88b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -485,7 +485,7 @@ revm-inspectors = "0.33.2" # eth alloy-chains = { version = "0.2.5", default-features = false } -alloy-dyn-abi = "1.4.1" +alloy-dyn-abi = "1.4.3" alloy-eip2124 = { version = "0.2.0", default-features = false } alloy-eip7928 = { version = "0.1.0", default-features = false } alloy-evm = { version = "0.25.1", default-features = false } @@ -497,33 +497,33 @@ alloy-trie = { version = "0.9.1", default-features = false } alloy-hardforks = "0.4.5" -alloy-consensus = { version = "1.4.1", default-features = false } -alloy-contract = { version = "1.4.1", default-features = false } -alloy-eips = { version = "1.4.1", default-features = false } -alloy-genesis = { version = "1.4.1", default-features = false } -alloy-json-rpc = { version = "1.4.1", default-features = false } -alloy-network = { version = "1.4.1", default-features = false } -alloy-network-primitives = { version = "1.4.1", default-features = false } -alloy-provider = { version = "1.4.1", features = ["reqwest", "debug-api"], default-features = false } -alloy-pubsub = { version = "1.4.1", default-features = false } -alloy-rpc-client = { version = "1.4.1", default-features = false } -alloy-rpc-types = { version = "1.4.1", features = ["eth"], default-features = false } -alloy-rpc-types-admin = { version = "1.4.1", default-features = false } -alloy-rpc-types-anvil = { version = "1.4.1", default-features = false } -alloy-rpc-types-beacon = { version = "1.4.1", default-features = false } -alloy-rpc-types-debug = { version = "1.4.1", default-features = false } -alloy-rpc-types-engine = { version = "1.4.1", default-features = false } -alloy-rpc-types-eth = { version = "1.4.1", default-features = false } -alloy-rpc-types-mev = { version = "1.4.1", default-features = false } -alloy-rpc-types-trace = { version = "1.4.1", default-features = false } -alloy-rpc-types-txpool = { version = "1.4.1", default-features = false } -alloy-serde = { version = "1.4.1", default-features = false } -alloy-signer = { version = "1.4.1", default-features = false } -alloy-signer-local = { version = "1.4.1", default-features = false } -alloy-transport = { version = "1.4.1" } -alloy-transport-http = { version = "1.4.1", features = ["reqwest-rustls-tls"], default-features = false } -alloy-transport-ipc = { version = "1.4.1", default-features = false } -alloy-transport-ws = { version = "1.4.1", default-features = false } +alloy-consensus = { version = "1.4.3", default-features = false } +alloy-contract = { version = "1.4.3", default-features = false } +alloy-eips = { version = "1.4.3", default-features = false } +alloy-genesis = { version = "1.4.3", default-features = false } +alloy-json-rpc = { version = "1.4.3", default-features = false } +alloy-network = { version = "1.4.3", default-features = false } +alloy-network-primitives = { version = "1.4.3", default-features = false } +alloy-provider = { version = "1.4.3", features = ["reqwest", "debug-api"], default-features = false } +alloy-pubsub = { version = "1.4.3", default-features = false } +alloy-rpc-client = { version = "1.4.3", default-features = false } +alloy-rpc-types = { version = "1.4.3", features = ["eth"], default-features = false } +alloy-rpc-types-admin = { version = "1.4.3", default-features = false } +alloy-rpc-types-anvil = { version = "1.4.3", default-features = false } +alloy-rpc-types-beacon = { version = "1.4.3", default-features = false } +alloy-rpc-types-debug = { version = "1.4.3", default-features = false } +alloy-rpc-types-engine = { version = "1.4.3", default-features = false } +alloy-rpc-types-eth = { version = "1.4.3", default-features = false } +alloy-rpc-types-mev = { version = "1.4.3", default-features = false } +alloy-rpc-types-trace = { version = "1.4.3", default-features = false } +alloy-rpc-types-txpool = { version = "1.4.3", default-features = false } +alloy-serde = { version = "1.4.3", default-features = false } +alloy-signer = { version = "1.4.3", default-features = false } +alloy-signer-local = { version = "1.4.3", default-features = false } +alloy-transport = { version = "1.4.3" } +alloy-transport-http = { version = "1.4.3", features = ["reqwest-rustls-tls"], default-features = false } +alloy-transport-ipc = { version = "1.4.3", default-features = false } +alloy-transport-ws = { version = "1.4.3", default-features = false } # op alloy-op-evm = { version = "0.25.0", default-features = false } diff --git a/crates/primitives-traits/src/block/sealed.rs b/crates/primitives-traits/src/block/sealed.rs index 440491e931..02d83b4f5c 100644 --- a/crates/primitives-traits/src/block/sealed.rs +++ b/crates/primitives-traits/src/block/sealed.rs @@ -1,12 +1,12 @@ //! Sealed block types use crate::{ - block::{error::BlockRecoveryError, RecoveredBlock}, - transaction::signed::RecoveryError, + block::{error::BlockRecoveryError, header::BlockHeader, RecoveredBlock}, + transaction::signed::{RecoveryError, SignedTransaction}, Block, BlockBody, GotExpected, InMemorySize, SealedHeader, }; use alloc::vec::Vec; -use alloy_consensus::BlockHeader; +use alloy_consensus::BlockHeader as _; use alloy_eips::{eip1898::BlockWithParent, BlockNumHash}; use alloy_primitives::{Address, BlockHash, Sealable, Sealed, B256}; use alloy_rlp::{Decodable, Encodable}; @@ -282,13 +282,6 @@ where } } -impl From> for SealedBlock { - fn from(sealed: Sealed) -> Self { - let (block, hash) = sealed.into_parts(); - Self::new_unchecked(block, hash) - } -} - impl Default for SealedBlock where B: Block + Default, @@ -334,6 +327,31 @@ impl From> for Sealed { } } +impl From> for SealedBlock { + fn from(value: Sealed) -> Self { + let (block, hash) = value.into_parts(); + Self::new_unchecked(block, hash) + } +} + +impl SealedBlock> +where + T: Decodable + SignedTransaction, + H: BlockHeader, +{ + /// Decodes the block from RLP, computing the header hash directly from the RLP bytes. + /// + /// This is more efficient than decoding and then sealing, as the header hash is computed + /// from the raw RLP bytes without re-encoding. + /// + /// This leverages [`alloy_consensus::Block::decode_sealed`]. + pub fn decode_sealed(buf: &mut &[u8]) -> alloy_rlp::Result { + let sealed = alloy_consensus::Block::::decode_sealed(buf)?; + let (block, hash) = sealed.into_parts(); + Ok(Self::new_unchecked(block, hash)) + } +} + #[cfg(any(test, feature = "arbitrary"))] impl<'a, B> arbitrary::Arbitrary<'a> for SealedBlock where @@ -562,4 +580,96 @@ mod tests { assert_eq!(sealed_block.header().state_root, decoded.header().state_root); assert_eq!(sealed_block.body().transactions.len(), decoded.body().transactions.len()); } + + #[test] + fn test_decode_sealed_produces_correct_hash() { + // Create a sample block using alloy_consensus::Block + let header = alloy_consensus::Header { + parent_hash: B256::ZERO, + ommers_hash: B256::ZERO, + beneficiary: Address::ZERO, + state_root: B256::ZERO, + transactions_root: B256::ZERO, + receipts_root: B256::ZERO, + logs_bloom: Default::default(), + difficulty: Default::default(), + number: 42, + gas_limit: 30_000_000, + gas_used: 21_000, + timestamp: 1_000_000, + extra_data: Default::default(), + mix_hash: B256::ZERO, + nonce: Default::default(), + base_fee_per_gas: Some(1_000_000_000), + withdrawals_root: None, + blob_gas_used: None, + excess_blob_gas: None, + parent_beacon_block_root: None, + requests_hash: None, + }; + + // Create a simple transaction + let tx = alloy_consensus::TxLegacy { + chain_id: Some(1), + nonce: 0, + gas_price: 21_000_000_000, + gas_limit: 21_000, + to: alloy_primitives::TxKind::Call(Address::ZERO), + value: alloy_primitives::U256::from(100), + input: alloy_primitives::Bytes::default(), + }; + + let tx_signed = + alloy_consensus::TxEnvelope::Legacy(alloy_consensus::Signed::new_unchecked( + tx, + alloy_primitives::Signature::test_signature(), + B256::ZERO, + )); + + // Create block body with the transaction + let body = alloy_consensus::BlockBody { + transactions: vec![tx_signed], + ommers: vec![], + withdrawals: Some(Default::default()), + }; + + // Create the block + let block = alloy_consensus::Block::new(header, body); + let expected_hash = block.header.hash_slow(); + + // Encode the block + let mut encoded = Vec::new(); + block.encode(&mut encoded); + + // Decode using decode_sealed - this should compute hash from raw RLP + let decoded = + SealedBlock::>::decode_sealed( + &mut encoded.as_slice(), + ) + .expect("Failed to decode sealed block"); + + // Verify the hash matches + assert_eq!(decoded.hash(), expected_hash); + assert_eq!(decoded.header().number, 42); + assert_eq!(decoded.body().transactions.len(), 1); + } + + #[test] + fn test_sealed_block_from_sealed() { + let header = alloy_consensus::Header::default(); + let body = alloy_consensus::BlockBody::::default(); + let block = alloy_consensus::Block::new(header, body); + let hash = block.header.hash_slow(); + + // Create Sealed + let sealed: Sealed> = + Sealed::new_unchecked(block.clone(), hash); + + // Convert to SealedBlock + let sealed_block: SealedBlock> = + SealedBlock::from(sealed); + + assert_eq!(sealed_block.hash(), hash); + assert_eq!(sealed_block.header().number, block.header.number); + } }