pub struct AA2dPool {
submission_id: u64,
independent_transactions: HashMap<AASequenceId, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>,
by_id: BTreeMap<AA2dTransactionId, Arc<AA2dInternalTransaction>>,
by_hash: HashMap<TxHash, Arc<ValidPoolTransaction<TempoPooledTransaction>>>,
expiring_nonce_txs: HashMap<B256, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>,
slot_to_seq_id: U256Map<AASequenceId>,
seq_id_to_slot: HashMap<AASequenceId, U256>,
config: AA2dPoolConfig,
metrics: AA2dPoolMetrics,
by_eviction_order: BTreeSet<EvictionKey>,
txs_by_sender: AddressMap<usize>,
}Expand description
A sub-pool that keeps track of 2D nonce transactions.
It maintains both pending and queued transactions.
A 2d nonce transaction is pending if it dosn’t have a nonce gap for its nonce key, and is queued if its nonce key set has nonce gaps.
This pool relies on state changes to track the nonces.
§Limitations
- We assume new AA transactions either create a new nonce key (nonce 0) or use an existing nonce key. To keep track of the known keys by accounts this pool relies on state changes to promote transactions to pending.
Fields§
§submission_id: u64Keeps track of transactions inserted in the pool.
This way we can determine when transactions were submitted to the pool.
independent_transactions: HashMap<AASequenceId, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>independent, pending, executable transactions, one per sequence id.
by_id: BTreeMap<AA2dTransactionId, Arc<AA2dInternalTransaction>>All transactions that are currently inside the pool grouped by their unique identifier.
by_hash: HashMap<TxHash, Arc<ValidPoolTransaction<TempoPooledTransaction>>>All transactions by hash.
expiring_nonce_txs: HashMap<B256, PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>Expiring nonce transactions, keyed by expiring nonce hash (always pending/independent). These use expiring nonce replay protection instead of sequential nonces.
slot_to_seq_id: U256Map<AASequenceId>Reverse index for the storage slot of an account’s nonce
mapping(address => mapping(uint256 => uint64)) public noncesThis identifies the account and nonce key based on the slot in the NonceManager.
seq_id_to_slot: HashMap<AASequenceId, U256>Reverse index for cleaning up slots_to_seq_id.
config: AA2dPoolConfigSettings for this sub-pool.
metrics: AA2dPoolMetricsMetrics for tracking pool statistics
by_eviction_order: BTreeSet<EvictionKey>All transactions ordered by eviction priority (lowest priority first).
Since Tempo has a constant base fee, priority never changes after insertion,
so we can maintain this ordering incrementally. At eviction time, we scan
this set checking is_pending to find queued or pending transactions.
txs_by_sender: AddressMap<usize>Tracks the number of transactions per sender for DoS protection.
Bounded by pool size (max unique senders = pending_limit + queued_limit).
Entries are removed when count reaches 0 via decrement_sender_count.
Implementations§
Source§impl AA2dPool
impl AA2dPool
fn expiring_nonce_hash( transaction: &Arc<ValidPoolTransaction<TempoPooledTransaction>>, ) -> B256
Sourcepub fn new(config: AA2dPoolConfig) -> Self
pub fn new(config: AA2dPoolConfig) -> Self
Creates a new instance with the givenconfig and nonce keys
Sourcefn update_metrics(&self)
fn update_metrics(&self)
Updates all metrics to reflect the current state of the pool
Sourcepub(crate) fn add_transaction(
&mut self,
transaction: Arc<ValidPoolTransaction<TempoPooledTransaction>>,
on_chain_nonce: u64,
hardfork: TempoHardfork,
) -> PoolResult<AddedTransaction<TempoPooledTransaction>>
pub(crate) fn add_transaction( &mut self, transaction: Arc<ValidPoolTransaction<TempoPooledTransaction>>, on_chain_nonce: u64, hardfork: TempoHardfork, ) -> PoolResult<AddedTransaction<TempoPooledTransaction>>
Entrypoint for adding a 2d AA transaction.
on_chain_nonce is expected to be the nonce of the sender at the time of validation.
If transaction is using 2D nonces, this is expected to be the nonce corresponding
to the transaction’s nonce key.
hardfork indicates the active Tempo hardfork. When T1 or later, expiring nonce
transactions (nonce_key == U256::MAX) are handled specially. Otherwise, they are
treated as regular 2D nonce transactions.
Sourcefn add_expiring_nonce_transaction(
&mut self,
transaction: Arc<ValidPoolTransaction<TempoPooledTransaction>>,
hardfork: TempoHardfork,
) -> PoolResult<AddedTransaction<TempoPooledTransaction>>
fn add_expiring_nonce_transaction( &mut self, transaction: Arc<ValidPoolTransaction<TempoPooledTransaction>>, hardfork: TempoHardfork, ) -> PoolResult<AddedTransaction<TempoPooledTransaction>>
Adds an expiring nonce transaction to the pool.
Expiring nonce transactions use the expiring nonce hash as their unique identifier instead of (sender, nonce_key, nonce). They are always immediately pending since they don’t have sequential nonce dependencies.
Sourcepub(crate) fn pending_and_queued_txn_count(&self) -> (usize, usize)
pub(crate) fn pending_and_queued_txn_count(&self) -> (usize, usize)
Returns how many pending and queued transactions are in the pool.
Sourcepub(crate) fn get_transactions_by_origin_iter(
&self,
origin: TransactionOrigin,
) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
pub(crate) fn get_transactions_by_origin_iter( &self, origin: TransactionOrigin, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
Returns all transactions that where submitted with the given [TransactionOrigin]
Sourcepub(crate) fn get_pending_transactions_by_origin_iter(
&self,
origin: TransactionOrigin,
) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
pub(crate) fn get_pending_transactions_by_origin_iter( &self, origin: TransactionOrigin, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
Returns all transactions that where submitted with the given [TransactionOrigin]
Sourcepub(crate) fn get_transactions_by_sender_iter(
&self,
sender: Address,
) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
pub(crate) fn get_transactions_by_sender_iter( &self, sender: Address, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
Returns all transactions of the address
Sourcepub(crate) fn all_transaction_hashes_iter(&self) -> impl Iterator<Item = TxHash>
pub(crate) fn all_transaction_hashes_iter(&self) -> impl Iterator<Item = TxHash>
Returns an iterator over all transaction hashes in this pool
Sourcepub(crate) fn queued_transactions(
&self,
) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>>
pub(crate) fn queued_transactions( &self, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Returns all transactions from that are queued.
Sourcepub(crate) fn pending_transactions(
&self,
) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
pub(crate) fn pending_transactions( &self, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>> + '_
Returns all transactions that are pending.
Sourcepub(crate) fn best_transactions(&self) -> BestAA2dTransactions ⓘ
pub(crate) fn best_transactions(&self) -> BestAA2dTransactions ⓘ
Returns the best, executable transactions for this sub-pool
Sourcepub(crate) fn get(
&self,
tx_hash: &TxHash,
) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
pub(crate) fn get( &self, tx_hash: &TxHash, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Returns the transaction by hash.
Sourcepub(crate) fn get_all<'a, I>(
&self,
tx_hashes: I,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>where
I: Iterator<Item = &'a TxHash> + 'a,
pub(crate) fn get_all<'a, I>(
&self,
tx_hashes: I,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>where
I: Iterator<Item = &'a TxHash> + 'a,
Returns the transaction by hash.
Sourcepub(crate) fn append_pooled_transaction_elements<'a>(
&self,
tx_hashes: impl IntoIterator<Item = &'a TxHash>,
limit: GetPooledTransactionLimit,
accumulated_size: &mut usize,
out: &mut Vec<<TempoPooledTransaction as PoolTransaction>::Pooled>,
)
pub(crate) fn append_pooled_transaction_elements<'a>( &self, tx_hashes: impl IntoIterator<Item = &'a TxHash>, limit: GetPooledTransactionLimit, accumulated_size: &mut usize, out: &mut Vec<<TempoPooledTransaction as PoolTransaction>::Pooled>, )
Returns pooled transaction elements for the given hashes while respecting the size limit.
This method collects transactions from the pool, converts them to pooled format, and tracks the accumulated size. It stops collecting when the limit is exceeded.
The accumulated_size is updated with the total encoded size of returned transactions.
Sourcepub(crate) fn senders_iter(&self) -> impl Iterator<Item = &Address>
pub(crate) fn senders_iter(&self) -> impl Iterator<Item = &Address>
Returns an iterator over all senders in this pool.
Sourcefn descendant_txs<'a, 'b: 'a>(
&'a self,
id: &'b AA2dTransactionId,
) -> impl Iterator<Item = (&'a AA2dTransactionId, &'a Arc<AA2dInternalTransaction>)> + 'a
fn descendant_txs<'a, 'b: 'a>( &'a self, id: &'b AA2dTransactionId, ) -> impl Iterator<Item = (&'a AA2dTransactionId, &'a Arc<AA2dInternalTransaction>)> + 'a
Returns all transactions that follow after the given id but have the same sender.
NOTE: The range is inclusive: if the transaction that belongs to id it will be the
first value.
Sourcefn descendant_txs_exclusive<'a, 'b: 'a>(
&'a self,
id: &'b AA2dTransactionId,
) -> impl Iterator<Item = (&'a AA2dTransactionId, &'a Arc<AA2dInternalTransaction>)> + 'a
fn descendant_txs_exclusive<'a, 'b: 'a>( &'a self, id: &'b AA2dTransactionId, ) -> impl Iterator<Item = (&'a AA2dTransactionId, &'a Arc<AA2dInternalTransaction>)> + 'a
Returns all transactions that follow after the given id and have the same sender.
NOTE: The range is exclusive
Sourcefn remove_transaction_by_id(
&mut self,
id: &AA2dTransactionId,
) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn remove_transaction_by_id( &mut self, id: &AA2dTransactionId, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Removes the transaction with the given id from all sets.
This does not shift the independent transaction forward or mark descendants as pending.
Sourcefn decrement_sender_count(&mut self, sender: Address)
fn decrement_sender_count(&mut self, sender: Address)
Decrements the transaction count for a sender, removing the entry if it reaches zero.
Sourcefn remove_independent(
&mut self,
id: &AA2dTransactionId,
) -> Option<PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>
fn remove_independent( &mut self, id: &AA2dTransactionId, ) -> Option<PendingTransaction<CoinbaseTipOrdering<TempoPooledTransaction>>>
Removes the independent transaction if it matches the given id.
Sourcepub(crate) fn remove_transactions<'a, I>(
&mut self,
tx_hashes: I,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>where
I: Iterator<Item = &'a TxHash> + 'a,
pub(crate) fn remove_transactions<'a, I>(
&mut self,
tx_hashes: I,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>where
I: Iterator<Item = &'a TxHash> + 'a,
Removes the transaction by its hash from all internal sets.
This batches demotion by seq_id to avoid O(N*N) complexity when removing many transactions from the same sequence.
Sourcefn remove_transaction_by_hash(
&mut self,
tx_hash: &B256,
) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn remove_transaction_by_hash( &mut self, tx_hash: &B256, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Removes the transaction by its hash from all internal sets.
This does not shift the independent transaction forward but it does demote descendants to queued status since removing a transaction creates a nonce gap.
Sourcefn remove_transaction_by_hash_no_demote(
&mut self,
tx_hash: &B256,
) -> Option<(Arc<ValidPoolTransaction<TempoPooledTransaction>>, Option<AA2dTransactionId>)>
fn remove_transaction_by_hash_no_demote( &mut self, tx_hash: &B256, ) -> Option<(Arc<ValidPoolTransaction<TempoPooledTransaction>>, Option<AA2dTransactionId>)>
Internal helper that removes a transaction without demoting descendants.
Returns the removed transaction and its AA2dTransactionId (if it was a 2D nonce tx).
Sourcefn demote_descendants(&mut self, id: &AA2dTransactionId)
fn demote_descendants(&mut self, id: &AA2dTransactionId)
Demotes all descendants of the given transaction to queued status (is_pending = false).
This should be called after removing a transaction to ensure descendants don’t remain marked as pending when they’re no longer executable due to the nonce gap.
Sourcefn demote_from_nonce(&self, seq_id: &AASequenceId, min_nonce: u64)
fn demote_from_nonce(&self, seq_id: &AASequenceId, min_nonce: u64)
Demotes all transactions for a seq_id with nonce > min_nonce to queued status.
This is used both for single-tx removal (demote_descendants) and batch removal where we want to demote once per seq_id starting from the minimum removed nonce.
Sourcepub(crate) fn remove_transactions_and_descendants<'a, I>(
&mut self,
hashes: I,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>where
I: Iterator<Item = &'a TxHash> + 'a,
pub(crate) fn remove_transactions_and_descendants<'a, I>(
&mut self,
hashes: I,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>where
I: Iterator<Item = &'a TxHash> + 'a,
Removes and returns all matching transactions and their dependent transactions from the pool.
Sourcepub(crate) fn remove_transactions_by_sender(
&mut self,
sender_id: Address,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
pub(crate) fn remove_transactions_by_sender( &mut self, sender_id: Address, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Removes all transactions from the given sender.
Sourcefn remove_descendants(
&mut self,
tx: &AA2dTransactionId,
removed: &mut Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>,
)
fn remove_descendants( &mut self, tx: &AA2dTransactionId, removed: &mut Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, )
Removes only the descendants of the given transaction from this pool.
All removed transactions are added to the removed vec.
Sourcepub(crate) fn on_nonce_changes(
&mut self,
on_chain_ids: HashMap<AASequenceId, u64>,
) -> (Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>)
pub(crate) fn on_nonce_changes( &mut self, on_chain_ids: HashMap<AASequenceId, u64>, ) -> (Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>)
Updates the internal state based on the state changes of the NonceManager NONCE_PRECOMPILE_ADDRESS.
This takes a vec of changed AASequenceId with their current on chain nonce.
This will prune mined transactions and promote unblocked transactions if any, returns (promoted, mined)
Sourcefn discard(&mut self) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn discard(&mut self) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Removes lowest-priority transactions if the pool is above capacity.
This evicts transactions with the lowest priority (based on [CoinbaseTipOrdering])
to prevent DoS attacks where adversaries use vanity addresses with many leading zeroes
to avoid eviction.
Evicts queued transactions first (up to queued_limit), then pending if needed. Counts are computed lazily by scanning the eviction set.
Note: Only max_txs is enforced here; max_size is intentionally not checked for 2D pools
since the protocol pool already enforces size-based limits as a primary defense.
Sourcefn evict_lowest_priority(
&mut self,
count: usize,
evict_pending: bool,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn evict_lowest_priority( &mut self, count: usize, evict_pending: bool, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Evicts the lowest-priority transactions from the pool.
Scans the single eviction set (ordered by priority) and filters by is_pending
to find queued or pending transactions to evict. This is a best-effort scan
that checks a bool for each transaction.
Sourcefn evict_one_pending(
&mut self,
) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn evict_one_pending( &mut self, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Evicts one pending transaction, considering both regular 2D and expiring nonce txs. Evicts the transaction with lowest priority; ties broken by submission order (newer first).
Sourcefn evict_2d_pending_tx(
&mut self,
id: &AA2dTransactionId,
) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn evict_2d_pending_tx( &mut self, id: &AA2dTransactionId, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Evicts a regular 2D pending transaction by ID.
Sourcefn evict_expiring_nonce_tx(
&mut self,
expiring_hash: &B256,
) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
fn evict_expiring_nonce_tx( &mut self, expiring_hash: &B256, ) -> Option<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Evicts an expiring nonce transaction by hash.
Sourcepub fn metrics(&self) -> &AA2dPoolMetrics
pub fn metrics(&self) -> &AA2dPoolMetrics
Returns a reference to the metrics for this pool
Sourcepub(crate) fn remove_included_expiring_nonce_txs<'a>(
&mut self,
tx_hashes: impl Iterator<Item = &'a TxHash>,
) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
pub(crate) fn remove_included_expiring_nonce_txs<'a>( &mut self, tx_hashes: impl Iterator<Item = &'a TxHash>, ) -> Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Removes expiring nonce transactions that were included in a block.
This should be called with the transaction hashes from mined blocks to clean up expiring nonce transactions on inclusion, rather than waiting for expiry.
Sourcepub(crate) fn contains(&self, tx_hash: &TxHash) -> bool
pub(crate) fn contains(&self, tx_hash: &TxHash) -> bool
Returns true if the transaction with the given hash is already included in this pool.
Sourcepub(crate) fn pooled_transactions_hashes_iter(
&self,
) -> impl Iterator<Item = TxHash>
pub(crate) fn pooled_transactions_hashes_iter( &self, ) -> impl Iterator<Item = TxHash>
Returns hashes of transactions in the pool that can be propagated.
Sourcepub(crate) fn pooled_transactions_iter(
&self,
) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>>
pub(crate) fn pooled_transactions_iter( &self, ) -> impl Iterator<Item = Arc<ValidPoolTransaction<TempoPooledTransaction>>>
Returns transactions in the pool that can be propagated
const fn next_id(&mut self) -> u64
Sourcefn record_2d_slot(&mut self, transaction: &TempoPooledTransaction)
fn record_2d_slot(&mut self, transaction: &TempoPooledTransaction)
Caches the 2D nonce key slot for the given sender and nonce key.
Sourcepub(crate) fn on_state_updates(
&mut self,
state: &AddressMap<BundleAccount>,
) -> (Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>)
pub(crate) fn on_state_updates( &mut self, state: &AddressMap<BundleAccount>, ) -> (Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>, Vec<Arc<ValidPoolTransaction<TempoPooledTransaction>>>)
Processes state updates and updates internal state accordingly.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for AA2dPool
impl !RefUnwindSafe for AA2dPool
impl Send for AA2dPool
impl Sync for AA2dPool
impl Unpin for AA2dPool
impl UnsafeUnpin for AA2dPool
impl !UnwindSafe for AA2dPool
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
§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> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§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> 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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§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> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ServiceExt for T
impl<T> ServiceExt for T
§fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
Self: Sized,
fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
Self: Sized,
propagate-header only.§fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
Self: Sized,
fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
Self: Sized,
add-extension only.§fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
Self: Sized,
fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
Self: Sized,
map-request-body only.§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
map-response-body only.§fn compression(self) -> Compression<Self>where
Self: Sized,
fn compression(self) -> Compression<Self>where
Self: Sized,
compression-br or compression-deflate or compression-gzip or compression-zstd only.§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
decompression-br or decompression-deflate or decompression-gzip or decompression-zstd only.§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
trace only.§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
trace only.§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
follow-redirect only.§fn sensitive_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
Self: Sized,
fn sensitive_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
Self: Sized,
sensitive-headers only.§fn sensitive_request_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
Self: Sized,
fn sensitive_request_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
Self: Sized,
sensitive-headers only.§fn sensitive_response_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
Self: Sized,
fn sensitive_response_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
Self: Sized,
sensitive-headers only.§fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
set-header only.§fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
set-header only.§fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
set-header only.§fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
set-header only.§fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
set-header only.§fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
set-header only.§fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
request-id only.§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
request-id only.x-request-id as the header name. Read more§fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
request-id only.§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
request-id only.x-request-id as the header name. Read more§fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
Self: Sized,
fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
Self: Sized,
catch-panic only.500 Internal Server responses. Read more§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
limit only.413 Payload Too Large responses. Read more§fn trim_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
fn trim_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
normalize-path only.§fn append_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
fn append_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
normalize-path only.§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>
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§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>,
Source§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> MaybeSend for Twhere
T: Send,
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: 512 bytes