pub struct ArbPrecompileCtx {
pub block: Arc<BlockCtx>,
pub tx: Arc<Mutex<TxCtx>>,
pub evm_depth: Arc<AtomicUsize>,
pub caller_stack: Arc<Mutex<Vec<Address>>>,
pub stylus_frame_depth: Arc<AtomicUsize>,
}Expand description
Handle threaded into precompile handlers. Cheap to clone (all Arc).
Fields§
§block: Arc<BlockCtx>§tx: Arc<Mutex<TxCtx>>§evm_depth: Arc<AtomicUsize>EVM call depth at the most recent precompile dispatch. Mirrors the journal depth surfaced by revm to the precompile provider.
caller_stack: Arc<Mutex<Vec<Address>>>Caller addresses by depth, pushed at each frame boundary so that
precompile handlers can resolve the on-chain caller at arbitrary
depth (alloy-evm’s EvmInternals does not surface this).
stylus_frame_depth: Arc<AtomicUsize>Number of Stylus program frames currently on the call stack. Lets a frame tell whether it has a Stylus ancestor.
Implementations§
Source§impl ArbPrecompileCtx
impl ArbPrecompileCtx
pub fn new() -> Self
pub fn with_block(block: Arc<BlockCtx>) -> Self
Sourcepub fn tx_snapshot(&self) -> TxCtx
pub fn tx_snapshot(&self) -> TxCtx
Snapshot the current per-tx scratch.
pub fn set_sender(&self, sender: Address)
pub fn set_effective_gas_price(&self, price: u128)
pub fn set_poster_fee(&self, fee: u128)
pub fn set_poster_balance_correction(&self, correction: u128)
pub fn set_retryable_id(&self, id: B256)
pub fn set_redeemer(&self, redeemer: Address)
pub fn set_tx_is_aliased(&self, aliased: bool)
pub fn tx_is_aliased(&self) -> bool
pub fn set_evm_depth(&self, depth: usize)
pub fn evm_depth(&self) -> usize
Sourcepub fn enter_stylus_frame(&self) -> usize
pub fn enter_stylus_frame(&self) -> usize
Marks entry to a Stylus frame, returning the new Stylus call depth (1 for the outermost Stylus frame).
Sourcepub fn exit_stylus_frame(&self)
pub fn exit_stylus_frame(&self)
Marks exit from a Stylus frame.
pub fn push_caller(&self, caller: Address)
pub fn pop_caller(&self)
pub fn reset_caller_stack(&self)
Sourcepub fn caller_at_depth(&self, depth: usize) -> Option<Address>
pub fn caller_at_depth(&self, depth: usize) -> Option<Address>
Return the caller at the given depth (1-indexed). Mirrors the frame-depth conventions used by ArbSys.
pub fn set_stylus_activation_addr(&self, addr: Option<Address>)
pub fn take_stylus_activation_addr(&self) -> Option<Address>
pub fn set_cancel_escrow_sweep(&self, escrow: Address, beneficiary: Address)
pub fn take_cancel_escrow_sweep(&self) -> Option<(Address, Address)>
pub fn set_stylus_keepalive_hash(&self, hash: Option<B256>)
pub fn take_stylus_keepalive_hash(&self) -> Option<B256>
pub fn set_stylus_activation_data_fee(&self, fee: U256)
pub fn take_stylus_activation_data_fee(&self) -> U256
pub fn set_stylus_call_value(&self, value: U256)
pub fn stylus_call_value(&self) -> U256
pub fn add_stylus_multi_gas(&self, gas: MultiGas)
pub fn stylus_multi_gas(&self) -> MultiGas
pub fn add_stylus_upfront_oog_gas(&self, gas: u64)
pub fn stylus_upfront_oog_gas(&self) -> u64
Sourcepub fn add_precompile_multi_gas(&self, kind: ResourceKind, amount: u64)
pub fn add_precompile_multi_gas(&self, kind: ResourceKind, amount: u64)
Accumulate per-dimension gas for a precompile charge. The single-gas
total still flows through the precompile’s own gas_used; this records
only the resource breakdown for the v60 pricing backlog.
pub fn precompile_multi_gas(&self) -> MultiGas
Sourcepub fn snapshot_precompile_multi_gas(&self) -> MultiGas
pub fn snapshot_precompile_multi_gas(&self) -> MultiGas
Capture the current precompile_multi_gas so callers can later restore
it. Used by precompiles whose body gas is intentionally discarded at the
receipt (mirroring the reference, where access-controlled methods report
zero gas) so the per-dimension contributions they recorded are dropped
before the result is returned.
Sourcepub fn restore_precompile_multi_gas(&self, snapshot: MultiGas)
pub fn restore_precompile_multi_gas(&self, snapshot: MultiGas)
Restore precompile_multi_gas to a previously captured snapshot.
Sourcepub fn push_stylus_program(&self, addr: Address) -> bool
pub fn push_stylus_program(&self, addr: Address) -> bool
Increment the reentrancy counter for addr and return true if this
is a reentrant entry (counter was already > 0).
pub fn stylus_program_count(&self, addr: Address) -> u32
pub fn pop_stylus_program(&self, addr: Address)
Trait Implementations§
Source§impl Clone for ArbPrecompileCtx
impl Clone for ArbPrecompileCtx
Source§fn clone(&self) -> ArbPrecompileCtx
fn clone(&self) -> ArbPrecompileCtx
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ArbPrecompileCtx
impl Debug for ArbPrecompileCtx
Source§impl Default for ArbPrecompileCtx
impl Default for ArbPrecompileCtx
Source§fn default() -> ArbPrecompileCtx
fn default() -> ArbPrecompileCtx
Auto Trait Implementations§
impl Freeze for ArbPrecompileCtx
impl !RefUnwindSafe for ArbPrecompileCtx
impl Send for ArbPrecompileCtx
impl Sync for ArbPrecompileCtx
impl Unpin for ArbPrecompileCtx
impl !UnwindSafe for ArbPrecompileCtx
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<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.