pub struct ChainSpec {
pub chain: Chain,
pub genesis: Genesis,
pub genesis_hash: OnceLock<B256>,
pub genesis_header: OnceLock<Header>,
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,
}
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: Chain
The chain ID
genesis: Genesis
The genesis block.
genesis_hash: OnceLock<B256>
The hash of the genesis block.
This is either stored at construction time if it is known using once_cell_set
, or
computed once on the first access.
genesis_header: OnceLock<Header>
The header corresponding to the genesis block.
This is either stored at construction time if it is known using once_cell_set
, or
computed once on the first access.
paris_block_and_final_difficulty: Option<(u64, U256)>
The block at which EthereumHardfork::Paris
was activated and the final difficulty at
this block.
hardforks: ChainHardforks
The active hard forks and their activation conditions
deposit_contract: Option<DepositContract>
The deposit contract deployed for PoS
base_fee_params: BaseFeeParamsKind
The parameters that configure how a block’s base fee is computed
prune_delete_limit: usize
The delete limit for pruner, per run.
Implementations§
Source§impl ChainSpec
impl 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 final_paris_total_difficulty(&self, block_number: u64) -> Option<U256>
pub fn final_paris_total_difficulty(&self, block_number: u64) -> Option<U256>
Returns the final total difficulty if the given block number is after the Paris hardfork.
Note: technically this would also be valid for the block before the paris upgrade, but this edge case is omitted here.
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
Sourcepub fn bootnodes(&self) -> Option<Vec<NodeRecord>>
pub fn bootnodes(&self) -> Option<Vec<NodeRecord>>
Returns the known bootnode records for the given chain.
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 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 is_ethereum(&self) -> bool
fn is_ethereum(&self) -> bool
true
if this chain contains Ethereum configuration.Source§impl EthereumHardforks for ChainSpec
impl EthereumHardforks for ChainSpec
Source§fn get_final_paris_total_difficulty(&self) -> Option<U256>
fn get_final_paris_total_difficulty(&self) -> Option<U256>
Source§fn final_paris_total_difficulty(&self, block_number: u64) -> Option<U256>
fn final_paris_total_difficulty(&self, block_number: u64) -> Option<U256>
§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_paris_active_at_block(&self, block_number: u64) -> Option<bool>
fn is_paris_active_at_block(&self, block_number: u64) -> Option<bool>
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 latest_fork_id(&self) -> ForkId
fn latest_fork_id(&self) -> ForkId
ForkId
for the last fork.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,
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<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> 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> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSendSync for T
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: 1792 bytes