logo
pub struct Storage {
    verified: VerifiedSet,
    tip_rejected_exact: HashMap<UnminedTxId, ExactTipRejectionError>,
    tip_rejected_same_effects: HashMap<Hash, SameEffectsTipRejectionError>,
    chain_rejected_same_effects: HashMap<SameEffectsChainRejectionError, EvictionList>,
    eviction_memory_time: Duration,
    tx_cost_limit: u64,
}
Expand description

Hold mempool verified and rejected mempool transactions.

Fields

verified: VerifiedSet

The set of verified transactions in the mempool.

tip_rejected_exact: HashMap<UnminedTxId, ExactTipRejectionError>

The set of transactions rejected due to bad authorizations, or for other reasons, and their rejection reasons. These rejections only apply to the current tip.

Only transactions with the exact UnminedTxId are invalid.

tip_rejected_same_effects: HashMap<Hash, SameEffectsTipRejectionError>

A set of transactions rejected for their effects, and their rejection reasons. These rejections only apply to the current tip.

Any transaction with the same transaction::Hash is invalid.

chain_rejected_same_effects: HashMap<SameEffectsChainRejectionError, EvictionList>

Sets of transactions rejected for their effects, keyed by rejection reason. These rejections apply until a rollback or network upgrade.

Any transaction with the same transaction::Hash is invalid.

An EvictionList is used for both randomly evicted and expired transactions, even if it is only needed for the evicted ones. This was done just to simplify the existing code; there is no harm in having a timeout for expired transactions too since re-checking expired transactions is cheap.

eviction_memory_time: Duration

The mempool transaction eviction age limit. Same as config::Config::eviction_memory_time.

tx_cost_limit: u64

Max total cost of the verified mempool set, beyond which transactions are evicted to make room.

Implementations

Insert a VerifiedUnminedTx into the mempool, caching any rejections.

Returns an error if the mempool’s verified transactions or rejection caches prevent this transaction from being inserted. These errors should not be propagated to peers, because the transactions are valid.

If inserting this transaction evicts other transactions, they will be tracked as SameEffectsChainRejectionError::RandomlyEvicted.

Remove transactions from the mempool via exact UnminedTxId.

For v5 transactions, transactions are matched by WTXID, using both the:

  • non-malleable transaction ID, and
  • authorizing data hash.

This matches the exact transaction, with identical blockchain effects, signatures, and proofs.

Returns the number of transactions which were removed.

Removes from the ‘verified’ set, if present. Maintains the order in which the other unmined transactions have been inserted into the mempool.

Does not add or remove from the ‘rejected’ tracking set.

Remove transactions from the mempool via non-malleable transaction::Hash.

For v5 transactions, transactions are matched by TXID, using only the non-malleable transaction ID. This matches any transaction with the same effect on the blockchain state, even if its signatures and proofs are different.

Returns the number of transactions which were removed.

Removes from the ‘verified’ set, if present. Maintains the order in which the other unmined transactions have been inserted into the mempool.

Does not add or remove from the ‘rejected’ tracking set.

Clears the whole mempool storage.

Clears rejections that only apply to the current tip.

Clears rejections that only apply to the current tip.

Security

This method must be called at the end of every method that adds rejections. Otherwise, peers could make our reject lists use a lot of RAM.

Returns the set of UnminedTxIds in the mempool.

Returns the set of UnminedTxs in the mempool.

Returns the number of transactions in the mempool.

Returns the set of UnminedTxes with exactly matching tx_ids in the mempool.

This matches the exact transaction, with identical blockchain effects, signatures, and proofs.

Returns the set of UnminedTxes with matching transaction::Hashes in the mempool.

This matches transactions with the same effects, regardless of [AuthDigest].

Returns true if a transaction exactly matching an UnminedTxId is in the mempool.

This matches the exact transaction, with identical blockchain effects, signatures, and proofs.

Returns the number of rejected UnminedTxIds or transaction::Hashes.

Transactions on multiple rejected lists are counted multiple times.

Add a transaction to the rejected list for the given reason.

Returns the rejection error if a transaction matching an UnminedTxId is in any mempool rejected list.

This matches transactions based on each rejection list’s matching rule.

Returns an arbitrary error if the transaction is in multiple lists.

Returns the set of UnminedTxIds matching tx_ids in the rejected list.

This matches transactions based on each rejection list’s matching rule.

Returns true if a transaction matching the supplied UnminedTxId is in the mempool rejected list.

This matches transactions based on each rejection list’s matching rule.

Add a transaction that failed download and verification to the rejected list if needed, depending on the reason for the failure.

Remove transactions from the mempool if they have not been mined after a specified height, per ZIP-203.

Transactions will have a new field, nExpiryHeight, which will set the block height after which transactions will be removed from the mempool if they have not been mined.

Check if transaction should be downloaded and/or verified.

If it is already in the mempool (or in its rejected list) then it shouldn’t be downloaded/verified.

Update metrics related to the rejected lists.

Must be called every time the rejected lists change.

Trait Implementations

Executes the destructor for this type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Borrow this concrete type as a &dyn Any

Borrow this concrete type as a &mut dyn Any

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Converts self into T using Into<T>. Read more

Causes self to use its Binary implementation when Debug-formatted. Read more

Causes self to use its Display implementation when Debug-formatted. Read more

Causes self to use its LowerExp implementation when Debug-formatted. Read more

Causes self to use its LowerHex implementation when Debug-formatted. Read more

Causes self to use its Octal implementation when Debug-formatted. Read more

Causes self to use its Pointer implementation when Debug-formatted. Read more

Causes self to use its UpperExp implementation when Debug-formatted. Read more

Causes self to use its UpperHex implementation when Debug-formatted. Read more

Formats each item in a sequence. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Set the foreground color generically Read more

Set the background color generically. Read more

Change the foreground color to black

Change the foreground color to black

Change the foreground color to red

Change the foreground color to red

Change the foreground color to green

Change the foreground color to green

Change the foreground color to yellow

Change the foreground color to yellow

Change the foreground color to blue

Change the foreground color to blue

Change the foreground color to magenta

Change the foreground color to magenta

Change the foreground color to purple

Change the foreground color to purple

Change the foreground color to cyan

Change the foreground color to cyan

Change the foreground color to white

Change the foreground color to white

Change the foreground color to bright black

Change the foreground color to bright black

Change the foreground color to bright red

Change the foreground color to bright red

Change the foreground color to bright green

Change the foreground color to bright green

Change the foreground color to bright yellow

Change the foreground color to bright yellow

Change the foreground color to bright blue

Change the foreground color to bright blue

Change the foreground color to bright magenta

Change the foreground color to bright magenta

Change the foreground color to bright purple

Change the foreground color to bright purple

Change the foreground color to bright cyan

Change the foreground color to bright cyan

Change the foreground color to bright white

Change the foreground color to bright white

Make the text bold

Make the text dim

Make the text italicized

Make the text italicized

Make the text blink

Make the text blink (but fast!)

Swap the foreground and background colors

Hide the text

Cross out the text

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more

Sets the foreground color to an RGB value.

Sets the background color to an RGB value.

Apply a runtime-determined style

Set the foreground color generically Read more

Set the background color generically. Read more

Change the foreground color to black

Change the background color to black

Change the foreground color to red

Change the background color to red

Change the foreground color to green

Change the background color to green

Change the foreground color to yellow

Change the background color to yellow

Change the foreground color to blue

Change the background color to blue

Change the foreground color to magenta

Change the background color to magenta

Change the foreground color to purple

Change the background color to purple

Change the foreground color to cyan

Change the background color to cyan

Change the foreground color to white

Change the background color to white

Change the foreground color to the terminal default

Change the background color to the terminal default

Change the foreground color to bright black

Change the background color to bright black

Change the foreground color to bright red

Change the background color to bright red

Change the foreground color to bright green

Change the background color to bright green

Change the foreground color to bright yellow

Change the background color to bright yellow

Change the foreground color to bright blue

Change the background color to bright blue

Change the foreground color to bright magenta

Change the background color to bright magenta

Change the foreground color to bright purple

Change the background color to bright purple

Change the foreground color to bright cyan

Change the background color to bright cyan

Change the foreground color to bright white

Change the background color to bright white

Make the text bold

Make the text dim

Make the text italicized

Make the text italicized

Make the text blink

Make the text blink (but fast!)

Swap the foreground and background colors

Hide the text

Cross out the text

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more

Set the foreground color to a specific RGB value.

Set the background color to a specific RGB value.

Sets the foreground color to an RGB value.

Sets the background color to an RGB value.

Apply a runtime-determined style

Pipes by value. This is generally the method you want to use. Read more

Borrows self and passes that borrow into the pipe function. Read more

Mutably borrows self and passes that borrow into the pipe function. Read more

Borrows self, then passes self.borrow() into the pipe function. Read more

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more

Borrows self, then passes self.as_ref() into the pipe function.

Mutably borrows self, then passes self.as_mut() into the pipe function. Read more

Borrows self, then passes self.deref() into the pipe function.

Mutably borrows self, then passes self.deref_mut() into the pipe function. Read more

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Converts the type into a Result that can be sent as a response.

Should always be Self

Immutable access to a value. Read more

Mutable access to a value. Read more

Immutable access to the Borrow<B> of a value. Read more

Mutable access to the BorrowMut<B> of a value. Read more

Immutable access to the AsRef<R> view of a value. Read more

Mutable access to the AsMut<R> view of a value. Read more

Immutable access to the Deref::Target of a value. Read more

Mutable access to the Deref::Target of a value. Read more

Calls .tap() only in debug builds, and is erased in release builds.

Calls .tap_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref_mut() only in debug builds, and is erased in release builds. Read more

Attempts to convert self into T using TryInto<T>. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more