pub struct ChainSpec {
pub chain: Chain,
pub genesis: Genesis,
pub genesis_header: SealedHeader,
pub paris_block_and_final_difficulty: Option<(u64, U256)>,
pub hardforks: ChainHardforks,
pub deposit_contract: Option<DepositContract>,
pub base_fee_params: BaseFeeParamsKind,
pub prune_delete_limit: usize,
pub blob_params: BlobScheduleBlobParams,
}Expand description
An Ethereum chain specification.
A chain specification describes:
- Meta-information about the chain (the chain ID)
- The genesis block of the chain ([
Genesis]) - What hardforks are activated, and under which conditions
Fields§
§chain: ChainThe chain ID
genesis: GenesisThe genesis block.
genesis_header: SealedHeaderThe header corresponding to the genesis block.
paris_block_and_final_difficulty: Option<(u64, U256)>The block at which EthereumHardfork::Paris was activated and the final difficulty at
this block.
hardforks: ChainHardforksThe active hard forks and their activation conditions
deposit_contract: Option<DepositContract>The deposit contract deployed for PoS
base_fee_params: BaseFeeParamsKindThe parameters that configure how a block’s base fee is computed
prune_delete_limit: usizeThe delete limit for pruner, per run.
blob_params: BlobScheduleBlobParamsThe settings passed for blob configurations for specific hardforks.
Implementations§
Source§impl ChainSpec
impl ChainSpec
Sourcepub fn from_genesis(genesis: Genesis) -> Self
pub fn from_genesis(genesis: Genesis) -> Self
Converts the given [Genesis] into a ChainSpec.
Sourcepub const fn is_ethereum(&self) -> bool
pub const fn is_ethereum(&self) -> bool
Returns true if this chain contains Ethereum configuration.
Sourcepub fn is_optimism_mainnet(&self) -> bool
pub fn is_optimism_mainnet(&self) -> bool
Returns true if this chain is Optimism mainnet.
Sourcepub fn paris_block(&self) -> Option<u64>
pub fn paris_block(&self) -> Option<u64>
Returns the known paris block, if it exists.
Sourcepub const fn genesis(&self) -> &Genesis
pub const fn genesis(&self) -> &Genesis
Get the genesis block specification.
To get the header for the genesis block, use Self::genesis_header instead.
Sourcepub fn genesis_header(&self) -> &Header
pub fn genesis_header(&self) -> &Header
Get the header for the genesis block.
Sourcepub fn sealed_genesis_header(&self) -> SealedHeader
pub fn sealed_genesis_header(&self) -> SealedHeader
Get the sealed header for the genesis block.
Sourcepub fn initial_base_fee(&self) -> Option<u64>
pub fn initial_base_fee(&self) -> Option<u64>
Get the initial base fee of the genesis block.
Sourcepub fn base_fee_params_at_timestamp(&self, timestamp: u64) -> BaseFeeParams
pub fn base_fee_params_at_timestamp(&self, timestamp: u64) -> BaseFeeParams
Get the BaseFeeParams for the chain at the given timestamp.
Sourcepub fn base_fee_params_at_block(&self, block_number: u64) -> BaseFeeParams
pub fn base_fee_params_at_block(&self, block_number: u64) -> BaseFeeParams
Get the BaseFeeParams for the chain at the given block number
Sourcepub fn genesis_hash(&self) -> B256
pub fn genesis_hash(&self) -> B256
Get the hash of the genesis block.
Sourcepub const fn genesis_timestamp(&self) -> u64
pub const fn genesis_timestamp(&self) -> u64
Get the timestamp of the genesis block.
Sourcepub fn get_final_paris_total_difficulty(&self) -> Option<U256>
pub fn get_final_paris_total_difficulty(&self) -> Option<U256>
Returns the final total difficulty if the Paris hardfork is known.
Sourcepub fn hardfork_fork_filter<H: Hardfork + Clone>(
&self,
fork: H,
) -> Option<ForkFilter>
pub fn hardfork_fork_filter<H: Hardfork + Clone>( &self, fork: H, ) -> Option<ForkFilter>
Get the fork filter for the given hardfork
Sourcepub fn display_hardforks(&self) -> DisplayHardforks
pub fn display_hardforks(&self) -> DisplayHardforks
Returns the hardfork display helper.
Sourcepub fn hardfork_fork_id<H: Hardfork + Clone>(&self, fork: H) -> Option<ForkId>
pub fn hardfork_fork_id<H: Hardfork + Clone>(&self, fork: H) -> Option<ForkId>
Get the fork id for the given hardfork.
Sourcepub fn shanghai_fork_id(&self) -> Option<ForkId>
pub fn shanghai_fork_id(&self) -> Option<ForkId>
Convenience method to get the fork id for EthereumHardfork::Shanghai from a given
chainspec.
Sourcepub fn cancun_fork_id(&self) -> Option<ForkId>
pub fn cancun_fork_id(&self) -> Option<ForkId>
Convenience method to get the fork id for EthereumHardfork::Cancun from a given
chainspec.
Sourcepub fn latest_fork_id(&self) -> ForkId
pub fn latest_fork_id(&self) -> ForkId
Convenience method to get the latest fork id from the chainspec. Panics if chainspec has no hardforks.
Sourcepub fn fork_filter(&self, head: Head) -> ForkFilter
pub fn fork_filter(&self, head: Head) -> ForkFilter
Creates a ForkFilter for the block described by Head.
Sourcepub fn builder() -> ChainSpecBuilder
pub fn builder() -> ChainSpecBuilder
Build a chainspec using ChainSpecBuilder
Methods from Deref<Target = ChainHardforks>§
pub fn fork<H>(&self, fork: H) -> ForkConditionwhere
H: Hardfork,
pub fn fork<H>(&self, fork: H) -> ForkConditionwhere
H: Hardfork,
Retrieves ForkCondition from fork. If fork is not present, returns
ForkCondition::Never.
pub fn get<H>(&self, fork: H) -> Option<ForkCondition>where
H: Hardfork,
pub fn get<H>(&self, fork: H) -> Option<ForkCondition>where
H: Hardfork,
Retrieves ForkCondition from fork if it exists, otherwise None.
pub fn fork_block<H>(&self, fork: H) -> Option<u64>where
H: Hardfork,
pub fn fork_block<H>(&self, fork: H) -> Option<u64>where
H: Hardfork,
Retrieves the fork block number or timestamp from fork if it exists, otherwise None.
pub fn forks_iter(
&self,
) -> impl Iterator<Item = (&(dyn Hardfork + 'static), ForkCondition)>
pub fn forks_iter( &self, ) -> impl Iterator<Item = (&(dyn Hardfork + 'static), ForkCondition)>
Get an iterator of all hardforks with their respective activation conditions.
pub fn last(&self) -> Option<(Box<dyn Hardfork>, ForkCondition)>
pub fn last(&self) -> Option<(Box<dyn Hardfork>, ForkCondition)>
Get last hardfork from the list.
pub fn is_fork_active_at_timestamp<H>(&self, fork: H, timestamp: u64) -> boolwhere
H: Hardfork,
pub fn is_fork_active_at_timestamp<H>(&self, fork: H, timestamp: u64) -> boolwhere
H: Hardfork,
Convenience method to check if a fork is active at a given timestamp.
pub fn is_fork_active_at_block<H>(&self, fork: H, block_number: u64) -> boolwhere
H: Hardfork,
pub fn is_fork_active_at_block<H>(&self, fork: H, block_number: u64) -> boolwhere
H: Hardfork,
Convenience method to check if a fork is active at a given block number.
Trait Implementations§
Source§impl EthChainSpec for ChainSpec
impl EthChainSpec for ChainSpec
Source§fn base_fee_params_at_block(&self, block_number: u64) -> BaseFeeParams
fn base_fee_params_at_block(&self, block_number: u64) -> BaseFeeParams
BaseFeeParams for the chain at the given block.Source§fn base_fee_params_at_timestamp(&self, timestamp: u64) -> BaseFeeParams
fn base_fee_params_at_timestamp(&self, timestamp: u64) -> BaseFeeParams
BaseFeeParams for the chain at the given timestamp.Source§fn blob_params_at_timestamp(&self, timestamp: u64) -> Option<BlobParams>
fn blob_params_at_timestamp(&self, timestamp: u64) -> Option<BlobParams>
BlobParams] for the given timestampSource§fn deposit_contract(&self) -> Option<&DepositContract>
fn deposit_contract(&self) -> Option<&DepositContract>
Source§fn genesis_hash(&self) -> B256
fn genesis_hash(&self) -> B256
Source§fn prune_delete_limit(&self) -> usize
fn prune_delete_limit(&self) -> usize
Source§fn display_hardforks(&self) -> Box<dyn Display>
fn display_hardforks(&self) -> Box<dyn Display>
Source§fn genesis_header(&self) -> &Self::Header
fn genesis_header(&self) -> &Self::Header
Source§fn is_optimism(&self) -> bool
fn is_optimism(&self) -> bool
true if this chain contains Optimism configuration.Source§fn final_paris_total_difficulty(&self) -> Option<U256>
fn final_paris_total_difficulty(&self) -> Option<U256>
Source§fn is_ethereum(&self) -> bool
fn is_ethereum(&self) -> bool
true if this chain contains Ethereum configuration.Source§impl EthExecutorSpec for ChainSpec
impl EthExecutorSpec for ChainSpec
Source§fn deposit_contract_address(&self) -> Option<Address>
fn deposit_contract_address(&self) -> Option<Address>
Source§impl EthereumHardforks for ChainSpec
impl EthereumHardforks for ChainSpec
Source§fn ethereum_fork_activation(&self, fork: EthereumHardfork) -> ForkCondition
fn ethereum_fork_activation(&self, fork: EthereumHardfork) -> ForkCondition
ForkCondition by an EthereumHardfork. If fork is not present, returns
ForkCondition::Never.§fn is_ethereum_fork_active_at_timestamp(
&self,
fork: EthereumHardfork,
timestamp: u64,
) -> bool
fn is_ethereum_fork_active_at_timestamp( &self, fork: EthereumHardfork, timestamp: u64, ) -> bool
EthereumHardfork is active at a given timestamp.§fn is_ethereum_fork_active_at_block(
&self,
fork: EthereumHardfork,
block_number: u64,
) -> bool
fn is_ethereum_fork_active_at_block( &self, fork: EthereumHardfork, block_number: u64, ) -> bool
EthereumHardfork is active at a given block number.§fn is_shanghai_active_at_timestamp(&self, timestamp: u64) -> bool
fn is_shanghai_active_at_timestamp(&self, timestamp: u64) -> bool
EthereumHardfork::Shanghai is active at a given
timestamp.§fn is_cancun_active_at_timestamp(&self, timestamp: u64) -> bool
fn is_cancun_active_at_timestamp(&self, timestamp: u64) -> bool
EthereumHardfork::Cancun is active at a given timestamp.§fn is_prague_active_at_timestamp(&self, timestamp: u64) -> bool
fn is_prague_active_at_timestamp(&self, timestamp: u64) -> bool
EthereumHardfork::Prague is active at a given timestamp.§fn is_osaka_active_at_timestamp(&self, timestamp: u64) -> bool
fn is_osaka_active_at_timestamp(&self, timestamp: u64) -> bool
EthereumHardfork::Osaka is active at a given timestamp.§fn is_byzantium_active_at_block(&self, block_number: u64) -> bool
fn is_byzantium_active_at_block(&self, block_number: u64) -> bool
EthereumHardfork::Byzantium is active at a given block
number.§fn is_spurious_dragon_active_at_block(&self, block_number: u64) -> bool
fn is_spurious_dragon_active_at_block(&self, block_number: u64) -> bool
EthereumHardfork::SpuriousDragon is active at a given
block number.§fn is_homestead_active_at_block(&self, block_number: u64) -> bool
fn is_homestead_active_at_block(&self, block_number: u64) -> bool
EthereumHardfork::Homestead is active at a given block
number.§fn is_london_active_at_block(&self, block_number: u64) -> bool
fn is_london_active_at_block(&self, block_number: u64) -> bool
EthereumHardfork::London is active at a given block
number.§fn is_constantinople_active_at_block(&self, block_number: u64) -> bool
fn is_constantinople_active_at_block(&self, block_number: u64) -> bool
EthereumHardfork::Constantinople is active at a given
block number.§fn is_paris_active_at_block(&self, block_number: u64) -> bool
fn is_paris_active_at_block(&self, block_number: u64) -> bool
EthereumHardfork::Paris is active at a given block
number.Source§impl Hardforks for ChainSpec
impl Hardforks for ChainSpec
Source§fn fork<H: Hardfork>(&self, fork: H) -> ForkCondition
fn fork<H: Hardfork>(&self, fork: H) -> ForkCondition
Source§fn forks_iter(&self) -> impl Iterator<Item = (&dyn Hardfork, ForkCondition)>
fn forks_iter(&self) -> impl Iterator<Item = (&dyn Hardfork, ForkCondition)>
Source§fn fork_filter(&self, head: Head) -> ForkFilter
fn fork_filter(&self, head: Head) -> ForkFilter
ForkFilter for the block described by Head.§fn is_fork_active_at_timestamp<H>(&self, fork: H, timestamp: u64) -> boolwhere
H: Hardfork,
fn is_fork_active_at_timestamp<H>(&self, fork: H, timestamp: u64) -> boolwhere
H: Hardfork,
§fn is_fork_active_at_block<H>(&self, fork: H, block_number: u64) -> boolwhere
H: Hardfork,
fn is_fork_active_at_block<H>(&self, fork: H, block_number: u64) -> boolwhere
H: Hardfork,
Source§impl SeismicHardforks for ChainSpec
impl SeismicHardforks for ChainSpec
Source§fn seismic_fork_activation(&self, fork: SeismicHardfork) -> ForkCondition
fn seismic_fork_activation(&self, fork: SeismicHardfork) -> ForkCondition
ForkCondition by an [SeismicHardfork]. If fork is not present, returns
ForkCondition::Never.impl Eq for ChainSpec
impl StructuralPartialEq for ChainSpec
Auto Trait Implementations§
impl !Freeze for ChainSpec
impl !RefUnwindSafe for ChainSpec
impl Send for ChainSpec
impl Sync for ChainSpec
impl Unpin for ChainSpec
impl !UnwindSafe for ChainSpec
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
impl<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
§fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
TxEnv from a transaction and a sender address.§impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
§fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
TxEnv from a transaction, its sender, and encoded transaction bytes.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSend for Twhere
T: Send,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1920 bytes