pub struct Mempool { /* private fields */ }Implementations§
Source§impl Mempool
impl Mempool
pub fn new(max_mempool_size: usize) -> Self
Sourcepub fn with_max_blob_mempool_size(self, max_blob_mempool_size: usize) -> Self
pub fn with_max_blob_mempool_size(self, max_blob_mempool_size: usize) -> Self
Override the blob sub-pool capacity (defaults to MAX_BLOB_MEMPOOL_SIZE).
Builder-style; intended for configuration and tests.
Sourcepub fn add_transaction(
&self,
hash: H256,
sender: Address,
transaction: MempoolTransaction,
) -> Result<(), StoreError>
pub fn add_transaction( &self, hash: H256, sender: Address, transaction: MempoolTransaction, ) -> Result<(), StoreError>
Add transaction to the pool without doing validity checks
pub fn get_txs_for_broadcast( &self, ) -> Result<Vec<MempoolTransaction>, StoreError>
pub fn remove_broadcasted_txs(&self, hashes: &[H256]) -> Result<(), StoreError>
Sourcepub fn blob_txs(&self) -> Result<Vec<(H256, Address, u64)>, StoreError>
pub fn blob_txs(&self) -> Result<Vec<(H256, Address, u64)>, StoreError>
(hash, sender, nonce) for every blob tx in the pool. blobs_bundle_pool
is keyed by blob-tx hash, so its keys are exactly the held blob txs.
Sourcepub fn add_blobs_bundle(
&self,
tx_hash: H256,
blobs_bundle: BlobsBundle,
) -> Result<(), StoreError>
pub fn add_blobs_bundle( &self, tx_hash: H256, blobs_bundle: BlobsBundle, ) -> Result<(), StoreError>
Add a blobs bundle to the pool by its blob transaction hash
Sourcepub fn get_blobs_bundle(
&self,
tx_hash: H256,
) -> Result<Option<BlobsBundle>, StoreError>
pub fn get_blobs_bundle( &self, tx_hash: H256, ) -> Result<Option<BlobsBundle>, StoreError>
Get a blobs bundle to the pool given its blob transaction hash
Sourcepub fn remove_transaction(&self, hash: &H256) -> Result<(), StoreError>
pub fn remove_transaction(&self, hash: &H256) -> Result<(), StoreError>
Remove a transaction from the pool
Sourcepub fn filter_transactions(
&self,
filter: &PendingTxFilter,
) -> Result<FxHashMap<Address, Vec<MempoolTransaction>>, StoreError>
pub fn filter_transactions( &self, filter: &PendingTxFilter, ) -> Result<FxHashMap<Address, Vec<MempoolTransaction>>, StoreError>
Applies the filter and returns a set of suitable transactions from the mempool. These transactions will be grouped by sender and sorted by nonce
Sourcepub fn get_all_txs_by_sender(
&self,
) -> Result<FxHashMap<Address, Vec<MempoolTransaction>>, StoreError>
pub fn get_all_txs_by_sender( &self, ) -> Result<FxHashMap<Address, Vec<MempoolTransaction>>, StoreError>
Gets all the transactions in the mempool
Sourcepub fn filter_transactions_with_filter_fn(
&self,
filter: &dyn Fn(&Transaction) -> bool,
) -> Result<FxHashMap<Address, Vec<MempoolTransaction>>, StoreError>
pub fn filter_transactions_with_filter_fn( &self, filter: &dyn Fn(&Transaction) -> bool, ) -> Result<FxHashMap<Address, Vec<MempoolTransaction>>, StoreError>
Applies the filter and returns a set of suitable transactions from the mempool. These transactions will be grouped by sender and sorted by nonce
Sourcepub fn reserve_unknown_hashes(
&self,
hashes: &[H256],
types: &[u8],
sizes: &[usize],
announcer: H256,
) -> Result<Vec<H256>, StoreError>
pub fn reserve_unknown_hashes( &self, hashes: &[H256], types: &[u8], sizes: &[usize], announcer: H256, ) -> Result<Vec<H256>, StoreError>
Filters hashes to those not already in the mempool or in-flight, and atomically marks the returned hashes as in-flight under a single write lock so that concurrent peer handlers cannot request the same hashes.
For hashes that get filtered out because they’re already in-flight
from another peer, records announcer as a fallback so the request
can be retried against this peer if the original responder fails. New
hashes that the caller is about to request do not need an alternates
entry yet: the caller is the primary, and one will be created only if
some other peer later announces the same hash while it’s in-flight.
Reserve hashes the caller wants to request, returning only those that are
neither already in-flight nor already in the pool. Any hash filtered out
because it’s in-flight from another peer is registered with the caller’s
own (type, size) metadata as an alternate, so a later retry can validate
the response against this announcer’s announcement.
hashes, types, and sizes must be the same length (one entry per
announced hash).
Sourcepub fn clear_in_flight_txs(&self, hashes: &[H256]) -> Result<(), StoreError>
pub fn clear_in_flight_txs(&self, hashes: &[H256]) -> Result<(), StoreError>
Removes transaction hashes from the in-flight set, typically called when the GetPooledTransactions response arrives (or the connection drops).
Sourcepub fn pop_alternate(&self, hash: H256) -> Result<Option<Alternate>, StoreError>
pub fn pop_alternate(&self, hash: H256) -> Result<Option<Alternate>, StoreError>
Pops the next alternate announcer for the given hash, if any. Returns
Ok(None) when no alternates remain. The caller uses the popped
Alternate to look up the peer connection and build a retry request
against that peer’s own announcement metadata.
Sourcepub fn prune_alternates(&self, ttl: Duration) -> Result<(), StoreError>
pub fn prune_alternates(&self, ttl: Duration) -> Result<(), StoreError>
Drop alternates entries that haven’t been touched in the last ttl.
Called periodically to bound the size of the alternates map when
announced txs never make it into the pool.
pub fn get_transaction_by_hash( &self, transaction_hash: H256, ) -> Result<Option<Transaction>, StoreError>
pub fn get_nonce(&self, address: &Address) -> Result<Option<u64>, MempoolError>
pub fn get_mempool_size(&self) -> Result<(u64, u64), MempoolError>
Sourcepub fn content(&self) -> Result<Vec<Transaction>, MempoolError>
pub fn content(&self) -> Result<Vec<Transaction>, MempoolError>
Returns all transactions currently in the pool
Sourcepub fn get_blobs_bundle_pool(&self) -> Result<Vec<BlobsBundle>, MempoolError>
pub fn get_blobs_bundle_pool(&self) -> Result<Vec<BlobsBundle>, MempoolError>
Returns all blobs bundles currently in the pool
Sourcepub fn get_blobs_data_by_versioned_hashes(
&self,
versioned_hashes: &[H256],
) -> Result<Vec<Option<BlobTuple>>, MempoolError>
pub fn get_blobs_data_by_versioned_hashes( &self, versioned_hashes: &[H256], ) -> Result<Vec<Option<BlobTuple>>, MempoolError>
Returns blobs data (blob, commitment, proof) associated with the versioned hashes
Sourcepub fn status(&self) -> Result<u64, MempoolError>
pub fn status(&self) -> Result<u64, MempoolError>
Returns the status of the mempool, which is the number of transactions currently in the pool. Until we add “queue” transactions.
pub fn contains_sender_nonce( &self, sender: Address, nonce: u64, received_hash: H256, ) -> Result<Option<MempoolTransaction>, MempoolError>
pub fn contains_tx(&self, tx_hash: H256) -> Result<bool, MempoolError>
pub fn find_tx_to_replace( &self, sender: Address, nonce: u64, tx: &Transaction, ) -> Result<Option<H256>, MempoolError>
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for Mempool
impl RefUnwindSafe for Mempool
impl Send for Mempool
impl Sync for Mempool
impl Unpin for Mempool
impl UnsafeUnpin for Mempool
impl UnwindSafe for Mempool
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> 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.