pub struct ArbitrumExtraData {
pub unexpected_balance_delta: i128,
pub user_wasms: HashMap<B256, ActivatedWasm>,
pub open_wasm_pages: u16,
pub ever_wasm_pages: u16,
pub activated_wasms: HashMap<B256, ActivatedWasm>,
pub recent_wasms: RecentWasms,
pub arb_tx_filter: bool,
pub zombie_accounts: HashSet<Address>,
}Expand description
Extra per-block state tracked during Arbitrum execution.
In geth this is ArbitrumExtraData on StateDB. In reth it lives
alongside the block executor as mutable state.
Fields§
§unexpected_balance_delta: i128Net balance change across all accounts (tracks ETH minting/burning).
user_wasms: HashMap<B256, ActivatedWasm>WASM modules encountered during execution (for recording).
open_wasm_pages: u16Number of WASM memory pages currently open (Stylus).
ever_wasm_pages: u16Peak number of WASM memory pages allocated during this tx.
activated_wasms: HashMap<B256, ActivatedWasm>Newly activated WASM modules during this block.
recent_wasms: RecentWasmsRecently activated WASM modules (LRU).
arb_tx_filter: boolWhether transaction filtering is active.
zombie_accounts: HashSet<Address>Zombie accounts: addresses that were self-destructed then touched by a zero-value transfer on pre-Stylus ArbOS (< v30). These must be preserved as empty accounts during finalization to match canonical behavior.
Implementations§
Source§impl ArbitrumExtraData
impl ArbitrumExtraData
Sourcepub fn activate_wasm(
&mut self,
module_hash: B256,
asm: HashMap<String, Vec<u8>>,
module: Vec<u8>,
) -> Result<(), String>
pub fn activate_wasm( &mut self, module_hash: B256, asm: HashMap<String, Vec<u8>>, module: Vec<u8>, ) -> Result<(), String>
Record a WASM activation for the given module hash.
Validates that if the same module hash was already activated in this block, the new activation has the same set of targets. This prevents inconsistent compilations for different architectures within a single block.
Sourcepub fn expect_balance_burn(&mut self, amount: u128)
pub fn expect_balance_burn(&mut self, amount: u128)
Register a balance burn from SELFDESTRUCT or native token burn.
Adjusts unexpected_balance_delta so that post-block balance verification
accounts for the burned amount (adds to delta).
Sourcepub fn expect_balance_mint(&mut self, amount: u128)
pub fn expect_balance_mint(&mut self, amount: u128)
Register a balance mint from native token minting.
Adjusts unexpected_balance_delta so that post-block balance verification
accounts for the minted amount (subtracts from delta).
Sourcepub fn unexpected_balance_delta(&self) -> i128
pub fn unexpected_balance_delta(&self) -> i128
Returns the current unexpected balance delta.
Sourcepub fn get_stylus_pages(&self) -> (u16, u16)
pub fn get_stylus_pages(&self) -> (u16, u16)
Returns (open_pages, ever_pages) for Stylus memory accounting.
Sourcepub fn get_stylus_pages_open(&self) -> u16
pub fn get_stylus_pages_open(&self) -> u16
Returns the current number of open WASM memory pages.
Sourcepub fn set_stylus_pages_open(&mut self, pages: u16)
pub fn set_stylus_pages_open(&mut self, pages: u16)
Sets the current number of open WASM memory pages.
Sourcepub fn add_stylus_pages(&mut self, new_pages: u16) -> (u16, u16)
pub fn add_stylus_pages(&mut self, new_pages: u16) -> (u16, u16)
Adds WASM pages, saturating at u16::MAX. Returns the previous (open, ever) values.
Sourcepub fn add_stylus_pages_ever(&mut self, new_pages: u16)
pub fn add_stylus_pages_ever(&mut self, new_pages: u16)
Adds to the ever-pages high watermark, saturating at u16::MAX.
Sourcepub fn reset_stylus_pages(&mut self)
pub fn reset_stylus_pages(&mut self)
Resets per-transaction Stylus page counters (called at tx start).
Sourcepub fn clear_tx_filter(&mut self)
pub fn clear_tx_filter(&mut self)
Clear the transaction filter flag.
Sourcepub fn is_tx_filtered(&self) -> bool
pub fn is_tx_filtered(&self) -> bool
Returns whether a transaction is currently filtered.
Sourcepub fn create_zombie(&mut self, addr: Address)
pub fn create_zombie(&mut self, addr: Address)
On pre-Stylus ArbOS (< v30), a zero-value transfer touching a self-destructed address creates a “zombie” empty account that must survive finalization. Call this when the condition is met.
Sourcepub fn is_zombie(&self, addr: &Address) -> bool
pub fn is_zombie(&self, addr: &Address) -> bool
Returns whether the address is a zombie that should be preserved.
Sourcepub fn start_recording(&mut self)
pub fn start_recording(&mut self)
Begin recording WASM modules for block validation.
Sourcepub fn record_program(&mut self, module_hash: B256, wasm: ActivatedWasm)
pub fn record_program(&mut self, module_hash: B256, wasm: ActivatedWasm)
Record a WASM module’s compiled ASM for persistence.
Trait Implementations§
Source§impl Clone for ArbitrumExtraData
impl Clone for ArbitrumExtraData
Source§fn clone(&self) -> ArbitrumExtraData
fn clone(&self) -> ArbitrumExtraData
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ArbitrumExtraData
impl Debug for ArbitrumExtraData
Source§impl Default for ArbitrumExtraData
impl Default for ArbitrumExtraData
Source§fn default() -> ArbitrumExtraData
fn default() -> ArbitrumExtraData
Auto Trait Implementations§
impl Freeze for ArbitrumExtraData
impl RefUnwindSafe for ArbitrumExtraData
impl Send for ArbitrumExtraData
impl Sync for ArbitrumExtraData
impl Unpin for ArbitrumExtraData
impl UnwindSafe for ArbitrumExtraData
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§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,
§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§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> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§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.