pub enum TransactionStatus<Hash, BlockHash> {
Future,
Ready,
Broadcast(Vec<String>),
InBlock((BlockHash, TxIndex)),
Retracted(BlockHash),
FinalityTimeout(BlockHash),
Finalized((BlockHash, TxIndex)),
Usurped(Hash),
Dropped,
Invalid,
}Expand description
Possible transaction status events.
This events are being emitted by TransactionPool watchers,
which are also exposed over RPC.
The status events can be grouped based on their kinds as:
- Entering/Moving within the pool: - Future - Ready
- Inside
Readyqueue: - Broadcast - Leaving the pool: - InBlock - Invalid - Usurped - Dropped 4. Re-entering the pool: - Retracted 5. Block finalized: - Finalized - FinalityTimeout
Transactions are first placed in either the Ready or Future queues of the transaction pool.
Substrate validates the transaction before it enters the pool.
A transaction is placed in the Future queue if it will become valid at a future time.
For example, submitting a transaction with a higher account nonce than the current
expected nonce will place the transaction in the Future queue.
The events will always be received in the order described above, however
there might be cases where transactions alternate between Future and Ready
pool, and are Broadcast in the meantime.
There is also only single event causing the transaction to leave the pool. I.e. only one of the listed ones should be triggered.
Note that there are conditions that may cause transactions to reappear in the pool.
- Due to possible forks, the transaction that ends up being in included in one block, may later re-enter the pool or be marked as invalid.
- Transaction
Droppedat one point, may later re-enter the pool if some other transactions are removed. ADroppedtransaction may re-enter the pool only if it is resubmitted. Invalidtransaction may become valid at some point in the future. (Note that runtimes are encouraged to useUnknownValidityto inform the pool about such case). AnInvalidtransaction may re-enter the pool only if it is resubmitted.Retractedtransactions might be included in some next block.
The FinalityTimeout event will be emitted when the block did not reach finality
within 512 blocks. This either indicates that finality is not available for your chain,
or that finality gadget is lagging behind. If you choose to wait for finality longer, you can
re-subscribe for a particular transaction hash manually again.
§Last Event
The stream is considered finished when one of the following events happen:
See TransactionStatus::is_final for more details.
§Resubmit Transactions
Users might resubmit the transaction at a later time for the following events:
See TransactionStatus::is_retriable for more details.
Variants§
Future
Transaction is part of the future queue.
Ready
Transaction is part of the ready queue.
Broadcast(Vec<String>)
The transaction has been broadcast to the given peers.
InBlock((BlockHash, TxIndex))
Transaction has been included in block with given hash at the given position.
Retracted(BlockHash)
The block this transaction was included in has been retracted.
FinalityTimeout(BlockHash)
Maximum number of finality watchers has been reached, old watchers are being removed.
Finalized((BlockHash, TxIndex))
Transaction has been finalized by a finality-gadget, e.g GRANDPA.
Usurped(Hash)
Transaction has been replaced in the pool, by another transaction that provides the same tags. (e.g. same (sender, nonce)).
Dropped
Transaction has been dropped from the pool because of the limit.
Invalid
Transaction is no longer valid in the current state.
Implementations§
source§impl<Hash, BlockHash> TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> TransactionStatus<Hash, BlockHash>
sourcepub fn is_final(&self) -> bool
pub fn is_final(&self) -> bool
Returns true if this is the last event emitted by TransactionStatusStream.
sourcepub fn is_retriable(&self) -> bool
pub fn is_retriable(&self) -> bool
Returns true if the transaction could be re-submitted to the pool in the future.
For example, TransactionStatus::Dropped is retriable, because the transaction
may enter the pool if there is space for it in the future.
Trait Implementations§
source§impl<Hash: Clone, BlockHash: Clone> Clone for TransactionStatus<Hash, BlockHash>
impl<Hash: Clone, BlockHash: Clone> Clone for TransactionStatus<Hash, BlockHash>
source§fn clone(&self) -> TransactionStatus<Hash, BlockHash>
fn clone(&self) -> TransactionStatus<Hash, BlockHash>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl<'de, Hash, BlockHash> Deserialize<'de> for TransactionStatus<Hash, BlockHash>where
Hash: Deserialize<'de>,
BlockHash: Deserialize<'de>,
impl<'de, Hash, BlockHash> Deserialize<'de> for TransactionStatus<Hash, BlockHash>where
Hash: Deserialize<'de>,
BlockHash: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<Hash: PartialEq, BlockHash: PartialEq> PartialEq for TransactionStatus<Hash, BlockHash>
impl<Hash: PartialEq, BlockHash: PartialEq> PartialEq for TransactionStatus<Hash, BlockHash>
source§fn eq(&self, other: &TransactionStatus<Hash, BlockHash>) -> bool
fn eq(&self, other: &TransactionStatus<Hash, BlockHash>) -> bool
self and other values to be equal, and is used
by ==.source§impl<Hash, BlockHash> Serialize for TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> Serialize for TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> StructuralPartialEq for TransactionStatus<Hash, BlockHash>
Auto Trait Implementations§
impl<Hash, BlockHash> Freeze for TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> RefUnwindSafe for TransactionStatus<Hash, BlockHash>where
BlockHash: RefUnwindSafe,
Hash: RefUnwindSafe,
impl<Hash, BlockHash> Send for TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> Sync for TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> Unpin for TransactionStatus<Hash, BlockHash>
impl<Hash, BlockHash> UnwindSafe for TransactionStatus<Hash, BlockHash>where
BlockHash: UnwindSafe,
Hash: UnwindSafe,
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> CheckedConversion for T
impl<T> CheckedConversion for 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, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T. Read moresource§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from.source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.