pub struct PrecompileCache { /* private fields */ }Expand description
Per-block cache for precompile results shared between warmer and executor.
Holds at most PRECOMPILE_CACHE_MAX_BYTES, as counted by
PrecompileCache::entry_size; once full, further results are simply not cached.
Nothing is evicted: the cache is dropped with its block, so there is no recency worth
tracking, and lookups stay on the shared read lock.
Implementations§
Source§impl PrecompileCache
impl PrecompileCache
pub fn new() -> Self
Sourcepub fn entry_size(calldata_len: usize, output_len: usize) -> usize
pub fn entry_size(calldata_len: usize, output_len: usize) -> usize
Bytes one entry is charged against the budget: its calldata and output, plus the fixed size of the key and value it is stored as. Hash-table slack is not counted, so the budget is approximate, not an exact resident size.
pub fn get(&self, address: &Address, calldata: &Bytes) -> Option<(Bytes, u64)>
pub fn insert( &self, address: Address, calldata: Bytes, output: Bytes, gas_cost: u64, )
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for PrecompileCache
impl RefUnwindSafe for PrecompileCache
impl Send for PrecompileCache
impl Sync for PrecompileCache
impl Unpin for PrecompileCache
impl UnsafeUnpin for PrecompileCache
impl UnwindSafe for PrecompileCache
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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
Mutably borrows from an owned value. Read more
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> ⓘ
Converts
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> ⓘ
Converts
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>
Returns the layout of the type.
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
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.