diff --git a/core/src/da_block.rs b/core/src/da_block.rs index 2fa197c5..cc352c96 100644 --- a/core/src/da_block.rs +++ b/core/src/da_block.rs @@ -20,7 +20,7 @@ #[cfg(feature = "std")] use std::fmt; -use crate::traits::{ExtendedBlock, ExtendedHeader}; +use crate::traits::{DaHeaderProvider, ExtendedBlock, ExtendedHeader}; use codec::{Codec, Decode, Encode}; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; @@ -146,5 +146,24 @@ where >, Extrinsic: Member + Codec + traits::Extrinsic + MaybeSerializeDeserialize, { - type Header = Header; + type DaHeader = Header; +} + +impl + DaHeaderProvider< +
::Number, +
::Hash, + sp_runtime::Digest, + Extension, + > for DaBlock +where + Header: HeaderT + + ExtendedHeader< +
::Number, +
::Hash, + sp_runtime::Digest, + Extension, + >, +{ + type DaHeader = Header; } diff --git a/core/src/traits.rs b/core/src/traits.rs index 663ca3a3..136ef3a2 100644 --- a/core/src/traits.rs +++ b/core/src/traits.rs @@ -1,6 +1,5 @@ use codec::{Codec, Decode}; -use sp_arithmetic::traits::AtLeast32BitUnsigned; -use sp_arithmetic::traits::Saturating; +use sp_arithmetic::traits::{AtLeast32BitUnsigned, Saturating}; use sp_core::U256; use sp_std::{convert::TryFrom, fmt::Debug, hash::Hash as StdHash}; @@ -10,7 +9,9 @@ pub use get_app_id::*; pub mod extended_header; pub use extended_header::*; +#[cfg(feature = "runtime")] pub mod extended_block; +#[cfg(feature = "runtime")] pub use extended_block::*; /// Header block number trait. diff --git a/core/src/traits/extended_block.rs b/core/src/traits/extended_block.rs index fa0a4f19..535b2d19 100644 --- a/core/src/traits/extended_block.rs +++ b/core/src/traits/extended_block.rs @@ -1,15 +1,21 @@ -#[cfg(feature = "runtime")] use crate::traits::ExtendedHeader; -#[cfg(feature = "runtime")] use sp_runtime::{ traits::{Block, Header}, Digest, }; -/// Extended block trait that extends Block to include ExtendedHeader in the header -#[cfg(feature = "runtime")] -pub trait ExtendedBlock: Block { - type Header: Header +/// Extended Block trait that extends substrate primitive Block to include ExtendedHeader in the header +pub trait ExtendedBlock: + Block + + DaHeaderProvider< + <::Header as Header>::Number, + <::Header as Header>::Hash, + Digest, + Extension, + DaHeader = >::DaHeader, + > +{ + type DaHeader: Header + ExtendedHeader< <::Header as Header>::Number, <::Header as Header>::Hash, @@ -17,3 +23,10 @@ pub trait ExtendedBlock: Block { Extension, >; } + +// Note: This is a workaround for a compiler bug (https://github.com/rust-lang/rust/issues/96634) +// and should be removed when the compiler bug is fixed. +pub trait DaHeaderProvider { + /// DaHeader type. + type DaHeader: ExtendedHeader; +}