pub struct PrecompileMoves { /* private fields */ }Expand description
Precompile-dispatch changes requested by a geth State Override Set. Simulation-only:
this is None on every consensus path, in which case precompile dispatch is
bit-identical to is_precompile.
Two independent effects, both matching geth’s StateOverride.Apply:
movePrecompileToAddressmakes a destination address dispatch the precompile that lives at the named source.- Any overridden address stops dispatching as a precompile. geth does
delete(precompiles, addr)for every address in the override set, not only the sources of a move, so overriding0x04’s balance alone takes the identity precompile out of the active set and leaves an ordinary account behind.
Implementations§
Source§impl PrecompileMoves
impl PrecompileMoves
Sourcepub fn from_parts(
moves: impl IntoIterator<Item = (Address, Address)>,
overridden: impl IntoIterator<Item = Address>,
) -> Self
pub fn from_parts( moves: impl IntoIterator<Item = (Address, Address)>, overridden: impl IntoIterator<Item = Address>, ) -> Self
Build from the (precompile_address, destination_address) relocations and the full
set of overridden addresses.
A later pair wins if two moves name the same destination, which is also what
geth’s StateOverride.Apply does: it assigns precompiles[dest] per move, in
address order, and only refuses a destination that is itself overridden.
pub fn is_empty(&self) -> bool
Sourcepub fn is_suppressed(&self, address: &Address) -> bool
pub fn is_suppressed(&self, address: &Address) -> bool
True if address is overridden and so no longer dispatches as a precompile.
Sourcepub fn source_for(&self, address: &Address) -> Option<Address>
pub fn source_for(&self, address: &Address) -> Option<Address>
The address whose precompile implementation should run when address is
called, or None if address is not a relocation destination.
Trait Implementations§
Source§impl Clone for PrecompileMoves
impl Clone for PrecompileMoves
Source§fn clone(&self) -> PrecompileMoves
fn clone(&self) -> PrecompileMoves
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PrecompileMoves
impl Debug for PrecompileMoves
Source§impl Default for PrecompileMoves
impl Default for PrecompileMoves
Source§fn default() -> PrecompileMoves
fn default() -> PrecompileMoves
impl Eq for PrecompileMoves
Source§impl PartialEq for PrecompileMoves
impl PartialEq for PrecompileMoves
impl StructuralPartialEq for PrecompileMoves
Auto Trait Implementations§
impl Freeze for PrecompileMoves
impl RefUnwindSafe for PrecompileMoves
impl Send for PrecompileMoves
impl Sync for PrecompileMoves
impl Unpin for PrecompileMoves
impl UnsafeUnpin for PrecompileMoves
impl UnwindSafe for PrecompileMoves
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.